-***************************
+===========================
Release Engineering Project
-***************************
+===========================
.. toctree::
:numbered:
:maxdepth: 2
- opnfv-jjb-usage.rst
+ opnfv-jjb-usage
block: true
same-node: true
- trigger-builds:
- - project: 'cperf-apex-intel-pod2-daily-{stream}'
+ - project: 'cperf-apex-intel-pod2-daily-master'
predefined-parameters:
DEPLOY_SCENARIO=os-odl_l3-nofeature-noha
block: true
submodule:
recursive: true
timeout: 20
- shallow-clone: true
- trigger:
name: 'daily-trigger-disabled'
triggers:
envs="INSTALLER_TYPE=${INSTALLER_TYPE} -e INSTALLER_IP=${INSTALLER_IP}
-e NODE_NAME=${NODE_NAME} -e CI_DEBUG=${CI_DEBUG}"
+ramfs=/tmp/qtip/ramfs
dir_imgstore="${HOME}/imgstore"
+ramfs_volume="$ramfs:/mnt/ramfs"
echo "--------------------------------------------------------"
echo "POD: $NODE_NAME"
echo "Qtip: Pulling docker image: opnfv/qtip:${DOCKER_TAG}"
docker pull opnfv/qtip:$DOCKER_TAG
-cmd=" docker run -id -e $envs opnfv/qtip:${DOCKER_TAG} /bin/bash"
+# use ramfs to fix docker socket connection issue with overlay mode in centos
+if [ ! -d $ramfs ]; then
+ mkdir -p $ramfs
+fi
+
+if [ ! -z $(df $ramfs | tail -n -1 | grep $ramfs) ]; then
+ sudo mount -t tmpfs -o size=32M tmpfs $ramfs
+fi
+
+# enable contro path in docker
+echo <<EOF > /tmp/ansible.cfg
+[defaults]
+callback_whitelist = profile_tasks
+[ssh_connection]
+control_path=/mnt/ramfs/ansible-ssh-%%h-%%p-%%r
+EOF
+
+cmd=" docker run -id -e $envs -v ${ramfs_volume} opnfv/qtip:${DOCKER_TAG} /bin/bash"
echo "Qtip: Running docker command: ${cmd}"
${cmd}
else
echo "The container ID is: ${container_id}"
QTIP_REPO=/home/opnfv/repos/qtip
+ docker cp /tmp/ansible.cfg ${container_id}:/home/opnfv/.ansible.cfg
# TODO(zhihui_wu): use qtip cli to execute benchmark test in the future
docker exec -t ${container_id} bash -c "cd ${QTIP_REPO}/qtip/runner/ &&
python runner.py -d /home/opnfv/qtip/results/ -b all"
#--------------------------------
# BRANCH ANCHORS
#--------------------------------
+# the versions stated here default to branches which then later
+# on used for checking out the branches, pulling in head of the branch.
+# but they also allow us to state sha1 so instead of checking out the
+# branches, we can check out sha1 if we want to use locked/specific
+# sha1 or manually enter sha1.
master: &master
stream: master
- openstack-branch: '{stream}'
- opnfv-branch: 'master'
+ openstack-osa-version: '{stream}'
+ openstack-bifrost-version: '{stream}'
+ opnfv-releng-version: 'master'
gs-pathname: ''
ocata: &ocata
stream: ocata
- openstack-branch: 'stable/{stream}'
- opnfv-branch: 'master'
+ openstack-osa-version: 'stable/{stream}'
+ openstack-bifrost-version: 'stable/{stream}'
+ opnfv-releng-version: 'master'
gs-pathname: '/{stream}'
#--------------------------------
# scenarios
- logrotate-default
parameters:
+ - string:
+ name: OPENSTACK_OSA_VERSION
+ default: '{openstack-osa-version}'
+ - string:
+ name: OPENSTACK_BIFROST_VERSION
+ default: '{openstack-osa-version}'
+ - string:
+ name: OPNFV_RELENG_VERSION
+ default: '{opnfv-releng-version}'
+ - string:
+ name: USE_PROMOTED_VERSIONS
+ default: 'true'
- string:
name: DEPLOY_SCENARIO
default: '{scenario}'
- trigger-builds:
- project: 'xci-provision-{pod}-{distro}-daily-{stream}'
current-parameters: false
- predefined-parameters:
- DEPLOY_SCENARIO={scenario}
+ predefined-parameters: |
+ OPENSTACK_OSA_VERSION=$OPENSTACK_OSA_VERSION
+ OPENSTACK_BIFROST_VERSION=$OPENSTACK_BIFROST_VERSION
+ OPNFV_RELENG_VERSION=$OPNFV_RELENG_VERSION
+ USE_PROMOTED_VERSIONS=$USE_PROMOTED_VERSIONS
+ DEPLOY_SCENARIO=$DEPLOY_SCENARIO
same-node: true
block: true
- trigger-builds:
- project: 'xci-deploy-{pod}-{distro}-daily-{stream}'
current-parameters: false
- predefined-parameters:
- DEPLOY_SCENARIO={scenario}
+ predefined-parameters: |
+ OPENSTACK_OSA_VERSION=$OPENSTACK_OSA_VERSION
+ OPENSTACK_BIFROST_VERSION=$OPENSTACK_BIFROST_VERSION
+ OPNFV_RELENG_VERSION=$OPNFV_RELENG_VERSION
+ USE_PROMOTED_VERSIONS=$USE_PROMOTED_VERSIONS
+ DEPLOY_SCENARIO=$DEPLOY_SCENARIO
same-node: true
block: true
- trigger-builds:
- project: 'xci-functest-{pod}-{distro}-daily-{stream}'
current-parameters: false
- predefined-parameters:
- DEPLOY_SCENARIO={scenario}
+ predefined-parameters: |
+ OPENSTACK_OSA_VERSION=$OPENSTACK_OSA_VERSION
+ OPENSTACK_BIFROST_VERSION=$OPENSTACK_BIFROST_VERSION
+ OPNFV_RELENG_VERSION=$OPNFV_RELENG_VERSION
+ USE_PROMOTED_VERSIONS=$USE_PROMOTED_VERSIONS
+ DEPLOY_SCENARIO=$DEPLOY_SCENARIO
same-node: true
block: true
block-thresholds:
parameters:
- string:
- name: OPENSTACK_BRANCH
- default: '{openstack-branch}'
+ name: OPENSTACK_OSA_VERSION
+ default: '{openstack-osa-version}'
+ - string:
+ name: OPENSTACK_BIFROST_VERSION
+ default: '{openstack-osa-version}'
- string:
- name: OPNFV_BRANCH
- default: '{opnfv-branch}'
+ name: OPNFV_RELENG_VERSION
+ default: '{opnfv-releng-version}'
- string:
name: USE_PROMOTED_VERSIONS
default: 'true'
- pre-scm-buildstep:
- shell: |
#!/bin/bash
- sudo -R chown $USER $WORKSPACE || exit 1
+ sudo chown -R $USER $WORKSPACE || exit 1
#---------------------------
# builder macros
# openstack-ansible enables strict host key checking by default
export ANSIBLE_HOST_KEY_CHECKING=False
+# ensure the versions to checkout are set
+export OPENSTACK_OSA_VERSION=${OPENSTACK_OSA_VERSION:-master}
+export OPNFV_RELENG_VERSION=${OPNFV_RELENG_VERSION:-master}
+
+# log some info
+echo -e "\n"
+echo "***********************************************************************"
+echo "* *"
+echo "* Deploy OpenStack *"
+echo "* *"
+echo " openstack-ansible version: $OPENSTACK_OSA_VERSION"
+echo " releng version: $OPNFV_RELENG_VERSION"
+echo "* *"
+echo "***********************************************************************"
+echo -e "\n"
+# clone releng repo
+sudo git clone --quiet https://gerrit.opnfv.org/gerrit/releng /opt/releng
+cd /opt/releng && sudo git checkout --quiet $OPNFV_RELENG_VERSION
+echo "xci: using openstack-ansible commit"
+git show --oneline -s --pretty=format:'%h - %s (%cr) <%an>'
+
# display the nodes
+echo "xci: OpenStack nodes"
cd /opt/bifrost
source env-vars
ironic node-list
-virsh list
-
-# ensure the branches to use are set
-export OPNFV_BRANCH=${OPNFV_BRANCH:-master}
-export OPENSTACK_BRANCH=${OPENSTACK_BRANCH:-master}
-
-# clone releng repo
-sudo git clone -b $OPNFV_BRANCH https://gerrit.opnfv.org/gerrit/releng /opt/releng
# this script will be reused for promoting openstack-ansible versions and using
# promoted openstack-ansible versions as part of xci daily.
cd /opt/releng/prototypes/openstack-ansible/scripts
sudo -E ./osa-deploy.sh
+
+# log some info
+echo -e "\n"
+echo "***********************************************************************"
+echo "* *"
+echo "* OpenStack deployment is completed! *"
+echo "* *"
+echo "***********************************************************************"
+echo -e "\n"
# Fix up permissions
fix_ownership
-# ensure the branches to use are set
-export OPENSTACK_BRANCH=${OPENSTACK_BRANCH:-master}
-export OPNFV_BRANCH=${OPNFV_BRANCH:-master}
-sudo git clone -b $OPENSTACK_BRANCH https://git.openstack.org/openstack/bifrost /opt/bifrost
-sudo git clone -b $OPNFV_BRANCH https://gerrit.opnfv.org/gerrit/releng /opt/releng
+# ensure the versions to checkout are set
+export OPENSTACK_BIFROST_VERSION=${OPENSTACK_BIFROST_VERSION:-master}
+export OPNFV_RELENG_VERSION=${OPNFV_RELENG_VERSION:-master}
+
+# log some info
+echo -e "\n"
+echo "***********************************************************************"
+echo "* *"
+echo "* Provision OpenStack Nodes *"
+echo "* *"
+echo " bifrost version: $OPENSTACK_BIFROST_VERSION"
+echo " releng version: $OPNFV_RELENG_VERSION"
+echo "* *"
+echo "***********************************************************************"
+echo -e "\n"
+
+# clone the repos and checkout the versions
+sudo git clone --quiet https://git.openstack.org/openstack/bifrost /opt/bifrost
+cd /opt/bifrost && sudo git checkout --quiet $OPENSTACK_BIFROST_VERSION
+echo "xci: using bifrost commit"
+git show --oneline -s --pretty=format:'%h - %s (%cr) <%an>'
+
+sudo git clone --quiet https://gerrit.opnfv.org/gerrit/releng /opt/releng
+cd /opt/releng && sudo git checkout --quiet $OPNFV_RELENG_VERSION
+echo "xci: using releng commit"
+git show --oneline -s --pretty=format:'%h - %s (%cr) <%an>'
# this script will be reused for promoting bifrost versions and using
# promoted bifrost versions as part of xci daily.
source env-vars
ironic node-list
virsh list
+
+# log some info
+echo -e "\n"
+echo "***********************************************************************"
+echo "* *"
+echo "* OpenStack nodes are provisioned! *"
+echo "* *"
+echo "***********************************************************************"
+echo -e "\n"
from opnfv.utils import opnfv_logger as logger
logger = logger.Logger("SSH utils").getLogger()
+SSH_TIMEOUT = 60
def get_ssh_client(hostname,
client.load_system_host_keys()
client.connect(hostname,
username=username,
- pkey=key)
+ pkey=key,
+ timeout=SSH_TIMEOUT)
else:
client.connect(hostname,
username=username,
- password=password)
+ password=password,
+ timeout=SSH_TIMEOUT)
return client
except Exception as e:
self.proxy_ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.proxy_ssh.connect(jh_ip,
username=jh_user,
- password=jh_pass)
+ password=jh_pass,
+ timeout=SSH_TIMEOUT)
self.proxy_transport = self.proxy_ssh.get_transport()
def connect(self, hostname, port=22, username='root', password=None,
super(ProxyHopClient, self).connect(hostname,
username=username,
pkey=proxy_key,
- sock=self.proxy_channel)
+ sock=self.proxy_channel,
+ timeout=timeout)
os.remove(self.local_ssh_key)
except Exception as e:
logger.error(e)
BUILD_IMAGE=true
PROVISION_WAIT_TIMEOUT=${PROVISION_WAIT_TIMEOUT:-3600}
-# ensure the branch is set
-export OPENSTACK_BRANCH=${OPENSTACK_BRANCH:-master}
-
# ensure the right inventory files is used based on branch
-if [ $OPENSTACK_BRANCH = "master" ]; then
+CURRENT_BIFROST_BRANCH=$(git rev-parse --abbrev-ref HEAD)
+if [ $CURRENT_BIFROST_BRANCH = "master" ]; then
export BIFROST_INVENTORY_SOURCE=${BIFROST_INVENTORY_SOURCE:-'/tmp/baremetal.json'}
else
export BIFROST_INVENTORY_SOURCE=${BIFROST_INVENTORY_SOURCE:-'/tmp/baremetal.csv'}
creates: /root/.ssh/id_rsa
- name: fetch public key
fetch: src="/root/.ssh/id_rsa.pub" dest="/"
- - name: remove the directory
- shell: "rm -rf {{OSA_PATH}} {{OSA_ETC_PATH}}"
- - name: git openstack ansible
- shell: "git clone {{OSA_URL}} {{OSA_PATH}} -b {{OPENSTACK_BRANCH}}"
+ - name: remove openstack-ansible directories
+ file:
+ path={{ item }}
+ state=absent
+ recurse=no
+ with_items:
+ - "{{OSA_PATH}}"
+ - "{{OSA_ETC_PATH}}"
+ - name: clone openstack-ansible
+ git:
+ repo: "{{OSA_URL}}"
+ dest: "{{OSA_PATH}}"
+ version: "{{OPENSTACK_OSA_VERSION}}"
- name: copy opnfv-setup-openstack.yml to /opt/openstack-ansible/playbooks
copy:
src: ../file/opnfv-setup-openstack.yml
OSA_URL: https://git.openstack.org/openstack/openstack-ansible
OSA_PATH: /opt/openstack-ansible
OSA_ETC_PATH: /etc/openstack_deploy
-OPENSTACK_BRANCH: "{{ lookup('env','OPENSTACK_BRANCH') }}"
+OPENSTACK_OSA_VERSION: "{{ lookup('env','OPENSTACK_OSA_VERSION') }}"
XCIMASTER_IP: 192.168.122.2
host_info: {'xcimaster':{'MGMT_IP': '172.29.236.10','VLAN_IP': '192.168.122.2', 'STORAGE_IP': '172.29.244.10'},'controller00':{'MGMT_IP': '172.29.236.11','VLAN_IP': '192.168.122.3', 'STORAGE_IP': '172.29.244.11'},'controller01':{'MGMT_IP': '172.29.236.12','VLAN_IP': '192.168.122.4', 'STORAGE_IP': '172.29.244.12'},'controller02':{'MGMT_IP': '172.29.236.13','VLAN_IP': '192.168.122.5', 'STORAGE_IP': '172.29.240.13'},'compute00':{'MGMT_IP': '172.29.236.14','VLAN_IP': '192.168.122.6','VLAN_IP_SECOND': '173.29.241.1','VXLAN_IP': '172.29.240.14', 'STORAGE_IP': '172.29.244.14'},'compute01':{'MGMT_IP': '172.29.236.15','VLAN_IP': '192.168.122.7','VLAN_IP_SECOND': '173.29.241.2','VXLAN_IP': '172.29.240.15', 'STORAGE_IP': '172.29.244.15'}}
cp -fr 3rd_party/static opnfv_testapi/tornado_swagger
python setup.py install
rm -fr opnfv_testapi/tornado_swagger/static
+if [ ! -z "$VIRTUAL_ENV" ]; then
+ sed -i -e 's#etc/opnfv_testapi =#/etc/opnfv_testapi =#g' setup.cfg
+fi
\ No newline at end of file
"""
def __init__(self):
- self._default_config_location = "/etc/opnfv_testapi/config.ini"
+ self._set_default_config()
self.mongo_url = None
self.mongo_dbname = None
self.api_port = None
self._parser = None
self.swagger_base_url = None
+ def _set_default_config(self):
+ venv = os.getenv('VIRTUAL_ENV')
+ self._default_config = os.path.join('/' if not venv else venv,
+ 'etc/opnfv_testapi/config.ini')
+
def _get_parameter(self, section, param):
try:
return self._parser.get(section, param)
obj = APIConfig()
if config_location is None:
- config_location = obj._default_config_location
+ config_location = obj._default_config
if not os.path.exists(config_location):
raise ParseError("%s not found" % config_location)
raise gen.Return(ret)
return wrapper
- @web.asynchronous
- @gen.coroutine
@authenticate
def _create(self, miss_checks, db_checks, **kwargs):
"""
.format(query, self.table))
self.finish_request(self.format_data(data))
- @web.asynchronous
- @gen.coroutine
@authenticate
def _delete(self, query):
data = yield self._eval_db_find_one(query)
yield self._eval_db(self.table, 'remove', query)
self.finish_request()
- @web.asynchronous
- @gen.coroutine
@authenticate
def _update(self, query, db_keys):
if self.json_args is None:
echo "Running unit tests..."
# Creating virtual environment
-virtualenv $SCRIPTDIR/testapi_venv
-source $SCRIPTDIR/testapi_venv/bin/activate
+if [ ! -z $VIRTUAL_ENV ]; then
+ venv=$VIRTUAL_ENV
+else
+ venv=$SCRIPTDIR/.venv
+ virtualenv $venv
+fi
+source $venv/bin/activate
# Install requirements
pip install -r $SCRIPTDIR/requirements.txt
-pip install coverage
-pip install nose>=1.3.1
-pip install pytest
-pip install mock
+pip install -r $SCRIPTDIR/test-requirements.txt
find . -type f -name "*.pyc" -delete
# of appearance. Changing the order has an impact on the overall integration
# process, which may cause wedges in the gate later.
-tox
mock
pytest
-pytest-cov
coverage
-pykwalify
-pip_check_reqs
+nose>=1.3.1