Browse Source

Add functional tests, fixes and pep8

* Add functional tests
  * Explicitly set python 3 in the ironic API charm class
  * fix lint errors

Change-Id: Ida24b071b2dee3b9205cccfc74a0e654a3c0b13f
Func-Test-Pr: https://github.com/openstack-charmers/zaza-openstack-tests/pull/450
Co-authored-by: Aurelien Lourot <aurelien.lourot@canonical.com>
changes/78/755978/9
Gabriel Adrian Samfira 1 year ago
committed by Aurelien Lourot
parent
commit
494ef4c91c
  1. 4
      .gitreview
  2. 4
      .zuul.yaml
  3. 6
      src/lib/charm/openstack/ironic/ironic.py
  4. 6
      src/reactive/ironic_handlers.py
  5. 2
      src/templates/train/ironic.conf
  6. 249
      src/tests/bundles/bionic-train.yaml
  7. 249
      src/tests/bundles/bionic-ussuri.yaml
  8. 283
      src/tests/bundles/focal-ussuri.yaml
  9. 283
      src/tests/bundles/focal-victoria.yaml
  10. 1
      src/tests/bundles/overlays/bionic-train.yaml.j2
  11. 1
      src/tests/bundles/overlays/bionic-ussuri.yaml.j2
  12. 1
      src/tests/bundles/overlays/focal-ussuri.yaml.j2
  13. 1
      src/tests/bundles/overlays/focal-victoria.yaml.j2
  14. 4
      src/tests/bundles/overlays/ironic.j2
  15. 29
      src/tests/tests.yaml
  16. 1
      unit_tests/__init__.py
  17. 4
      unit_tests/test_ironic_api_handlers.py
  18. 10
      unit_tests/test_lib_charm_openstack_ironic.py

4
.gitreview

@ -0,0 +1,4 @@
[gerrit]
host=review.opendev.org
port=29418
project=openstack/charm-ironic-api.git

4
.zuul.yaml

@ -0,0 +1,4 @@
- project:
templates:
- openstack-python3-charm-jobs
- openstack-cover-jobs

6
src/lib/charm/openstack/ironic/ironic.py

