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