aboutsummaryrefslogtreecommitdiffstats
path: root/qtip
diff options
context:
space:
mode:
authorYujun Zhang <zhang.yujunz@zte.com.cn>2017-01-25 08:27:34 +0000
committerGerrit Code Review <gerrit@opnfv.org>2017-01-25 08:27:34 +0000
commit147aeebf0576c9f56f1861463ce5d71874dbb74c (patch)
treed9f15f71b374d8ddb4c4363764ba3113b59aa975 /qtip
parent3d4a579e25540343bc42f4cc407e298fb08ae9c5 (diff)
parentcf7acd2b1f054c220da1a1582a005035bfd92a56 (diff)
Merge "refactor useful legacy code about preparing test enviroment"
Diffstat (limited to 'qtip')
-rwxr-xr-xqtip/scripts/fetch_compute_ips.sh117
-rwxr-xr-xqtip/scripts/qtip_creds.sh30
-rw-r--r--qtip/util/env.py137
3 files changed, 284 insertions, 0 deletions
diff --git a/qtip/scripts/fetch_compute_ips.sh b/qtip/scripts/fetch_compute_ips.sh
new file mode 100755
index 00000000..a2618ec9
--- /dev/null
+++ b/qtip/scripts/fetch_compute_ips.sh
@@ -0,0 +1,117 @@
+#!/bin/bash
+##############################################################################
+#Copyright (c) 2016 Ericsson AB, ZTE and others.
+#jose.lausuch@ericsson.com
+#All rights reserved. This program and the accompanying materials
+#are made available under the terms of the Apache License, Version 2.0
+#which accompanies this distribution, and is available at
+#http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+
+usage(){
+ echo "usage: $0 [-v] -i <installer_type> -a <installer_ip>" >&2
+ echo "[-v] Virtualized deployment" >&2
+}
+
+info() {
+ logger -s -t "fetch_compute_info.info" "$*"
+}
+
+
+error() {
+ logger -s -t "fetch_compute_info.error" "$*"
+ exit 1
+}
+
+verify_connectivity(){
+ local ip=$1
+ info "Verifying connectivity to $ip..."
+ for i in $(seq 0 10); do
+ if ping -c 1 -W 1 $ip > /dev/null; then
+ info "$ip is reachable!"
+ return 0
+ fi
+ sleep 1
+ done
+ error "Can not talk to $ip."
+}
+
+:${DEPLOY_TYPE:=''}
+
+#Getoptions
+while getopts ":i:a:h:v" optchar; do
+ case "${optchar}" in
+ i) installer_type=${OPTARG} ;;
+ a) installer_ip=${OPTARG} ;;
+ v) DEPLOY_TYPE="virt" ;;
+ *) echo "Non-option argument: '-${OPTARG}'" >&2
+ usage
+ exit 2
+ ;;
+ esac
+done
+
+#set vars from env if not provided by user as options
+installer_type=${installer_type:-$INSTALLER_TYPE}
+installer_ip=${installer_ip:-$INSTALLER_IP}
+
+if [ -z $installer_type ] || [ -z $installer_ip ]; then
+ usage
+ exit 2
+fi
+
+ssh_options="-oUserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
+
+#Start fetching compute ip
+if [ "$installer_type" == "fuel" ]; then
+ verify_connectivity $installer_ip
+
+ env=$(sshpass -p r00tme ssh 2>/dev/null $ssh_options root@${installer_ip} \
+ 'fuel env'|grep operational|head -1|awk '{print $1}') &> /dev/null
+ if [ -z $env ]; then
+ error "No operational environment detected in Fuel"
+ fi
+ env_id="${FUEL_ENV:-$env}"
+
+ # Check if compute is alive (online='True')
+ IPS=$(sshpass -p r00tme ssh 2>/dev/null $ssh_options root@${installer_ip} \
+ "fuel node --env ${env_id} | grep compute | grep 'True\| 1' | awk -F\| '{print \$5}' " | \
+ sed 's/ //g') &> /dev/null
+
+
+elif [ "$installer_type" == "apex" ]; then
+ echo "not implement now"
+ exit 1
+
+elif [ "$installer_type" == "compass" ]; then
+ # need test
+ verify_connectivity $installer_ip
+ IPS=$(sshpass -p'root' ssh 2>/dev/null $ssh_options root@${installer_ip} \
+ 'mysql -ucompass -pcompass -Dcompass -e"select * from cluster;"' \
+ | awk -F"," '{for(i=1;i<NF;i++)if($i~/\"host[4-5]\"/) {print $(i+1);}}' \
+ | grep -oP "\d+.\d+.\d+.\d+")
+
+elif [ "$installer_type" == "joid" ]; then
+ echo "not implement now"
+ exit 1
+
+elif [ "$installer_type" == "foreman" ]; then
+ echo "not implement now"
+ exit 1
+
+else
+ error "Installer $installer is not supported by this script"
+fi
+
+if [ -z "$IPS" ]; then
+ error "The compute node $IPS are not up. Please check that the POD is correctly deployed."
+else
+ echo "-------- all compute node ips: --------"
+ rm $HOME/ips.log
+ touch $HOME/ips.log
+ echo "$IPS" > $HOME/qtip/ips.log
+ echo $IPS
+fi
+
+exit 0
diff --git a/qtip/scripts/qtip_creds.sh b/qtip/scripts/qtip_creds.sh
new file mode 100755
index 00000000..af051ac5
--- /dev/null
+++ b/qtip/scripts/qtip_creds.sh
@@ -0,0 +1,30 @@
+#! /bin/bash
+
+DEST_IP=$1
+echo $INSTALLER_TYPE
+echo $INSTALLER_IP
+sshoptions="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
+case "$INSTALLER_TYPE" in
+ apex)
+ scp $sshoptions -i $APEX_KEY ./config/QtipKey.pub stack@$INSTALLER_IP:/home/stack
+ scp $sshoptions -i $APEX_KEY ./config/QtipKey stack@$INSTALLER_IP:/home/stack
+ ssh $sshoptions -i $APEX_KEY stack@$INSTALLER_IP "ssh-copy-id $sshoptions -i /home/stack/QtipKey.pub heat-admin@$DEST_IP && rm -rf /home/stack/QtipKey && rm -rf /home/stack/QtipKey.pub"
+ ;;
+ fuel)
+ PSWD="r00tme"
+ sshpass -p $PSWD scp $sshoptions ./config/QtipKey.pub root@$INSTALLER_IP:/root
+ sshpass -p $PSWD scp $sshoptions ./config/QtipKey root@$INSTALLER_IP:/root
+ sshpass -p $PSWD ssh $sshoptions root@$INSTALLER_IP "grep -q '\-F /dev/null ' /usr/bin/ssh-copy-id || sed -i 's/\(ssh -i.*$\)/\1\n -F \/dev\/null \\\/g' `which ssh-copy-id`"
+ sshpass -p $PSWD ssh $sshoptions root@$INSTALLER_IP "ssh-copy-id $sshoptions -i /root/QtipKey root@$DEST_IP && rm -rf /root/QtipKey && rm -rf /root/QtipKey.pub"
+ ;;
+ compass)
+ PSWD="root"
+ sshpass -p $PSWD scp $sshoptions ./config/QtipKey.pub root@$INSTALLER_IP:/root
+ sshpass -p $PSWD scp $sshoptions ./config/QtipKey root@$INSTALLER_IP:/root
+ sshpass -p $PSWD ssh $sshoptions root@$INSTALLER_IP "ssh-copy-id $sshoptions -i /root/QtipKey.pub root@$DEST_IP && rm -rf /root/QtipKey && rm -rf /root/QtipKey.pub"
+ ;;
+ joid)
+ PSWD="joid";;
+ *)
+ echo "Unkown installer $INSTALLER_TYPE specified";;
+esac
diff --git a/qtip/util/env.py b/qtip/util/env.py
new file mode 100644
index 00000000..4e7a31c7
--- /dev/null
+++ b/qtip/util/env.py
@@ -0,0 +1,137 @@
+##############################################################################
+# Copyright (c) 2016 Dell Inc, ZTE and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import os
+import paramiko
+import socket
+import time
+from os import path
+from os.path import expanduser
+
+SCRIPT_DIR = path.join(path.dirname(__file__), path.pardir, 'scripts')
+CONFIG_DIR = path.join(path.dirname(__file__), path.pardir, path.pardir,
+ 'config')
+PRIVATE_KEY = CONFIG_DIR + '/QtipKey'
+PUBLIC_KEY = CONFIG_DIR + '/QtipKey.pub'
+IPS_FILE = expanduser('~') + "/qtip/ips.log"
+HOST_FILE = CONFIG_DIR + "/host"
+
+
+def fetch_compute_ips_via_installer():
+ clean_file(IPS_FILE)
+
+ installer_type = str(os.environ['INSTALLER_TYPE'].lower())
+ installer_ip = str(os.environ['INSTALLER_IP'])
+ if installer_type not in ["fuel"]:
+ raise RuntimeError("%s is not supported" % installer_type)
+ if not installer_ip:
+ raise RuntimeError("undefine environment variable INSTALLER_IP")
+
+ cmd = "bash %s/fetch_compute_ips.sh -i %s -a %s" % \
+ (SCRIPT_DIR, installer_type, installer_ip)
+ os.system(cmd)
+ if path.isfile(IPS_FILE):
+ return True
+ else:
+ return False
+
+
+def parse_ips():
+ ip_list = []
+ with open(IPS_FILE, "r") as outfile:
+ data = outfile.read()
+ if data:
+ ip_list.extend(data.rstrip('\n').split('\n'))
+ return ip_list
+
+
+def ssh_test(ip):
+ os.system('ssh-keyscan %s >> /root/.ssh/known_hosts' % ip)
+ time.sleep(2)
+
+ ssh_cmd = '%s/qtip_creds.sh %s' % (SCRIPT_DIR, ip)
+ os.system(ssh_cmd)
+
+ ssh = paramiko.SSHClient()
+ ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+ ssh.connect(ip, key_filename='{0}/QtipKey'.format(CONFIG_DIR))
+
+ for attempts in range(100):
+ try:
+ stdin, stdout, stderr = ssh.exec_command('uname')
+ if not stderr.readlines():
+ print("{0}: SSH test successful")
+ return True
+ except socket.error:
+ if attempts == 99:
+ return False
+ time.sleep(2)
+
+
+def ping_test(ip, attempts=30):
+ ping_cmd = 'ping -D -c1 {0}'.format(ip)
+ for i in range(attempts):
+ if os.system(ping_cmd):
+ print('\nWaiting for machine\n')
+ time.sleep(10)
+ else:
+ print('\n\n %s is UP \n\n ' % ip)
+ return True
+ if i == 29:
+ return False
+
+
+def check_nodes_connectivity():
+ ip_list = parse_ips()
+ for ip in ip_list:
+ if not ping_test(ip):
+ raise RuntimeError("{0}: Ping test failed".format(ip))
+ if not ssh_test(ip):
+ raise RuntimeError("{0}: SSH test failed".format(ip))
+
+
+def generate_host_file():
+ ip_list = parse_ips()
+ with open(HOST_FILE, 'w') as host_file:
+ for index, item in enumerate(ip_list):
+ host_file.write("[host_{0}]\n".format(index))
+ host_file.write(item + '\n')
+
+
+def generate_keypair():
+ """Generating ssh keypair"""
+ if not clean_keypair():
+ raise RuntimeError("Cann't remove old keypair")
+
+ cmd = "ssh-keygen -t rsa -N "" -f {0} -q".format(PRIVATE_KEY)
+ os.system(cmd)
+
+ if path.isfile(PRIVATE_KEY) and path.isfile(PUBLIC_KEY):
+ return True
+ else:
+ return False
+
+
+def clean_file(file_path):
+ try:
+ if path.isfile(file_path):
+ os.remove(file_path)
+ print("Removed: " + file_path)
+ else:
+ print("Not exists: " + file_path)
+ except OSError, error:
+ print("Not able to Remove: " + file_path, error)
+ return False
+ return True
+
+
+def clean_keypair():
+ flag = True
+ flag &= clean_file(PRIVATE_KEY)
+ flag &= clean_file(PUBLIC_KEY)
+ return flag