diff options
author | Herry Huang <huangxiangyu5@huawei.com> | 2016-09-12 19:03:40 +0800 |
---|---|---|
committer | Herry Huang <huangxiangyu5@huawei.com> | 2016-09-23 19:45:46 +0800 |
commit | 7e9120d10db671b65df70f8433064756a34517e4 (patch) | |
tree | 7da8e329602ec20571f01b5bfe54c62528779305 | |
parent | 239a72670e7ea9fcfdfa97c0b508581e474ce790 (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-x | deploy/deploy_parameter.sh | 9 | ||||
-rwxr-xr-x | deploy/launch.sh | 3 | ||||
-rw-r--r-- | util/check_valid.py | 96 |
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) |