From 239a72670e7ea9fcfdfa97c0b508581e474ce790 Mon Sep 17 00:00:00 2001 From: QiLiang Date: Tue, 13 Sep 2016 20:42:02 +0800 Subject: Add network connectivity check JIRA: COMPASS-485 Change-Id: I3ca177118dec362ca2350c746519b83889ec3f83 Signed-off-by: QiLiang --- .../files/setup_networks/check_network.py | 56 ++++++++++++++++++++++ .../ansible/roles/setup-network/tasks/main.yml | 14 ++++++ 2 files changed, 70 insertions(+) create mode 100644 deploy/adapters/ansible/roles/setup-network/files/setup_networks/check_network.py (limited to 'deploy/adapters/ansible/roles/setup-network') 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) + diff --git a/deploy/adapters/ansible/roles/setup-network/tasks/main.yml b/deploy/adapters/ansible/roles/setup-network/tasks/main.yml index 7873c073..e1fdf925 100644 --- a/deploy/adapters/ansible/roles/setup-network/tasks/main.yml +++ b/deploy/adapters/ansible/roles/setup-network/tasks/main.yml @@ -38,6 +38,9 @@ with_items: - setup_networks/log.py - setup_networks/setup_networks.py + - setup_networks/check_network.py + tags: + - network_check - name: copy boot scripts copy: src={{ item }} dest=/etc/init.d/ mode=0755 @@ -58,7 +61,18 @@ tags: - recovery +- name: check basic network connectivity + shell: > + python /opt/setup_networks/check_network.py \ + "{{ inventory_hostname }}" \ + "{{ ip_settings }}" + tags: + - network_check + retries: 3 + delay: 2 + - name: add to boot scripts service: name=net_init enabled=yes - meta: flush_handlers + -- cgit 1.2.3-korg