diff --git a/osci.yaml b/osci.yaml index b5f6e59..3758ef9 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 a7c9fe2..3c0c971 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 -f9f60bd6-b3eb-11eb-98f0-ffcf71561367 +53c3d92e-1178-11ec-83e0-e33587f0c7c9 diff --git a/src/tests/bundles/focal-xena.yaml b/src/tests/bundles/focal-xena.yaml new file mode 100644 index 0000000..24ade5f --- /dev/null +++ b/src/tests/bundles/focal-xena.yaml @@ -0,0 +1,287 @@ +options: + source: &source cloud:focal-xena +series: focal +relations: +- - nova-ironic + - ironic-api +- - ironic-conductor + - ironic-api +- - neutron-ironic-agent:identity-credentials + - keystone +- - neutron-ironic-agent + - neutron-api +- - neutron-openvswitch + - neutron-api +- - neutron-openvswitch + - nova-ironic +- - neutron-openvswitch:amqp + - rabbitmq-server:amqp +- - ironic-api:amqp + - rabbitmq-server:amqp +- - ironic-api + - keystone +- - ironic-api:shared-db + - ironic-api-mysql-router:shared-db +- - ironic-conductor:amqp + - rabbitmq-server:amqp +- - ironic-conductor + - keystone +- - ironic-conductor:shared-db + - ironic-conductor-mysql-router:shared-db +- - nova-ironic:amqp + - rabbitmq-server:amqp +- - nova-ironic + - glance +- - nova-ironic + - keystone +- - nova-ironic + - nova-cloud-controller +- - neutron-gateway:amqp + - rabbitmq-server:amqp +- - keystone:shared-db + - keystone-mysql-router:shared-db +- - nova-cloud-controller:identity-service + - keystone:identity-service +- - glance:identity-service + - keystone:identity-service +- - neutron-api:identity-service + - keystone:identity-service +- - neutron-api:shared-db + - neutron-api-mysql-router:shared-db +- - neutron-api:amqp + - rabbitmq-server:amqp +- - neutron-gateway:neutron-plugin-api + - neutron-api:neutron-plugin-api +- - glance:shared-db + - glance-mysql-router:shared-db +- - glance:amqp + - rabbitmq-server:amqp +- - nova-cloud-controller:image-service + - glance:image-service +- - nova-cloud-controller:amqp + - rabbitmq-server:amqp +- - nova-cloud-controller:quantum-network-service + - neutron-gateway:quantum-network-service +- - nova-cloud-controller:shared-db + - nova-cloud-controller-mysql-router:shared-db +- - nova-cloud-controller:neutron-api + - neutron-api:neutron-api +- - cinder:image-service + - glance:image-service +- - cinder:amqp + - rabbitmq-server:amqp +- - cinder:identity-service + - keystone:identity-service +- - cinder:cinder-volume-service + - nova-cloud-controller:cinder-volume-service +- - cinder:shared-db + - cinder-mysql-router:shared-db +- - placement:shared-db + - placement-mysql-router:shared-db +- - placement + - keystone +- - placement + - nova-cloud-controller +- - ceph-mon:client + - nova-ironic:ceph +- - ceph-mon:client + - glance:ceph +- - ceph-radosgw:mon + - ceph-mon:radosgw +- - ceph-radosgw:identity-service + - keystone:identity-service +- - ceph-osd:mon + - ceph-mon:osd +- - ceph-radosgw:object-store + - glance +- - mysql-innodb-cluster:db-router + - nova-cloud-controller-mysql-router:db-router +- - mysql-innodb-cluster:db-router + - keystone-mysql-router:db-router +- - mysql-innodb-cluster:db-router + - glance-mysql-router:db-router +- - mysql-innodb-cluster:db-router + - neutron-api-mysql-router:db-router +- - mysql-innodb-cluster:db-router + - placement-mysql-router:db-router +- - mysql-innodb-cluster:db-router + - cinder-mysql-router:db-router +- - mysql-innodb-cluster:db-router + - ironic-api-mysql-router:db-router +- - mysql-innodb-cluster:db-router + - ironic-conductor-mysql-router:db-router +- - vault-mysql-router:db-router + - mysql-innodb-cluster:db-router +- - vault:shared-db + - vault-mysql-router:shared-db +- - vault:certificates + - ceph-radosgw +- - vault:certificates + - cinder +- - vault:certificates + - glance:certificates +- - vault:certificates + - keystone:certificates +- - vault:certificates + - neutron-api:certificates +- - vault:certificates + - nova-cloud-controller:certificates +- - vault:certificates + - placement:certificates +- - vault + - ironic-conductor +- - vault:certificates + - ironic-api:certificates +- - ironic-api + - hacluster-ironic +services: + nova-cloud-controller-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + keystone-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + glance-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + neutron-api-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + placement-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + vault-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + cinder-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + ironic-api-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + ironic-conductor-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + mysql-innodb-cluster: + charm: cs:~openstack-charmers-next/mysql-innodb-cluster + num_units: 3 + constraints: mem=4G + options: + source: *source + cinder: + charm: cs:~openstack-charmers-next/cinder + num_units: 1 + constraints: mem=2G + options: + block-device: vdb + glance-api-version: 2 + openstack-origin: *source + worker-multiplier: 0.25 + storage: + block-devices: cinder,50G + ceph-radosgw: + charm: cs:~openstack-charmers-next/ceph-radosgw + num_units: 1 + constraints: mem=2G + options: + source: *source + namespace-tenants: True + ceph-mon: + charm: cs:~openstack-charmers-next/ceph-mon + num_units: 3 + constraints: mem=2G + options: + expected-osd-count: 3 + source: *source + ceph-osd: + charm: cs:~openstack-charmers-next/ceph-osd + num_units: 3 + constraints: mem=2G + options: + source: *source + storage: + osd-devices: 'cinder,30G' + glance: + charm: cs:~openstack-charmers-next/glance + num_units: 1 + constraints: mem=2G + options: + openstack-origin: *source + worker-multiplier: 0.25 + keystone: + charm: cs:~openstack-charmers-next/keystone + num_units: 1 + constraints: mem=2G + options: + openstack-origin: *source + worker-multiplier: 0.25 + neutron-api: + charm: cs:~openstack-charmers-next/neutron-api + num_units: 1 + constraints: mem=2G + options: + flat-network-providers: "physnet1" + neutron-security-groups: true + openstack-origin: *source + manage-neutron-plugin-legacy-mode: false + worker-multiplier: 0.25 + neutron-gateway: + charm: cs:~openstack-charmers-next/neutron-gateway + num_units: 1 + constraints: mem=2G + options: + openstack-origin: *source + enable-isolated-metadata: true + enable-metadata-network: true + bridge-mappings: physnet1:br-ex + nova-cloud-controller: + charm: cs:~openstack-charmers-next/nova-cloud-controller + num_units: 1 + constraints: mem=2G + options: + network-manager: Neutron + openstack-origin: *source + worker-multiplier: 0.25 + nova-ironic: + charm: cs:~openstack-charmers-next/nova-compute + num_units: 1 + constraints: mem=2G + options: + enable-live-migration: false + enable-resize: false + openstack-origin: *source + virt-type: ironic + placement: + charm: cs:~openstack-charmers-next/placement + num_units: 1 + constraints: mem=2G + options: + openstack-origin: *source + worker-multiplier: 0.25 + rabbitmq-server: + charm: cs:~openstack-charmers-next/rabbitmq-server + num_units: 1 + constraints: mem=2G + hacluster-ironic: + charm: cs:~openstack-charmers-next/hacluster + num_units: 0 + ironic-api: + charm: ../../../ironic-api + num_units: 3 + constraints: mem=2G + options: + openstack-origin: *source + ironic-conductor: + charm: cs:~openstack-charmers-next/ironic-conductor + num_units: 1 + constraints: mem=2G + options: + openstack-origin: *source + max-tftp-block-size: 1418 + disable-secure-erase: true + use-ipxe: true + enabled-network-interfaces: "flat, noop" + neutron-openvswitch: + charm: cs:~openstack-charmers-next/neutron-openvswitch + num_units: 0 + options: + bridge-mappings: physnet1:br-ex + neutron-ironic-agent: + charm: cs:~openstack-charmers-next/neutron-api-plugin-ironic + num_units: 0 + options: + openstack-origin: *source + vault: + charm: cs:~openstack-charmers-next/vault + num_units: 1 diff --git a/src/tests/bundles/impish-xena.yaml b/src/tests/bundles/impish-xena.yaml new file mode 100644 index 0000000..9914252 --- /dev/null +++ b/src/tests/bundles/impish-xena.yaml @@ -0,0 +1,287 @@ +options: + source: &source distro +series: impish +relations: +- - nova-ironic + - ironic-api +- - ironic-conductor + - ironic-api +- - neutron-ironic-agent:identity-credentials + - keystone +- - neutron-ironic-agent + - neutron-api +- - neutron-openvswitch + - neutron-api +- - neutron-openvswitch + - nova-ironic +- - neutron-openvswitch:amqp + - rabbitmq-server:amqp +- - ironic-api:amqp + - rabbitmq-server:amqp +- - ironic-api + - keystone +- - ironic-api:shared-db + - ironic-api-mysql-router:shared-db +- - ironic-conductor:amqp + - rabbitmq-server:amqp +- - ironic-conductor + - keystone +- - ironic-conductor:shared-db + - ironic-conductor-mysql-router:shared-db +- - nova-ironic:amqp + - rabbitmq-server:amqp +- - nova-ironic + - glance +- - nova-ironic + - keystone +- - nova-ironic + - nova-cloud-controller +- - neutron-gateway:amqp + - rabbitmq-server:amqp +- - keystone:shared-db + - keystone-mysql-router:shared-db +- - nova-cloud-controller:identity-service + - keystone:identity-service +- - glance:identity-service + - keystone:identity-service +- - neutron-api:identity-service + - keystone:identity-service +- - neutron-api:shared-db + - neutron-api-mysql-router:shared-db +- - neutron-api:amqp + - rabbitmq-server:amqp +- - neutron-gateway:neutron-plugin-api + - neutron-api:neutron-plugin-api +- - glance:shared-db + - glance-mysql-router:shared-db +- - glance:amqp + - rabbitmq-server:amqp +- - nova-cloud-controller:image-service + - glance:image-service +- - nova-cloud-controller:amqp + - rabbitmq-server:amqp +- - nova-cloud-controller:quantum-network-service + - neutron-gateway:quantum-network-service +- - nova-cloud-controller:shared-db + - nova-cloud-controller-mysql-router:shared-db +- - nova-cloud-controller:neutron-api + - neutron-api:neutron-api +- - cinder:image-service + - glance:image-service +- - cinder:amqp + - rabbitmq-server:amqp +- - cinder:identity-service + - keystone:identity-service +- - cinder:cinder-volume-service + - nova-cloud-controller:cinder-volume-service +- - cinder:shared-db + - cinder-mysql-router:shared-db +- - placement:shared-db + - placement-mysql-router:shared-db +- - placement + - keystone +- - placement + - nova-cloud-controller +- - ceph-mon:client + - nova-ironic:ceph +- - ceph-mon:client + - glance:ceph +- - ceph-radosgw:mon + - ceph-mon:radosgw +- - ceph-radosgw:identity-service + - keystone:identity-service +- - ceph-osd:mon + - ceph-mon:osd +- - ceph-radosgw:object-store + - glance +- - mysql-innodb-cluster:db-router + - nova-cloud-controller-mysql-router:db-router +- - mysql-innodb-cluster:db-router + - keystone-mysql-router:db-router +- - mysql-innodb-cluster:db-router + - glance-mysql-router:db-router +- - mysql-innodb-cluster:db-router + - neutron-api-mysql-router:db-router +- - mysql-innodb-cluster:db-router + - placement-mysql-router:db-router +- - mysql-innodb-cluster:db-router + - cinder-mysql-router:db-router +- - mysql-innodb-cluster:db-router + - ironic-api-mysql-router:db-router +- - mysql-innodb-cluster:db-router + - ironic-conductor-mysql-router:db-router +- - vault-mysql-router:db-router + - mysql-innodb-cluster:db-router +- - vault:shared-db + - vault-mysql-router:shared-db +- - vault:certificates + - ceph-radosgw +- - vault:certificates + - cinder +- - vault:certificates + - glance:certificates +- - vault:certificates + - keystone:certificates +- - vault:certificates + - neutron-api:certificates +- - vault:certificates + - nova-cloud-controller:certificates +- - vault:certificates + - placement:certificates +- - vault + - ironic-conductor +- - vault:certificates + - ironic-api:certificates +- - ironic-api + - hacluster-ironic +services: + nova-cloud-controller-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + keystone-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + glance-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + neutron-api-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + placement-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + vault-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + cinder-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + ironic-api-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + ironic-conductor-mysql-router: + charm: cs:~openstack-charmers-next/mysql-router + mysql-innodb-cluster: + charm: cs:~openstack-charmers-next/mysql-innodb-cluster + num_units: 3 + constraints: mem=4G + options: + source: *source + cinder: + charm: cs:~openstack-charmers-next/cinder + num_units: 1 + constraints: mem=2G + options: + block-device: vdb + glance-api-version: 2 + openstack-origin: *source + worker-multiplier: 0.25 + storage: + block-devices: cinder,50G + ceph-radosgw: + charm: cs:~openstack-charmers-next/ceph-radosgw + num_units: 1 + constraints: mem=2G + options: + source: *source + namespace-tenants: True + ceph-mon: + charm: cs:~openstack-charmers-next/ceph-mon + num_units: 3 + constraints: mem=2G + options: + expected-osd-count: 3 + source: *source + ceph-osd: + charm: cs:~openstack-charmers-next/ceph-osd + num_units: 3 + constraints: mem=2G + options: + source: *source + storage: + osd-devices: 'cinder,30G' + glance: + charm: cs:~openstack-charmers-next/glance + num_units: 1 + constraints: mem=2G + options: + openstack-origin: *source + worker-multiplier: 0.25 + keystone: + charm: cs:~openstack-charmers-next/keystone + num_units: 1 + constraints: mem=2G + options: + openstack-origin: *source + worker-multiplier: 0.25 + neutron-api: + charm: cs:~openstack-charmers-next/neutron-api + num_units: 1 + constraints: mem=2G + options: + flat-network-providers: "physnet1" + neutron-security-groups: true + openstack-origin: *source + manage-neutron-plugin-legacy-mode: false + worker-multiplier: 0.25 + neutron-gateway: + charm: cs:~openstack-charmers-next/neutron-gateway + num_units: 1 + constraints: mem=2G + options: + openstack-origin: *source + enable-isolated-metadata: true + enable-metadata-network: true + bridge-mappings: physnet1:br-ex + nova-cloud-controller: + charm: cs:~openstack-charmers-next/nova-cloud-controller + num_units: 1 + constraints: mem=2G + options: + network-manager: Neutron + openstack-origin: *source + worker-multiplier: 0.25 + nova-ironic: + charm: cs:~openstack-charmers-next/nova-compute + num_units: 1 + constraints: mem=2G + options: + enable-live-migration: false + enable-resize: false + openstack-origin: *source + virt-type: ironic + placement: + charm: cs:~openstack-charmers-next/placement + num_units: 1 + constraints: mem=2G + options: + openstack-origin: *source + worker-multiplier: 0.25 + rabbitmq-server: + charm: cs:~openstack-charmers-next/rabbitmq-server + num_units: 1 + constraints: mem=2G + hacluster-ironic: + charm: cs:~openstack-charmers-next/hacluster + num_units: 0 + ironic-api: + charm: ../../../ironic-api + num_units: 3 + constraints: mem=2G + options: + openstack-origin: *source + ironic-conductor: + charm: cs:~openstack-charmers-next/ironic-conductor + num_units: 1 + constraints: mem=2G + options: + openstack-origin: *source + max-tftp-block-size: 1418 + disable-secure-erase: true + use-ipxe: true + enabled-network-interfaces: "flat, noop" + neutron-openvswitch: + charm: cs:~openstack-charmers-next/neutron-openvswitch + num_units: 0 + options: + bridge-mappings: physnet1:br-ex + neutron-ironic-agent: + charm: cs:~openstack-charmers-next/neutron-api-plugin-ironic + num_units: 0 + options: + openstack-origin: *source + vault: + charm: cs:~openstack-charmers-next/vault + num_units: 1 diff --git a/src/tests/tests.yaml b/src/tests/tests.yaml index dbc7cb3..0da3d20 100644 --- a/src/tests/tests.yaml +++ b/src/tests/tests.yaml @@ -1,7 +1,7 @@ charm_name: ironic-api gate_bundles: -- groovy-victoria +- focal-xena - focal-wallaby - focal-victoria - focal-ussuri @@ -9,7 +9,9 @@ gate_bundles: - bionic-ussuri dev_bundles: +- groovy-victoria - hirsute-wallaby +- impish-xena smoke_bundles: - focal-ussuri @@ -39,4 +41,5 @@ tests: 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