Merge "Add Script for murano-dashboard jenkins"

This commit is contained in:
Jenkins 2016-08-25 10:29:19 +00:00 committed by Gerrit Code Review
commit 1d1f4dd1fd
2 changed files with 154 additions and 0 deletions

View File

@ -0,0 +1,91 @@
#!/bin/bash
set -x
# Virtual framebuffer settings
#-----------------------------
VFB_DISPLAY_SIZE='1280x1024'
VFB_COLOR_DEPTH=16
VFB_DISPLAY_NUM=22
#-----------------------------
export SSH_OPTS='-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
export FUEL_PASSWD='r00tme'
SNAPSHOT_NAME=$(dos.py snapshot-list "$ENV_NAME" | tail -1 | awk '{print $1}')
dos.py revert-resume "$ENV_NAME" "$SNAPSHOT_NAME"
ADMIN_NODE_IP=$(dos.py net-list $ENV_NAME | tail -1 | awk '{print $2}' | sed 's|/.*||g' | sed 's|.$|2|g')
echo "LOG: fuel-master ip=$ADMIN_NODE_IP"
sudo apt-get install --yes sshpass
CONTROLLER_ID=`echo 'fuel node | \
grep controller | \
awk '\''{print $1}'\'' | \
head -1' | \
sshpass -p "$FUEL_PASSWD" \
ssh ${SSH_OPTS} -T root@"$ADMIN_NODE_IP"`
echo "LOG: controller_id=$CONTROLLER_ID"
##### Upload the murano-dashboard repo on controller node in home #####
EXEC_CMD="echo 'apt-get install --yes git && git clone https://github.com/openstack/murano-dashboard.git' | ssh -T node-$CONTROLLER_ID"
echo "$EXEC_CMD" | sshpass -p "$FUEL_PASSWD" ssh ${SSH_OPTS} -T root@"$ADMIN_NODE_IP"
##### Installing Firefox version 46.0 #####
FIREFOX_CMD="echo 'apt-get install --yes firefox && \
apt-get remove --yes firefox && \
wget https://ftp.mozilla.org/pub/firefox/releases/46.0/linux-x86_64/en-US/firefox-46.0.tar.bz2 && \
tar -xjf firefox-46.0.tar.bz2 && \
rm -rf /opt/firefox && \
mv firefox /opt/firefox46 && \
ln -s /opt/firefox46/firefox /usr/bin/firefox'"
EXEC_CMD="$FIREFOX_CMD | ssh -T node-$CONTROLLER_ID"
echo "$EXEC_CMD" | sshpass -p "$FUEL_PASSWD" ssh ${SSH_OPTS} -T root@"$ADMIN_NODE_IP"
##### Installing Prerequisites on controller#####
EXEC_CMD="echo 'apt-get install --yes python-pip xvfb xfonts-100dpi xfonts-75dpi xfonts-cyrillic xorg dbus-x11 && \
pip install --upgrade pip && \
pip install -U selenium nose' | ssh -T node-$CONTROLLER_ID"
echo "$EXEC_CMD" | sshpass -p "$FUEL_PASSWD" ssh ${SSH_OPTS} -T root@"$ADMIN_NODE_IP"
##### Copying script to master node, then to controller #####
sshpass -p "$FUEL_PASSWD" scp ${SSH_OPTS} "$WORKSPACE/utils/jenkins/parser.py" "root@${ADMIN_NODE_IP}:/root/parser.py"
echo "scp /root/parser.py/ node-${CONTROLLER_ID}:murano-dashboard/muranodashboard/tests/functional/config/" | sshpass -p "$FUEL_PASSWD" ssh ${SSH_OPTS} -T root@"$ADMIN_NODE_IP"
##### Run python script for preparing config.conf for tests#####
EXEC_CMD="echo '. /root/openrc && cd murano-dashboard/muranodashboard/tests/functional/config/ && chmod +x parser.py && ./parser.py -i /root/openrc' | ssh -T node-$CONTROLLER_ID"
echo "$EXEC_CMD" | sshpass -p "$FUEL_PASSWD" ssh ${SSH_OPTS} -T root@"$ADMIN_NODE_IP"
#####This variable should be set for pagination test running#####
EXEC_CMD= "echo 'sed -i 's#MURANO_REPO_URL =.*#MURANO_REPO_URL = '\''http://localhost:8099'\''#g' murano-dashboard/muranodashboard/local/local_settings.d/_50_murano.py' | ssh -T node-$CONTROLLER_ID"
echo "$EXEC_CMD" | sshpass -p "$FUEL_PASSWD" ssh ${SSH_OPTS} -T root@"$ADMIN_NODE_IP"
fonts_path="/usr/share/fonts/X11/misc/"
##### Running Xvfb #####
XVFB_SESSION="echo 'Xvfb -fp \"${fonts_path}\" :${VFB_DISPLAY_NUM} -screen 0 \"${VFB_DISPLAY_SIZE}x${VFB_COLOR_DEPTH}\" &'"
EXEC_CMD="$XVFB_SESSION | ssh -T node-$CONTROLLER_ID"
echo "$EXEC_CMD" | sshpass -p "$FUEL_PASSWD" ssh ${SSH_OPTS} -T root@"$ADMIN_NODE_IP"
##### Configuring VNC. Port forwarding example ssh -L 127.0.0.1:8000:controller_ip:5900 user@server #####
EXEC_CMD="echo 'apt-get install --yes x11vnc && x11vnc -bg -forever -nopw -display :${VFB_DISPLAY_NUM} -ncache 10 && iptables -I INPUT 1 -p tcp --dport 5900 -j ACCEPT' | ssh -T node-$CONTROLLER_ID"
echo "$EXEC_CMD" | sshpass -p "$FUEL_PASSWD" ssh ${SSH_OPTS} -T root@"$ADMIN_NODE_IP"
##### Run tests #####
RUN_TESTS="echo 'export DISPLAY=:${VFB_DISPLAY_NUM} && nosetests -sv murano-dashboard/muranodashboard/tests/functional/sanity_check.py --with-xunit --xunit-file /root/test_report.xml' | ssh -T node-$CONTROLLER_ID"
echo "$RUN_TESTS" | sshpass -p "$FUEL_PASSWD" ssh ${SSH_OPTS} -T root@"$ADMIN_NODE_IP"
##########################################################
##### Copying results from controller to admin node: #####
##### and then to host in workspace folder #####
##########################################################
GET_REP_CMD="scp node-$CONTROLLER_ID:/root/test_report.xml /root/test_report.xml"
echo "$GET_REP_CMD" | sshpass -p "$FUEL_PASSWD" ssh ${SSH_OPTS} -T root@"$ADMIN_NODE_IP"
sshpass -p "$FUEL_PASSWD" scp ${SSH_OPTS} root@"$ADMIN_NODE_IP":/root/test_report.xml "$WORKSPACE/logs/"
exit 0

