# settings for virtual deployment
DEPLOY_CMD="${DEPLOY_CMD} -v"
if [[ "${DEPLOY_SCENARIO}" =~ fdio|ovs ]]; then
- DEPLOY_CMD="${DEPLOY_CMD} --virtual-default-ram 14 --virtual-compute-ram 8"
+ DEPLOY_CMD="${DEPLOY_CMD} --virtual-default-ram 14 --virtual-compute-ram 6"
fi
if [[ "$JOB_NAME" == *csit* ]]; then
DEPLOY_CMD="${DEPLOY_CMD} -e csit-environment.yaml"
while [[ $try_to_rm -lt 6 ]]; do
gsutil -m rm -r $BIFROST_GS_URL && _exitcode=$? && break
_exitcode=$?
- echo "gsutil rm failed! Trying again... (attempt #$i)"
+ echo "gsutil rm failed! Trying again... (attempt #$try_to_rm)"
let try_to_rm += 1
# Give it some time...
sleep 10
cd $WORKSPACE/prototypes/xci
sudo -E ./xci-deploy.sh
-# if we arrived here without failing, it means we have something we can pin
-# this is again here to show the intention
-cd $WORKSPACE/openstack-ansible
-OSA_GIT_SHA1=$(git rev-parse HEAD)
+if [[ "$JOB_NAME" =~ "periodic" && "$OPENSTACK_OSA_VERSION" == "master" ]]; then
+ # if we arrived here without failing, it means we have something we can pin
+ # this is again here to show the intention
+ cd $WORKSPACE/openstack-ansible
+ OSA_GIT_SHA1=$(git rev-parse HEAD)
-# log some info
-echo -e "\n"
-echo "***********************************************************************"
-echo "* OSA SHA1 TO PIN *"
-echo "* *"
-echo " $OSA_GIT_SHA1"
-echo "* *"
-echo "***********************************************************************"
+ # log some info
+ echo -e "\n"
+ echo "***********************************************************************"
+ echo "* OSA SHA1 TO PIN *"
+ echo "* *"
+ echo " $OSA_GIT_SHA1"
+ echo "* *"
+ echo "***********************************************************************"
+fi
echo -e "\n"
--- /dev/null
+#!/usr/bin/env python
+
+# Copyright (c) 2017 HUAWEI TECHNOLOGIES CO.,LTD 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 netaddr
+import re
+
+from opnfv.deployment import manager
+from opnfv.utils import opnfv_logger as logger
+from opnfv.utils import ssh_utils
+
+logger = logger.Logger(__name__).getLogger()
+
+
+class CompassAdapter(manager.DeploymentHandler):
+
+ def __init__(self, installer_ip, installer_user, installer_pwd):
+ super(CompassAdapter, self).__init__(installer='compass',
+ installer_ip=installer_ip,
+ installer_user=installer_user,
+ installer_pwd=installer_pwd,
+ pkey_file=None)
+
+ def get_nodes(self, options=None):
+ nodes = []
+ self.deployment_status = None
+ self.nodes_dict = self._get_deployment_nodes()
+ self.deployment_status = self.get_deployment_status()
+
+ for k, v in self.nodes_dict.iteritems():
+ node = manager.Node(v['id'], v['ip'],
+ k, v['status'],
+ v['roles'], v['ssh_client'], v['mac'])
+ nodes.append(node)
+
+ self.get_nodes_called = True
+ return nodes
+
+ def get_openstack_version(self):
+ version = None
+ cmd = 'source /opt/admin-openrc.sh;nova-manage version 2>/dev/null'
+ version = next(node.run_cmd(cmd) for node in self.nodes
+ if node.is_controller())
+ return version
+
+ def get_sdn_version(self):
+ for node in self.nodes:
+ if node.is_odl():
+ sdn_info = self._get_sdn_info(node, manager.Role.ODL)
+ break
+ elif node.is_onos():
+ sdn_info = self._get_sdn_info(node, manager.Role.ONOS)
+ break
+ else:
+ sdn_info = None
+ return sdn_info
+
+ def _get_sdn_info(self, node, sdn_type):
+ if sdn_type == manager.Role.ODL:
+ sdn_key = 'distribution-karaf'
+ elif sdn_type == manager.Role.ONOS:
+ sdn_key = 'onos-'
+ else:
+ raise KeyError('SDN %s is not supported', sdn_type)
+
+ cmd = "find /opt -name '{0}*'".format(sdn_key)
+ sdn_info = node.run_cmd(cmd)
+ sdn_version = 'None'
+ if sdn_info:
+ # /opt/distribution-karaf-0.5.2-Boron-SR2.tar.gz
+ match_sdn = re.findall(r".*(0\.\d\.\d).*", sdn_info)
+ if (match_sdn and len(match_sdn) >= 1):
+ sdn_version = match_sdn[0]
+ sdn_version = '{0} {1}'.format(sdn_type, sdn_version)
+ return sdn_version
+
+ def get_deployment_status(self):
+ if self.deployment_status is not None:
+ logger.debug('Skip - Node status has been retrieved once')
+ return self.deployment_status
+
+ for k, v in self.nodes_dict.iteritems():
+ if manager.Role.CONTROLLER in v['roles']:
+ cmd = 'source /opt/admin-openrc.sh; nova hypervisor-list;'
+ '''
+ +----+---------------------+-------+---------+
+
+ | ID | Hypervisor hostname | State | Status |
+
+ +----+---------------------+-------+---------+
+
+ | 3 | host4 | up | enabled |
+
+ | 6 | host5 | up | enabled |
+
+ +----+---------------------+-------+---------+
+ '''
+ _, stdout, stderr = (v['ssh_client'].exec_command(cmd))
+ error = stderr.readlines()
+ if len(error) > 0:
+ logger.error("error %s" % ''.join(error))
+ status = manager.NodeStatus.STATUS_ERROR
+ v['status'] = status
+ continue
+
+ lines = stdout.readlines()
+ for i in range(3, len(lines) - 1):
+ fields = lines[i].strip().encode().rsplit(' | ')
+ hostname = fields[1].strip().encode().lower()
+ state = fields[2].strip().encode().lower()
+ if 'up' == state:
+ status = manager.NodeStatus.STATUS_OK
+ else:
+ status = manager.NodeStatus.STATUS_ERROR
+ self.nodes_dict[hostname]['status'] = status
+ v['status'] = manager.NodeStatus.STATUS_OK
+
+ failed_nodes = [k for k, v in self.nodes_dict.iteritems()
+ if v['status'] != manager.NodeStatus.STATUS_OK]
+
+ if failed_nodes and len(failed_nodes) > 0:
+ return 'Hosts {0} failed'.format(','.join(failed_nodes))
+
+ return 'active'
+
+ def _get_deployment_nodes(self):
+ sql_query = ('select host.host_id, host.roles, '
+ 'network.ip_int, machine.mac from clusterhost as host, '
+ 'host_network as network, machine as machine '
+ 'where host.host_id=network.host_id '
+ 'and host.id=machine.id;')
+ cmd = 'mysql -uroot -Dcompass -e "{0}"'.format(sql_query)
+ logger.debug('mysql command: %s', cmd)
+ output = self.installer_node.run_cmd(cmd)
+ '''
+ host_id roles ip_int mac
+ 1 ["controller", "ha", "odl", "ceph-adm", "ceph-mon"]
+ 167837746 00:00:e3:ee:a8:63
+ 2 ["controller", "ha", "odl", "ceph-mon"]
+ 167837747 00:00:31:1d:16:7a
+ 3 ["controller", "ha", "odl", "ceph-mon"]
+ 167837748 00:00:0c:bf:eb:01
+ 4 ["compute", "ceph-osd"] 167837749 00:00:d8:22:6f:59
+ 5 ["compute", "ceph-osd"] 167837750 00:00:75:d5:6b:9e
+ '''
+ lines = output.encode().rsplit('\n')
+ nodes_dict = {}
+ if (not lines or len(lines) < 2):
+ logger.error('No nodes are found in the deployment.')
+ return nodes_dict
+
+ proxy = {'ip': self.installer_ip,
+ 'username': self.installer_user,
+ 'password': self.installer_pwd}
+ for i in range(1, len(lines)):
+ fields = lines[i].strip().encode().rsplit('\t')
+ host_id = fields[0].strip().encode()
+ name = 'host{0}'.format(host_id)
+ node_roles = fields[1].strip().encode().lower()
+ node_roles = [manager.Role.ODL if x == 'odl'
+ else x for x in node_roles]
+ roles = [x for x in [manager.Role.CONTROLLER,
+ manager.Role.COMPUTE,
+ manager.Role.ODL,
+ manager.Role.ONOS] if x in node_roles]
+ ip = fields[2].strip().encode()
+ ip = str(netaddr.IPAddress(ip))
+ mac = fields[3].strip().encode()
+
+ nodes_dict[name] = {}
+ nodes_dict[name]['id'] = host_id
+ nodes_dict[name]['roles'] = roles
+ nodes_dict[name]['ip'] = ip
+ nodes_dict[name]['mac'] = mac
+ ssh_client = ssh_utils.get_ssh_client(hostname=ip,
+ username='root',
+ proxy=proxy)
+ nodes_dict[name]['ssh_client'] = ssh_client
+ nodes_dict[name]['status'] = manager.NodeStatus.STATUS_UNKNOWN
+ return nodes_dict
nodes = handler.get_nodes({'cluster': '4'})
for node in nodes:
print(node)
+
+
+print("########## COMPASS ##########")
+handler = factory.Factory.get_handler('compass',
+ '192.168.200.2',
+ 'root',
+ installer_pwd='root')
+
+print(handler.get_deployment_status())
+print(handler.get_deployment_info())
+print('Details of each node:')
+nodes = handler.nodes
+for node in nodes:
+ print(node)
from opnfv.deployment.apex import adapter as apex_adapter
+from opnfv.deployment.compass import adapter as compass_adapter
from opnfv.deployment.fuel import adapter as fuel_adapter
from opnfv.utils import opnfv_logger as logger
return fuel_adapter.FuelAdapter(installer_ip=installer_ip,
installer_user=installer_user,
installer_pwd=installer_pwd)
+ elif installer.lower() == "compass":
+ return compass_adapter.CompassAdapter(
+ installer_ip=installer_ip,
+ installer_user=installer_user,
+ installer_pwd=installer_pwd)
else:
raise Exception("Installer adapter is not implemented for "
"the given installer.")
STATUS_OFFLINE = 'offline'
STATUS_ERROR = 'error'
STATUS_UNUSED = 'unused'
+ STATUS_UNKNOWN = 'unknown'
class Node(object):
'''
return Role.ODL in self.roles
+ def is_onos(self):
+ '''
+ Returns if the node is an ONOS
+ '''
+ return Role.ONOS in self.roles
+
def get_ovs_info(self):
'''
Returns the ovs version installed
pod=os.getenv('NODE_NAME', 'Unknown'),
openstack_version=self.get_openstack_version(),
sdn_controller=self.get_sdn_version(),
- nodes=self.get_nodes())
+ nodes=self.nodes)
#-------------------------------------------------------------------------------
# use releng from master until the development work with the sandbox is complete
export OPNFV_RELENG_VERSION="master"
-# HEAD of "master" as of 28.03.2017
-export OPENSTACK_BIFROST_VERSION=${OPENSTACK_BIFROST_VERSION:-"2600d546ed7116f5aad81972b0987a269f3c45b4"}
-# HEAD of "master" as of 26.03.2017
-export OPENSTACK_OSA_VERSION=${OPENSTACK_OSA_VERSION:-"baba7b317a5898cd73b4a11c4ce364c7e2d3d77f"}
+# HEAD of "master" as of 04.04.2017
+export OPENSTACK_BIFROST_VERSION=${OPENSTACK_BIFROST_VERSION:-"6109f824e5510e794dbf1968c3859e8b6356d280"}
+# HEAD of "master" as of 04.04.2017
+export OPENSTACK_OSA_VERSION=${OPENSTACK_OSA_VERSION:-"d9e1330c7ff9d72a604b6b4f3af765f66a01b30e"}
--- /dev/null
+#########################
+OPNFV XCI Developer Guide
+#########################
+
+This document will contain details about the XCI and how things are put
+together in order to support different flavors and different distros in future.
+
+Document is for anyone who will
+
+- do hands on development with XCI such as new features to XCI itself or
+ bugfixes
+- integrate new features
+- want to know what is going on behind the scenes
+
+It will also have guidance regarding how to develop for the sandbox.
+
+If you are looking for User's Guide, please check README.rst in the root of
+xci folder or take a look at
+`Wiki <https://wiki.opnfv.org/display/INF/OpenStack>`_.
+
+===================================
+Components of XCI Developer Sandbox
+===================================
+
+TBD
+
+=============
+Detailed Flow
+=============
+
+TBD
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
+# these versions are extracted based on the osa commit d9e1330c7ff9d72a604b6b4f3af765f66a01b30e on 04.04.2017
+# https://review.openstack.org/gitweb?p=openstack/openstack-ansible.git;a=commit;h=d9e1330c7ff9d72a604b6b4f3af765f66a01b30e
- name: apt_package_pinning
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-apt_package_pinning
- version: master
+ version: 364fc9fcd8ff652546c13d9c20ac808bc0e35f66
- name: pip_install
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-pip_install
- version: master
+ version: 793ae4d01397bd91ebe18e9670e8e27d1ae91960
- name: galera_client
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-galera_client
- version: master
+ version: c093c13e01826da545bf9a0259e0be441bc1b5e1
- name: galera_server
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-galera_server
- version: master
+ version: fd0a6b104a32badbe7e7594e2c829261a53bfb11
- name: ceph_client
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-ceph_client
- version: master
+ version: 9149bfa8e3c4284b656834ba7765ea3aa48bec2e
- name: haproxy_server
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-haproxy_server
- version: master
+ version: 32415ab81c61083ac5a83b65274703e4a5470e5e
- name: keepalived
scm: git
src: https://github.com/evrardjp/ansible-keepalived
- version: master
+ version: 4f7c8eb16e3cbd8c8748f126c1eea73db5c8efe9
- name: lxc_container_create
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-lxc_container_create
- version: master
+ version: 097da38126d90cfca36cdc3955aaf658a00db599
- name: lxc_hosts
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-lxc_hosts
- version: master
+ version: 2931d0c87a1c592ad7f1f2f83cdcf468e8dea932
- name: memcached_server
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-memcached_server
- version: master
+ version: 58e17aa13ebe7b0aa5da7c00afc75d6716d2720d
- name: openstack-ansible-security
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-security
- version: master
+ version: 9d745ec4fe8ac3e6d6cbb2412abe5196a9d2dad7
- name: openstack_hosts
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-openstack_hosts
- version: master
+ version: 2076dfddf418b1bdd64d3782346823902aa996bc
- name: os_keystone
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-os_keystone
- version: master
+ version: cee7a02143a1826479e6444c6fb5f1c2b6074ab7
- name: openstack_openrc
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-openstack_openrc
- version: master
+ version: fb98ad8d7bfe7fba0c964cb061313f1b8767c4b0
- name: os_aodh
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-os_aodh
- version: master
+ version: 9dcacb8fd6feef02e485f99c83535707ae67876b
- name: os_barbican
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-os_barbican
- version: master
+ version: bb3f39cb2f3c31c6980aa65c8953ff6293b992c0
- name: os_ceilometer
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-os_ceilometer
- version: master
+ version: 178ad8245fa019f0610c628c58c377997b011e8a
- name: os_cinder
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-os_cinder
- version: master
+ version: 1321fd39d8f55d1dc3baf91b4194469b349d7dc4
- name: os_glance
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-os_glance
- version: master
+ version: f39ef212bfa2edff8334bfb632cc463001c77c11
- name: os_gnocchi
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-os_gnocchi
- version: master
+ version: 318bd76e5e72402e8ff5b372b469c27a9395341b
- name: os_heat
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-os_heat
- version: master
+ version: 07d59ddb757b2d2557fba52ac537803e646e65b4
- name: os_horizon
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-os_horizon
- version: master
+ version: 69ef49c4f7a42f082f4bcff824d13f57145e2b83
- name: os_ironic
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-os_ironic
- version: master
+ version: 57e8a0eaaa2159f33e64a1b037180383196919d1
- name: os_magnum
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-os_magnum
- version: master
+ version: 8329c257dff25686827bd1cc904506d76ad1d12f
- name: os_trove
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-os_trove
- version: master
+ version: b948402c76d6188caa7be376098354cdb850d638
- name: os_neutron
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-os_neutron
- version: master
+ version: 2a92a4e1857e7457683aefd87ee5a4e751fc701a
- name: os_nova
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-os_nova
- version: master
+ version: 511963b7921ec7c2db24e8ee1d71a940b0aafae4
- name: os_rally
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-os_rally
- version: master
+ version: 96153c5b3285d11d00611a03135c9d8f267e0f52
- name: os_sahara
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-os_sahara
- version: master
+ version: 012d3f3530f878e5143d58380f94d1f514baad04
- name: os_swift
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-os_swift
- version: master
+ version: d62d6a23ac0b01d0320dbcb6c710dfd5f3cecfdf
- name: os_tempest
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-os_tempest
- version: master
+ version: 9d2bfb09d1ebbc9102329b0d42de33aa321e57b1
- name: plugins
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-plugins
- version: master
+ version: 3d2e23bb7e1d6775789d7f65ce8a878a7ee1d3c7
- name: rabbitmq_server
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-rabbitmq_server
- version: master
+ version: 9b0ce64fe235705e237bc4b476ecc0ad602d67a8
- name: repo_build
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-repo_build
- version: master
+ version: fe3ae20f74a912925d5c78040984957a6d55f9de
- name: repo_server
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-repo_server
- version: master
+ version: 7ea0820e0941282cd5c5cc263e939ffbee54ba52
- name: rsyslog_client
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-rsyslog_client
- version: master
+ version: 19615e47137eee46ee92c0308532fe1d2212333c
- name: rsyslog_server
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-rsyslog_server
- version: master
+ version: efd7b21798da49802012e390a0ddf7cc38636eeb
- name: sshd
scm: git
src: https://github.com/willshersystems/ansible-sshd
- version: master
+ version: 426e11c4dffeca09fcc4d16103a91e5e65180040
- name: bird
scm: git
src: https://github.com/logan2211/ansible-bird
- version: master
+ version: 2c4d29560d3617abddf0e63e0c95536364dedd92
- name: etcd
scm: git
src: https://github.com/logan2211/ansible-etcd
- version: master
+ version: ef63b0c5fd352b61084fd5aca286ee7f3fea932b
- name: unbound
scm: git
src: https://github.com/logan2211/ansible-unbound
- version: master
+ version: 5329d03eb9c15373d648a801563087c576bbfcde
- name: resolvconf
scm: git
src: https://github.com/logan2211/ansible-resolvconf
- version: master
+ version: 3b2b7cf2e900b194829565b351bf32bb63954548
- name: os_designate
scm: git
src: https://git.openstack.org/openstack/openstack-ansible-os_designate
- version: master
+ version: b7098a6bdea73c869f45a86e0cc78d21b032161e
- name: ceph.ceph-common
scm: git
src: https://github.com/ceph/ansible-ceph-common
- version: master
+ version: ef149767fa9565ec887f0bdb007ff752bd61e5d5
- name: ceph.ceph-docker-common
scm: git
src: https://github.com/ceph/ansible-ceph-docker-common
- version: master
+ version: ca86fd0ef6d24aa2c750a625acdcb8012c374aa0
- name: ceph-mon
scm: git
src: https://github.com/ceph/ansible-ceph-mon
- version: master
+ version: c5be4d6056dfe6a482ca3fcc483a6050cc8929a1
- name: ceph-osd
scm: git
src: https://github.com/ceph/ansible-ceph-osd
- version: master
-- name: os_octavia
- scm: git
- src: https://git.openstack.org/openstack/openstack-ansible-os_octavia
- version: master
-- name: os_molteniron
- scm: git
- src: https://git.openstack.org/openstack/openstack-ansible-os_molteniron
- version: master
+ version: 7bc5a61ceb96e487b7a9fe9643f6dafa6492f2b5
- include: os-horizon-install.yml
- include: os-ceilometer-install.yml
- include: os-aodh-install.yml
-- include: os-designate-install.yml
#NOTE(stevelle) Ensure Gnocchi identities exist before Swift
- include: os-gnocchi-install.yml
when:
ansible-playbook $ANSIBLE_VERBOSITY -i inventory provision-vm-nodes.yml
echo "-----------------------------------------------------------------------"
echo "Info: VM nodes are provisioned!"
-
+source $OPENSTACK_BIFROST_PATH/env-vars
+ironic node-list
+echo
#-------------------------------------------------------------------------------
# Configure localhost
#-------------------------------------------------------------------------------