X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=jjb%2Fdovetail%2Fdovetail-run.sh;h=e914ae1a2d78547a25291e5c03ecca5fc738db2f;hb=824a278e82c9bc5217d6f7c3d99511eb23334f70;hp=739da9eaca9848f0bf4a5dd5d73deea0e5481292;hpb=183e34c6790183dcae39fb1be7064eef74c3d03e;p=releng.git diff --git a/jjb/dovetail/dovetail-run.sh b/jjb/dovetail/dovetail-run.sh index 739da9eac..e914ae1a2 100755 --- a/jjb/dovetail/dovetail-run.sh +++ b/jjb/dovetail/dovetail-run.sh @@ -16,7 +16,7 @@ set -e DEPLOY_TYPE=baremetal [[ $BUILD_TAG =~ "virtual" ]] && DEPLOY_TYPE=virt -DOVETAIL_HOME=${WORKSPACE}/cvp +DOVETAIL_HOME=${WORKSPACE}/ovp [ -d ${DOVETAIL_HOME} ] && sudo rm -rf ${DOVETAIL_HOME} mkdir -p ${DOVETAIL_HOME} @@ -27,13 +27,46 @@ mkdir -p ${DOVETAIL_CONFIG} DOVETAIL_IMAGES=${DOVETAIL_HOME}/images mkdir -p ${DOVETAIL_IMAGES} +OPENRC=${DOVETAIL_CONFIG}/env_config.sh +CACERT=${DOVETAIL_CONFIG}/os_cacert +POD=${DOVETAIL_CONFIG}/pod.yaml + ssh_options="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" sshkey="" -# The path of openrc.sh is defined in fetch_os_creds.sh -OPENRC=${DOVETAIL_CONFIG}/env_config.sh -CACERT=${DOVETAIL_CONFIG}/os_cacert -if [[ ${INSTALLER_TYPE} == 'apex' ]]; then + +TEST_DB_URL=http://testresults.opnfv.org/test/api/v1/results + +check_file_exists() { + if [[ -f $1 ]]; then + echo 0 + else + echo 1 + fi +} + +get_cred_file_with_scripts() { + echo "INFO: clone releng repo..." + releng_repo=${WORKSPACE}/releng + [ -d ${releng_repo} ] && sudo rm -rf ${releng_repo} + git clone https://gerrit.opnfv.org/gerrit/releng ${releng_repo} >/dev/null + + echo "INFO: clone pharos repo..." + pharos_repo=${WORKSPACE}/pharos + [ -d ${pharos_repo} ] && sudo rm -rf ${pharos_repo} + git clone https://git.opnfv.org/pharos ${pharos_repo} >/dev/null + + echo "INFO: SUT branch is $SUT_BRANCH" + echo "INFO: dovetail branch is $BRANCH" + BRANCH_BACKUP=$BRANCH + export BRANCH=$SUT_BRANCH + cmd="${releng_repo}/utils/fetch_os_creds.sh -d ${OPENRC} -i ${INSTALLER_TYPE} -a ${INSTALLER_IP} -o ${CACERT} >${redirect}" + echo "INFO: cmd is ${cmd}" + ${cmd} + export BRANCH=$BRANCH_BACKUP +} + +get_apex_cred_file() { instack_mac=$(sudo virsh domiflist undercloud | grep default | \ grep -Eo "[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+") INSTALLER_IP=$(/usr/sbin/arp -e | grep ${instack_mac} | awk {'print $1'}) @@ -43,88 +76,75 @@ if [[ ${INSTALLER_TYPE} == 'apex' ]]; then sudo iptables -D FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable sudo iptables -D FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable fi -elif [[ ${INSTALLER_TYPE} == 'joid' ]]; then + get_cred_file_with_scripts +} + +get_fuel_cred_file() { + get_cred_file_with_scripts +} + +get_joid_cred_file() { # If production lab then creds may be retrieved dynamically # creds are on the jumphost, always in the same folder sudo cp $LAB_CONFIG/admin-openrc $OPENRC - # If dev lab, credentials may not be the default ones, just provide a path to put them into docker - # replace the default one by the customized one provided by jenkins config -fi - -# Set iptables rule to allow forwarding return traffic for container -if ! sudo iptables -C FORWARD -j RETURN 2> ${redirect} || ! sudo iptables -L FORWARD | awk 'NR==3' | grep RETURN 2> ${redirect}; then - sudo iptables -I FORWARD -j RETURN -fi - -releng_repo=${WORKSPACE}/releng -[ -d ${releng_repo} ] && sudo rm -rf ${releng_repo} -git clone https://gerrit.opnfv.org/gerrit/releng ${releng_repo} >/dev/null - -pharos_repo=${WORKSPACE}/pharos -[ -d ${pharos_repo} ] && sudo rm -rf ${pharos_repo} -git clone https://git.opnfv.org/pharos ${pharos_repo} >/dev/null +} -if [[ ${INSTALLER_TYPE} != 'joid' ]]; then - echo "SUT branch is $SUT_BRANCH" - echo "dovetail branch is $BRANCH" - BRANCH_BACKUP=$BRANCH - export BRANCH=$SUT_BRANCH - ${releng_repo}/utils/fetch_os_creds.sh -d ${OPENRC} -i ${INSTALLER_TYPE} -a ${INSTALLER_IP} -o ${CACERT} >${redirect} - export BRANCH=$BRANCH_BACKUP -fi - -if [[ -f $OPENRC ]]; then - echo "INFO: openstack credentials path is $OPENRC" - if [[ ! "${SUT_BRANCH}" =~ "danube" && ${INSTALLER_TYPE} == "compass" ]]; then - if [[ -f ${CACERT} ]]; then - echo "INFO: ${INSTALLER_TYPE} openstack cacert file is ${CACERT}" - echo "export OS_CACERT=${CACERT}" >> ${OPENRC} - else - echo "ERROR: Can't find ${INSTALLER_TYPE} openstack cacert file. Please check if it is existing." - sudo ls -al ${DOVETAIL_CONFIG} - exit 1 +change_cred_file_cacert_path() { + if [[ ${INSTALLER_TYPE} == "apex" ]]; then + echo "INFO: apex doesn't need to set OS_CACERT." + return 0 + fi + exists=`check_file_exists ${CACERT}` + if [[ $exists == 0 ]]; then + echo "INFO: set ${INSTALLER_TYPE} openstack cacert file to be ${CACERT}" + if [[ ${INSTALLER_TYPE} == "fuel" ]]; then + sed -i "s#/etc/ssl/certs/mcp_os_cacert#${CACERT}#g" ${OPENRC} fi + else + echo "ERROR: cannot find file ${CACERT}. Please check if it exists." + sudo ls -al ${DOVETAIL_CONFIG} + exit 1 fi - echo "export EXTERNAL_NETWORK=${EXTERNAL_NETWORK}" >> ${OPENRC} -else - echo "ERROR: cannot find file $OPENRC. Please check if it is existing." - sudo ls -al ${DOVETAIL_CONFIG} - exit 1 -fi +} -if [[ ! "${SUT_BRANCH}" =~ "danube" && ${INSTALLER_TYPE} == "fuel" ]]; then - sed -i "s#/etc/ssl/certs/mcp_os_cacert#${CACERT}#g" ${OPENRC} -fi -cat $OPENRC - -# These packages are used for parsing yaml files and decrypting ipmi user and password. -sudo pip install shyaml -sudo yum install -y rubygems || sudo apt-get install -y ruby -sudo gem install hiera-eyaml - -if [[ ! "${SUT_BRANCH}" =~ "danube" && ${INSTALLER_TYPE} == "compass" ]]; then - compass_repo=${WORKSPACE}/compass4nfv/ - git clone https://github.com/opnfv/compass4nfv.git ${compass_repo} >/dev/null - scenario_file=${compass_repo}/deploy/conf/hardware_environment/$NODE_NAME/os-nosdn-nofeature-ha.yml - ipmiIp=$(cat ${scenario_file} | shyaml get-value hosts.0.ipmiIp) - ipmiPass=$(cat ${scenario_file} | shyaml get-value hosts.0.ipmiPass) - ipmiUser=root - jumpserver_ip=$(ifconfig | grep -A 5 docker0 | grep "inet addr" | cut -d ':' -f 2 | cut -d ' ' -f 1) - - cat << EOF >${DOVETAIL_CONFIG}/pod.yaml -nodes: -- {ip: ${jumpserver_ip}, name: node0, password: root, role: Jumpserver, user: root} -- {ip: 10.1.0.50, name: node1, password: root, role: controller, user: root, - ipmi_ip: ${ipmiIp}, ipmi_user: ${ipmiUser}, ipmi_password: ${ipmiPass}} -- {ip: 10.1.0.51, name: node2, password: root, role: controller, user: root} -- {ip: 10.1.0.52, name: node3, password: root, role: controller, user: root} -- {ip: 10.1.0.53, name: node4, password: root, role: compute, user: root} -- {ip: 10.1.0.54, name: node5, password: root, role: compute, user: root} +change_cred_file_ext_net() { + exists=`check_file_exists ${OPENRC}` + if [[ $exists == 0 ]]; then + echo "export EXTERNAL_NETWORK=${EXTERNAL_NETWORK}" >> ${OPENRC} + else + echo "ERROR: cannot find file $OPENRC. Please check if it exists." + sudo ls -al ${DOVETAIL_CONFIG} + exit 1 + fi +} + +get_cred_file() { + if [[ ${INSTALLER_TYPE} == 'apex' ]]; then + get_apex_cred_file + elif [[ ${INSTALLER_TYPE} == 'fuel' ]]; then + get_fuel_cred_file + elif [[ ${INSTALLER_TYPE} == 'joid' ]]; then + get_joid_cred_file + fi -EOF -fi + exists=`check_file_exists ${OPENRC}` + if [[ $exists == 0 ]]; then + echo "INFO: original openstack credentials file is:" + cat $OPENRC + echo "INFO: change cacert file path in credentials file" + change_cred_file_cacert_path + echo "INFO: set external network in credentials file" + change_cred_file_ext_net + echo "INFO: final openstack credentials file is:" + cat $OPENRC + else + echo "ERROR: cannot find file $OPENRC. Please check if it exists." + sudo ls -al ${DOVETAIL_CONFIG} + exit 1 + fi +} -if [[ ! "${SUT_BRANCH}" =~ "danube" && ${INSTALLER_TYPE} == 'fuel' && ${DEPLOY_TYPE} == 'baremetal' ]]; then +get_fuel_baremetal_pod_file() { fuel_ctl_ssh_options="${ssh_options} -i ${SSH_KEY}" ssh_user="ubuntu" fuel_ctl_ip=$(ssh 2>/dev/null ${fuel_ctl_ssh_options} "${ssh_user}@${INSTALLER_IP}" \ @@ -152,21 +172,20 @@ if [[ ! "${SUT_BRANCH}" =~ "danube" && ${INSTALLER_TYPE} == 'fuel' && ${DEPLOY_T [[ $ipmiUser == ENC* ]] && ipmiUser=$(eyaml decrypt -s ${ipmiUser//[[:blank:]]/}) [[ $ipmiPass == ENC* ]] && ipmiPass=$(eyaml decrypt -s ${ipmiPass//[[:blank:]]/}) - cat << EOF >${DOVETAIL_CONFIG}/pod.yaml + cat << EOF >${POD} nodes: -- {ip: ${INSTALLER_IP}, name: node0, key_filename: /home/opnfv/userconfig/pre_config/id_rsa, +- {ip: ${INSTALLER_IP}, name: node0, key_filename: ${DOVETAIL_CONFIG}/id_rsa, role: Jumpserver, user: ${ssh_user}} -- {ip: ${fuel_ctl_ip}, name: node1, key_filename: /home/opnfv/userconfig/pre_config/id_rsa, +- {ip: ${fuel_ctl_ip}, name: node1, key_filename: ${DOVETAIL_CONFIG}/id_rsa, role: controller, user: ${ssh_user}, ipmi_ip: ${ipmiIp}, ipmi_user: ${ipmiUser}, ipmi_password: ${ipmiPass}} -- {ip: ${fuel_msg_ip}, name: msg01, key_filename: /home/opnfv/userconfig/pre_config/id_rsa, role: controller, user: ${ssh_user}} -- {ip: ${fuel_cmp_ip}, name: cmp01, key_filename: /home/opnfv/userconfig/pre_config/id_rsa, role: controller, user: ${ssh_user}} -- {ip: ${fuel_dbs_ip}, name: dbs01, key_filename: /home/opnfv/userconfig/pre_config/id_rsa, role: controller, user: ${ssh_user}} +- {ip: ${fuel_msg_ip}, name: msg01, key_filename: ${DOVETAIL_CONFIG}/id_rsa, role: controller, user: ${ssh_user}} +- {ip: ${fuel_cmp_ip}, name: cmp01, key_filename: ${DOVETAIL_CONFIG}/id_rsa, role: controller, user: ${ssh_user}} +- {ip: ${fuel_dbs_ip}, name: dbs01, key_filename: ${DOVETAIL_CONFIG}/id_rsa, role: controller, user: ${ssh_user}} EOF -fi +} -if [[ ! -f ${DOVETAIL_CONFIG}/pod.yaml ]]; then +get_pod_file_with_scripts() { set +e - sudo pip install virtualenv cd ${releng_repo}/modules @@ -175,58 +194,85 @@ if [[ ! -f ${DOVETAIL_CONFIG}/pod.yaml ]]; then sudo pip install -e ./ >/dev/null sudo pip install netaddr - if [[ ${INSTALLER_TYPE} == compass ]]; then - options="-u root -p root" - elif [[ ${INSTALLER_TYPE} == fuel ]]; then - options="-u root -p r00tme" + if [[ ${INSTALLER_TYPE} == fuel ]]; then + options="-u ubuntu -k /root/.ssh/id_rsa" elif [[ ${INSTALLER_TYPE} == apex ]]; then options="-u stack -k /root/.ssh/id_rsa" elif [[ ${INSTALLER_TYPE} == daisy ]]; then options="-u root -p r00tme" else - echo "Don't support to generate pod.yaml on ${INSTALLER_TYPE} currently." - echo "HA test cases may not run properly." + echo "WARNING: Don't support to generate ${POD} on ${INSTALLER_TYPE} currently." + echo "WARNING: HA test cases may not run properly." fi cmd="sudo python ${releng_repo}/utils/create_pod_file.py -t ${INSTALLER_TYPE} \ - -i ${INSTALLER_IP} ${options} -f ${DOVETAIL_CONFIG}/pod.yaml \ - -s /home/opnfv/userconfig/pre_config/id_rsa" - echo ${cmd} + -i ${INSTALLER_IP} ${options} -f ${POD} \ + -s ${DOVETAIL_CONFIG}/id_rsa" + echo "INFO: cmd is ${cmd}" ${cmd} deactivate - set -e - cd ${WORKSPACE} -fi +} -if [ -f ${DOVETAIL_CONFIG}/pod.yaml ]; then - sudo chmod 666 ${DOVETAIL_CONFIG}/pod.yaml - echo "Adapt process info for $INSTALLER_TYPE ..." - if [ "$INSTALLER_TYPE" == "apex" ]; then - cat << EOF >> ${DOVETAIL_CONFIG}/pod.yaml +change_apex_pod_file_process_info() { + cat << EOF >> ${POD} process_info: - {testcase_name: yardstick.ha.rabbitmq, attack_process: rabbitmq_server} - {testcase_name: yardstick.ha.cinder_api, attack_process: cinder_wsgi} EOF - elif [ "$INSTALLER_TYPE" == "fuel" ]; then - cat << EOF >> ${DOVETAIL_CONFIG}/pod.yaml +} + +change_fuel_pod_file_process_info() { + cat << EOF >> ${POD} process_info: - {testcase_name: yardstick.ha.cinder_api, attack_process: cinder-wsgi} - {testcase_name: yardstick.ha.rabbitmq, attack_process: rabbitmq_server, attack_host: msg01} - {testcase_name: yardstick.ha.neutron_l3_agent, attack_process: neutron-l3-agent, attack_host: cmp01} - {testcase_name: yardstick.ha.database, attack_process: mysqld, attack_host: dbs01} EOF +} + +change_pod_file_process_info() { + sudo chmod 666 ${POD} + echo "INFO: adapt process info for $INSTALLER_TYPE ..." + if [ "$INSTALLER_TYPE" == "apex" ]; then + change_apex_pod_file_process_info + elif [ "$INSTALLER_TYPE" == "fuel" ]; then + change_fuel_pod_file_process_info + fi +} + +get_pod_file() { + # These packages are used for parsing yaml files and decrypting ipmi user and password. + sudo pip install shyaml + sudo yum install -y rubygems || sudo apt-get install -y ruby + sudo gem install hiera-eyaml + if [[ ${INSTALLER_TYPE} == 'fuel' && ${DEPLOY_TYPE} == 'baremetal' ]]; then + get_fuel_baremetal_pod_file fi - echo "file ${DOVETAIL_CONFIG}/pod.yaml:" - cat ${DOVETAIL_CONFIG}/pod.yaml -else - echo "Error: cannot find file ${DOVETAIL_CONFIG}/pod.yaml. Please check if it is existing." - sudo ls -al ${DOVETAIL_CONFIG} - echo "HA test cases may not run properly." -fi + exists=`check_file_exists ${POD}` + if [[ $exists == 1 ]]; then + get_pod_file_with_scripts + fi + + exists=`check_file_exists ${POD}` + if [[ $exists == 0 ]]; then + change_pod_file_process_info + else + echo "ERROR: cannot find file ${POD}. Please check if it exists." + sudo ls -al ${DOVETAIL_CONFIG} + exit 1 + fi + + echo "INFO: file ${POD} is:" + cat ${POD} +} + +get_cred_file +get_pod_file if [ "$INSTALLER_TYPE" == "fuel" ]; then if [[ "${SUT_BRANCH}" =~ "danube" ]]; then @@ -313,7 +359,10 @@ fi echo "Dovetail: Pulling image ${DOCKER_REPO}:${DOCKER_TAG}" docker pull ${DOCKER_REPO}:$DOCKER_TAG >$redirect -cmd="docker run ${opts} -e DOVETAIL_HOME=${DOVETAIL_HOME} ${docker_volume} ${dovetail_home_volume} \ +cmd="docker run ${opts} -e DOVETAIL_HOME=${DOVETAIL_HOME} -e INSTALLER_TYPE=${INSTALLER_TYPE} \ + -e DEPLOY_SCENARIO=${DEPLOY_SCENARIO} -e NODE_NAME=${NODE_NAME} -e BUILD_TAG=${BUILD_TAG} \ + -e TEST_DB_URL=${TEST_DB_URL} -e VERSION=${SUT_BRANCH} \ + ${docker_volume} ${dovetail_home_volume} \ ${sshkey} ${DOCKER_REPO}:${DOCKER_TAG} /bin/bash" echo "Dovetail: running docker run command: ${cmd}" ${cmd} >${redirect} @@ -321,7 +370,7 @@ sleep 5 container_id=$(docker ps | grep "${DOCKER_REPO}:${DOCKER_TAG}" | awk '{print $1}' | head -1) echo "Container ID=${container_id}" if [ -z ${container_id} ]; then - echo "Cannot find ${DOCKER_REPO} container ID ${container_id}. Please check if it is existing." + echo "Cannot find ${DOCKER_REPO} container ID ${container_id}. Please check if it exists." docker ps -a exit 1 fi @@ -336,7 +385,7 @@ fi # Modify tempest_conf.yaml file tempest_conf_file=${DOVETAIL_CONFIG}/tempest_conf.yaml -if [[ ${INSTALLER_TYPE} == 'compass' || ${INSTALLER_TYPE} == 'apex' ]]; then +if [[ ${INSTALLER_TYPE} == 'apex' ]]; then volume_device='vdb' else volume_device='vdc' @@ -373,7 +422,7 @@ else testarea="--testarea ${TESTAREA}" fi -run_cmd="dovetail run ${testsuite} ${testarea} --deploy-scenario ${DEPLOY_SCENARIO} -d -r" +run_cmd="dovetail run ${testsuite} ${testarea} --deploy-scenario ${DEPLOY_SCENARIO} -d -r --opnfv-ci" echo "Container exec command: ${run_cmd}" docker exec $container_id ${run_cmd}