diff --git a/osci.yaml b/osci.yaml index d0326ec..e380f07 100644 --- a/osci.yaml +++ b/osci.yaml @@ -3,8 +3,12 @@ - charm-unit-jobs check: jobs: + - impish-xena: + voting: false - hirsute-wallaby - groovy-victoria + - focal-xena: + voting: false - focal-wallaby - focal-victoria - focal-ussuri diff --git a/pip.sh b/pip.sh new file mode 100755 index 0000000..9a7e6b0 --- /dev/null +++ b/pip.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +# +# This file is managed centrally by release-tools and should not be modified +# within individual charm repos. See the 'global' dir contents for available +# choices of tox.ini for OpenStack Charms: +# https://github.com/openstack-charmers/release-tools +# +# setuptools 58.0 dropped the support for use_2to3=true which is needed to +# install blessings (an indirect dependency of charm-tools). +# +# More details on the beahvior of tox and virtualenv creation can be found at +# https://github.com/tox-dev/tox/issues/448 +# +# This script is wrapper to force the use of the pinned versions early in the +# process when the virtualenv was created and upgraded before installing the +# depedencies declared in the target. +pip install 'pip<20.3' 'setuptools<50.0.0' +pip "$@" diff --git a/rebuild b/rebuild index 0a089e7..596d783 100644 --- a/rebuild +++ b/rebuild @@ -2,4 +2,4 @@ # when dependencies of the charm change, # but nothing in the charm needs to. # simply change the uuid to something new -fa352122-b3eb-11eb-bbb3-433c6f3bfc44 +53e34944-1178-11ec-9edc-c38acc23d967 diff --git a/src/tests/bundles/focal-xena.yaml b/src/tests/bundles/focal-xena.yaml new file mode 100644 index 0000000..f82c5cf --- /dev/null +++ b/src/tests/bundles/focal-xena.yaml @@ -0,0 +1,289 @@ +variables: + openstack-origin: &openstack-origin cloud:focal-xena + +series: focal + +comment: + - 'machines section to decide order of deployment. database sooner = faster' + +machines: + '0': + constraints: virt-type=kvm mem=3072M + '1': + constraints: virt-type=kvm mem=3072M + '2': + constraints: virt-type=kvm mem=3072M + '3': + constraints: virt-type=kvm mem=3072M + '4': + constraints: virt-type=kvm mem=3072M + '5': + constraints: virt-type=kvm mem=3072M + '6': + '7': + '8': + '9': + '10': + '11': + '12': + constraints: mem=4096M + '13': + '14': + '15': + '16': + +applications: + + keystone-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + neutron-api-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + glance-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + nova-cloud-controller-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + nova-cell-controller-cell2-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + options: + base-port: 3316 + placement-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + + mysql-innodb-cluster: + charm: cs:~openstack-charmers-next/mysql-innodb-cluster + num_units: 3 + options: + source: *openstack-origin + to: + - '0' + - '1' + - '2' + + mysql-innodb-cluster-cell2: + charm: cs:~openstack-charmers-next/mysql-innodb-cluster + num_units: 3 + options: + source: *openstack-origin + to: + - '3' + - '4' + - '5' + + glance: + charm: cs:~openstack-charmers-next/glance + num_units: 1 + options: + openstack-origin: *openstack-origin + worker-multiplier: 0.25 + to: + - '6' + + keystone: + charm: cs:~openstack-charmers-next/keystone + num_units: 1 + options: + admin-password: openstack + openstack-origin: *openstack-origin + worker-multiplier: 0.25 + to: + - '7' + + neutron-api: + charm: cs:~openstack-charmers-next/neutron-api + num_units: 1 + options: + manage-neutron-plugin-legacy-mode: true + neutron-plugin: ovs + flat-network-providers: physnet1 + neutron-security-groups: true + openstack-origin: *openstack-origin + worker-multiplier: 0.25 + to: + - '8' + + neutron-gateway: + charm: cs:~openstack-charmers-next/neutron-gateway + num_units: 1 + options: + bridge-mappings: physnet1:br-ex + openstack-origin: *openstack-origin + worker-multiplier: 0.25 + to: + - '9' + + neutron-openvswitch: + charm: cs:~openstack-charmers-next/neutron-openvswitch + num_units: 0 + + nova-cloud-controller: + charm: cs:~openstack-charmers-next/nova-cloud-controller + num_units: 1 + options: + network-manager: Neutron + openstack-origin: *openstack-origin + worker-multiplier: 0.25 + debug: true + to: + - '10' + + nova-cell-controller-cell2: + charm: nova-cell-controller + num_units: 1 + options: + openstack-origin: *openstack-origin + worker-multiplier: 0.25 + debug: true + cell-name: "cell2" + to: + - '11' + + nova-compute-cell2: + charm: cs:~openstack-charmers-next/nova-compute + num_units: 1 + storage: + ephemeral-device: '40G' + options: + enable-live-migration: true + enable-resize: true + migration-auth-type: ssh + openstack-origin: *openstack-origin + debug: true + to: + - '12' + + rabbitmq-server-nova: + charm: cs:~openstack-charmers-next/rabbitmq-server + num_units: 1 + to: + - '13' + + rabbitmq-server-nova-cell2: + charm: cs:~openstack-charmers-next/rabbitmq-server + num_units: 1 + to: + - '14' + + rabbitmq-server-neutron: + charm: cs:~openstack-charmers-next/rabbitmq-server + num_units: 1 + to: + - '15' + + placement: + charm: cs:~openstack-charmers-next/placement + num_units: 1 + options: + openstack-origin: *openstack-origin + debug: true + to: + - '16' + +relations: + + - - 'nova-cloud-controller:nova-cell-api' + - 'nova-cell-controller-cell2:nova-cell-compute' + + - - 'nova-cloud-controller:shared-db-cell' + - 'nova-cell-controller-cell2-mysql-router:shared-db' + + - - 'nova-cloud-controller:amqp-cell' + - 'rabbitmq-server-nova-cell2:amqp' + + - - 'nova-compute-cell2:amqp' + - 'rabbitmq-server-nova-cell2:amqp' + + - - 'neutron-gateway:amqp' + - 'rabbitmq-server-neutron:amqp' + + - - 'neutron-gateway:amqp-nova' + - 'rabbitmq-server-nova:amqp' + + - - 'keystone:shared-db' + - 'keystone-mysql-router:shared-db' + - - 'keystone-mysql-router:db-router' + - 'mysql-innodb-cluster:db-router' + + - - 'nova-cloud-controller:identity-service' + - 'keystone:identity-service' + + - - 'glance:identity-service' + - 'keystone:identity-service' + + - - 'neutron-api:identity-service' + - 'keystone:identity-service' + + - - 'neutron-openvswitch:neutron-plugin-api' + - 'neutron-api:neutron-plugin-api' + + - - 'neutron-api:shared-db' + - 'neutron-api-mysql-router:shared-db' + - - 'neutron-api-mysql-router:db-router' + - 'mysql-innodb-cluster:db-router' + + - - 'neutron-api:amqp' + - 'rabbitmq-server-neutron:amqp' + + - - 'neutron-gateway:neutron-plugin-api' + - 'neutron-api:neutron-plugin-api' + + - - 'glance:shared-db' + - 'glance-mysql-router:shared-db' + - - 'glance-mysql-router:db-router' + - 'mysql-innodb-cluster:db-router' + + - - 'glance:amqp' + - 'rabbitmq-server-neutron:amqp' + + - - 'nova-cloud-controller:image-service' + - 'glance:image-service' + + - - 'nova-compute-cell2:image-service' + - 'glance:image-service' + + - - 'nova-cell-controller-cell2:cloud-compute' + - 'nova-compute-cell2:cloud-compute' + + - - 'nova-cell-controller-cell2:identity-credentials' + - 'keystone:identity-credentials' + + - - 'nova-cloud-controller:amqp' + - 'rabbitmq-server-nova:amqp' + + - - 'nova-cell-controller-cell2:amqp' + - 'rabbitmq-server-nova-cell2:amqp' + + - - 'nova-cloud-controller:quantum-network-service' + - 'neutron-gateway:quantum-network-service' + + - - 'nova-compute-cell2:neutron-plugin' + - 'neutron-openvswitch:neutron-plugin' + + - - 'neutron-openvswitch:amqp' + - 'rabbitmq-server-neutron:amqp' + + - - 'nova-cloud-controller:shared-db' + - 'nova-cloud-controller-mysql-router:shared-db' + - - 'nova-cloud-controller-mysql-router:db-router' + - 'mysql-innodb-cluster:db-router' + + - - 'nova-cell-controller-cell2:shared-db' + - 'nova-cell-controller-cell2-mysql-router:shared-db' + - - 'nova-cell-controller-cell2-mysql-router:db-router' + - 'mysql-innodb-cluster-cell2:db-router' + + - - 'nova-cloud-controller:neutron-api' + - 'neutron-api:neutron-api' + + - - 'nova-compute-cell2:cloud-credentials' + - 'keystone:identity-credentials' + + - - 'placement:identity-service' + - 'keystone:identity-service' + + - - 'placement:shared-db' + - 'placement-mysql-router:shared-db' + - - 'placement-mysql-router:db-router' + - 'mysql-innodb-cluster:db-router' + + - - 'nova-cloud-controller:placement' + - 'placement:placement' diff --git a/src/tests/bundles/impish-xena.yaml b/src/tests/bundles/impish-xena.yaml new file mode 100644 index 0000000..1ef782b --- /dev/null +++ b/src/tests/bundles/impish-xena.yaml @@ -0,0 +1,289 @@ +variables: + openstack-origin: &openstack-origin distro + +series: impish + +comment: + - 'machines section to decide order of deployment. database sooner = faster' + +machines: + '0': + constraints: virt-type=kvm mem=3072M + '1': + constraints: virt-type=kvm mem=3072M + '2': + constraints: virt-type=kvm mem=3072M + '3': + constraints: virt-type=kvm mem=3072M + '4': + constraints: virt-type=kvm mem=3072M + '5': + constraints: virt-type=kvm mem=3072M + '6': + '7': + '8': + '9': + '10': + '11': + '12': + constraints: mem=4096M + '13': + '14': + '15': + '16': + +applications: + + keystone-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + neutron-api-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + glance-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + nova-cloud-controller-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + nova-cell-controller-cell2-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + options: + base-port: 3316 + placement-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + + mysql-innodb-cluster: + charm: cs:~openstack-charmers-next/mysql-innodb-cluster + num_units: 3 + options: + source: *openstack-origin + to: + - '0' + - '1' + - '2' + + mysql-innodb-cluster-cell2: + charm: cs:~openstack-charmers-next/mysql-innodb-cluster + num_units: 3 + options: + source: *openstack-origin + to: + - '3' + - '4' + - '5' + + glance: + charm: cs:~openstack-charmers-next/glance + num_units: 1 + options: + openstack-origin: *openstack-origin + worker-multiplier: 0.25 + to: + - '6' + + keystone: + charm: cs:~openstack-charmers-next/keystone + num_units: 1 + options: + admin-password: openstack + openstack-origin: *openstack-origin + worker-multiplier: 0.25 + to: + - '7' + + neutron-api: + charm: cs:~openstack-charmers-next/neutron-api + num_units: 1 + options: + manage-neutron-plugin-legacy-mode: true + neutron-plugin: ovs + flat-network-providers: physnet1 + neutron-security-groups: true + openstack-origin: *openstack-origin + worker-multiplier: 0.25 + to: + - '8' + + neutron-gateway: + charm: cs:~openstack-charmers-next/neutron-gateway + num_units: 1 + options: + bridge-mappings: physnet1:br-ex + openstack-origin: *openstack-origin + worker-multiplier: 0.25 + to: + - '9' + + neutron-openvswitch: + charm: cs:~openstack-charmers-next/neutron-openvswitch + num_units: 0 + + nova-cloud-controller: + charm: cs:~openstack-charmers-next/nova-cloud-controller + num_units: 1 + options: + network-manager: Neutron + openstack-origin: *openstack-origin + worker-multiplier: 0.25 + debug: true + to: + - '10' + + nova-cell-controller-cell2: + charm: nova-cell-controller + num_units: 1 + options: + openstack-origin: *openstack-origin + worker-multiplier: 0.25 + debug: true + cell-name: "cell2" + to: + - '11' + + nova-compute-cell2: + charm: cs:~openstack-charmers-next/nova-compute + num_units: 1 + storage: + ephemeral-device: '40G' + options: + enable-live-migration: true + enable-resize: true + migration-auth-type: ssh + openstack-origin: *openstack-origin + debug: true + to: + - '12' + + rabbitmq-server-nova: + charm: cs:~openstack-charmers-next/rabbitmq-server + num_units: 1 + to: + - '13' + + rabbitmq-server-nova-cell2: + charm: cs:~openstack-charmers-next/rabbitmq-server + num_units: 1 + to: + - '14' + + rabbitmq-server-neutron: + charm: cs:~openstack-charmers-next/rabbitmq-server + num_units: 1 + to: + - '15' + + placement: + charm: cs:~openstack-charmers-next/placement + num_units: 1 + options: + openstack-origin: *openstack-origin + debug: true + to: + - '16' + +relations: + + - - 'nova-cloud-controller:nova-cell-api' + - 'nova-cell-controller-cell2:nova-cell-compute' + + - - 'nova-cloud-controller:shared-db-cell' + - 'nova-cell-controller-cell2-mysql-router:shared-db' + + - - 'nova-cloud-controller:amqp-cell' + - 'rabbitmq-server-nova-cell2:amqp' + + - - 'nova-compute-cell2:amqp' + - 'rabbitmq-server-nova-cell2:amqp' + + - - 'neutron-gateway:amqp' + - 'rabbitmq-server-neutron:amqp' + + - - 'neutron-gateway:amqp-nova' + - 'rabbitmq-server-nova:amqp' + + - - 'keystone:shared-db' + - 'keystone-mysql-router:shared-db' + - - 'keystone-mysql-router:db-router' + - 'mysql-innodb-cluster:db-router' + + - - 'nova-cloud-controller:identity-service' + - 'keystone:identity-service' + + - - 'glance:identity-service' + - 'keystone:identity-service' + + - - 'neutron-api:identity-service' + - 'keystone:identity-service' + + - - 'neutron-openvswitch:neutron-plugin-api' + - 'neutron-api:neutron-plugin-api' + + - - 'neutron-api:shared-db' + - 'neutron-api-mysql-router:shared-db' + - - 'neutron-api-mysql-router:db-router' + - 'mysql-innodb-cluster:db-router' + + - - 'neutron-api:amqp' + - 'rabbitmq-server-neutron:amqp' + + - - 'neutron-gateway:neutron-plugin-api' + - 'neutron-api:neutron-plugin-api' + + - - 'glance:shared-db' + - 'glance-mysql-router:shared-db' + - - 'glance-mysql-router:db-router' + - 'mysql-innodb-cluster:db-router' + + - - 'glance:amqp' + - 'rabbitmq-server-neutron:amqp' + + - - 'nova-cloud-controller:image-service' + - 'glance:image-service' + + - - 'nova-compute-cell2:image-service' + - 'glance:image-service' + + - - 'nova-cell-controller-cell2:cloud-compute' + - 'nova-compute-cell2:cloud-compute' + + - - 'nova-cell-controller-cell2:identity-credentials' + - 'keystone:identity-credentials' + + - - 'nova-cloud-controller:amqp' + - 'rabbitmq-server-nova:amqp' + + - - 'nova-cell-controller-cell2:amqp' + - 'rabbitmq-server-nova-cell2:amqp' + + - - 'nova-cloud-controller:quantum-network-service' + - 'neutron-gateway:quantum-network-service' + + - - 'nova-compute-cell2:neutron-plugin' + - 'neutron-openvswitch:neutron-plugin' + + - - 'neutron-openvswitch:amqp' + - 'rabbitmq-server-neutron:amqp' + + - - 'nova-cloud-controller:shared-db' + - 'nova-cloud-controller-mysql-router:shared-db' + - - 'nova-cloud-controller-mysql-router:db-router' + - 'mysql-innodb-cluster:db-router' + + - - 'nova-cell-controller-cell2:shared-db' + - 'nova-cell-controller-cell2-mysql-router:shared-db' + - - 'nova-cell-controller-cell2-mysql-router:db-router' + - 'mysql-innodb-cluster-cell2:db-router' + + - - 'nova-cloud-controller:neutron-api' + - 'neutron-api:neutron-api' + + - - 'nova-compute-cell2:cloud-credentials' + - 'keystone:identity-credentials' + + - - 'placement:identity-service' + - 'keystone:identity-service' + + - - 'placement:shared-db' + - 'placement-mysql-router:shared-db' + - - 'placement-mysql-router:db-router' + - 'mysql-innodb-cluster:db-router' + + - - 'nova-cloud-controller:placement' + - 'placement:placement' diff --git a/src/tests/tests.yaml b/src/tests/tests.yaml index 7cb858b..e1adb13 100644 --- a/src/tests/tests.yaml +++ b/src/tests/tests.yaml @@ -11,7 +11,7 @@ configure: - zaza.openstack.charm_tests.nova.setup.manage_ssh_key gate_bundles: - - groovy-victoria + - hirsute-wallaby - focal-wallaby - focal-victoria - focal-ussuri @@ -20,7 +20,8 @@ gate_bundles: - bionic-stein dev_bundles: - - hirsute-wallaby + - groovy-victoria + - focal-xena - bionic-rocky smoke_bundles: @@ -28,4 +29,5 @@ smoke_bundles: tests_options: force_deploy: - - hirsute-wallaby + - groovy-victoria + - impish-xena diff --git a/src/tox.ini b/src/tox.ini index e763047..b40d295 100644 --- a/src/tox.ini +++ b/src/tox.ini @@ -22,12 +22,12 @@ skip_missing_interpreters = False requires = pip < 20.3 virtualenv < 20.0 # NOTE: https://wiki.canonical.com/engineering/OpenStack/InstallLatestToxOnOsci -minversion = 3.2.0 +minversion = 3.18.0 [testenv] setenv = VIRTUAL_ENV={envdir} PYTHONHASHSEED=0 -whitelist_externals = juju +allowlist_externals = juju passenv = HOME TERM CS_* OS_* TEST_* deps = -r{toxinidir}/test-requirements.txt install_command = diff --git a/tox.ini b/tox.ini index 5c81801..22159df 100644 --- a/tox.ini +++ b/tox.ini @@ -11,6 +11,21 @@ envlist = pep8,py3 sitepackages = False # NOTE: Avoid false positives by not skipping missing interpreters. skip_missing_interpreters = False +# NOTES: +# * We avoid the new dependency resolver by pinning pip < 20.3, see +# https://github.com/pypa/pip/issues/9187 +# * Pinning dependencies requires tox >= 3.2.0, see +# https://tox.readthedocs.io/en/latest/config.html#conf-requires +# * It is also necessary to pin virtualenv as a newer virtualenv would still +# lead to fetching the latest pip in the func* tox targets, see +# https://stackoverflow.com/a/38133283 +requires = + pip < 20.3 + virtualenv < 20.0 + setuptools<50.0.0 + +# NOTE: https://wiki.canonical.com/engineering/OpenStack/InstallLatestToxOnOsci +minversion = 3.18.0 [testenv] setenv = VIRTUAL_ENV={envdir} @@ -21,7 +36,7 @@ setenv = VIRTUAL_ENV={envdir} JUJU_REPOSITORY={toxinidir}/build passenv = http_proxy https_proxy INTERFACE_PATH LAYER_PATH JUJU_REPOSITORY install_command = - pip install {opts} {packages} + {toxinidir}/pip.sh install {opts} {packages} deps = -r{toxinidir}/requirements.txt