@ -31,6 +31,7 @@ charms_openstack.charm.use_defaults('charm.default-select-release')
def deployment_interface_ip(cls):
return ch_ip.get_relation_ip("deployment")
@adapters.config_property
def internal_interface_ip(cls):
return ch_ip.get_relation_ip("internal")
@ -41,6 +42,7 @@ class IronicAPICharm(charms_openstack.charm.HAOpenStackCharm):
abstract_class = False
release = 'train'
name = 'ironic'
python_version = 3
packages = PACKAGES
api_ports = {
'ironic-api': {
@ -51,7 +53,7 @@ class IronicAPICharm(charms_openstack.charm.HAOpenStackCharm):
}
service_type = 'ironic'
default_service = 'ironic-api'
services = ['ironic-api',]
services = ['ironic-api', ]
sync_cmd = ['ironic-dbsync', 'upgrade']
required_relations = [
@ -99,4 +101,4 @@ class IronicAPICharm(charms_openstack.charm.HAOpenStackCharm):
for unit in baremetal.all_joined_units:
baremetal.set_baremetal_info(
unit.relation.relation_id,
relation_data)
relation_data)

6
src/reactive/ironic_handlers.py

@ -6,8 +6,6 @@ import charmhelpers.core.hookenv as hookenv
import charms_openstack.charm as charm
import charm.openstack.ironic.ironic as ironic # noqa
from charmhelpers.core.templating import render
# Use the charms.openstack defaults for common states and hooks
charm.use_defaults(
@ -18,7 +16,8 @@ charm.use_defaults(
'config.changed',
'update-status',
'upgrade-charm',
'certificates.available')
'certificates.available',
'cluster.available')
@reactive.when('shared-db.available')
@ -64,6 +63,7 @@ def run_db_migration():
@reactive.when('ha.connected')
@reactive.when_not('ha.available')
def cluster_connected(hacluster):
with charm.provide_charm_instance() as ironic_charm:
ironic_charm.configure_ha_resources(hacluster)

2
src/templates/train/ironic.conf

@ -1,4 +1,6 @@
[DEFAULT]
debug = {{ options.debug }}
verbose = {{ options.verbose }}
auth_strategy=keystone
my_ip = {{ options.internal_interface_ip }}

249
src/tests/bundles/bionic-train.yaml

@ -0,0 +1,249 @@
options:
source: &source cloud:bionic-train/proposed
series: bionic
relations:
- - nova-ironic
- ironic-api
- - ironic-conductor
- ironic-api
- - neutron-ironic-agent:identity-credentials
- keystone
- - neutron-ironic-agent
- neutron-api
- - neutron-openvswitch
- neutron-api
- - ironic-api:amqp
- rabbitmq-server:amqp
- - ironic-api
- keystone
- - ironic-api:shared-db
- mysql:shared-db
- - ironic-conductor:amqp
- rabbitmq-server:amqp
- - ironic-conductor
- keystone
- - ironic-conductor:shared-db
- mysql: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
- mysql: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
- mysql:shared-db
- - neutron-api:amqp
- rabbitmq-server:amqp
- - neutron-gateway:neutron-plugin-api
- neutron-api:neutron-plugin-api
- - glance:shared-db
- mysql: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
- mysql: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
- mysql:shared-db
- - placement
- mysql
- - 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
- - vault:shared-db
- mysql: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:
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:ceph-mon
num_units: 3
constraints: mem=2G
options:
expected-osd-count: 3
source: *source
ceph-osd:
charm: cs: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
mysql:
charm: cs:percona-cluster
num_units: 1
constraints: mem=4G
options:
innodb-buffer-pool-size: 256M
max-connections: 1000
performance-schema: true
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:placement
num_units: 1
constraints: mem=2G
options:
openstack-origin: *source
worker-multiplier: 0.25
rabbitmq-server:
charm: cs: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

249
src/tests/bundles/bionic-ussuri.yaml

@ -0,0 +1,249 @@
options:
source: &source cloud:bionic-ussuri/proposed
series: bionic
relations:
- - nova-ironic
- ironic-api
- - ironic-conductor
- ironic-api
- - neutron-ironic-agent:identity-credentials
- keystone
- - neutron-ironic-agent
- neutron-api
- - neutron-openvswitch
- neutron-api
- - ironic-api:amqp
- rabbitmq-server:amqp
- - ironic-api
- keystone
- - ironic-api:shared-db
- mysql:shared-db
- - ironic-conductor:amqp
- rabbitmq-server:amqp
- - ironic-conductor
- keystone
- - ironic-conductor:shared-db
- mysql: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
- mysql: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
- mysql:shared-db
- - neutron-api:amqp
- rabbitmq-server:amqp
- - neutron-gateway:neutron-plugin-api
- neutron-api:neutron-plugin-api
- - glance:shared-db
- mysql: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
- mysql: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
- mysql:shared-db
- - placement
- mysql
- - 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
- - vault:shared-db
- mysql: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:
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:ceph-mon
num_units: 3
constraints: mem=2G
options:
expected-osd-count: 3
source: *source
ceph-osd:
charm: cs: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
mysql:
charm: cs:percona-cluster
num_units: 1
constraints: mem=4G
options:
innodb-buffer-pool-size: 256M
max-connections: 1000
performance-schema: true
hacluster-ironic:
charm: cs:~openstack-charmers-next/hacluster
num_units: 0
neutron-api:
charm: cs:~openstack-charmers-next/neutron-api
num_units: 3
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:placement
num_units: 1
constraints: mem=2G
options:
openstack-origin: *source
worker-multiplier: 0.25
rabbitmq-server:
charm: cs:rabbitmq-server
num_units: 1
constraints: mem=2G
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

283
src/tests/bundles/focal-ussuri.yaml

@ -0,0 +1,283 @@
options:
source: &source distro
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
- - 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:ceph-mon
num_units: 3
constraints: mem=2G
options:
expected-osd-count: 3
source: *source
ceph-osd:
charm: cs: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:placement
num_units: 1
constraints: mem=2G
options:
openstack-origin: *source
worker-multiplier: 0.25
rabbitmq-server:
charm: cs: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

283
src/tests/bundles/focal-victoria.yaml

@ -0,0 +1,283 @@
options:
source: &source cloud:focal-victoria/proposed
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
- - 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:ceph-mon
num_units: 3
constraints: mem=2G
options:
expected-osd-count: 3
source: *source
ceph-osd:
charm: cs: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:placement
num_units: 1
constraints: mem=2G
options:
openstack-origin: *source
worker-multiplier: 0.25
rabbitmq-server:
charm: cs: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

1
src/tests/bundles/overlays/bionic-train.yaml.j2

@ -0,0 +1 @@
ironic.j2

1
src/tests/bundles/overlays/bionic-ussuri.yaml.j2

@ -0,0 +1 @@
ironic.j2

1
src/tests/bundles/overlays/focal-ussuri.yaml.j2

@ -0,0 +1 @@
ironic.j2

1
src/tests/bundles/overlays/focal-victoria.yaml.j2

@ -0,0 +1 @@
ironic.j2

4
src/tests/bundles/overlays/ironic.j2

@ -0,0 +1,4 @@
applications:
ironic-api:
options:
vip: '{{ OS_VIP00 }}'

29
src/tests/tests.yaml

@ -0,0 +1,29 @@
charm_name: ironic-api
gate_bundles:
- focal-ussuri
- bionic-train
- bionic-ussuri
smoke_bundles:
- bionic-ussuri
dev_bundles:
- focal-victoria
target_deploy_status:
vault:
workload-status: blocked
workload-status-message: Vault needs to be initialized
ironic-conductor:
workload-status: blocked
workload-status-message: invalid enabled-deploy-interfaces config
configure:
- zaza.openstack.charm_tests.vault.setup.auto_initialize
- zaza.openstack.charm_tests.ironic.setup.set_temp_url_secret
- zaza.openstack.charm_tests.ironic.setup.add_ironic_deployment_image
- zaza.openstack.charm_tests.ironic.setup.add_ironic_os_image
- zaza.openstack.charm_tests.ironic.setup.create_bm_flavors
# Ironic will require a flat network to test the flat network type. Once a proper
# testing environment will be available for Ironic, we will need to add the setup
# call to create that flat network
#- zaza.openstack.charm_tests.neutron.setup.basic_overcloud_network
- zaza.openstack.charm_tests.nova.setup.manage_ssh_key
tests:
- zaza.openstack.charm_tests.ironic.tests.IronicTest

1
unit_tests/__init__.py

@ -1,5 +1,4 @@
import sys
import mock
sys.path.append('src')
sys.path.append('src/lib')

4
unit_tests/test_ironic_api_handlers.py

@ -12,7 +12,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import json
import mock
from charm.openstack.ironic import ironic
@ -50,6 +49,7 @@ class TestRegisteredHooks(test_utils.TestRegisteredHooks):
'when_not': {
'run_db_migration': (
'db.synced',),
'cluster_connected': ('ha.available',),
},
'hook': {
'upgrade_charm': ('upgrade-charm',),
@ -82,7 +82,7 @@ class TestIronicHandlers(test_utils.PatchHelper):
self.ironic_charm.internal_url,
self.ironic_charm.admin_url)
self.ironic_charm.assess_status.assert_called_once_with()
def test_ironic_api_relation_joined(self):
ironic_api = mock.MagicMock()
handlers.ironic_api_relation_joined(ironic_api)

10
unit_tests/test_lib_charm_openstack_ironic.py

@ -24,7 +24,7 @@ class TestIronicCharmConfigProperties(test_utils.PatchHelper):
def setUp(self):
super().setUp()
self.patch_release(ironic.IronicAPICharm.release)
def test_deployment_interface_ip(self):
cls = mock.MagicMock()
self.patch_object(ironic, 'ch_ip')
@ -66,7 +66,7 @@ class TestIronicCharm(test_utils.PatchHelper):
[{
"database": cfg_data["database"],
"username": cfg_data["database-user"]}])
def test_set_ironic_api_info(self):
self.patch_object(ironic.reactive.flags, 'is_flag_set')
self.is_flag_set.return_value = True
@ -74,17 +74,15 @@ class TestIronicCharm(test_utils.PatchHelper):
unit = mock.MagicMock()
unit.relation.relation_id = "fake"
baremetal.all_joined_units = [unit]
relation_data = {"ready": True}
relation_data = {"ironic-api-ready": True}
self.target.set_ironic_api_info(baremetal)
baremetal.set_baremetal_info.assert_called_with(
"fake", relation_data)
self.is_flag_set.return_value = False
relation_data = {"ready": False}
relation_data = {"ironic-api-ready": False}
self.target.set_ironic_api_info(baremetal)
baremetal.set_baremetal_info.assert_called_with(
"fake", relation_data)
Loading…
Cancel
Save