63
utils/jenkins/parser.py Normal file
View File

@ -0,0 +1,63 @@
#!/usr/bin/env python
from __future__ import print_function
import getopt
import os.path
import subprocess
import sys
# usage: parser.py -i <inputfile>
def main(argv):
try:
opts, args = getopt.getopt(argv, "hi:", "ifile=")
if not opts:
print ('No options supplied. For help use -h')
sys.exit(2)
except getopt.GetoptError:
print ('parser.py -i <inputfile>')
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print ('parser.py -i <inputfile>')
sys.exit()
elif opt in ("-i", "--ifile"):
inputfile = arg
return inputfile
def read_values(inputfile):
with open(inputfile, 'r') as inputfile:
dict = {k: v for line in inputfile if '=' in line for (k, v) in (
line.replace('\'', '').strip('export ').strip().split('=', 1),)}
return dict
def create_config(dict):
cmd = subprocess.check_output(
'openstack endpoint list --long -c PublicURL -f \'value\'', shell=True)
keystone_url = None
for row in cmd.split('\n'):
if '5000' in row:
keystone_url = row.replace('v2.0', '')
uri = keystone_url.replace(':5000/', '')
with open('config.conf', 'w') as config_file:
seq = ['[murano]\n',
'horizon_url = ' + uri + '/horizon/\n',
'murano_url = ' + uri + ':8082\n',
'user = ' + dict['OS_USERNAME'] + '\n',
'password = ' + dict['OS_PASSWORD'] + '\n',
'tenant = ' + dict['OS_TENANT_NAME'] + '\n',
'keystone_url = ' + keystone_url + 'v3\n']
config_file.writelines(seq)
if __name__ == "__main__":
inputfile = main(sys.argv[1:])
if not os.access(inputfile, os.R_OK):
print ("Cannot read the file: {0}. It may or not may exist".format(
inputfile))
sys.exit(2)
dict = read_values(inputfile)
create_config(dict)