aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHerry Huang <huangxiangyu5@huawei.com>2016-09-12 19:03:40 +0800
committerHerry Huang <huangxiangyu5@huawei.com>2016-09-23 19:45:46 +0800
commit7e9120d10db671b65df70f8433064756a34517e4 (patch)
tree7da8e329602ec20571f01b5bfe54c62528779305
parent239a72670e7ea9fcfdfa97c0b508581e474ce790 (diff)
Add ip and mac valid check functionality
Add function check_input_para in /deploy/launch.sh to check whether there is invalid address in DHA and NETWORK file after function process_input_para is called. Check_input_para is defined in /deploy/deploy_parameter.sh and calls check_valid.py in /util. Exit installation when invalid address or format error is found. JIRA:COMPASS-480 Change-Id: Ib01c368db6b48cbded0045a2819d895c980c2b1b Signed-off-by: Herry Huang <huangxiangyu5@huawei.com>
-rwxr-xr-xdeploy/deploy_parameter.sh9
-rwxr-xr-xdeploy/launch.sh3
-rw-r--r--util/check_valid.py96
3 files changed, 107 insertions, 1 deletions
diff --git a/deploy/deploy_parameter.sh b/deploy/deploy_parameter.sh
index d8696ce8..92e3467d 100755
--- a/deploy/deploy_parameter.sh
+++ b/deploy/deploy_parameter.sh
@@ -111,3 +111,12 @@ function process_input_para()
echo $input_file
}
+
+function check_input_para()
+{
+ python ${COMPASS_DIR}/util/check_valid.py "$DHA" "$NETWORK"
+ if [ $? -ne 0 ];then
+ exit 1
+ fi
+}
+
diff --git a/deploy/launch.sh b/deploy/launch.sh
index 488e0fd7..f73b400a 100755
--- a/deploy/launch.sh
+++ b/deploy/launch.sh
@@ -18,7 +18,8 @@ source ${COMPASS_DIR}/deploy/prepare.sh
prepare_python_env
source ${COMPASS_DIR}/util/log.sh
source ${COMPASS_DIR}/deploy/deploy_parameter.sh
-source $(process_input_para $*) || exit 1
+source $(process_input_para $* ) || exit 1
+check_input_para
source $(process_default_para $*) || exit 1
source ${COMPASS_DIR}/deploy/conf/${FLAVOR}.conf
source ${COMPASS_DIR}/deploy/conf/${TYPE}.conf
diff --git a/util/check_valid.py b/util/check_valid.py
new file mode 100644
index 00000000..13b5602f
--- /dev/null
+++ b/util/check_valid.py
@@ -0,0 +1,96 @@
+import re
+import os
+import yaml
+import sys
+import traceback
+
+def init(file):
+ with open (file) as fd:
+ try:
+ return yaml.load(fd)
+ except:
+ traceback.print_exc()
+ return None
+
+def err_print(info):
+ print '\033[0;31m%s\033[0m' %info
+
+def check_ip(ip):
+ if not ip:
+ return False
+ res=re.search("^(0?\d{1,2}|1\d\d|2[0-4]\d|25[0-5])(\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])){3}(\/(\d|[1-2]\d|3[0-2]))?$",ip)!=None
+ return res
+
+def check_mac(mac):
+ if not mac:
+ return False
+ res=re.search("^([a-zA-Z0-9]{2}:){5}[a-zA-Z0-9]{2}$",mac)!=None
+ return res
+
+def check_network(network):
+ for i in network.get('ip_settings'):
+ if not (check_ip(i['cidr']) and check_ip(i['ip_ranges'][0][0]) and check_ip(i['ip_ranges'][0][1])):
+ return False
+ if i['name'] == 'external' and not check_ip(i['gw']):
+ return False
+
+ if not check_ip(network['internal_vip']['ip']):
+ return False
+
+ if not check_ip(network['public_vip']['ip']):
+ return False
+
+ if not check_ip(network['public_net_info']['external_gw']):
+ return False
+
+ if not check_ip(network['public_net_info']['floating_ip_cidr']):
+ return False
+
+ if not check_ip(network['public_net_info']['floating_ip_start']):
+ return False
+
+ if not check_ip(network['public_net_info']['floating_ip_end']):
+ return False
+
+ return True
+
+def check_dha(dha):
+ if dha['TYPE'] == 'baremetal':
+ for i in dha['hosts']:
+ if not (check_mac(i['mac']) and check_mac(i['interface'][0]['eth1']) and check_ip(i['impiIp'])):
+ return False
+ return True
+
+if __name__ == "__main__":
+ flag = 0
+
+ if len(sys.argv) != 3:
+ err_print('input file error')
+ sys.exit(1)
+
+ _, dha_file, network_file = sys.argv
+
+ if not os.path.exists(dha_file):
+ sys.exit(1)
+ else:
+ dha = init(dha_file)
+ if not dha:
+ err_print('format error in DHA')
+ else:
+ if not check_dha(dha):
+ err_print('invalid address in DHA')
+ flag = 1
+
+ if not os.path.exists(network_file):
+ sys.exit(1)
+ else:
+ network = init(network_file)
+ if not network:
+ err_print('format error in NETWORK')
+ else:
+ if not check_network(network):
+ err_print('invalid address in NETWORK')
+ flag = 1
+
+ if flag == 1:
+ sys.exit(1)