Compare commits
56 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6e50bc7874 | |||
| 7f1025e932 | |||
| 052d7f2442 | |||
| bfd3d9cd0d | |||
| 302ede617a | |||
| 92f3324aa3 | |||
| 0b25592182 | |||
| 671fa2b94f | |||
| c431116ceb | |||
| ad6cc52c74 | |||
| 4acdb97d27 | |||
| 8cd4e9a907 | |||
| 721d8c8bb5 | |||
| 3b404dfb9b | |||
| 6e0a5f86a8 | |||
| 85dcb9ef83 | |||
| 8599320654 | |||
| ea0ad02e5f | |||
| 0b596470c8 | |||
| 44dfe503af | |||
| c97d29054e | |||
| a855618447 | |||
| 481019fb4c | |||
| 67681de411 | |||
| 11c5aa8328 | |||
| f0d1896d0a | |||
| b89e9d2111 | |||
| 03d90d452c | |||
| d86f3dbc89 | |||
| d4e22d2ab1 | |||
| ed120e335f | |||
| 9ffa9aa53b | |||
| 24e1daa1dd | |||
| 64574eb6f1 | |||
| 4138b301fb | |||
| eb21321d60 | |||
| d4967bbefa | |||
| ff3c88628b | |||
| 77561e7e17 | |||
| 9c1b7a5e6a | |||
| 5b54c003db | |||
| 8f19275ec6 | |||
| 4f97c8a656 | |||
| f22c497c23 | |||
| 1b2408b4f3 | |||
| 8c095a4bcf | |||
| f165ad4920 | |||
| 3e8cd1b67d | |||
| 02d5055916 | |||
| 5841e361c6 | |||
| 14782ceb6d | |||
| 40047adf00 | |||
| 624e90ee22 | |||
| a1d95322f1 | |||
| 6268947823 | |||
| 928617aa70 |
+3
-2
@@ -1,4 +1,5 @@
|
||||
[gerrit]
|
||||
host=review.openstack.org
|
||||
host=review.opendev.org
|
||||
port=29418
|
||||
project=openstack-dev/devstack.git
|
||||
project=openstack/devstack.git
|
||||
defaultbranch=stable/rocky
|
||||
|
||||
+134
-138
@@ -8,46 +8,6 @@
|
||||
nodes:
|
||||
- controller
|
||||
|
||||
- nodeset:
|
||||
name: devstack-single-node-centos-7
|
||||
nodes:
|
||||
- name: controller
|
||||
label: centos-7
|
||||
groups:
|
||||
- name: tempest
|
||||
nodes:
|
||||
- controller
|
||||
|
||||
- nodeset:
|
||||
name: devstack-single-node-opensuse-423
|
||||
nodes:
|
||||
- name: controller
|
||||
label: opensuse-423
|
||||
groups:
|
||||
- name: tempest
|
||||
nodes:
|
||||
- controller
|
||||
|
||||
- nodeset:
|
||||
name: devstack-single-node-opensuse-tumbleweed
|
||||
nodes:
|
||||
- name: controller
|
||||
label: opensuse-tumbleweed
|
||||
groups:
|
||||
- name: tempest
|
||||
nodes:
|
||||
- controller
|
||||
|
||||
- nodeset:
|
||||
name: devstack-single-node-fedora-latest
|
||||
nodes:
|
||||
- name: controller
|
||||
label: fedora-28
|
||||
groups:
|
||||
- name: tempest
|
||||
nodes:
|
||||
- controller
|
||||
|
||||
- nodeset:
|
||||
name: openstack-two-node
|
||||
nodes:
|
||||
@@ -93,10 +53,10 @@
|
||||
job.group-vars.peers, which is what is used by multi node jobs for subnode
|
||||
nodes (everything but the controller).
|
||||
required-projects:
|
||||
- git.openstack.org/openstack-dev/devstack
|
||||
- opendev.org/openstack/devstack
|
||||
roles:
|
||||
- zuul: git.openstack.org/openstack-infra/devstack-gate
|
||||
- zuul: git.openstack.org/openstack-infra/openstack-zuul-jobs
|
||||
- zuul: opendev.org/openstack/devstack-gate
|
||||
- zuul: opendev.org/openstack/openstack-zuul-jobs
|
||||
vars:
|
||||
devstack_localrc:
|
||||
DATABASE_PASSWORD: secretdatabase
|
||||
@@ -120,46 +80,46 @@
|
||||
# Ignore any default set by devstack. Emit a "disable_all_services".
|
||||
base: false
|
||||
zuul_copy_output:
|
||||
'{{ devstack_conf_dir }}/local.conf': 'logs'
|
||||
'{{ devstack_conf_dir }}/localrc': 'logs'
|
||||
'{{ devstack_conf_dir }}/.localrc.auto': 'logs'
|
||||
'{{ devstack_conf_dir }}/.stackenv': 'logs'
|
||||
'{{ devstack_log_dir }}/dstat-csv.log': 'logs'
|
||||
'{{ devstack_log_dir }}/devstacklog.txt': 'logs'
|
||||
'{{ devstack_log_dir }}/devstacklog.txt.summary': 'logs'
|
||||
'{{ devstack_full_log}}': 'logs'
|
||||
'{{ stage_dir }}/verify_tempest_conf.log': 'logs'
|
||||
'{{ stage_dir }}/apache': 'logs'
|
||||
'{{ stage_dir }}/apache_config': 'logs'
|
||||
'{{ stage_dir }}/etc': 'logs'
|
||||
'/var/log/rabbitmq': 'logs'
|
||||
'/var/log/postgresql': 'logs'
|
||||
'/var/log/mysql.err': 'logs'
|
||||
'/var/log/mysql.log': 'logs'
|
||||
'/var/log/libvirt': 'logs'
|
||||
'/etc/sudoers': 'logs'
|
||||
'/etc/sudoers.d': 'logs'
|
||||
'{{ stage_dir }}/iptables.txt': 'logs'
|
||||
'{{ stage_dir }}/df.txt': 'logs'
|
||||
'{{ stage_dir }}/pip2-freeze.txt': 'logs'
|
||||
'{{ stage_dir }}/pip3-freeze.txt': 'logs'
|
||||
'{{ stage_dir }}/dpkg-l.txt': 'logs'
|
||||
'{{ stage_dir }}/rpm-qa.txt': 'logs'
|
||||
'{{ stage_dir }}/core': 'logs'
|
||||
'{{ stage_dir }}/listen53.txt': 'logs'
|
||||
'{{ stage_dir }}/deprecations.log': 'logs'
|
||||
'/var/log/ceph': 'logs'
|
||||
'/var/log/openvswitch': 'logs'
|
||||
'/var/log/glusterfs': 'logs'
|
||||
'/etc/glusterfs/glusterd.vol': 'logs'
|
||||
'/etc/resolv.conf': 'logs'
|
||||
'/var/log/unbound.log': 'logs'
|
||||
'{{ devstack_conf_dir }}/local.conf': logs
|
||||
'{{ devstack_conf_dir }}/localrc': logs
|
||||
'{{ devstack_conf_dir }}/.localrc.auto': logs
|
||||
'{{ devstack_conf_dir }}/.stackenv': logs
|
||||
'{{ devstack_log_dir }}/dstat-csv.log': logs
|
||||
'{{ devstack_log_dir }}/devstacklog.txt': logs
|
||||
'{{ devstack_log_dir }}/devstacklog.txt.summary': logs
|
||||
'{{ devstack_full_log}}': logs
|
||||
'{{ stage_dir }}/verify_tempest_conf.log': logs
|
||||
'{{ stage_dir }}/apache': logs
|
||||
'{{ stage_dir }}/apache_config': logs
|
||||
'{{ stage_dir }}/etc': logs
|
||||
/var/log/rabbitmq: logs
|
||||
/var/log/postgresql: logs
|
||||
/var/log/mysql.err: logs
|
||||
/var/log/mysql.log: logs
|
||||
/var/log/libvirt: logs
|
||||
/etc/sudoers: logs
|
||||
/etc/sudoers.d: logs
|
||||
'{{ stage_dir }}/iptables.txt': logs
|
||||
'{{ stage_dir }}/df.txt': logs
|
||||
'{{ stage_dir }}/pip2-freeze.txt': logs
|
||||
'{{ stage_dir }}/pip3-freeze.txt': logs
|
||||
'{{ stage_dir }}/dpkg-l.txt': logs
|
||||
'{{ stage_dir }}/rpm-qa.txt': logs
|
||||
'{{ stage_dir }}/core': logs
|
||||
'{{ stage_dir }}/listen53.txt': logs
|
||||
'{{ stage_dir }}/deprecations.log': logs
|
||||
/var/log/ceph: logs
|
||||
/var/log/openvswitch: logs
|
||||
/var/log/glusterfs: logs
|
||||
/etc/glusterfs/glusterd.vol: logs
|
||||
/etc/resolv.conf: logs
|
||||
/var/log/unbound.log: logs
|
||||
extensions_to_txt:
|
||||
conf: True
|
||||
log: True
|
||||
localrc: True
|
||||
stackenv: True
|
||||
auto: True
|
||||
conf: true
|
||||
log: true
|
||||
localrc: true
|
||||
stackenv: true
|
||||
auto: true
|
||||
group-vars:
|
||||
subnode:
|
||||
devstack_localrc:
|
||||
@@ -201,13 +161,13 @@
|
||||
less than the normal minimum set of required-projects.
|
||||
nodeset: openstack-single-node
|
||||
required-projects:
|
||||
- git.openstack.org/openstack/requirements
|
||||
- opendev.org/openstack/requirements
|
||||
vars:
|
||||
devstack_localrc:
|
||||
# Multinode specific settings
|
||||
SERVICE_HOST: "{{ hostvars['controller']['nodepool']['private_ipv4'] }}"
|
||||
HOST_IP: "{{ hostvars['controller']['nodepool']['private_ipv4'] }}"
|
||||
PUBLIC_BRIDGE_MTU: "{{ external_bridge_mtu }}"
|
||||
PUBLIC_BRIDGE_MTU: '{{ external_bridge_mtu }}'
|
||||
devstack_services:
|
||||
# Shared services
|
||||
dstat: true
|
||||
@@ -225,7 +185,7 @@
|
||||
# Multinode specific settings
|
||||
HOST_IP: "{{ hostvars[inventory_hostname]['nodepool']['private_ipv4'] }}"
|
||||
SERVICE_HOST: "{{ hostvars['controller']['nodepool']['private_ipv4'] }}"
|
||||
PUBLIC_BRIDGE_MTU: "{{ external_bridge_mtu }}"
|
||||
PUBLIC_BRIDGE_MTU: '{{ external_bridge_mtu }}'
|
||||
# Subnode specific settings
|
||||
DATABASE_TYPE: mysql
|
||||
RABBIT_HOST: "{{ hostvars['controller']['nodepool']['private_ipv4'] }}"
|
||||
@@ -260,12 +220,12 @@
|
||||
and extended.
|
||||
nodeset: openstack-single-node
|
||||
required-projects:
|
||||
- git.openstack.org/openstack/cinder
|
||||
- git.openstack.org/openstack/glance
|
||||
- git.openstack.org/openstack/keystone
|
||||
- git.openstack.org/openstack/neutron
|
||||
- git.openstack.org/openstack/nova
|
||||
- git.openstack.org/openstack/swift
|
||||
- opendev.org/openstack/cinder
|
||||
- opendev.org/openstack/glance
|
||||
- opendev.org/openstack/keystone
|
||||
- opendev.org/openstack/neutron
|
||||
- opendev.org/openstack/nova
|
||||
- opendev.org/openstack/swift
|
||||
timeout: 7200
|
||||
vars:
|
||||
devstack_localrc:
|
||||
@@ -274,7 +234,7 @@
|
||||
SWIFT_START_ALL_SERVICES: false
|
||||
SWIFT_HASH: 1234123412341234
|
||||
CINDER_PERIODIC_INTERVAL: 10
|
||||
DEBUG_LIBVIRT_COREDUMPS: True
|
||||
DEBUG_LIBVIRT_COREDUMPS: true
|
||||
NOVA_VNC_ENABLED: true
|
||||
VNCSERVER_LISTEN: 0.0.0.0
|
||||
VNCSERVER_PROXYCLIENT_ADDRESS: $HOST_IP
|
||||
@@ -282,7 +242,7 @@
|
||||
post-config:
|
||||
$NEUTRON_CONF:
|
||||
DEFAULT:
|
||||
global_physnet_mtu: "{{ external_bridge_mtu }}"
|
||||
global_physnet_mtu: '{{ external_bridge_mtu }}'
|
||||
devstack_services:
|
||||
# Core services enabled for this branch.
|
||||
# This list replaces the test-matrix.
|
||||
@@ -354,7 +314,10 @@
|
||||
n-cpu: true
|
||||
placement-client: true
|
||||
# Neutron services
|
||||
neutron-agent: true
|
||||
# We need to keep using the neutron-legacy based services for
|
||||
# now until all issues with the new lib/neutron code are solved
|
||||
q-agt: true
|
||||
# neutron-agent: true
|
||||
# Cinder services
|
||||
c-bak: true
|
||||
c-vol: true
|
||||
@@ -383,38 +346,6 @@
|
||||
Simple multinode test to verify multinode functionality on devstack side.
|
||||
This is not meant to be used as a parent job.
|
||||
|
||||
# NOTE(ianw) Platform tests have traditionally been non-voting because
|
||||
# we often have to rush things through devstack to stabilise the gate,
|
||||
# and these platforms don't have the round-the-clock support to avoid
|
||||
# becoming blockers in that situation.
|
||||
- job:
|
||||
name: devstack-platform-centos-7
|
||||
parent: tempest-full
|
||||
description: Centos 7 platform test
|
||||
nodeset: devstack-single-node-centos-7
|
||||
voting: false
|
||||
|
||||
- job:
|
||||
name: devstack-platform-opensuse-423
|
||||
parent: tempest-full
|
||||
description: openSUSE 43.2 platform test
|
||||
nodeset: devstack-single-node-opensuse-423
|
||||
voting: false
|
||||
|
||||
- job:
|
||||
name: devstack-platform-opensuse-tumbleweed
|
||||
parent: tempest-full
|
||||
description: openSUSE Tumbleweed platform test
|
||||
nodeset: devstack-single-node-opensuse-tumbleweed
|
||||
voting: false
|
||||
|
||||
- job:
|
||||
name: devstack-platform-fedora-latest
|
||||
parent: tempest-full
|
||||
description: Fedora latest platform test
|
||||
nodeset: devstack-single-node-fedora-latest
|
||||
voting: false
|
||||
|
||||
- job:
|
||||
name: devstack-tox-base
|
||||
parent: devstack
|
||||
@@ -471,6 +402,7 @@
|
||||
|
||||
- job:
|
||||
name: devstack-unit-tests
|
||||
nodeset: ubuntu-xenial
|
||||
description: |
|
||||
Runs unit tests on devstack project.
|
||||
|
||||
@@ -479,19 +411,59 @@
|
||||
run: playbooks/unit-tests/run.yaml
|
||||
|
||||
- project:
|
||||
templates:
|
||||
- integrated-gate
|
||||
- integrated-gate-py35
|
||||
- publish-openstack-sphinx-docs
|
||||
check:
|
||||
jobs:
|
||||
- devstack
|
||||
- devstack-platform-centos-7
|
||||
- devstack-platform-opensuse-423
|
||||
- devstack-platform-opensuse-tumbleweed
|
||||
- devstack-platform-fedora-latest
|
||||
- devstack-multinode
|
||||
- tempest-full:
|
||||
voting: false
|
||||
- tempest-full-py3:
|
||||
voting: false
|
||||
- devstack:
|
||||
voting: false
|
||||
- devstack-multinode:
|
||||
voting: false
|
||||
- devstack-unit-tests
|
||||
- openstack-tox-bashate
|
||||
- swift-dsvm-functional:
|
||||
voting: false
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
- neutron-grenade:
|
||||
voting: false
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
- neutron-grenade-multinode:
|
||||
voting: false
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
- neutron-tempest-linuxbridge:
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
- tempest-multinode-full:
|
||||
voting: false
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
gate:
|
||||
jobs:
|
||||
- devstack
|
||||
- tempest-full:
|
||||
voting: false
|
||||
- tempest-full-py3:
|
||||
voting: false
|
||||
# - devstack
|
||||
- devstack-unit-tests
|
||||
- openstack-tox-bashate
|
||||
- neutron-tempest-linuxbridge:
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
# Please add a note on each job and conditions for the job not
|
||||
# being experimental any more, so we can keep this list somewhat
|
||||
# pruned.
|
||||
@@ -513,11 +485,35 @@
|
||||
|
||||
experimental:
|
||||
jobs:
|
||||
- nova-cells-v1:
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
- nova-next
|
||||
- neutron-fullstack-with-uwsgi
|
||||
- neutron-functional-with-uwsgi
|
||||
- neutron-tempest-with-uwsgi
|
||||
- neutron-tempest-with-uwsgi
|
||||
- devstack-plugin-ceph-tempest:
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
- devstack-plugin-ceph-tempest-py3:
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
- neutron-tempest-dvr:
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
- legacy-tempest-dsvm-neutron-dvr-multinode-full:
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
- neutron-tempest-dvr-ha-multinode-full:
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
- legacy-tempest-dsvm-lvm-multibackend:
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
- legacy-tempest-dsvm-neutron-pg-full:
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*$
|
||||
|
||||
+1
-1
@@ -38,7 +38,7 @@ You can also pick specific OpenStack project releases by setting the appropriate
|
||||
`stackrc` for the default set). Usually just before a release there will be
|
||||
milestone-proposed branches that need to be tested::
|
||||
|
||||
GLANCE_REPO=git://git.openstack.org/openstack/glance.git
|
||||
GLANCE_REPO=https://git.openstack.org/openstack/glance.git
|
||||
GLANCE_BRANCH=milestone-proposed
|
||||
|
||||
Start A Dev Cloud
|
||||
|
||||
@@ -567,7 +567,7 @@ you do not require them.
|
||||
Q_ML2_PLUGIN_MECHANISM_DRIVERS=macvtap
|
||||
Q_USE_PROVIDER_NETWORKING=True
|
||||
|
||||
enable_plugin neutron git://git.openstack.org/openstack/neutron
|
||||
enable_plugin neutron https://git.openstack.org/openstack/neutron
|
||||
|
||||
## MacVTap agent options
|
||||
Q_AGENT=macvtap
|
||||
@@ -622,7 +622,7 @@ For the MacVTap compute node, use this local.conf:
|
||||
|
||||
# Services that a compute node runs
|
||||
disable_all_services
|
||||
enable_plugin neutron git://git.openstack.org/openstack/neutron
|
||||
enable_plugin neutron https://git.openstack.org/openstack/neutron
|
||||
ENABLED_SERVICES+=n-cpu,q-agt
|
||||
|
||||
## MacVTap agent options
|
||||
|
||||
+167
-167
@@ -24,173 +24,173 @@ official OpenStack projects.
|
||||
====================================== ===
|
||||
Plugin Name URL
|
||||
====================================== ===
|
||||
almanach `git://git.openstack.org/openstack/almanach <https://git.openstack.org/cgit/openstack/almanach>`__
|
||||
aodh `git://git.openstack.org/openstack/aodh <https://git.openstack.org/cgit/openstack/aodh>`__
|
||||
apmec `git://git.openstack.org/openstack/apmec <https://git.openstack.org/cgit/openstack/apmec>`__
|
||||
astara `git://git.openstack.org/openstack/astara <https://git.openstack.org/cgit/openstack/astara>`__
|
||||
barbican `git://git.openstack.org/openstack/barbican <https://git.openstack.org/cgit/openstack/barbican>`__
|
||||
bilean `git://git.openstack.org/openstack/bilean <https://git.openstack.org/cgit/openstack/bilean>`__
|
||||
blazar `git://git.openstack.org/openstack/blazar <https://git.openstack.org/cgit/openstack/blazar>`__
|
||||
broadview-collector `git://git.openstack.org/openstack/broadview-collector <https://git.openstack.org/cgit/openstack/broadview-collector>`__
|
||||
castellan-ui `git://git.openstack.org/openstack/castellan-ui <https://git.openstack.org/cgit/openstack/castellan-ui>`__
|
||||
ceilometer `git://git.openstack.org/openstack/ceilometer <https://git.openstack.org/cgit/openstack/ceilometer>`__
|
||||
ceilometer-powervm `git://git.openstack.org/openstack/ceilometer-powervm <https://git.openstack.org/cgit/openstack/ceilometer-powervm>`__
|
||||
cloudkitty `git://git.openstack.org/openstack/cloudkitty <https://git.openstack.org/cgit/openstack/cloudkitty>`__
|
||||
collectd-openstack-plugins `git://git.openstack.org/openstack/collectd-openstack-plugins <https://git.openstack.org/cgit/openstack/collectd-openstack-plugins>`__
|
||||
congress `git://git.openstack.org/openstack/congress <https://git.openstack.org/cgit/openstack/congress>`__
|
||||
cyborg `git://git.openstack.org/openstack/cyborg <https://git.openstack.org/cgit/openstack/cyborg>`__
|
||||
designate `git://git.openstack.org/openstack/designate <https://git.openstack.org/cgit/openstack/designate>`__
|
||||
devstack-plugin-additional-pkg-repos `git://git.openstack.org/openstack/devstack-plugin-additional-pkg-repos <https://git.openstack.org/cgit/openstack/devstack-plugin-additional-pkg-repos>`__
|
||||
devstack-plugin-amqp1 `git://git.openstack.org/openstack/devstack-plugin-amqp1 <https://git.openstack.org/cgit/openstack/devstack-plugin-amqp1>`__
|
||||
devstack-plugin-bdd `git://git.openstack.org/openstack/devstack-plugin-bdd <https://git.openstack.org/cgit/openstack/devstack-plugin-bdd>`__
|
||||
devstack-plugin-ceph `git://git.openstack.org/openstack/devstack-plugin-ceph <https://git.openstack.org/cgit/openstack/devstack-plugin-ceph>`__
|
||||
devstack-plugin-container `git://git.openstack.org/openstack/devstack-plugin-container <https://git.openstack.org/cgit/openstack/devstack-plugin-container>`__
|
||||
devstack-plugin-glusterfs `git://git.openstack.org/openstack/devstack-plugin-glusterfs <https://git.openstack.org/cgit/openstack/devstack-plugin-glusterfs>`__
|
||||
devstack-plugin-hdfs `git://git.openstack.org/openstack/devstack-plugin-hdfs <https://git.openstack.org/cgit/openstack/devstack-plugin-hdfs>`__
|
||||
devstack-plugin-kafka `git://git.openstack.org/openstack/devstack-plugin-kafka <https://git.openstack.org/cgit/openstack/devstack-plugin-kafka>`__
|
||||
devstack-plugin-libvirt-qemu `git://git.openstack.org/openstack/devstack-plugin-libvirt-qemu <https://git.openstack.org/cgit/openstack/devstack-plugin-libvirt-qemu>`__
|
||||
devstack-plugin-mariadb `git://git.openstack.org/openstack/devstack-plugin-mariadb <https://git.openstack.org/cgit/openstack/devstack-plugin-mariadb>`__
|
||||
devstack-plugin-nfs `git://git.openstack.org/openstack/devstack-plugin-nfs <https://git.openstack.org/cgit/openstack/devstack-plugin-nfs>`__
|
||||
devstack-plugin-pika `git://git.openstack.org/openstack/devstack-plugin-pika <https://git.openstack.org/cgit/openstack/devstack-plugin-pika>`__
|
||||
devstack-plugin-sheepdog `git://git.openstack.org/openstack/devstack-plugin-sheepdog <https://git.openstack.org/cgit/openstack/devstack-plugin-sheepdog>`__
|
||||
devstack-plugin-vmax `git://git.openstack.org/openstack/devstack-plugin-vmax <https://git.openstack.org/cgit/openstack/devstack-plugin-vmax>`__
|
||||
devstack-plugin-zmq `git://git.openstack.org/openstack/devstack-plugin-zmq <https://git.openstack.org/cgit/openstack/devstack-plugin-zmq>`__
|
||||
dragonflow `git://git.openstack.org/openstack/dragonflow <https://git.openstack.org/cgit/openstack/dragonflow>`__
|
||||
drbd-devstack `git://git.openstack.org/openstack/drbd-devstack <https://git.openstack.org/cgit/openstack/drbd-devstack>`__
|
||||
ec2-api `git://git.openstack.org/openstack/ec2-api <https://git.openstack.org/cgit/openstack/ec2-api>`__
|
||||
freezer `git://git.openstack.org/openstack/freezer <https://git.openstack.org/cgit/openstack/freezer>`__
|
||||
freezer-api `git://git.openstack.org/openstack/freezer-api <https://git.openstack.org/cgit/openstack/freezer-api>`__
|
||||
freezer-tempest-plugin `git://git.openstack.org/openstack/freezer-tempest-plugin <https://git.openstack.org/cgit/openstack/freezer-tempest-plugin>`__
|
||||
freezer-web-ui `git://git.openstack.org/openstack/freezer-web-ui <https://git.openstack.org/cgit/openstack/freezer-web-ui>`__
|
||||
fuxi `git://git.openstack.org/openstack/fuxi <https://git.openstack.org/cgit/openstack/fuxi>`__
|
||||
gce-api `git://git.openstack.org/openstack/gce-api <https://git.openstack.org/cgit/openstack/gce-api>`__
|
||||
glare `git://git.openstack.org/openstack/glare <https://git.openstack.org/cgit/openstack/glare>`__
|
||||
group-based-policy `git://git.openstack.org/openstack/group-based-policy <https://git.openstack.org/cgit/openstack/group-based-policy>`__
|
||||
heat `git://git.openstack.org/openstack/heat <https://git.openstack.org/cgit/openstack/heat>`__
|
||||
heat-dashboard `git://git.openstack.org/openstack/heat-dashboard <https://git.openstack.org/cgit/openstack/heat-dashboard>`__
|
||||
horizon-mellanox `git://git.openstack.org/openstack/horizon-mellanox <https://git.openstack.org/cgit/openstack/horizon-mellanox>`__
|
||||
ironic `git://git.openstack.org/openstack/ironic <https://git.openstack.org/cgit/openstack/ironic>`__
|
||||
ironic-inspector `git://git.openstack.org/openstack/ironic-inspector <https://git.openstack.org/cgit/openstack/ironic-inspector>`__
|
||||
ironic-staging-drivers `git://git.openstack.org/openstack/ironic-staging-drivers <https://git.openstack.org/cgit/openstack/ironic-staging-drivers>`__
|
||||
ironic-ui `git://git.openstack.org/openstack/ironic-ui <https://git.openstack.org/cgit/openstack/ironic-ui>`__
|
||||
karbor `git://git.openstack.org/openstack/karbor <https://git.openstack.org/cgit/openstack/karbor>`__
|
||||
karbor-dashboard `git://git.openstack.org/openstack/karbor-dashboard <https://git.openstack.org/cgit/openstack/karbor-dashboard>`__
|
||||
keystone `git://git.openstack.org/openstack/keystone <https://git.openstack.org/cgit/openstack/keystone>`__
|
||||
kingbird `git://git.openstack.org/openstack/kingbird <https://git.openstack.org/cgit/openstack/kingbird>`__
|
||||
kuryr-kubernetes `git://git.openstack.org/openstack/kuryr-kubernetes <https://git.openstack.org/cgit/openstack/kuryr-kubernetes>`__
|
||||
kuryr-libnetwork `git://git.openstack.org/openstack/kuryr-libnetwork <https://git.openstack.org/cgit/openstack/kuryr-libnetwork>`__
|
||||
kuryr-tempest-plugin `git://git.openstack.org/openstack/kuryr-tempest-plugin <https://git.openstack.org/cgit/openstack/kuryr-tempest-plugin>`__
|
||||
magnum `git://git.openstack.org/openstack/magnum <https://git.openstack.org/cgit/openstack/magnum>`__
|
||||
magnum-ui `git://git.openstack.org/openstack/magnum-ui <https://git.openstack.org/cgit/openstack/magnum-ui>`__
|
||||
manila `git://git.openstack.org/openstack/manila <https://git.openstack.org/cgit/openstack/manila>`__
|
||||
manila-ui `git://git.openstack.org/openstack/manila-ui <https://git.openstack.org/cgit/openstack/manila-ui>`__
|
||||
masakari `git://git.openstack.org/openstack/masakari <https://git.openstack.org/cgit/openstack/masakari>`__
|
||||
meteos `git://git.openstack.org/openstack/meteos <https://git.openstack.org/cgit/openstack/meteos>`__
|
||||
meteos-ui `git://git.openstack.org/openstack/meteos-ui <https://git.openstack.org/cgit/openstack/meteos-ui>`__
|
||||
mistral `git://git.openstack.org/openstack/mistral <https://git.openstack.org/cgit/openstack/mistral>`__
|
||||
mixmatch `git://git.openstack.org/openstack/mixmatch <https://git.openstack.org/cgit/openstack/mixmatch>`__
|
||||
mogan `git://git.openstack.org/openstack/mogan <https://git.openstack.org/cgit/openstack/mogan>`__
|
||||
mogan-ui `git://git.openstack.org/openstack/mogan-ui <https://git.openstack.org/cgit/openstack/mogan-ui>`__
|
||||
monasca-analytics `git://git.openstack.org/openstack/monasca-analytics <https://git.openstack.org/cgit/openstack/monasca-analytics>`__
|
||||
monasca-api `git://git.openstack.org/openstack/monasca-api <https://git.openstack.org/cgit/openstack/monasca-api>`__
|
||||
monasca-ceilometer `git://git.openstack.org/openstack/monasca-ceilometer <https://git.openstack.org/cgit/openstack/monasca-ceilometer>`__
|
||||
monasca-events-api `git://git.openstack.org/openstack/monasca-events-api <https://git.openstack.org/cgit/openstack/monasca-events-api>`__
|
||||
monasca-log-api `git://git.openstack.org/openstack/monasca-log-api <https://git.openstack.org/cgit/openstack/monasca-log-api>`__
|
||||
monasca-tempest-plugin `git://git.openstack.org/openstack/monasca-tempest-plugin <https://git.openstack.org/cgit/openstack/monasca-tempest-plugin>`__
|
||||
monasca-transform `git://git.openstack.org/openstack/monasca-transform <https://git.openstack.org/cgit/openstack/monasca-transform>`__
|
||||
murano `git://git.openstack.org/openstack/murano <https://git.openstack.org/cgit/openstack/murano>`__
|
||||
networking-6wind `git://git.openstack.org/openstack/networking-6wind <https://git.openstack.org/cgit/openstack/networking-6wind>`__
|
||||
networking-ansible `git://git.openstack.org/openstack/networking-ansible <https://git.openstack.org/cgit/openstack/networking-ansible>`__
|
||||
networking-arista `git://git.openstack.org/openstack/networking-arista <https://git.openstack.org/cgit/openstack/networking-arista>`__
|
||||
networking-bagpipe `git://git.openstack.org/openstack/networking-bagpipe <https://git.openstack.org/cgit/openstack/networking-bagpipe>`__
|
||||
networking-baremetal `git://git.openstack.org/openstack/networking-baremetal <https://git.openstack.org/cgit/openstack/networking-baremetal>`__
|
||||
networking-bgpvpn `git://git.openstack.org/openstack/networking-bgpvpn <https://git.openstack.org/cgit/openstack/networking-bgpvpn>`__
|
||||
networking-brocade `git://git.openstack.org/openstack/networking-brocade <https://git.openstack.org/cgit/openstack/networking-brocade>`__
|
||||
networking-calico `git://git.openstack.org/openstack/networking-calico <https://git.openstack.org/cgit/openstack/networking-calico>`__
|
||||
networking-cisco `git://git.openstack.org/openstack/networking-cisco <https://git.openstack.org/cgit/openstack/networking-cisco>`__
|
||||
networking-cumulus `git://git.openstack.org/openstack/networking-cumulus <https://git.openstack.org/cgit/openstack/networking-cumulus>`__
|
||||
networking-dpm `git://git.openstack.org/openstack/networking-dpm <https://git.openstack.org/cgit/openstack/networking-dpm>`__
|
||||
networking-fortinet `git://git.openstack.org/openstack/networking-fortinet <https://git.openstack.org/cgit/openstack/networking-fortinet>`__
|
||||
networking-generic-switch `git://git.openstack.org/openstack/networking-generic-switch <https://git.openstack.org/cgit/openstack/networking-generic-switch>`__
|
||||
networking-hpe `git://git.openstack.org/openstack/networking-hpe <https://git.openstack.org/cgit/openstack/networking-hpe>`__
|
||||
networking-huawei `git://git.openstack.org/openstack/networking-huawei <https://git.openstack.org/cgit/openstack/networking-huawei>`__
|
||||
networking-hyperv `git://git.openstack.org/openstack/networking-hyperv <https://git.openstack.org/cgit/openstack/networking-hyperv>`__
|
||||
networking-infoblox `git://git.openstack.org/openstack/networking-infoblox <https://git.openstack.org/cgit/openstack/networking-infoblox>`__
|
||||
networking-l2gw `git://git.openstack.org/openstack/networking-l2gw <https://git.openstack.org/cgit/openstack/networking-l2gw>`__
|
||||
networking-lagopus `git://git.openstack.org/openstack/networking-lagopus <https://git.openstack.org/cgit/openstack/networking-lagopus>`__
|
||||
networking-midonet `git://git.openstack.org/openstack/networking-midonet <https://git.openstack.org/cgit/openstack/networking-midonet>`__
|
||||
networking-mlnx `git://git.openstack.org/openstack/networking-mlnx <https://git.openstack.org/cgit/openstack/networking-mlnx>`__
|
||||
networking-nec `git://git.openstack.org/openstack/networking-nec <https://git.openstack.org/cgit/openstack/networking-nec>`__
|
||||
networking-odl `git://git.openstack.org/openstack/networking-odl <https://git.openstack.org/cgit/openstack/networking-odl>`__
|
||||
networking-onos `git://git.openstack.org/openstack/networking-onos <https://git.openstack.org/cgit/openstack/networking-onos>`__
|
||||
networking-opencontrail `git://git.openstack.org/openstack/networking-opencontrail <https://git.openstack.org/cgit/openstack/networking-opencontrail>`__
|
||||
networking-ovn `git://git.openstack.org/openstack/networking-ovn <https://git.openstack.org/cgit/openstack/networking-ovn>`__
|
||||
networking-ovs-dpdk `git://git.openstack.org/openstack/networking-ovs-dpdk <https://git.openstack.org/cgit/openstack/networking-ovs-dpdk>`__
|
||||
networking-plumgrid `git://git.openstack.org/openstack/networking-plumgrid <https://git.openstack.org/cgit/openstack/networking-plumgrid>`__
|
||||
networking-powervm `git://git.openstack.org/openstack/networking-powervm <https://git.openstack.org/cgit/openstack/networking-powervm>`__
|
||||
networking-sfc `git://git.openstack.org/openstack/networking-sfc <https://git.openstack.org/cgit/openstack/networking-sfc>`__
|
||||
networking-spp `git://git.openstack.org/openstack/networking-spp <https://git.openstack.org/cgit/openstack/networking-spp>`__
|
||||
networking-vpp `git://git.openstack.org/openstack/networking-vpp <https://git.openstack.org/cgit/openstack/networking-vpp>`__
|
||||
networking-vsphere `git://git.openstack.org/openstack/networking-vsphere <https://git.openstack.org/cgit/openstack/networking-vsphere>`__
|
||||
neutron `git://git.openstack.org/openstack/neutron <https://git.openstack.org/cgit/openstack/neutron>`__
|
||||
neutron-classifier `git://git.openstack.org/openstack/neutron-classifier <https://git.openstack.org/cgit/openstack/neutron-classifier>`__
|
||||
neutron-dynamic-routing `git://git.openstack.org/openstack/neutron-dynamic-routing <https://git.openstack.org/cgit/openstack/neutron-dynamic-routing>`__
|
||||
neutron-fwaas `git://git.openstack.org/openstack/neutron-fwaas <https://git.openstack.org/cgit/openstack/neutron-fwaas>`__
|
||||
neutron-fwaas-dashboard `git://git.openstack.org/openstack/neutron-fwaas-dashboard <https://git.openstack.org/cgit/openstack/neutron-fwaas-dashboard>`__
|
||||
neutron-lbaas `git://git.openstack.org/openstack/neutron-lbaas <https://git.openstack.org/cgit/openstack/neutron-lbaas>`__
|
||||
neutron-lbaas-dashboard `git://git.openstack.org/openstack/neutron-lbaas-dashboard <https://git.openstack.org/cgit/openstack/neutron-lbaas-dashboard>`__
|
||||
neutron-tempest-plugin `git://git.openstack.org/openstack/neutron-tempest-plugin <https://git.openstack.org/cgit/openstack/neutron-tempest-plugin>`__
|
||||
neutron-vpnaas `git://git.openstack.org/openstack/neutron-vpnaas <https://git.openstack.org/cgit/openstack/neutron-vpnaas>`__
|
||||
neutron-vpnaas-dashboard `git://git.openstack.org/openstack/neutron-vpnaas-dashboard <https://git.openstack.org/cgit/openstack/neutron-vpnaas-dashboard>`__
|
||||
nova-dpm `git://git.openstack.org/openstack/nova-dpm <https://git.openstack.org/cgit/openstack/nova-dpm>`__
|
||||
nova-lxd `git://git.openstack.org/openstack/nova-lxd <https://git.openstack.org/cgit/openstack/nova-lxd>`__
|
||||
nova-mksproxy `git://git.openstack.org/openstack/nova-mksproxy <https://git.openstack.org/cgit/openstack/nova-mksproxy>`__
|
||||
nova-powervm `git://git.openstack.org/openstack/nova-powervm <https://git.openstack.org/cgit/openstack/nova-powervm>`__
|
||||
oaktree `git://git.openstack.org/openstack/oaktree <https://git.openstack.org/cgit/openstack/oaktree>`__
|
||||
octavia `git://git.openstack.org/openstack/octavia <https://git.openstack.org/cgit/openstack/octavia>`__
|
||||
octavia-dashboard `git://git.openstack.org/openstack/octavia-dashboard <https://git.openstack.org/cgit/openstack/octavia-dashboard>`__
|
||||
omni `git://git.openstack.org/openstack/omni <https://git.openstack.org/cgit/openstack/omni>`__
|
||||
openstacksdk `git://git.openstack.org/openstack/openstacksdk <https://git.openstack.org/cgit/openstack/openstacksdk>`__
|
||||
os-xenapi `git://git.openstack.org/openstack/os-xenapi <https://git.openstack.org/cgit/openstack/os-xenapi>`__
|
||||
osprofiler `git://git.openstack.org/openstack/osprofiler <https://git.openstack.org/cgit/openstack/osprofiler>`__
|
||||
oswin-tempest-plugin `git://git.openstack.org/openstack/oswin-tempest-plugin <https://git.openstack.org/cgit/openstack/oswin-tempest-plugin>`__
|
||||
panko `git://git.openstack.org/openstack/panko <https://git.openstack.org/cgit/openstack/panko>`__
|
||||
patrole `git://git.openstack.org/openstack/patrole <https://git.openstack.org/cgit/openstack/patrole>`__
|
||||
picasso `git://git.openstack.org/openstack/picasso <https://git.openstack.org/cgit/openstack/picasso>`__
|
||||
qinling `git://git.openstack.org/openstack/qinling <https://git.openstack.org/cgit/openstack/qinling>`__
|
||||
rally `git://git.openstack.org/openstack/rally <https://git.openstack.org/cgit/openstack/rally>`__
|
||||
rally-openstack `git://git.openstack.org/openstack/rally-openstack <https://git.openstack.org/cgit/openstack/rally-openstack>`__
|
||||
sahara `git://git.openstack.org/openstack/sahara <https://git.openstack.org/cgit/openstack/sahara>`__
|
||||
sahara-dashboard `git://git.openstack.org/openstack/sahara-dashboard <https://git.openstack.org/cgit/openstack/sahara-dashboard>`__
|
||||
scalpels `git://git.openstack.org/openstack/scalpels <https://git.openstack.org/cgit/openstack/scalpels>`__
|
||||
searchlight `git://git.openstack.org/openstack/searchlight <https://git.openstack.org/cgit/openstack/searchlight>`__
|
||||
searchlight-ui `git://git.openstack.org/openstack/searchlight-ui <https://git.openstack.org/cgit/openstack/searchlight-ui>`__
|
||||
senlin `git://git.openstack.org/openstack/senlin <https://git.openstack.org/cgit/openstack/senlin>`__
|
||||
slogging `git://git.openstack.org/openstack/slogging <https://git.openstack.org/cgit/openstack/slogging>`__
|
||||
solum `git://git.openstack.org/openstack/solum <https://git.openstack.org/cgit/openstack/solum>`__
|
||||
stackube `git://git.openstack.org/openstack/stackube <https://git.openstack.org/cgit/openstack/stackube>`__
|
||||
storlets `git://git.openstack.org/openstack/storlets <https://git.openstack.org/cgit/openstack/storlets>`__
|
||||
tacker `git://git.openstack.org/openstack/tacker <https://git.openstack.org/cgit/openstack/tacker>`__
|
||||
tap-as-a-service `git://git.openstack.org/openstack/tap-as-a-service <https://git.openstack.org/cgit/openstack/tap-as-a-service>`__
|
||||
tap-as-a-service-dashboard `git://git.openstack.org/openstack/tap-as-a-service-dashboard <https://git.openstack.org/cgit/openstack/tap-as-a-service-dashboard>`__
|
||||
tatu `git://git.openstack.org/openstack/tatu <https://git.openstack.org/cgit/openstack/tatu>`__
|
||||
telemetry-tempest-plugin `git://git.openstack.org/openstack/telemetry-tempest-plugin <https://git.openstack.org/cgit/openstack/telemetry-tempest-plugin>`__
|
||||
tricircle `git://git.openstack.org/openstack/tricircle <https://git.openstack.org/cgit/openstack/tricircle>`__
|
||||
trio2o `git://git.openstack.org/openstack/trio2o <https://git.openstack.org/cgit/openstack/trio2o>`__
|
||||
trove `git://git.openstack.org/openstack/trove <https://git.openstack.org/cgit/openstack/trove>`__
|
||||
trove-dashboard `git://git.openstack.org/openstack/trove-dashboard <https://git.openstack.org/cgit/openstack/trove-dashboard>`__
|
||||
valet `git://git.openstack.org/openstack/valet <https://git.openstack.org/cgit/openstack/valet>`__
|
||||
vitrage `git://git.openstack.org/openstack/vitrage <https://git.openstack.org/cgit/openstack/vitrage>`__
|
||||
vitrage-dashboard `git://git.openstack.org/openstack/vitrage-dashboard <https://git.openstack.org/cgit/openstack/vitrage-dashboard>`__
|
||||
vitrage-tempest-plugin `git://git.openstack.org/openstack/vitrage-tempest-plugin <https://git.openstack.org/cgit/openstack/vitrage-tempest-plugin>`__
|
||||
vmware-nsx `git://git.openstack.org/openstack/vmware-nsx <https://git.openstack.org/cgit/openstack/vmware-nsx>`__
|
||||
vmware-vspc `git://git.openstack.org/openstack/vmware-vspc <https://git.openstack.org/cgit/openstack/vmware-vspc>`__
|
||||
watcher `git://git.openstack.org/openstack/watcher <https://git.openstack.org/cgit/openstack/watcher>`__
|
||||
watcher-dashboard `git://git.openstack.org/openstack/watcher-dashboard <https://git.openstack.org/cgit/openstack/watcher-dashboard>`__
|
||||
zaqar `git://git.openstack.org/openstack/zaqar <https://git.openstack.org/cgit/openstack/zaqar>`__
|
||||
zaqar-ui `git://git.openstack.org/openstack/zaqar-ui <https://git.openstack.org/cgit/openstack/zaqar-ui>`__
|
||||
zun `git://git.openstack.org/openstack/zun <https://git.openstack.org/cgit/openstack/zun>`__
|
||||
zun-ui `git://git.openstack.org/openstack/zun-ui <https://git.openstack.org/cgit/openstack/zun-ui>`__
|
||||
almanach `https://git.openstack.org/openstack/almanach <https://git.openstack.org/cgit/openstack/almanach>`__
|
||||
aodh `https://git.openstack.org/openstack/aodh <https://git.openstack.org/cgit/openstack/aodh>`__
|
||||
apmec `https://git.openstack.org/openstack/apmec <https://git.openstack.org/cgit/openstack/apmec>`__
|
||||
astara `https://git.openstack.org/openstack/astara <https://git.openstack.org/cgit/openstack/astara>`__
|
||||
barbican `https://git.openstack.org/openstack/barbican <https://git.openstack.org/cgit/openstack/barbican>`__
|
||||
bilean `https://git.openstack.org/openstack/bilean <https://git.openstack.org/cgit/openstack/bilean>`__
|
||||
blazar `https://git.openstack.org/openstack/blazar <https://git.openstack.org/cgit/openstack/blazar>`__
|
||||
broadview-collector `https://git.openstack.org/openstack/broadview-collector <https://git.openstack.org/cgit/openstack/broadview-collector>`__
|
||||
castellan-ui `https://git.openstack.org/openstack/castellan-ui <https://git.openstack.org/cgit/openstack/castellan-ui>`__
|
||||
ceilometer `https://git.openstack.org/openstack/ceilometer <https://git.openstack.org/cgit/openstack/ceilometer>`__
|
||||
ceilometer-powervm `https://git.openstack.org/openstack/ceilometer-powervm <https://git.openstack.org/cgit/openstack/ceilometer-powervm>`__
|
||||
cloudkitty `https://git.openstack.org/openstack/cloudkitty <https://git.openstack.org/cgit/openstack/cloudkitty>`__
|
||||
collectd-openstack-plugins `https://git.openstack.org/openstack/collectd-openstack-plugins <https://git.openstack.org/cgit/openstack/collectd-openstack-plugins>`__
|
||||
congress `https://git.openstack.org/openstack/congress <https://git.openstack.org/cgit/openstack/congress>`__
|
||||
cyborg `https://git.openstack.org/openstack/cyborg <https://git.openstack.org/cgit/openstack/cyborg>`__
|
||||
designate `https://git.openstack.org/openstack/designate <https://git.openstack.org/cgit/openstack/designate>`__
|
||||
devstack-plugin-additional-pkg-repos `https://git.openstack.org/openstack/devstack-plugin-additional-pkg-repos <https://git.openstack.org/cgit/openstack/devstack-plugin-additional-pkg-repos>`__
|
||||
devstack-plugin-amqp1 `https://git.openstack.org/openstack/devstack-plugin-amqp1 <https://git.openstack.org/cgit/openstack/devstack-plugin-amqp1>`__
|
||||
devstack-plugin-bdd `https://git.openstack.org/openstack/devstack-plugin-bdd <https://git.openstack.org/cgit/openstack/devstack-plugin-bdd>`__
|
||||
devstack-plugin-ceph `https://git.openstack.org/openstack/devstack-plugin-ceph <https://git.openstack.org/cgit/openstack/devstack-plugin-ceph>`__
|
||||
devstack-plugin-container `https://git.openstack.org/openstack/devstack-plugin-container <https://git.openstack.org/cgit/openstack/devstack-plugin-container>`__
|
||||
devstack-plugin-glusterfs `https://git.openstack.org/openstack/devstack-plugin-glusterfs <https://git.openstack.org/cgit/openstack/devstack-plugin-glusterfs>`__
|
||||
devstack-plugin-hdfs `https://git.openstack.org/openstack/devstack-plugin-hdfs <https://git.openstack.org/cgit/openstack/devstack-plugin-hdfs>`__
|
||||
devstack-plugin-kafka `https://git.openstack.org/openstack/devstack-plugin-kafka <https://git.openstack.org/cgit/openstack/devstack-plugin-kafka>`__
|
||||
devstack-plugin-libvirt-qemu `https://git.openstack.org/openstack/devstack-plugin-libvirt-qemu <https://git.openstack.org/cgit/openstack/devstack-plugin-libvirt-qemu>`__
|
||||
devstack-plugin-mariadb `https://git.openstack.org/openstack/devstack-plugin-mariadb <https://git.openstack.org/cgit/openstack/devstack-plugin-mariadb>`__
|
||||
devstack-plugin-nfs `https://git.openstack.org/openstack/devstack-plugin-nfs <https://git.openstack.org/cgit/openstack/devstack-plugin-nfs>`__
|
||||
devstack-plugin-pika `https://git.openstack.org/openstack/devstack-plugin-pika <https://git.openstack.org/cgit/openstack/devstack-plugin-pika>`__
|
||||
devstack-plugin-sheepdog `https://git.openstack.org/openstack/devstack-plugin-sheepdog <https://git.openstack.org/cgit/openstack/devstack-plugin-sheepdog>`__
|
||||
devstack-plugin-vmax `https://git.openstack.org/openstack/devstack-plugin-vmax <https://git.openstack.org/cgit/openstack/devstack-plugin-vmax>`__
|
||||
devstack-plugin-zmq `https://git.openstack.org/openstack/devstack-plugin-zmq <https://git.openstack.org/cgit/openstack/devstack-plugin-zmq>`__
|
||||
dragonflow `https://git.openstack.org/openstack/dragonflow <https://git.openstack.org/cgit/openstack/dragonflow>`__
|
||||
drbd-devstack `https://git.openstack.org/openstack/drbd-devstack <https://git.openstack.org/cgit/openstack/drbd-devstack>`__
|
||||
ec2-api `https://git.openstack.org/openstack/ec2-api <https://git.openstack.org/cgit/openstack/ec2-api>`__
|
||||
freezer `https://git.openstack.org/openstack/freezer <https://git.openstack.org/cgit/openstack/freezer>`__
|
||||
freezer-api `https://git.openstack.org/openstack/freezer-api <https://git.openstack.org/cgit/openstack/freezer-api>`__
|
||||
freezer-tempest-plugin `https://git.openstack.org/openstack/freezer-tempest-plugin <https://git.openstack.org/cgit/openstack/freezer-tempest-plugin>`__
|
||||
freezer-web-ui `https://git.openstack.org/openstack/freezer-web-ui <https://git.openstack.org/cgit/openstack/freezer-web-ui>`__
|
||||
fuxi `https://git.openstack.org/openstack/fuxi <https://git.openstack.org/cgit/openstack/fuxi>`__
|
||||
gce-api `https://git.openstack.org/openstack/gce-api <https://git.openstack.org/cgit/openstack/gce-api>`__
|
||||
glare `https://git.openstack.org/openstack/glare <https://git.openstack.org/cgit/openstack/glare>`__
|
||||
group-based-policy `https://git.openstack.org/openstack/group-based-policy <https://git.openstack.org/cgit/openstack/group-based-policy>`__
|
||||
heat `https://git.openstack.org/openstack/heat <https://git.openstack.org/cgit/openstack/heat>`__
|
||||
heat-dashboard `https://git.openstack.org/openstack/heat-dashboard <https://git.openstack.org/cgit/openstack/heat-dashboard>`__
|
||||
horizon-mellanox `https://git.openstack.org/openstack/horizon-mellanox <https://git.openstack.org/cgit/openstack/horizon-mellanox>`__
|
||||
ironic `https://git.openstack.org/openstack/ironic <https://git.openstack.org/cgit/openstack/ironic>`__
|
||||
ironic-inspector `https://git.openstack.org/openstack/ironic-inspector <https://git.openstack.org/cgit/openstack/ironic-inspector>`__
|
||||
ironic-staging-drivers `https://git.openstack.org/openstack/ironic-staging-drivers <https://git.openstack.org/cgit/openstack/ironic-staging-drivers>`__
|
||||
ironic-ui `https://git.openstack.org/openstack/ironic-ui <https://git.openstack.org/cgit/openstack/ironic-ui>`__
|
||||
karbor `https://git.openstack.org/openstack/karbor <https://git.openstack.org/cgit/openstack/karbor>`__
|
||||
karbor-dashboard `https://git.openstack.org/openstack/karbor-dashboard <https://git.openstack.org/cgit/openstack/karbor-dashboard>`__
|
||||
keystone `https://git.openstack.org/openstack/keystone <https://git.openstack.org/cgit/openstack/keystone>`__
|
||||
kingbird `https://git.openstack.org/openstack/kingbird <https://git.openstack.org/cgit/openstack/kingbird>`__
|
||||
kuryr-kubernetes `https://git.openstack.org/openstack/kuryr-kubernetes <https://git.openstack.org/cgit/openstack/kuryr-kubernetes>`__
|
||||
kuryr-libnetwork `https://git.openstack.org/openstack/kuryr-libnetwork <https://git.openstack.org/cgit/openstack/kuryr-libnetwork>`__
|
||||
kuryr-tempest-plugin `https://git.openstack.org/openstack/kuryr-tempest-plugin <https://git.openstack.org/cgit/openstack/kuryr-tempest-plugin>`__
|
||||
magnum `https://git.openstack.org/openstack/magnum <https://git.openstack.org/cgit/openstack/magnum>`__
|
||||
magnum-ui `https://git.openstack.org/openstack/magnum-ui <https://git.openstack.org/cgit/openstack/magnum-ui>`__
|
||||
manila `https://git.openstack.org/openstack/manila <https://git.openstack.org/cgit/openstack/manila>`__
|
||||
manila-ui `https://git.openstack.org/openstack/manila-ui <https://git.openstack.org/cgit/openstack/manila-ui>`__
|
||||
masakari `https://git.openstack.org/openstack/masakari <https://git.openstack.org/cgit/openstack/masakari>`__
|
||||
meteos `https://git.openstack.org/openstack/meteos <https://git.openstack.org/cgit/openstack/meteos>`__
|
||||
meteos-ui `https://git.openstack.org/openstack/meteos-ui <https://git.openstack.org/cgit/openstack/meteos-ui>`__
|
||||
mistral `https://git.openstack.org/openstack/mistral <https://git.openstack.org/cgit/openstack/mistral>`__
|
||||
mixmatch `https://git.openstack.org/openstack/mixmatch <https://git.openstack.org/cgit/openstack/mixmatch>`__
|
||||
mogan `https://git.openstack.org/openstack/mogan <https://git.openstack.org/cgit/openstack/mogan>`__
|
||||
mogan-ui `https://git.openstack.org/openstack/mogan-ui <https://git.openstack.org/cgit/openstack/mogan-ui>`__
|
||||
monasca-analytics `https://git.openstack.org/openstack/monasca-analytics <https://git.openstack.org/cgit/openstack/monasca-analytics>`__
|
||||
monasca-api `https://git.openstack.org/openstack/monasca-api <https://git.openstack.org/cgit/openstack/monasca-api>`__
|
||||
monasca-ceilometer `https://git.openstack.org/openstack/monasca-ceilometer <https://git.openstack.org/cgit/openstack/monasca-ceilometer>`__
|
||||
monasca-events-api `https://git.openstack.org/openstack/monasca-events-api <https://git.openstack.org/cgit/openstack/monasca-events-api>`__
|
||||
monasca-log-api `https://git.openstack.org/openstack/monasca-log-api <https://git.openstack.org/cgit/openstack/monasca-log-api>`__
|
||||
monasca-tempest-plugin `https://git.openstack.org/openstack/monasca-tempest-plugin <https://git.openstack.org/cgit/openstack/monasca-tempest-plugin>`__
|
||||
monasca-transform `https://git.openstack.org/openstack/monasca-transform <https://git.openstack.org/cgit/openstack/monasca-transform>`__
|
||||
murano `https://git.openstack.org/openstack/murano <https://git.openstack.org/cgit/openstack/murano>`__
|
||||
networking-6wind `https://git.openstack.org/openstack/networking-6wind <https://git.openstack.org/cgit/openstack/networking-6wind>`__
|
||||
networking-ansible `https://git.openstack.org/openstack/networking-ansible <https://git.openstack.org/cgit/openstack/networking-ansible>`__
|
||||
networking-arista `https://git.openstack.org/openstack/networking-arista <https://git.openstack.org/cgit/openstack/networking-arista>`__
|
||||
networking-bagpipe `https://git.openstack.org/openstack/networking-bagpipe <https://git.openstack.org/cgit/openstack/networking-bagpipe>`__
|
||||
networking-baremetal `https://git.openstack.org/openstack/networking-baremetal <https://git.openstack.org/cgit/openstack/networking-baremetal>`__
|
||||
networking-bgpvpn `https://git.openstack.org/openstack/networking-bgpvpn <https://git.openstack.org/cgit/openstack/networking-bgpvpn>`__
|
||||
networking-brocade `https://git.openstack.org/openstack/networking-brocade <https://git.openstack.org/cgit/openstack/networking-brocade>`__
|
||||
networking-calico `https://git.openstack.org/openstack/networking-calico <https://git.openstack.org/cgit/openstack/networking-calico>`__
|
||||
networking-cisco `https://git.openstack.org/openstack/networking-cisco <https://git.openstack.org/cgit/openstack/networking-cisco>`__
|
||||
networking-cumulus `https://git.openstack.org/openstack/networking-cumulus <https://git.openstack.org/cgit/openstack/networking-cumulus>`__
|
||||
networking-dpm `https://git.openstack.org/openstack/networking-dpm <https://git.openstack.org/cgit/openstack/networking-dpm>`__
|
||||
networking-fortinet `https://git.openstack.org/openstack/networking-fortinet <https://git.openstack.org/cgit/openstack/networking-fortinet>`__
|
||||
networking-generic-switch `https://git.openstack.org/openstack/networking-generic-switch <https://git.openstack.org/cgit/openstack/networking-generic-switch>`__
|
||||
networking-hpe `https://git.openstack.org/openstack/networking-hpe <https://git.openstack.org/cgit/openstack/networking-hpe>`__
|
||||
networking-huawei `https://git.openstack.org/openstack/networking-huawei <https://git.openstack.org/cgit/openstack/networking-huawei>`__
|
||||
networking-hyperv `https://git.openstack.org/openstack/networking-hyperv <https://git.openstack.org/cgit/openstack/networking-hyperv>`__
|
||||
networking-infoblox `https://git.openstack.org/openstack/networking-infoblox <https://git.openstack.org/cgit/openstack/networking-infoblox>`__
|
||||
networking-l2gw `https://git.openstack.org/openstack/networking-l2gw <https://git.openstack.org/cgit/openstack/networking-l2gw>`__
|
||||
networking-lagopus `https://git.openstack.org/openstack/networking-lagopus <https://git.openstack.org/cgit/openstack/networking-lagopus>`__
|
||||
networking-midonet `https://git.openstack.org/openstack/networking-midonet <https://git.openstack.org/cgit/openstack/networking-midonet>`__
|
||||
networking-mlnx `https://git.openstack.org/openstack/networking-mlnx <https://git.openstack.org/cgit/openstack/networking-mlnx>`__
|
||||
networking-nec `https://git.openstack.org/openstack/networking-nec <https://git.openstack.org/cgit/openstack/networking-nec>`__
|
||||
networking-odl `https://git.openstack.org/openstack/networking-odl <https://git.openstack.org/cgit/openstack/networking-odl>`__
|
||||
networking-onos `https://git.openstack.org/openstack/networking-onos <https://git.openstack.org/cgit/openstack/networking-onos>`__
|
||||
networking-opencontrail `https://git.openstack.org/openstack/networking-opencontrail <https://git.openstack.org/cgit/openstack/networking-opencontrail>`__
|
||||
networking-ovn `https://git.openstack.org/openstack/networking-ovn <https://git.openstack.org/cgit/openstack/networking-ovn>`__
|
||||
networking-ovs-dpdk `https://git.openstack.org/openstack/networking-ovs-dpdk <https://git.openstack.org/cgit/openstack/networking-ovs-dpdk>`__
|
||||
networking-plumgrid `https://git.openstack.org/openstack/networking-plumgrid <https://git.openstack.org/cgit/openstack/networking-plumgrid>`__
|
||||
networking-powervm `https://git.openstack.org/openstack/networking-powervm <https://git.openstack.org/cgit/openstack/networking-powervm>`__
|
||||
networking-sfc `https://git.openstack.org/openstack/networking-sfc <https://git.openstack.org/cgit/openstack/networking-sfc>`__
|
||||
networking-spp `https://git.openstack.org/openstack/networking-spp <https://git.openstack.org/cgit/openstack/networking-spp>`__
|
||||
networking-vpp `https://git.openstack.org/openstack/networking-vpp <https://git.openstack.org/cgit/openstack/networking-vpp>`__
|
||||
networking-vsphere `https://git.openstack.org/openstack/networking-vsphere <https://git.openstack.org/cgit/openstack/networking-vsphere>`__
|
||||
neutron `https://git.openstack.org/openstack/neutron <https://git.openstack.org/cgit/openstack/neutron>`__
|
||||
neutron-classifier `https://git.openstack.org/openstack/neutron-classifier <https://git.openstack.org/cgit/openstack/neutron-classifier>`__
|
||||
neutron-dynamic-routing `https://git.openstack.org/openstack/neutron-dynamic-routing <https://git.openstack.org/cgit/openstack/neutron-dynamic-routing>`__
|
||||
neutron-fwaas `https://git.openstack.org/openstack/neutron-fwaas <https://git.openstack.org/cgit/openstack/neutron-fwaas>`__
|
||||
neutron-fwaas-dashboard `https://git.openstack.org/openstack/neutron-fwaas-dashboard <https://git.openstack.org/cgit/openstack/neutron-fwaas-dashboard>`__
|
||||
neutron-lbaas `https://git.openstack.org/openstack/neutron-lbaas <https://git.openstack.org/cgit/openstack/neutron-lbaas>`__
|
||||
neutron-lbaas-dashboard `https://git.openstack.org/openstack/neutron-lbaas-dashboard <https://git.openstack.org/cgit/openstack/neutron-lbaas-dashboard>`__
|
||||
neutron-tempest-plugin `https://git.openstack.org/openstack/neutron-tempest-plugin <https://git.openstack.org/cgit/openstack/neutron-tempest-plugin>`__
|
||||
neutron-vpnaas `https://git.openstack.org/openstack/neutron-vpnaas <https://git.openstack.org/cgit/openstack/neutron-vpnaas>`__
|
||||
neutron-vpnaas-dashboard `https://git.openstack.org/openstack/neutron-vpnaas-dashboard <https://git.openstack.org/cgit/openstack/neutron-vpnaas-dashboard>`__
|
||||
nova-dpm `https://git.openstack.org/openstack/nova-dpm <https://git.openstack.org/cgit/openstack/nova-dpm>`__
|
||||
nova-lxd `https://git.openstack.org/openstack/nova-lxd <https://git.openstack.org/cgit/openstack/nova-lxd>`__
|
||||
nova-mksproxy `https://git.openstack.org/openstack/nova-mksproxy <https://git.openstack.org/cgit/openstack/nova-mksproxy>`__
|
||||
nova-powervm `https://git.openstack.org/openstack/nova-powervm <https://git.openstack.org/cgit/openstack/nova-powervm>`__
|
||||
oaktree `https://git.openstack.org/openstack/oaktree <https://git.openstack.org/cgit/openstack/oaktree>`__
|
||||
octavia `https://git.openstack.org/openstack/octavia <https://git.openstack.org/cgit/openstack/octavia>`__
|
||||
octavia-dashboard `https://git.openstack.org/openstack/octavia-dashboard <https://git.openstack.org/cgit/openstack/octavia-dashboard>`__
|
||||
omni `https://git.openstack.org/openstack/omni <https://git.openstack.org/cgit/openstack/omni>`__
|
||||
openstacksdk `https://git.openstack.org/openstack/openstacksdk <https://git.openstack.org/cgit/openstack/openstacksdk>`__
|
||||
os-xenapi `https://git.openstack.org/openstack/os-xenapi <https://git.openstack.org/cgit/openstack/os-xenapi>`__
|
||||
osprofiler `https://git.openstack.org/openstack/osprofiler <https://git.openstack.org/cgit/openstack/osprofiler>`__
|
||||
oswin-tempest-plugin `https://git.openstack.org/openstack/oswin-tempest-plugin <https://git.openstack.org/cgit/openstack/oswin-tempest-plugin>`__
|
||||
panko `https://git.openstack.org/openstack/panko <https://git.openstack.org/cgit/openstack/panko>`__
|
||||
patrole `https://git.openstack.org/openstack/patrole <https://git.openstack.org/cgit/openstack/patrole>`__
|
||||
picasso `https://git.openstack.org/openstack/picasso <https://git.openstack.org/cgit/openstack/picasso>`__
|
||||
qinling `https://git.openstack.org/openstack/qinling <https://git.openstack.org/cgit/openstack/qinling>`__
|
||||
rally `https://git.openstack.org/openstack/rally <https://git.openstack.org/cgit/openstack/rally>`__
|
||||
rally-openstack `https://git.openstack.org/openstack/rally-openstack <https://git.openstack.org/cgit/openstack/rally-openstack>`__
|
||||
sahara `https://git.openstack.org/openstack/sahara <https://git.openstack.org/cgit/openstack/sahara>`__
|
||||
sahara-dashboard `https://git.openstack.org/openstack/sahara-dashboard <https://git.openstack.org/cgit/openstack/sahara-dashboard>`__
|
||||
scalpels `https://git.openstack.org/openstack/scalpels <https://git.openstack.org/cgit/openstack/scalpels>`__
|
||||
searchlight `https://git.openstack.org/openstack/searchlight <https://git.openstack.org/cgit/openstack/searchlight>`__
|
||||
searchlight-ui `https://git.openstack.org/openstack/searchlight-ui <https://git.openstack.org/cgit/openstack/searchlight-ui>`__
|
||||
senlin `https://git.openstack.org/openstack/senlin <https://git.openstack.org/cgit/openstack/senlin>`__
|
||||
slogging `https://git.openstack.org/openstack/slogging <https://git.openstack.org/cgit/openstack/slogging>`__
|
||||
solum `https://git.openstack.org/openstack/solum <https://git.openstack.org/cgit/openstack/solum>`__
|
||||
stackube `https://git.openstack.org/openstack/stackube <https://git.openstack.org/cgit/openstack/stackube>`__
|
||||
storlets `https://git.openstack.org/openstack/storlets <https://git.openstack.org/cgit/openstack/storlets>`__
|
||||
tacker `https://git.openstack.org/openstack/tacker <https://git.openstack.org/cgit/openstack/tacker>`__
|
||||
tap-as-a-service `https://git.openstack.org/openstack/tap-as-a-service <https://git.openstack.org/cgit/openstack/tap-as-a-service>`__
|
||||
tap-as-a-service-dashboard `https://git.openstack.org/openstack/tap-as-a-service-dashboard <https://git.openstack.org/cgit/openstack/tap-as-a-service-dashboard>`__
|
||||
tatu `https://git.openstack.org/openstack/tatu <https://git.openstack.org/cgit/openstack/tatu>`__
|
||||
telemetry-tempest-plugin `https://git.openstack.org/openstack/telemetry-tempest-plugin <https://git.openstack.org/cgit/openstack/telemetry-tempest-plugin>`__
|
||||
tricircle `https://git.openstack.org/openstack/tricircle <https://git.openstack.org/cgit/openstack/tricircle>`__
|
||||
trio2o `https://git.openstack.org/openstack/trio2o <https://git.openstack.org/cgit/openstack/trio2o>`__
|
||||
trove `https://git.openstack.org/openstack/trove <https://git.openstack.org/cgit/openstack/trove>`__
|
||||
trove-dashboard `https://git.openstack.org/openstack/trove-dashboard <https://git.openstack.org/cgit/openstack/trove-dashboard>`__
|
||||
valet `https://git.openstack.org/openstack/valet <https://git.openstack.org/cgit/openstack/valet>`__
|
||||
vitrage `https://git.openstack.org/openstack/vitrage <https://git.openstack.org/cgit/openstack/vitrage>`__
|
||||
vitrage-dashboard `https://git.openstack.org/openstack/vitrage-dashboard <https://git.openstack.org/cgit/openstack/vitrage-dashboard>`__
|
||||
vitrage-tempest-plugin `https://git.openstack.org/openstack/vitrage-tempest-plugin <https://git.openstack.org/cgit/openstack/vitrage-tempest-plugin>`__
|
||||
vmware-nsx `https://git.openstack.org/openstack/vmware-nsx <https://git.openstack.org/cgit/openstack/vmware-nsx>`__
|
||||
vmware-vspc `https://git.openstack.org/openstack/vmware-vspc <https://git.openstack.org/cgit/openstack/vmware-vspc>`__
|
||||
watcher `https://git.openstack.org/openstack/watcher <https://git.openstack.org/cgit/openstack/watcher>`__
|
||||
watcher-dashboard `https://git.openstack.org/openstack/watcher-dashboard <https://git.openstack.org/cgit/openstack/watcher-dashboard>`__
|
||||
zaqar `https://git.openstack.org/openstack/zaqar <https://git.openstack.org/cgit/openstack/zaqar>`__
|
||||
zaqar-ui `https://git.openstack.org/openstack/zaqar-ui <https://git.openstack.org/cgit/openstack/zaqar-ui>`__
|
||||
zun `https://git.openstack.org/openstack/zun <https://git.openstack.org/cgit/openstack/zun>`__
|
||||
zun-ui `https://git.openstack.org/openstack/zun-ui <https://git.openstack.org/cgit/openstack/zun-ui>`__
|
||||
====================================== ===
|
||||
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@ They are added in the following format::
|
||||
|
||||
An example would be as follows::
|
||||
|
||||
enable_plugin ec2-api git://git.openstack.org/openstack/ec2-api
|
||||
enable_plugin ec2-api https://git.openstack.org/openstack/ec2-api
|
||||
|
||||
plugin.sh contract
|
||||
==================
|
||||
@@ -277,7 +277,7 @@ be needed in your ``jenkins/jobs/<project>.yaml`` definition in
|
||||
# note the actual url here is somewhat irrelevant because it
|
||||
# caches in nodepool, however make it a valid url for
|
||||
# documentation purposes.
|
||||
export DEVSTACK_LOCAL_CONFIG="enable_plugin ec2-api git://git.openstack.org/openstack/ec2-api"
|
||||
export DEVSTACK_LOCAL_CONFIG="enable_plugin ec2-api https://git.openstack.org/openstack/ec2-api"
|
||||
|
||||
See Also
|
||||
========
|
||||
|
||||
@@ -102,7 +102,6 @@ job.parent.
|
||||
tox_envlist: 'all'
|
||||
devstack_localrc:
|
||||
KURYR_K8S_API_PORT: 8080
|
||||
TEMPEST_PLUGINS: '/opt/stack/kuryr-tempest-plugin'
|
||||
devstack_services:
|
||||
kubernetes-api: true
|
||||
kubernetes-controller-manager: true
|
||||
@@ -114,6 +113,8 @@ job.parent.
|
||||
kuryr-kubernetes: https://git.openstack.org/openstack/kuryr
|
||||
devstack-plugin-container: https://git.openstack.org/openstack/devstack-plugin-container
|
||||
neutron-lbaas: https://git.openstack.org/openstack/neutron-lbaas
|
||||
tempest_plugins:
|
||||
- kuryr-tempest-plugin
|
||||
(...)
|
||||
|
||||
Job variables
|
||||
|
||||
@@ -560,6 +560,18 @@ function git_clone {
|
||||
fi
|
||||
fi
|
||||
|
||||
# NOTE(ianw) 2022-04-13 : commit [1] has broken many assumptions
|
||||
# about how we clone and work with repos. Mark them safe globally
|
||||
# as a work-around.
|
||||
#
|
||||
# NOTE(danms): On bionic (and likely others) git-config may write
|
||||
# ~stackuser/.gitconfig if not run with sudo -H. Using --system
|
||||
# writes these changes to /etc/gitconfig which is more
|
||||
# discoverable anyway.
|
||||
#
|
||||
# [1] https://github.com/git/git/commit/8959555cee7ec045958f9b6dd62e541affb7e7d9
|
||||
sudo git config --system --add safe.directory ${git_dest}
|
||||
|
||||
# print out the results so we know what change was used in the logs
|
||||
cd $git_dest
|
||||
git show --oneline | head -1
|
||||
|
||||
+8
-9
@@ -100,7 +100,7 @@ function check_python3_support_for_package_local {
|
||||
cd $name
|
||||
set +e
|
||||
classifier=$(python setup.py --classifiers \
|
||||
| grep 'Programming Language :: Python :: 3$')
|
||||
| grep 'Programming Language :: Python :: 3')
|
||||
set -e
|
||||
echo $classifier
|
||||
}
|
||||
@@ -313,6 +313,8 @@ function pip_install {
|
||||
echo "Automatically using $PYTHON3_VERSION version to install $package_dir based on local package settings"
|
||||
sudo_pip="$sudo_pip LC_ALL=en_US.UTF-8"
|
||||
cmd_pip=$(get_pip_command $PYTHON3_VERSION)
|
||||
else
|
||||
echo "WARNING: Did not find python 3 classifier for local package $package_dir"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
@@ -323,6 +325,8 @@ function pip_install {
|
||||
echo "Automatically using $PYTHON3_VERSION version to install $package based on remote package settings"
|
||||
sudo_pip="$sudo_pip LC_ALL=en_US.UTF-8"
|
||||
cmd_pip=$(get_pip_command $PYTHON3_VERSION)
|
||||
else
|
||||
echo "WARNING: Did not find python 3 classifier for remote package $package_dir"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -345,13 +349,6 @@ function pip_install {
|
||||
|
||||
$xtrace
|
||||
|
||||
# Also install test requirements
|
||||
local install_test_reqs=""
|
||||
local test_req="${package_dir}/test-requirements.txt"
|
||||
if [[ -e "$test_req" ]]; then
|
||||
install_test_reqs="-r $test_req"
|
||||
fi
|
||||
|
||||
# adding SETUPTOOLS_SYS_PATH_TECHNIQUE is a workaround to keep
|
||||
# the same behaviour of setuptools before version 25.0.0.
|
||||
# related issue: https://github.com/pypa/pip/issues/3874
|
||||
@@ -361,7 +358,7 @@ function pip_install {
|
||||
no_proxy="${no_proxy:-}" \
|
||||
PIP_FIND_LINKS=$PIP_FIND_LINKS \
|
||||
SETUPTOOLS_SYS_PATH_TECHNIQUE=rewrite \
|
||||
$cmd_pip $upgrade $install_test_reqs \
|
||||
$cmd_pip $upgrade \
|
||||
$@
|
||||
result=$?
|
||||
|
||||
@@ -604,6 +601,8 @@ function install_devstack_tools {
|
||||
# intentionally old to ensure devstack-gate has control
|
||||
local dstools_version=${DSTOOLS_VERSION:-0.1.2}
|
||||
install_python3
|
||||
# note(elod.illes): preinstall pbr to avoid SNI issue
|
||||
sudo pip3 install pbr==3.1.1
|
||||
sudo pip3 install -U devstack-tools==${dstools_version}
|
||||
}
|
||||
|
||||
|
||||
+46
-20
@@ -82,26 +82,52 @@ function install_apache_uwsgi {
|
||||
apxs="apxs"
|
||||
fi
|
||||
|
||||
# Ubuntu xenial is back level on uwsgi so the proxy doesn't
|
||||
# actually work. Hence we have to build from source for now.
|
||||
# This varies based on packaged/installed. If we've
|
||||
# pip_installed, then the pip setup will only build a "python"
|
||||
# module that will be either python2 or python3 depending on what
|
||||
# it was built with.
|
||||
#
|
||||
# Centos 7 actually has the module in epel, but there was a big
|
||||
# push to disable epel by default. As such, compile from source
|
||||
# there as well.
|
||||
# For package installs, the distro ships both plugins and you need
|
||||
# to select the right one ... it will not be autodetected.
|
||||
if python3_enabled; then
|
||||
UWSGI_PYTHON_PLUGIN=python3
|
||||
else
|
||||
UWSGI_PYTHON_PLUGIN=python
|
||||
fi
|
||||
|
||||
local dir
|
||||
dir=$(mktemp -d)
|
||||
pushd $dir
|
||||
pip_install uwsgi
|
||||
pip download uwsgi -c $REQUIREMENTS_DIR/upper-constraints.txt
|
||||
local uwsgi
|
||||
uwsgi=$(ls uwsgi*)
|
||||
tar xvf $uwsgi
|
||||
cd uwsgi*/apache2
|
||||
sudo $apxs -i -c mod_proxy_uwsgi.c
|
||||
popd
|
||||
# delete the temp directory
|
||||
sudo rm -rf $dir
|
||||
if is_ubuntu; then
|
||||
install_package uwsgi \
|
||||
uwsgi-plugin-python \
|
||||
uwsgi-plugin-python3 \
|
||||
libapache2-mod-proxy-uwsgi
|
||||
elif [[ $os_VENDOR == "Fedora" ]]; then
|
||||
# Note httpd comes with mod_proxy_uwsgi and it is loaded by
|
||||
# default; the mod_proxy_uwsgi package actually conflicts now.
|
||||
# See:
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1574335
|
||||
#
|
||||
# Thus there is nothing else to do after this install
|
||||
install_package uwsgi \
|
||||
uwsgi-plugin-python3
|
||||
else
|
||||
# Centos actually has the module in epel, but there was a big
|
||||
# push to disable epel by default. As such, compile from source
|
||||
# there.
|
||||
local dir
|
||||
dir=$(mktemp -d)
|
||||
pushd $dir
|
||||
pip_install uwsgi
|
||||
pip download uwsgi -c $REQUIREMENTS_DIR/upper-constraints.txt
|
||||
local uwsgi
|
||||
uwsgi=$(ls uwsgi*)
|
||||
tar xvf $uwsgi
|
||||
cd uwsgi*/apache2
|
||||
sudo $apxs -i -c mod_proxy_uwsgi.c
|
||||
popd
|
||||
# delete the temp directory
|
||||
sudo rm -rf $dir
|
||||
UWSGI_PYTHON_PLUGIN=python
|
||||
fi
|
||||
|
||||
if is_ubuntu || is_suse ; then
|
||||
# we've got to enable proxy and proxy_uwsgi for this to work
|
||||
@@ -265,7 +291,7 @@ function write_uwsgi_config {
|
||||
# configured after graceful shutdown
|
||||
iniset "$file" uwsgi worker-reload-mercy $WORKER_TIMEOUT
|
||||
iniset "$file" uwsgi enable-threads true
|
||||
iniset "$file" uwsgi plugins python
|
||||
iniset "$file" uwsgi plugins http,${UWSGI_PYTHON_PLUGIN}
|
||||
# uwsgi recommends this to prevent thundering herd on accept.
|
||||
iniset "$file" uwsgi thunder-lock true
|
||||
# Set hook to trigger graceful shutdown on SIGTERM
|
||||
@@ -318,7 +344,7 @@ function write_local_uwsgi_http_config {
|
||||
iniset "$file" uwsgi die-on-term true
|
||||
iniset "$file" uwsgi exit-on-reload false
|
||||
iniset "$file" uwsgi enable-threads true
|
||||
iniset "$file" uwsgi plugins python
|
||||
iniset "$file" uwsgi plugins http,${UWSGI_PYTHON_PLUGIN}
|
||||
# uwsgi recommends this to prevent thundering herd on accept.
|
||||
iniset "$file" uwsgi thunder-lock true
|
||||
# Set hook to trigger graceful shutdown on SIGTERM
|
||||
|
||||
+1
-1
@@ -511,7 +511,7 @@ function start_cinder {
|
||||
start_tls_proxy cinder '*' $CINDER_SERVICE_PORT $CINDER_SERVICE_HOST $CINDER_SERVICE_PORT_INT
|
||||
fi
|
||||
else
|
||||
run_process "c-api" "$CINDER_BIN_DIR/uwsgi --procname-prefix cinder-api --ini $CINDER_UWSGI_CONF"
|
||||
run_process "c-api" "$(which uwsgi) --procname-prefix cinder-api --ini $CINDER_UWSGI_CONF"
|
||||
cinder_url=$service_protocol://$SERVICE_HOST/volume/v3
|
||||
fi
|
||||
fi
|
||||
|
||||
+1
-1
@@ -343,7 +343,7 @@ function start_glance {
|
||||
|
||||
run_process g-reg "$GLANCE_BIN_DIR/glance-registry --config-file=$GLANCE_CONF_DIR/glance-registry.conf"
|
||||
if [[ "$WSGI_MODE" == "uwsgi" ]]; then
|
||||
run_process g-api "$GLANCE_BIN_DIR/uwsgi --procname-prefix glance-api --ini $GLANCE_UWSGI_CONF"
|
||||
run_process g-api "$(which uwsgi) --procname-prefix glance-api --ini $GLANCE_UWSGI_CONF"
|
||||
else
|
||||
run_process g-api "$GLANCE_BIN_DIR/glance-api --config-file=$GLANCE_CONF_DIR/glance-api.conf"
|
||||
fi
|
||||
|
||||
+1
-1
@@ -515,7 +515,7 @@ function start_keystone {
|
||||
enable_apache_site keystone
|
||||
restart_apache_server
|
||||
else # uwsgi
|
||||
run_process keystone "$KEYSTONE_BIN_DIR/uwsgi --procname-prefix keystone --ini $KEYSTONE_PUBLIC_UWSGI_CONF" ""
|
||||
run_process keystone "$(which uwsgi) --procname-prefix keystone --ini $KEYSTONE_PUBLIC_UWSGI_CONF" ""
|
||||
fi
|
||||
|
||||
echo "Waiting for keystone to start..."
|
||||
|
||||
+1
-1
@@ -458,7 +458,7 @@ function start_neutron_api {
|
||||
done
|
||||
|
||||
if [ "$NEUTRON_DEPLOY_MOD_WSGI" == "True" ]; then
|
||||
run_process neutron-api "$NEUTRON_BIN_DIR/uwsgi --procname-prefix neutron-api --ini $NEUTRON_UWSGI_CONF"
|
||||
run_process neutron-api "$(which uwsgi) --procname-prefix neutron-api --ini $NEUTRON_UWSGI_CONF"
|
||||
neutron_url=$service_protocol://$NEUTRON_SERVICE_HOST/networking/
|
||||
enable_service neutron-rpc-server
|
||||
run_process neutron-rpc-server "$NEUTRON_BIN_DIR/neutron-rpc-server $opts"
|
||||
|
||||
+1
-1
@@ -486,7 +486,7 @@ function start_neutron_service_and_check {
|
||||
# Start the Neutron service
|
||||
if [ "$NEUTRON_DEPLOY_MOD_WSGI" == "True" ]; then
|
||||
enable_service neutron-api
|
||||
run_process neutron-api "$NEUTRON_BIN_DIR/uwsgi --procname-prefix neutron-api --ini $NEUTRON_UWSGI_CONF"
|
||||
run_process neutron-api "$(which uwsgi) --procname-prefix neutron-api --ini $NEUTRON_UWSGI_CONF"
|
||||
neutron_url=$Q_PROTOCOL://$Q_HOST/networking/
|
||||
enable_service neutron-rpc-server
|
||||
run_process neutron-rpc-server "$NEUTRON_BIN_DIR/neutron-rpc-server $cfg_file_options"
|
||||
|
||||
@@ -874,7 +874,7 @@ function start_nova_api {
|
||||
start_tls_proxy nova '*' $NOVA_SERVICE_PORT $NOVA_SERVICE_HOST $NOVA_SERVICE_PORT_INT
|
||||
fi
|
||||
else
|
||||
run_process "n-api" "$NOVA_BIN_DIR/uwsgi --procname-prefix nova-api --ini $NOVA_UWSGI_CONF"
|
||||
run_process "n-api" "$(which uwsgi) --procname-prefix nova-api --ini $NOVA_UWSGI_CONF"
|
||||
nova_url=$service_protocol://$SERVICE_HOST/compute/v2.1/
|
||||
fi
|
||||
|
||||
@@ -908,14 +908,14 @@ function start_nova_compute {
|
||||
local compute_cell_conf=$NOVA_CONF
|
||||
fi
|
||||
|
||||
cp $compute_cell_conf $NOVA_CPU_CONF
|
||||
|
||||
if [[ "${CELLSV2_SETUP}" == "singleconductor" ]]; then
|
||||
# NOTE(danms): Grenade doesn't setup multi-cell rabbit, so
|
||||
# skip these bits and use the normal config.
|
||||
NOVA_CPU_CONF=$compute_cell_conf
|
||||
echo "Skipping multi-cell conductor fleet setup"
|
||||
else
|
||||
# "${CELLSV2_SETUP}" is "superconductor"
|
||||
cp $compute_cell_conf $NOVA_CPU_CONF
|
||||
# FIXME(danms): Should this be configurable?
|
||||
iniset $NOVA_CPU_CONF workarounds disable_group_policy_check_upcall True
|
||||
# Since the nova-compute service cannot reach nova-scheduler over
|
||||
@@ -924,6 +924,10 @@ function start_nova_compute {
|
||||
iniset_rpc_backend nova $NOVA_CPU_CONF DEFAULT "nova_cell${NOVA_CPU_CELL}"
|
||||
fi
|
||||
|
||||
# Make sure we nuke any database config
|
||||
inidelete $NOVA_CPU_CONF database connection
|
||||
inidelete $NOVA_CPU_CONF api_database connection
|
||||
|
||||
# Console proxies were configured earlier in create_nova_conf. Now that the
|
||||
# nova-cpu.conf has been created, configure the console settings required
|
||||
# by the compute process.
|
||||
@@ -986,7 +990,7 @@ function start_nova_rest {
|
||||
if [ "$NOVA_USE_MOD_WSGI" == "False" ]; then
|
||||
run_process n-api-meta "$NOVA_BIN_DIR/nova-api-metadata --config-file $compute_cell_conf"
|
||||
else
|
||||
run_process n-api-meta "$NOVA_BIN_DIR/uwsgi --procname-prefix nova-api-meta --ini $NOVA_METADATA_UWSGI_CONF"
|
||||
run_process n-api-meta "$(which uwsgi) --procname-prefix nova-api-meta --ini $NOVA_METADATA_UWSGI_CONF"
|
||||
fi
|
||||
|
||||
# nova-consoleauth always runs globally
|
||||
|
||||
+1
-1
@@ -167,7 +167,7 @@ function install_placement {
|
||||
# start_placement_api() - Start the API processes ahead of other things
|
||||
function start_placement_api {
|
||||
if [[ "$WSGI_MODE" == "uwsgi" ]]; then
|
||||
run_process "placement-api" "$PLACEMENT_BIN_DIR/uwsgi --procname-prefix placement --ini $PLACEMENT_UWSGI_CONF"
|
||||
run_process "placement-api" "$(which uwsgi) --procname-prefix placement --ini $PLACEMENT_UWSGI_CONF"
|
||||
else
|
||||
enable_apache_site placement-api
|
||||
restart_apache_server
|
||||
|
||||
@@ -757,7 +757,9 @@ function init_swift {
|
||||
|
||||
function install_swift {
|
||||
git_clone $SWIFT_REPO $SWIFT_DIR $SWIFT_BRANCH
|
||||
setup_develop $SWIFT_DIR
|
||||
# keystonemiddleware needs to be installed via keystone extras as defined
|
||||
# in setup.cfg, see bug #1909018 for more details.
|
||||
setup_develop $SWIFT_DIR keystone
|
||||
if [ "$SWIFT_USE_MOD_WSGI" == "True" ]; then
|
||||
install_apache_wsgi
|
||||
fi
|
||||
|
||||
+65
-11
@@ -57,7 +57,7 @@ BUILD_TIMEOUT=${BUILD_TIMEOUT:-196}
|
||||
# This must be False on stable branches, as master tempest
|
||||
# deps do not match stable branch deps. Set this to True to
|
||||
# have tempest installed in DevStack by default.
|
||||
INSTALL_TEMPEST=${INSTALL_TEMPEST:-"True"}
|
||||
INSTALL_TEMPEST=${INSTALL_TEMPEST:-"False"}
|
||||
|
||||
# This variable is passed directly to pip install inside the common tox venv
|
||||
# that is created
|
||||
@@ -102,6 +102,14 @@ function remove_disabled_extensions {
|
||||
remove_disabled_services "$extensions_list" "$disabled_exts"
|
||||
}
|
||||
|
||||
# image_size_in_gib - converts an image size from bytes to GiB, rounded up
|
||||
# Takes an image ID parameter as input
|
||||
function image_size_in_gib {
|
||||
local size
|
||||
size=$(openstack image show $1 -c size -f value)
|
||||
echo $size | python -c "import math; print int(math.ceil(float(int(raw_input()) / 1024.0 ** 3)))"
|
||||
}
|
||||
|
||||
# configure_tempest() - Set config files, create data dirs, etc
|
||||
function configure_tempest {
|
||||
if [[ "$INSTALL_TEMPEST" == "True" ]]; then
|
||||
@@ -125,6 +133,7 @@ function configure_tempest {
|
||||
local public_network_id
|
||||
local public_router_id
|
||||
local ssh_connect_method="floating"
|
||||
local disk
|
||||
|
||||
# Save IFS
|
||||
ifs=$IFS
|
||||
@@ -190,11 +199,15 @@ function configure_tempest {
|
||||
available_flavors=$(nova flavor-list)
|
||||
if [[ -z "$DEFAULT_INSTANCE_TYPE" ]]; then
|
||||
if [[ ! ( $available_flavors =~ 'm1.nano' ) ]]; then
|
||||
openstack flavor create --id 42 --ram 64 --disk 0 --vcpus 1 m1.nano
|
||||
# Determine the flavor disk size based on the image size.
|
||||
disk=$(image_size_in_gib $image_uuid)
|
||||
openstack flavor create --id 42 --ram 128 --disk $disk --vcpus 1 m1.nano
|
||||
fi
|
||||
flavor_ref=42
|
||||
if [[ ! ( $available_flavors =~ 'm1.micro' ) ]]; then
|
||||
openstack flavor create --id 84 --ram 128 --disk 0 --vcpus 1 m1.micro
|
||||
# Determine the alt flavor disk size based on the alt image size.
|
||||
disk=$(image_size_in_gib $image_uuid_alt)
|
||||
openstack flavor create --id 84 --ram 192 --disk $disk --vcpus 1 m1.micro
|
||||
fi
|
||||
flavor_ref_alt=84
|
||||
else
|
||||
@@ -347,7 +360,7 @@ function configure_tempest {
|
||||
# NOTE- To avoid microversion tests failure on stable branch, we need to change "tempest_compute_max_microversion"
|
||||
# for stable branch on each release which should be changed from "latest" to max supported version of that release.
|
||||
local tempest_compute_min_microversion=${TEMPEST_COMPUTE_MIN_MICROVERSION:-None}
|
||||
local tempest_compute_max_microversion=${TEMPEST_COMPUTE_MAX_MICROVERSION:-"latest"}
|
||||
local tempest_compute_max_microversion=${TEMPEST_COMPUTE_MAX_MICROVERSION:-"2.65"}
|
||||
# Reset microversions to None where v2.0 is running which does not support microversion.
|
||||
# Both "None" means no microversion testing.
|
||||
if [[ "$TEMPEST_COMPUTE_TYPE" == "compute_legacy" ]]; then
|
||||
@@ -460,7 +473,7 @@ function configure_tempest {
|
||||
iniset $TEMPEST_CONFIG volume-feature-enabled api_v3 True
|
||||
iniset $TEMPEST_CONFIG volume-feature-enabled api_v1 $(trueorfalse False TEMPEST_VOLUME_API_V1)
|
||||
local tempest_volume_min_microversion=${TEMPEST_VOLUME_MIN_MICROVERSION:-None}
|
||||
local tempest_volume_max_microversion=${TEMPEST_VOLUME_MAX_MICROVERSION:-"latest"}
|
||||
local tempest_volume_max_microversion=${TEMPEST_VOLUME_MAX_MICROVERSION:-"3.55"}
|
||||
# Reset microversions to None where v2 is running which does not support microversion.
|
||||
# Both "None" means no microversion testing.
|
||||
if [[ "$TEMPEST_VOLUME_TYPE" == "volumev2" ]]; then
|
||||
@@ -576,9 +589,8 @@ function configure_tempest {
|
||||
tox -revenv-tempest --notest
|
||||
fi
|
||||
|
||||
# The requirements might be on a different branch, while tempest needs master requirements.
|
||||
(cd $REQUIREMENTS_DIR && git show master:upper-constraints.txt) > u-c-m.txt
|
||||
tox -evenv-tempest -- pip install -c u-c-m.txt -r requirements.txt
|
||||
# NOTE(gmann): Use branch constraint because Tempest is pinned to the branch release instead of using master.
|
||||
tox -evenv-tempest -- pip install -c $REQUIREMENTS_DIR/upper-constraints.txt -r requirements.txt
|
||||
|
||||
# Auth:
|
||||
iniset $TEMPEST_CONFIG auth tempest_roles "Member"
|
||||
@@ -614,16 +626,33 @@ function configure_tempest {
|
||||
DISABLE_NETWORK_API_EXTENSIONS+=", l3_agent_scheduler"
|
||||
fi
|
||||
|
||||
local network_api_extensions=${NETWORK_API_EXTENSIONS:-"all"}
|
||||
DEFAULT_NET_EXT="address-scope,agent,allowed-address-pairs,auto-allocated-topology"
|
||||
DEFAULT_NET_EXT+=",availability_zone,binding,default-subnetpools,dhcp_agent_scheduler"
|
||||
DEFAULT_NET_EXT+=",dvr,ext-gw-mode,external-net,extra_dhcp_opt,extraroute,flavors"
|
||||
DEFAULT_NET_EXT+=",l3-flavors,l3-ha,l3_agent_scheduler,multi-provider,net-mtu"
|
||||
DEFAULT_NET_EXT+=",network-ip-availability,network_availability_zone,pagination"
|
||||
DEFAULT_NET_EXT+=",port-security,project-id,provider,quotas,quota_details,rbac-policies"
|
||||
DEFAULT_NET_EXT+=",revision-if-match,router,router_availability_zone,security-group,service-type,sorting"
|
||||
DEFAULT_NET_EXT+=",standard-attr-description,standard-attr-revisions,standard-attr-tag,standard-attr-timestamp"
|
||||
DEFAULT_NET_EXT+=",subnet-service-types,subnet_allocation,net-mtu-writable,ip-substring-filtering"
|
||||
DEFAULT_NET_EXT+=",availability_zone_filter,filter-validation,empty-string-filtering,port-mac-address-regenerate"
|
||||
DEFAULT_NET_EXT+=",port-security-groups-filtering,fip-port-details,binding-extended"
|
||||
local network_api_extensions=${NETWORK_API_EXTENSIONS:-$DEFAULT_NET_EXT}
|
||||
if [[ ! -z "$DISABLE_NETWORK_API_EXTENSIONS" ]]; then
|
||||
# Enabled extensions are either the ones explicitly specified or those available on the API endpoint
|
||||
network_api_extensions=${NETWORK_API_EXTENSIONS:-$(iniget $tmp_cfg_file network-feature-enabled api_extensions | tr -d " ")}
|
||||
# Remove disabled extensions
|
||||
network_api_extensions=$(remove_disabled_extensions $network_api_extensions $DISABLE_NETWORK_API_EXTENSIONS)
|
||||
fi
|
||||
if [[ -n "$ADDITIONAL_NETWORK_API_EXTENSIONS" ]] && [[ "$network_api_extensions" != "all" ]]; then
|
||||
network_api_extensions+=",$ADDITIONAL_NETWORK_API_EXTENSIONS"
|
||||
fi
|
||||
iniset $TEMPEST_CONFIG network-feature-enabled api_extensions $network_api_extensions
|
||||
# Swift API Extensions
|
||||
local object_storage_api_extensions=${OBJECT_STORAGE_API_EXTENSIONS:-"all"}
|
||||
DEFAULT_SWIFT_OPT="account_quotas,bulk_delete,bulk_upload,container_quotas"
|
||||
DEFAULT_SWIFT_OPT+=",container_sync,crossdomain,formpost,ratelimit,slo"
|
||||
DEFAULT_SWIFT_OPT+=",staticweb,tempauth,tempurl,versioned_writes"
|
||||
local object_storage_api_extensions=${OBJECT_STORAGE_API_EXTENSIONS:-$DEFAULT_SWIFT_OPT}
|
||||
if [[ ! -z "$DISABLE_OBJECT_STORAGE_API_EXTENSIONS" ]]; then
|
||||
# Enabled extensions are either the ones explicitly specified or those available on the API endpoint
|
||||
object_storage_api_extensions=${OBJECT_STORAGE_API_EXTENSIONS:-$(iniget $tmp_cfg_file object-storage-feature-enabled discoverable_apis | tr -d " ")}
|
||||
@@ -632,7 +661,19 @@ function configure_tempest {
|
||||
fi
|
||||
iniset $TEMPEST_CONFIG object-storage-feature-enabled discoverable_apis $object_storage_api_extensions
|
||||
# Cinder API Extensions
|
||||
local volume_api_extensions=${VOLUME_API_EXTENSIONS:-"all"}
|
||||
|
||||
DEFAULT_VOL_EXT="OS-SCH-HNT,backups,capabilities,cgsnapshots,consistencygroups"
|
||||
DEFAULT_VOL_EXT+=",encryption,os-admin-actions,os-availability-zone"
|
||||
DEFAULT_VOL_EXT+=",os-extended-services,os-extended-snapshot-attributes"
|
||||
DEFAULT_VOL_EXT+=",os-hosts,os-image-create,os-quota-class-sets,os-quota-sets"
|
||||
DEFAULT_VOL_EXT+=",os-services,os-snapshot-actions,os-snapshot-manage"
|
||||
DEFAULT_VOL_EXT+=",os-snapshot-unmanage,os-types-extra-specs,os-types-manage"
|
||||
DEFAULT_VOL_EXT+=",os-used-limits,os-vol-host-attr,os-vol-image-meta"
|
||||
DEFAULT_VOL_EXT+=",os-vol-mig-status-attr,os-vol-tenant-attr,os-volume-actions"
|
||||
DEFAULT_VOL_EXT+=",os-volume-encryption-metadata,os-volume-manage"
|
||||
DEFAULT_VOL_EXT+=",os-volume-transfer,os-volume-type-access"
|
||||
DEFAULT_VOL_EXT+=",os-volume-unmanage,qos-specs,scheduler-stats"
|
||||
local volume_api_extensions=${VOLUME_API_EXTENSIONS:-$DEFAULT_VOL_EXT}
|
||||
if [[ ! -z "$DISABLE_VOLUME_API_EXTENSIONS" ]]; then
|
||||
# Enabled extensions are either the ones explicitly specified or those available on the API endpoint
|
||||
volume_api_extensions=${VOLUME_API_EXTENSIONS:-$(iniget $tmp_cfg_file volume-feature-enabled api_extensions | tr -d " ")}
|
||||
@@ -650,6 +691,17 @@ function install_tempest {
|
||||
git_clone $TEMPEST_REPO $TEMPEST_DIR $TEMPEST_BRANCH
|
||||
pip_install 'tox!=2.8.0'
|
||||
pushd $TEMPEST_DIR
|
||||
# NOTE(gmann): checkout the TEMPEST_BRANCH in case TEMPEST_BRANCH
|
||||
# is tag name not master. git_clone would not checkout tag because
|
||||
# TEMPEST_DIR already exist until RECLONE is true.
|
||||
git checkout $TEMPEST_BRANCH
|
||||
|
||||
# NOTE(gmann): Use branch constraint because Tempest is pinned to the branch release
|
||||
# instead of using master. We need to export it via env var UPPER_CONSTRAINTS_FILE
|
||||
# so that initial creation of tempest tox use stable branch constraint
|
||||
# instead of master constraint as defined in tempest/tox.ini
|
||||
export UPPER_CONSTRAINTS_FILE=$REQUIREMENTS_DIR/upper-constraints.txt
|
||||
|
||||
tox -r --notest -efull
|
||||
# NOTE(mtreinish) Respect constraints in the tempest full venv, things that
|
||||
# are using a tox job other than full will not be respecting constraints but
|
||||
@@ -663,6 +715,8 @@ function install_tempest {
|
||||
function install_tempest_plugins {
|
||||
pushd $TEMPEST_DIR
|
||||
if [[ $TEMPEST_PLUGINS != 0 ]] ; then
|
||||
# NOTE(gmann): Use branch constraint because Tempest is pinned to the branch release
|
||||
# instead of using master.
|
||||
tox -evenv-tempest -- pip install -c $REQUIREMENTS_DIR/upper-constraints.txt $TEMPEST_PLUGINS
|
||||
echo "Checking installed Tempest plugins:"
|
||||
tox -evenv-tempest -- tempest list-plugins
|
||||
|
||||
@@ -543,6 +543,9 @@ $listen_string
|
||||
LimitRequestFieldSize $f_header_size
|
||||
RequestHeader set X-Forwarded-Proto "https"
|
||||
|
||||
# Avoid races (at the cost of performance) to re-use a pooled connection
|
||||
# where the connection is closed (bug 1807518).
|
||||
SetEnv proxy-initial-not-pooled
|
||||
<Location />
|
||||
ProxyPass http://$b_host:$b_port/ retry=0 nocanon
|
||||
ProxyPassReverse http://$b_host:$b_port/
|
||||
|
||||
@@ -28,3 +28,4 @@
|
||||
- setup-devstack-cache
|
||||
- start-fresh-logging
|
||||
- write-devstack-local-conf
|
||||
- ensure-pip
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
name=""
|
||||
for u in `systemctl list-unit-files | grep devstack | awk '{print $1}'`; do
|
||||
name=$(echo $u | sed 's/devstack@/screen-/' | sed 's/\.service//')
|
||||
journalctl -o short-precise --unit $u | gzip - > {{ stage_dir }}/logs/$name.txt.gz
|
||||
journalctl -o short-precise --unit $u > {{ stage_dir }}/logs/$name.txt
|
||||
done
|
||||
|
||||
# Export the journal in export format to make it downloadable
|
||||
@@ -34,4 +34,4 @@
|
||||
-t sudo \
|
||||
--no-pager \
|
||||
--since="$(cat {{ devstack_base_dir }}/log-start-timestamp.txt)" \
|
||||
| gzip - > {{ stage_dir }}/logs/syslog.txt.gz
|
||||
> {{ stage_dir }}/logs/syslog.txt
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
Generate stackviz report.
|
||||
|
||||
Generate stackviz report using subunit and dstat data, using
|
||||
the stackviz archive embedded in test images.
|
||||
|
||||
**Role Variables**
|
||||
|
||||
.. zuul:rolevar:: devstack_base_dir
|
||||
:default: /opt/stack
|
||||
|
||||
The devstack base directory.
|
||||
|
||||
.. zuul:rolevar:: stage_dir
|
||||
:default: "{{ ansible_user_dir }}"
|
||||
|
||||
The stage directory where the input data can be found and
|
||||
the output will be produced.
|
||||
|
||||
.. zuul:rolevar:: zuul_work_dir
|
||||
:default: {{ devstack_base_dir }}/tempest
|
||||
|
||||
Directory to work in. It has to be a fully qualified path.
|
||||
@@ -0,0 +1,3 @@
|
||||
devstack_base_dir: /opt/stack
|
||||
stage_dir: "{{ ansible_user_dir }}"
|
||||
zuul_work_dir: "{{ devstack_base_dir }}/tempest"
|
||||
@@ -0,0 +1,73 @@
|
||||
- name: Process Stackviz
|
||||
block:
|
||||
|
||||
- name: Devstack checks if stackviz archive exists
|
||||
stat:
|
||||
path: "/opt/cache/files/stackviz-latest.tar.gz"
|
||||
register: stackviz_archive
|
||||
|
||||
- debug:
|
||||
msg: "Stackviz archive could not be found in /opt/cache/files/stackviz-latest.tar.gz"
|
||||
when: not stackviz_archive.stat.exists
|
||||
|
||||
- name: Check if subunit data exists
|
||||
stat:
|
||||
path: "{{ zuul_work_dir }}/testrepository.subunit"
|
||||
register: subunit_input
|
||||
|
||||
- debug:
|
||||
msg: "Subunit file could not be found at {{ zuul_work_dir }}/testrepository.subunit"
|
||||
when: not subunit_input.stat.exists
|
||||
|
||||
- name: Install stackviz
|
||||
when:
|
||||
- stackviz_archive.stat.exists
|
||||
- subunit_input.stat.exists
|
||||
block:
|
||||
- include_role:
|
||||
name: ensure-pip
|
||||
|
||||
- pip:
|
||||
name: "file://{{ stackviz_archive.stat.path }}"
|
||||
virtualenv: /tmp/stackviz
|
||||
virtualenv_command: '{{ ensure_pip_virtualenv_command }}'
|
||||
extra_args: -U
|
||||
|
||||
- name: Deploy stackviz static html+js
|
||||
command: cp -pR /tmp/stackviz/share/stackviz-html {{ stage_dir }}/stackviz
|
||||
when:
|
||||
- stackviz_archive.stat.exists
|
||||
- subunit_input.stat.exists
|
||||
|
||||
- name: Check if dstat data exists
|
||||
stat:
|
||||
path: "{{ devstack_base_dir }}/logs/dstat-csv.log"
|
||||
register: dstat_input
|
||||
when:
|
||||
- stackviz_archive.stat.exists
|
||||
- subunit_input.stat.exists
|
||||
|
||||
- name: Run stackviz with dstat
|
||||
shell: |
|
||||
cat {{ subunit_input.stat.path }} | \
|
||||
/tmp/stackviz/bin/stackviz-export \
|
||||
--dstat "{{ devstack_base_dir }}/logs/dstat-csv.log" \
|
||||
--env --stdin \
|
||||
{{ stage_dir }}/stackviz/data
|
||||
when:
|
||||
- stackviz_archive.stat.exists
|
||||
- subunit_input.stat.exists
|
||||
- dstat_input.stat.exists
|
||||
|
||||
- name: Run stackviz without dstat
|
||||
shell: |
|
||||
cat {{ subunit_input.stat.path }} | \
|
||||
/tmp/stackviz/bin/stackviz-export \
|
||||
--env --stdin \
|
||||
{{ stage_dir }}/stackviz/data
|
||||
when:
|
||||
- stackviz_archive.stat.exists
|
||||
- subunit_input.stat.exists
|
||||
- not dstat_input.stat.exists
|
||||
|
||||
ignore_errors: yes
|
||||
@@ -1,9 +1,13 @@
|
||||
- name: Find all source repos used by this job
|
||||
find:
|
||||
paths:
|
||||
- src/git.openstack.org/openstack
|
||||
- src/git.openstack.org/openstack-dev
|
||||
- src/git.openstack.org/openstack-infra
|
||||
- src/opendev.org/opendev
|
||||
- src/opendev.org/openstack
|
||||
- src/opendev.org/openstack-dev
|
||||
- src/opendev.org/openstack-infra
|
||||
- src/opendev.org/starlingx
|
||||
- src/opendev.org/x
|
||||
- src/opendev.org/zuul
|
||||
file_type: directory
|
||||
register: found_repos
|
||||
|
||||
|
||||
@@ -88,3 +88,12 @@ Write the local.conf file for use by devstack
|
||||
If a plugin declares a dependency on another plugin (via
|
||||
``plugin_requires`` in the plugin's settings file), this role will
|
||||
automatically emit ``enable_plugin`` lines in the correct order.
|
||||
|
||||
.. zuul:rolevar:: tempest_plugins
|
||||
:type: list
|
||||
|
||||
A list of tempest plugins which are installed alongside tempest.
|
||||
|
||||
The list of values will be combined with the base devstack directory
|
||||
and used to populate the ``TEMPEST_PLUGINS`` variable. If the variable
|
||||
already exists, its value is *not* changed.
|
||||
|
||||
@@ -155,8 +155,8 @@ class PluginGraph(DependencyGraph):
|
||||
continue
|
||||
self.loadDevstackPluginInfo(settings)
|
||||
|
||||
define_re = re.compile(r'^define_plugin\s+(\w+).*')
|
||||
require_re = re.compile(r'^plugin_requires\s+(\w+)\s+(\w+).*')
|
||||
define_re = re.compile(r'^define_plugin\s+(\S+).*')
|
||||
require_re = re.compile(r'^plugin_requires\s+(\S+)\s+(\S+).*')
|
||||
def loadDevstackPluginInfo(self, fn):
|
||||
name = None
|
||||
reqs = set()
|
||||
@@ -207,18 +207,23 @@ class PluginGraph(DependencyGraph):
|
||||
class LocalConf(object):
|
||||
|
||||
def __init__(self, localrc, localconf, base_services, services, plugins,
|
||||
base_dir, projects, project):
|
||||
base_dir, projects, project, tempest_plugins):
|
||||
self.localrc = []
|
||||
self.warnings = []
|
||||
self.meta_sections = {}
|
||||
self.plugin_deps = {}
|
||||
self.base_dir = base_dir
|
||||
self.projects = projects
|
||||
self.project = project
|
||||
if plugins:
|
||||
self.handle_plugins(plugins)
|
||||
self.tempest_plugins = tempest_plugins
|
||||
if services or base_services:
|
||||
self.handle_services(base_services, services or {})
|
||||
self.handle_localrc(localrc)
|
||||
# Plugins must be the last items in localrc, otherwise
|
||||
# the configuration lines which follows them in the file are
|
||||
# not applied to the plugins (for example, the value of DEST.)
|
||||
if plugins:
|
||||
self.handle_plugins(plugins)
|
||||
if localconf:
|
||||
self.handle_localconf(localconf)
|
||||
|
||||
@@ -243,12 +248,19 @@ class LocalConf(object):
|
||||
|
||||
def handle_localrc(self, localrc):
|
||||
lfg = False
|
||||
tp = False
|
||||
if localrc:
|
||||
vg = VarGraph(localrc)
|
||||
for k, v in vg.getVars():
|
||||
self.localrc.append('{}={}'.format(k, v))
|
||||
# Avoid double quoting
|
||||
if len(v) and v[0]=='"':
|
||||
self.localrc.append('{}={}'.format(k, v))
|
||||
else:
|
||||
self.localrc.append('{}="{}"'.format(k, v))
|
||||
if k == 'LIBS_FROM_GIT':
|
||||
lfg = True
|
||||
elif k == 'TEMPEST_PLUGINS':
|
||||
tp = True
|
||||
|
||||
if not lfg and (self.projects or self.project):
|
||||
required_projects = []
|
||||
@@ -263,6 +275,19 @@ class LocalConf(object):
|
||||
self.localrc.append('LIBS_FROM_GIT={}'.format(
|
||||
','.join(required_projects)))
|
||||
|
||||
if self.tempest_plugins:
|
||||
if not tp:
|
||||
tp_dirs = []
|
||||
for tempest_plugin in self.tempest_plugins:
|
||||
tp_dirs.append(os.path.join(self.base_dir, tempest_plugin))
|
||||
self.localrc.append('TEMPEST_PLUGINS="{}"'.format(
|
||||
' '.join(tp_dirs)))
|
||||
else:
|
||||
self.warnings.append('TEMPEST_PLUGINS already defined ({}),'
|
||||
'requested value {} ignored'.format(
|
||||
tp, self.tempest_plugins))
|
||||
|
||||
|
||||
def handle_localconf(self, localconf):
|
||||
for phase, phase_data in localconf.items():
|
||||
for fn, fn_data in phase_data.items():
|
||||
@@ -297,6 +322,7 @@ def main():
|
||||
path=dict(type='str'),
|
||||
projects=dict(type='dict'),
|
||||
project=dict(type='dict'),
|
||||
tempest_plugins=dict(type='list'),
|
||||
)
|
||||
)
|
||||
|
||||
@@ -308,10 +334,11 @@ def main():
|
||||
p.get('plugins'),
|
||||
p.get('base_dir'),
|
||||
p.get('projects'),
|
||||
p.get('project'))
|
||||
p.get('project'),
|
||||
p.get('tempest_plugins'))
|
||||
lc.write(p['path'])
|
||||
|
||||
module.exit_json()
|
||||
module.exit_json(warnings=lc.warnings)
|
||||
|
||||
|
||||
try:
|
||||
|
||||
@@ -23,6 +23,20 @@ from devstack_local_conf import LocalConf
|
||||
from collections import OrderedDict
|
||||
|
||||
class TestDevstackLocalConf(unittest.TestCase):
|
||||
|
||||
@staticmethod
|
||||
def _init_localconf(p):
|
||||
lc = LocalConf(p.get('localrc'),
|
||||
p.get('local_conf'),
|
||||
p.get('base_services'),
|
||||
p.get('services'),
|
||||
p.get('plugins'),
|
||||
p.get('base_dir'),
|
||||
p.get('projects'),
|
||||
p.get('project'),
|
||||
p.get('tempest_plugins'))
|
||||
return lc
|
||||
|
||||
def setUp(self):
|
||||
self.tmpdir = tempfile.mkdtemp()
|
||||
|
||||
@@ -40,9 +54,9 @@ class TestDevstackLocalConf(unittest.TestCase):
|
||||
# We use ordereddict here to make sure the plugins are in the
|
||||
# *wrong* order for testing.
|
||||
plugins = OrderedDict([
|
||||
('bar', 'git://git.openstack.org/openstack/bar-plugin'),
|
||||
('foo', 'git://git.openstack.org/openstack/foo-plugin'),
|
||||
('baz', 'git://git.openstack.org/openstack/baz-plugin'),
|
||||
('bar', 'https://git.openstack.org/openstack/bar-plugin'),
|
||||
('foo', 'https://git.openstack.org/openstack/foo-plugin'),
|
||||
('baz', 'https://git.openstack.org/openstack/baz-plugin'),
|
||||
])
|
||||
p = dict(localrc=localrc,
|
||||
local_conf=local_conf,
|
||||
@@ -51,14 +65,7 @@ class TestDevstackLocalConf(unittest.TestCase):
|
||||
plugins=plugins,
|
||||
base_dir='./test',
|
||||
path=os.path.join(self.tmpdir, 'test.local.conf'))
|
||||
lc = LocalConf(p.get('localrc'),
|
||||
p.get('local_conf'),
|
||||
p.get('base_services'),
|
||||
p.get('services'),
|
||||
p.get('plugins'),
|
||||
p.get('base_dir'),
|
||||
p.get('projects'),
|
||||
p.get('project'))
|
||||
lc = self._init_localconf(p)
|
||||
lc.write(p['path'])
|
||||
|
||||
plugins = []
|
||||
@@ -78,12 +85,12 @@ class TestDevstackLocalConf(unittest.TestCase):
|
||||
with open(os.path.join(
|
||||
self.tmpdir,
|
||||
'foo-plugin', 'devstack', 'settings'), 'w') as f:
|
||||
f.write('define_plugin foo\n')
|
||||
f.write('define_plugin foo-plugin\n')
|
||||
with open(os.path.join(
|
||||
self.tmpdir,
|
||||
'bar-plugin', 'devstack', 'settings'), 'w') as f:
|
||||
f.write('define_plugin bar\n')
|
||||
f.write('plugin_requires bar foo\n')
|
||||
f.write('define_plugin bar-plugin\n')
|
||||
f.write('plugin_requires bar-plugin foo-plugin\n')
|
||||
|
||||
localrc = {'test_localrc': '1'}
|
||||
local_conf = {'install':
|
||||
@@ -94,8 +101,8 @@ class TestDevstackLocalConf(unittest.TestCase):
|
||||
# We use ordereddict here to make sure the plugins are in the
|
||||
# *wrong* order for testing.
|
||||
plugins = OrderedDict([
|
||||
('bar', 'git://git.openstack.org/openstack/bar-plugin'),
|
||||
('foo', 'git://git.openstack.org/openstack/foo-plugin'),
|
||||
('bar-plugin', 'https://git.openstack.org/openstack/bar-plugin'),
|
||||
('foo-plugin', 'https://git.openstack.org/openstack/foo-plugin'),
|
||||
])
|
||||
p = dict(localrc=localrc,
|
||||
local_conf=local_conf,
|
||||
@@ -104,6 +111,15 @@ class TestDevstackLocalConf(unittest.TestCase):
|
||||
plugins=plugins,
|
||||
base_dir=self.tmpdir,
|
||||
path=os.path.join(self.tmpdir, 'test.local.conf'))
|
||||
lc = self._init_localconf(p)
|
||||
lc.write(p['path'])
|
||||
|
||||
plugins = []
|
||||
with open(p['path']) as f:
|
||||
for line in f:
|
||||
if line.startswith('enable_plugin'):
|
||||
plugins.append(line.split()[1])
|
||||
self.assertEqual(['foo-plugin', 'bar-plugin'], plugins)
|
||||
|
||||
def test_libs_from_git(self):
|
||||
"Test that LIBS_FROM_GIT is auto-generated"
|
||||
@@ -129,14 +145,7 @@ class TestDevstackLocalConf(unittest.TestCase):
|
||||
path=os.path.join(self.tmpdir, 'test.local.conf'),
|
||||
projects=projects,
|
||||
project=project)
|
||||
lc = LocalConf(p.get('localrc'),
|
||||
p.get('local_conf'),
|
||||
p.get('base_services'),
|
||||
p.get('services'),
|
||||
p.get('plugins'),
|
||||
p.get('base_dir'),
|
||||
p.get('projects'),
|
||||
p.get('project'))
|
||||
lc = self._init_localconf(p)
|
||||
lc.write(p['path'])
|
||||
|
||||
lfg = None
|
||||
@@ -168,14 +177,7 @@ class TestDevstackLocalConf(unittest.TestCase):
|
||||
base_dir='./test',
|
||||
path=os.path.join(self.tmpdir, 'test.local.conf'),
|
||||
projects=projects)
|
||||
lc = LocalConf(p.get('localrc'),
|
||||
p.get('local_conf'),
|
||||
p.get('base_services'),
|
||||
p.get('services'),
|
||||
p.get('plugins'),
|
||||
p.get('base_dir'),
|
||||
p.get('projects'),
|
||||
p.get('project'))
|
||||
lc = self._init_localconf(p)
|
||||
lc.write(p['path'])
|
||||
|
||||
lfg = None
|
||||
@@ -183,7 +185,25 @@ class TestDevstackLocalConf(unittest.TestCase):
|
||||
for line in f:
|
||||
if line.startswith('LIBS_FROM_GIT'):
|
||||
lfg = line.strip().split('=')[1]
|
||||
self.assertEqual('oslo.db', lfg)
|
||||
self.assertEqual('"oslo.db"', lfg)
|
||||
|
||||
def test_avoid_double_quote(self):
|
||||
"Test that there a no duplicated quotes"
|
||||
localrc = {'TESTVAR': '"quoted value"'}
|
||||
p = dict(localrc=localrc,
|
||||
base_services=[],
|
||||
base_dir='./test',
|
||||
path=os.path.join(self.tmpdir, 'test.local.conf'),
|
||||
projects={})
|
||||
lc = self._init_localconf(p)
|
||||
lc.write(p['path'])
|
||||
|
||||
testvar = None
|
||||
with open(p['path']) as f:
|
||||
for line in f:
|
||||
if line.startswith('TESTVAR'):
|
||||
testvar = line.strip().split('=')[1]
|
||||
self.assertEqual('"quoted value"', testvar)
|
||||
|
||||
def test_plugin_circular_deps(self):
|
||||
"Test that plugins with circular dependencies fail"
|
||||
@@ -211,8 +231,8 @@ class TestDevstackLocalConf(unittest.TestCase):
|
||||
# We use ordereddict here to make sure the plugins are in the
|
||||
# *wrong* order for testing.
|
||||
plugins = OrderedDict([
|
||||
('bar', 'git://git.openstack.org/openstack/bar-plugin'),
|
||||
('foo', 'git://git.openstack.org/openstack/foo-plugin'),
|
||||
('bar', 'https://git.openstack.org/openstack/bar-plugin'),
|
||||
('foo', 'https://git.openstack.org/openstack/foo-plugin'),
|
||||
])
|
||||
p = dict(localrc=localrc,
|
||||
local_conf=local_conf,
|
||||
@@ -222,14 +242,50 @@ class TestDevstackLocalConf(unittest.TestCase):
|
||||
base_dir=self.tmpdir,
|
||||
path=os.path.join(self.tmpdir, 'test.local.conf'))
|
||||
with self.assertRaises(Exception):
|
||||
lc = LocalConf(p.get('localrc'),
|
||||
p.get('local_conf'),
|
||||
p.get('base_services'),
|
||||
p.get('services'),
|
||||
p.get('plugins'),
|
||||
p.get('base_dir'))
|
||||
lc = self._init_localconf(p)
|
||||
lc.write(p['path'])
|
||||
|
||||
def _find_tempest_plugins_value(self, file_path):
|
||||
tp = None
|
||||
with open(file_path) as f:
|
||||
for line in f:
|
||||
if line.startswith('TEMPEST_PLUGINS'):
|
||||
found = line.strip().split('=')[1]
|
||||
self.assertIsNone(tp,
|
||||
"TEMPEST_PLUGIN ({}) found again ({})".format(
|
||||
tp, found))
|
||||
tp = found
|
||||
return tp
|
||||
|
||||
def test_tempest_plugins(self):
|
||||
"Test that TEMPEST_PLUGINS is correctly populated."
|
||||
p = dict(base_services=[],
|
||||
base_dir='./test',
|
||||
path=os.path.join(self.tmpdir, 'test.local.conf'),
|
||||
tempest_plugins=['heat-tempest-plugin', 'sahara-tests'])
|
||||
lc = self._init_localconf(p)
|
||||
lc.write(p['path'])
|
||||
|
||||
tp = self._find_tempest_plugins_value(p['path'])
|
||||
self.assertEqual('"./test/heat-tempest-plugin ./test/sahara-tests"', tp)
|
||||
self.assertEqual(len(lc.warnings), 0)
|
||||
|
||||
def test_tempest_plugins_not_overridden(self):
|
||||
"""Test that the existing value of TEMPEST_PLUGINS is not overridden
|
||||
by the user-provided value, but a warning is emitted."""
|
||||
localrc = {'TEMPEST_PLUGINS': 'someplugin'}
|
||||
p = dict(localrc=localrc,
|
||||
base_services=[],
|
||||
base_dir='./test',
|
||||
path=os.path.join(self.tmpdir, 'test.local.conf'),
|
||||
tempest_plugins=['heat-tempest-plugin', 'sahara-tests'])
|
||||
lc = self._init_localconf(p)
|
||||
lc.write(p['path'])
|
||||
|
||||
tp = self._find_tempest_plugins_value(p['path'])
|
||||
self.assertEqual('"someplugin"', tp)
|
||||
self.assertEqual(len(lc.warnings), 1)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
@@ -10,4 +10,5 @@
|
||||
local_conf: "{{ devstack_local_conf|default(omit) }}"
|
||||
base_dir: "{{ devstack_base_dir|default(omit) }}"
|
||||
projects: "{{ zuul.projects }}"
|
||||
project: "{{ zuul.project }}"
|
||||
project: "{{ zuul.project }}"
|
||||
tempest_plugins: "{{ tempest_plugins|default(omit) }}"
|
||||
|
||||
@@ -328,7 +328,13 @@ function _install_rdo {
|
||||
# Per the point above, it's a bunch of repos so starts getting a
|
||||
# little messy...
|
||||
if ! is_package_installed rdo-release ; then
|
||||
yum_install https://rdoproject.org/repos/rdo-release.rpm
|
||||
if [[ "$TARGET_BRANCH" == "master" ]]; then
|
||||
yum_install https://rdoproject.org/repos/rdo-release.rpm
|
||||
else
|
||||
# Get latest rdo-release-$rdo_release RPM package version
|
||||
rdo_release=$(echo $TARGET_BRANCH | sed "s|stable/||g")
|
||||
yum_install https://rdoproject.org/repos/openstack-$rdo_release/rdo-release-$rdo_release.rpm
|
||||
fi
|
||||
fi
|
||||
|
||||
# Also enable optional for RHEL7 proper. Note this is a silent
|
||||
|
||||
@@ -15,7 +15,7 @@ source $RC_DIR/functions
|
||||
|
||||
# Set the target branch. This is used so that stable branching
|
||||
# does not need to update each repo below.
|
||||
TARGET_BRANCH=master
|
||||
TARGET_BRANCH=stable/rocky
|
||||
|
||||
# Cycle trailing projects need to branch later than the others.
|
||||
TRAILING_TARGET_BRANCH=master
|
||||
@@ -237,7 +237,7 @@ WSGI_MODE=${WSGI_MODE:-"uwsgi"}
|
||||
|
||||
# Base GIT Repo URL
|
||||
# Another option is https://git.openstack.org
|
||||
GIT_BASE=${GIT_BASE:-git://git.openstack.org}
|
||||
GIT_BASE=${GIT_BASE:-https://git.openstack.org}
|
||||
|
||||
# The location of REQUIREMENTS once cloned
|
||||
REQUIREMENTS_DIR=$DEST/requirements
|
||||
@@ -310,8 +310,10 @@ REQUIREMENTS_BRANCH=${REQUIREMENTS_BRANCH:-$TARGET_BRANCH}
|
||||
|
||||
# Tempest test suite
|
||||
TEMPEST_REPO=${TEMPEST_REPO:-${GIT_BASE}/openstack/tempest.git}
|
||||
TEMPEST_BRANCH=${TEMPEST_BRANCH:-$BRANCHLESS_TARGET_BRANCH}
|
||||
|
||||
# Use Tempest tag 23.0.0) which is Rocky supported version for
|
||||
# Xenial jobs running on py3.5.
|
||||
# https://docs.openstack.org/releasenotes/tempest/v23.0.0.html
|
||||
TEMPEST_BRANCH=${TEMPEST_BRANCH:-23.0.0}
|
||||
|
||||
##############
|
||||
#
|
||||
|
||||
@@ -272,7 +272,7 @@ function test_export_proxy_variables {
|
||||
|
||||
export_proxy_variables
|
||||
expected=$(echo -e "http_proxy=$http_proxy\nhttps_proxy=$https_proxy\nno_proxy=$no_proxy")
|
||||
results=$(env | egrep '(http(s)?|no)_proxy=')
|
||||
results=$(env | egrep '(http(s)?|no)_proxy=' | sort)
|
||||
if [[ $expected = $results ]]; then
|
||||
passed "OK: Proxy variables are exported when proxy variables are set"
|
||||
else
|
||||
|
||||
@@ -95,19 +95,7 @@ function test_libs_exist {
|
||||
echo "test_libs_exist PASSED"
|
||||
}
|
||||
|
||||
function test_branch_master {
|
||||
for lib in $ALL_LIBS; do
|
||||
if [[ ${GITBRANCH[$lib]} != "master" ]]; then
|
||||
echo "GITBRANCH for $lib not master (${GITBRANCH[$lib]})"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
echo "test_branch_master PASSED"
|
||||
}
|
||||
|
||||
set -o errexit
|
||||
|
||||
test_libs_exist
|
||||
test_branch_master
|
||||
test_all_libs_upto_date
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@
|
||||
|
||||
echo "Ensuring we don't have crazy refs"
|
||||
|
||||
REFS=`grep BRANCH stackrc | grep -v 'TARGET_BRANCH' | grep -v 'NOVNC_BRANCH'`
|
||||
REFS=`grep BRANCH stackrc | grep -v 'TARGET_BRANCH' | grep -v 'NOVNC_BRANCH' | grep -v TEMPEST_BRANCH`
|
||||
rc=$?
|
||||
if [[ $rc -eq 0 ]]; then
|
||||
echo "Branch defaults must be one of the *TARGET_BRANCH values. Found:"
|
||||
|
||||
@@ -227,10 +227,14 @@ function fixup_fedora {
|
||||
# install.d/pip-and-virtualenv-source-install/04-install-pip
|
||||
# [2] https://bugzilla.redhat.com/show_bug.cgi?id=1477823
|
||||
|
||||
# TODO(jh): virtualenv 20.0.1 is breaking things in a yet unknown way.
|
||||
# Install previous virtualenv over what infra preinstalls as a hotfix.
|
||||
function fixup_virtualenv {
|
||||
if [[ ! -f /etc/ci/mirror_info.sh ]]; then
|
||||
install_package python-virtualenv
|
||||
pip_install -U --force-reinstall virtualenv
|
||||
pip_install -U --force-reinstall 'virtualenv<20'
|
||||
else
|
||||
pip_install -U --force-reinstall 'virtualenv<20'
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ printf "%-${name_col_len}s %s\n" "Plugin Name" "URL"
|
||||
title_underline ${name_col_len}
|
||||
|
||||
for plugin in ${sorted_plugins}; do
|
||||
giturl="git://git.openstack.org/openstack/${plugin}"
|
||||
giturl="https://git.openstack.org/openstack/${plugin}"
|
||||
gitlink="https://git.openstack.org/cgit/openstack/${plugin}"
|
||||
printf "%-${name_col_len}s %s\n" "${plugin}" "\`${giturl} <${gitlink}>\`__"
|
||||
done
|
||||
|
||||
+25
-14
@@ -37,8 +37,10 @@ FILES=$TOP_DIR/files
|
||||
# unreliable in CI situations.
|
||||
# [1] http://git.openstack.org/cgit/openstack-infra/project-config/tree/nodepool/elements/cache-devstack/source-repository-pip
|
||||
|
||||
PIP_GET_PIP_URL=${PIP_GET_PIP_URL:-"https://bootstrap.pypa.io/get-pip.py"}
|
||||
LOCAL_PIP="$FILES/$(basename $PIP_GET_PIP_URL)"
|
||||
PIP_GET_PIP_URL=${PIP_GET_PIP_URL:-"https://bootstrap.pypa.io/pip/3.5/get-pip.py"}
|
||||
PIP_GET_PIP_PY27_URL=${PIP_GET_PIP_PY27_URL:-"https://bootstrap.pypa.io/pip/2.7/get-pip.py"}
|
||||
LOCAL_PIP="$FILES/$(basename $PIP_GET_PIP_URL).old"
|
||||
LOCAL_PIP_PY27="${LOCAL_PIP}-py27"
|
||||
|
||||
GetDistro
|
||||
echo "Distro: $DISTRO"
|
||||
@@ -56,13 +58,17 @@ function get_versions {
|
||||
}
|
||||
|
||||
|
||||
function install_get_pip {
|
||||
function _install_get_pip {
|
||||
local interpreter=$1
|
||||
local pip_get_pip_url=$2
|
||||
local local_pip=$3
|
||||
|
||||
# If get-pip.py isn't python, delete it. This was probably an
|
||||
# outage on the server.
|
||||
if [[ -r $LOCAL_PIP ]]; then
|
||||
if ! head -1 $LOCAL_PIP | grep -q '#!/usr/bin/env python'; then
|
||||
echo "WARNING: Corrupt $LOCAL_PIP found removing"
|
||||
rm $LOCAL_PIP
|
||||
if [[ -r $local_pip ]]; then
|
||||
if ! head -1 $local_pip | grep -q '#!/usr/bin/env python'; then
|
||||
echo "WARNING: Corrupt $local_pip found removing"
|
||||
rm $local_pip
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -76,22 +82,27 @@ function install_get_pip {
|
||||
# Thus we use curl's "-z" feature to always check the modified
|
||||
# since and only download if a new version is out -- but only if
|
||||
# it seems we downloaded the file originally.
|
||||
if [[ ! -r $LOCAL_PIP || -r $LOCAL_PIP.downloaded ]]; then
|
||||
if [[ ! -r $local_pip || -r $local_pip.downloaded ]]; then
|
||||
# only test freshness if LOCAL_PIP is actually there,
|
||||
# otherwise we generate a scary warning.
|
||||
local timecond=""
|
||||
if [[ -r $LOCAL_PIP ]]; then
|
||||
timecond="-z $LOCAL_PIP"
|
||||
if [[ -r $local_pip ]]; then
|
||||
timecond="-z $local_pip"
|
||||
fi
|
||||
|
||||
curl -f --retry 6 --retry-delay 5 \
|
||||
$timecond -o $LOCAL_PIP $PIP_GET_PIP_URL || \
|
||||
$timecond -o $local_pip $pip_get_pip_url || \
|
||||
die $LINENO "Download of get-pip.py failed"
|
||||
touch $LOCAL_PIP.downloaded
|
||||
touch $local_pip.downloaded
|
||||
fi
|
||||
sudo -H -E python $LOCAL_PIP -c $TOOLS_DIR/cap-pip.txt
|
||||
sudo -H -E $interpreter $local_pip -c $TOOLS_DIR/cap-pip.txt
|
||||
}
|
||||
|
||||
|
||||
function install_get_pip {
|
||||
_install_get_pip python $PIP_GET_PIP_PY27_URL $LOCAL_PIP_PY27
|
||||
if python3_enabled; then
|
||||
sudo -H -E python${PYTHON3_VERSION} $LOCAL_PIP -c $TOOLS_DIR/cap-pip.txt
|
||||
_install_get_pip python${PYTHON3_VERSION} $PIP_GET_PIP_URL $LOCAL_PIP
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
@@ -181,3 +181,9 @@ if is_service_enabled cinder && is_package_installed lvm2; then
|
||||
clean_lvm_volume_group $DEFAULT_VOLUME_GROUP_NAME || /bin/true
|
||||
clean_lvm_filter
|
||||
fi
|
||||
|
||||
|
||||
# Clean any safe.directory items we wrote into the global
|
||||
# gitconfig. We can identify the relevant ones by checking that they
|
||||
# point to somewhere in our $DEST directory.
|
||||
sudo sed -i "/directory=${DEST}/ d" /etc/gitconfig
|
||||
|
||||
Reference in New Issue
Block a user