Refactor healthcheck-k8s.py 34/95634/2
authorBartek Grzybowski <b.grzybowski@partner.samsung.com>
Fri, 13 Sep 2019 10:50:59 +0000 (12:50 +0200)
committerDaniel Rose <dr695h@att.com>
Fri, 13 Sep 2019 14:00:13 +0000 (14:00 +0000)
Error reporting was improved by returning actual
error message from subprocess call to 'kubectl' command.

Code readability was improved by defining a dictionary
of endpoint names to check and their IPs.

Unsecure 'shell=True' property in Popen constructor for
kubectl command in SDNC DB was removed and command string
itself sanitized.

Overall code readability was improved by reusing common
commands in a loop.

Change-Id: I19f8f71e27196bb55a9be3d58cd0885ceba3af0c
Issue-ID: TEST-213
Signed-off-by: Bartek Grzybowski <b.grzybowski@partner.samsung.com>
test/vcpe/healthcheck-k8s.py

index 4583241..67a1981 100755 (executable)
@@ -1,10 +1,9 @@
 #! /usr/bin/python
 
 import argparse
-import commands
 import json
 import logging
-import subprocess
+from subprocess import Popen,PIPE
 import sys
 
 def parse_args():
@@ -28,22 +27,29 @@ args = parse_args()
 namespace = args.namespace
 environment = args.environment
 
-print('Checking vGMUX REST API from SDNC')
-cmd = 'curl -s -u admin:admin -X GET http://10.0.101.21:8183/restconf/config/ietf-interfaces:interfaces'
-ret = commands.getstatusoutput("kubectl -n {0} exec {1}-sdnc-sdnc-0 -- bash -c '{2}'".format(namespace, environment, cmd))
-sz = ret[-1].split('\n')[-1]
-print(json.dumps(json.loads(sz), indent=4))
+# config section
+kube_cmd = 'kubectl -n {0} exec {1}-sdnc-sdnc-0 -- bash -c '.format(namespace, environment)
+curl_cmd = 'curl -s -u admin:admin -X GET http://{0}:8183/restconf/config/ietf-interfaces:interfaces'
+endpoints = {
+    "vGMUX": '10.0.101.21',
+    "vBRG": '10.3.0.2'
+}
+# end of config section
+
+for ename,eip in endpoints.items():
+    print('Checking {0} REST API from SDNC'.format(ename))
+    p = Popen(kube_cmd.split() + [curl_cmd.format(eip)], stdout=PIPE, stderr=PIPE)
+    (output, error) = p.communicate()
+    if p.returncode:
+        print(error)
+        sys.exit(p.returncode)
+    else:
+        print(json.dumps(json.loads(output), indent=4))
+    print('\n')
 
-print('\n')
-print('Checking vBRG REST API from SDNC')
-cmd = 'curl -s -u admin:admin -X GET http://10.3.0.2:8183/restconf/config/ietf-interfaces:interfaces'
-ret = commands.getstatusoutput("kubectl -n {0} exec {1}-sdnc-sdnc-0 -- bash -c '{2}'".format(namespace, environment, cmd))
-sz = ret[-1].split('\n')[-1]
-print(json.dumps(json.loads(sz), indent=4))
-
-print('\n')
 print('Checking SDNC DB for vBRG MAC address')
-cmd = "kubectl -n {0} exec {1}-mariadb-galera-mariadb-galera-0 -- mysql -uroot -psecretpassword sdnctl -e 'select * from DHCP_MAP'".format(namespace, environment)
-p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
+kube_db_cmd = 'kubectl -n {0} exec {1}-mariadb-galera-mariadb-galera-0 -- bash -c'
+db_cmd = "mysql -uroot -psecretpassword sdnctl -e 'select * from DHCP_MAP'"
+p = Popen(kube_db_cmd.format(namespace, environment).split() + [db_cmd], stdout=PIPE)
 (output, error) = p.communicate()
 print(output)