Fix identification of address Cassandra is configured to listen to
Some scripts fails to connect to Cassandra if it is configured
to listen to address other then that ``hostname`` command returns.
Scripts do their job with default reclass models, but fail if model
has been customized to run Cassandra on network other then control
Closes-bug: PROD-16635
Change-Id: I6b6002b4877f78c8998214bad0c736aeb9edfbd4
diff --git a/cassandra/backup.sls b/cassandra/backup.sls
index 9b0ecf8..aeadfbe 100644
--- a/cassandra/backup.sls
+++ b/cassandra/backup.sls
@@ -8,6 +8,13 @@
pkg.installed:
- names: {{ backup.pkgs }}
+cassandra_get_listen_addr_script:
+ file.managed:
+ - name: /usr/local/bin/cas_get_listen_addr
+ - source: salt://cassandra/files/backup/cas_get_listen_addr.py
+ - template: jinja
+ - mode: 555
+
cassandra_backup_runner_script:
file.managed:
- name: /usr/local/bin/cassandra-backup-runner.sh
@@ -16,6 +23,7 @@
- mode: 655
- require:
- pkg: cassandra_backup_client_packages
+ - file: cassandra_get_listen_addr_script
cassandra_call_backup_runner_script:
file.managed:
@@ -25,6 +33,7 @@
- mode: 655
- require:
- pkg: cassandra_backup_client_packages
+ - file: cassandra_get_listen_addr_script
cassandra_backup_dir:
file.directory:
@@ -65,6 +74,7 @@
- mode: 655
- require:
- pkg: cassandra_backup_client_packages
+ - file: cassandra_get_listen_addr_script
cassandra_backup_call_restore_script:
file.managed:
diff --git a/cassandra/files/backup/cas_get_listen_addr.py b/cassandra/files/backup/cas_get_listen_addr.py
new file mode 100644
index 0000000..943801b
--- /dev/null
+++ b/cassandra/files/backup/cas_get_listen_addr.py
@@ -0,0 +1,22 @@
+#!/usr/bin/env python
+#
+# Expects YAML on standard input.
+# Prints value of listen_address key if key is in input data
+# and nothing in other case, returns with 0.
+# Returns with 1 in case of error.
+#
+from __future__ import print_function
+import sys
+import yaml
+try:
+ data = yaml.load(sys.stdin)
+ listen_address = data.get("listen_address", "")
+ if listen_address:
+ print(listen_address)
+ else:
+ print('listen_address key is not found in the input', file=sys.stderr)
+ sys.exit(0)
+except Exception as e:
+ print('Failed to get listen_address key.'
+ ' YAML input is expected', file=sys.stderr)
+ sys.exit(1)
diff --git a/cassandra/files/backup/cassandra-backup-client-runner-call.sh b/cassandra/files/backup/cassandra-backup-client-runner-call.sh
index a387107..9f3116b 100644
--- a/cassandra/files/backup/cassandra-backup-client-runner-call.sh
+++ b/cassandra/files/backup/cassandra-backup-client-runner-call.sh
@@ -9,6 +9,7 @@
PROGVER="1.0.1"
ASFCFG="/etc/cassandra"
DSECFG="/etc/dse/cassandra"
+ CASCFG='/etc/cassandra/cassandra.yaml'
BACKUPDIR="{{ backup.backup_dir }}/full"
TMPDIR="$( pwd )/${PROGNAME}.tmp${RANDOM}"
CLITMPFILE="${TMPDIR}/cqlschema"
@@ -62,6 +63,7 @@
mkdir -p "$RSYNCLOGDIR"
fi
+ listen_address=$(/usr/local/bin/cas_get_listen_addr < $CASCFG)
# Get local Cassandra listen address. Should be loaded via the selected
# cassandra.yaml file above.
if [ -z $listen_address ]; then
diff --git a/cassandra/files/backup/cassandra-backup-client-runner.sh b/cassandra/files/backup/cassandra-backup-client-runner.sh
index 4652be6..b1f5899 100644
--- a/cassandra/files/backup/cassandra-backup-client-runner.sh
+++ b/cassandra/files/backup/cassandra-backup-client-runner.sh
@@ -7,6 +7,7 @@
PROGNAME="getSnapshot"
PROGVER="1.0.1"
ASFCFG="/etc/cassandra"
+ CASCFG='/etc/cassandra/cassandra.yaml'
DSECFG="/etc/dse/cassandra"
BACKUPDIR="{{ backup.backup_dir }}/full"
TMPDIR="$( pwd )/${PROGNAME}.tmp${RANDOM}"
@@ -188,6 +189,7 @@
# Write temp command file for Cassandra CLI
printf "desc keyspace $KEYSPACE;\n" > $CLITMPFILE
+ listen_address=$(/usr/local/bin/cas_get_listen_addr < $CASCFG)
# Get local Cassandra listen address. Should be loaded via the selected
# cassandra.yaml file above.
if [ -z $listen_address ]; then