aboutsummaryrefslogtreecommitdiffstats
path: root/deploy/adapters/ansible/roles/setup-network/files/setup_networks/check_network.py
diff options
context:
space:
mode:
authorQiLiang <liangqi1@huawei.com>2016-09-13 20:42:02 +0800
committerQiLiang <liangqi1@huawei.com>2016-09-14 10:06:12 +0800
commit239a72670e7ea9fcfdfa97c0b508581e474ce790 (patch)
tree9250db21177378f4b5b24923d3928e6ef67830a2 /deploy/adapters/ansible/roles/setup-network/files/setup_networks/check_network.py
parent0fef086d1d4c3489be2c25ff01d532b02f3b72ee (diff)
Add network connectivity check
JIRA: COMPASS-485 Change-Id: I3ca177118dec362ca2350c746519b83889ec3f83 Signed-off-by: QiLiang <liangqi1@huawei.com>
Diffstat (limited to 'deploy/adapters/ansible/roles/setup-network/files/setup_networks/check_network.py')
-rw-r--r--deploy/adapters/ansible/roles/setup-network/files/setup_networks/check_network.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/deploy/adapters/ansible/roles/setup-network/files/setup_networks/check_network.py b/deploy/adapters/ansible/roles/setup-network/files/setup_networks/check_network.py
new file mode 100644
index 00000000..72a5db97
--- /dev/null
+++ b/deploy/adapters/ansible/roles/setup-network/files/setup_networks/check_network.py
@@ -0,0 +1,56 @@
+import yaml
+import sys
+import subprocess
+
+import log as logging
+
+LOG = logging.getLogger("net-check")
+
+def is_ip_reachable(ip):
+ cmd = "ping -c 2 %s" % ip
+ process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=None, shell=True)
+
+ output = process.communicate()[0]
+ if " 0% packet loss" in output:
+ LOG.info("%s is reachable", ip)
+ elif "100% packet loss" in output:
+ LOG.error("%s is unreachable" % (ip))
+ return False
+ else:
+ LOG.warn("%r", output)
+
+ return True
+
+def is_host_ips_reachable(settings):
+ external = settings["br-prv"]["ip"]
+ external_gw = settings["br-prv"]["gw"]
+ storage = settings["storage"]["ip"]
+ mgmt = settings["mgmt"]["ip"]
+
+ return is_ip_reachable(external) \
+ and is_ip_reachable(external_gw) \
+ and is_ip_reachable(storage) \
+ and is_ip_reachable(mgmt)
+
+def main(hostname, config):
+ LOG.info("host is %s", hostname)
+
+ result = True
+
+ for host, settings in config.iteritems():
+ LOG.info("check %s network connectivity start", host)
+ result = result and is_host_ips_reachable(settings)
+
+ if result:
+ LOG.info("All hosts ips are reachable")
+ else:
+ LOG.error("Some hosts ips are unreachable !!!")
+ sys.exit(-1)
+
+if __name__ == "__main__":
+ hostname = yaml.load(sys.argv[1])
+ config = yaml.load(sys.argv[2])
+ config.pop(hostname, None)
+
+ main(hostname, config)
+