diff options
Diffstat (limited to 'tests/integration_tests')
-rw-r--r-- | tests/integration_tests/clouds.py | 42 | ||||
-rw-r--r-- | tests/integration_tests/conftest.py | 2 | ||||
-rw-r--r-- | tests/integration_tests/integration_settings.py | 8 |
3 files changed, 50 insertions, 2 deletions
diff --git a/tests/integration_tests/clouds.py b/tests/integration_tests/clouds.py index 9527a413..09a44b3c 100644 --- a/tests/integration_tests/clouds.py +++ b/tests/integration_tests/clouds.py @@ -1,8 +1,17 @@ # This file is part of cloud-init. See LICENSE file for license information. from abc import ABC, abstractmethod import logging - -from pycloudlib import EC2, GCE, Azure, OCI, LXDContainer, LXDVirtualMachine +from uuid import UUID + +from pycloudlib import ( + EC2, + GCE, + Azure, + OCI, + LXDContainer, + LXDVirtualMachine, + Openstack, +) from pycloudlib.lxd.instance import LXDInstance import cloudinit @@ -311,3 +320,32 @@ class LxdVmCloud(_LxdIntegrationCloud): self._profile_list = self.cloud_instance.build_necessary_profiles( release) return self._profile_list + + +class OpenstackCloud(IntegrationCloud): + datasource = 'openstack' + integration_instance_cls = IntegrationInstance + + def _get_cloud_instance(self): + if not integration_settings.OPENSTACK_NETWORK: + raise Exception( + 'OPENSTACK_NETWORK must be set to a valid Openstack network. ' + 'If using the openstack CLI, try `openstack network list`' + ) + return Openstack( + tag='openstack-integration-test', + network=integration_settings.OPENSTACK_NETWORK, + ) + + def _get_initial_image(self): + image = ImageSpecification.from_os_image() + try: + UUID(image.image_id) + except ValueError as e: + raise Exception( + 'When using Openstack, `OS_IMAGE` MUST be specified with ' + 'a 36-character UUID image ID. Passing in a release name is ' + 'not valid here.\n' + 'OS image id: {}'.format(image.image_id) + ) from e + return image.image_id diff --git a/tests/integration_tests/conftest.py b/tests/integration_tests/conftest.py index 61ad8a71..0b93c94f 100644 --- a/tests/integration_tests/conftest.py +++ b/tests/integration_tests/conftest.py @@ -20,6 +20,7 @@ from tests.integration_tests.clouds import ( LxdVmCloud, OciCloud, _LxdIntegrationCloud, + OpenstackCloud, ) from tests.integration_tests.instances import ( CloudInitSource, @@ -38,6 +39,7 @@ platforms = { 'oci': OciCloud, 'lxd_container': LxdContainerCloud, 'lxd_vm': LxdVmCloud, + 'openstack': OpenstackCloud, } os_list = ["ubuntu"] diff --git a/tests/integration_tests/integration_settings.py b/tests/integration_tests/integration_settings.py index 157d34ad..0703be58 100644 --- a/tests/integration_tests/integration_settings.py +++ b/tests/integration_tests/integration_settings.py @@ -21,6 +21,7 @@ RUN_UNSTABLE = False # ec2 # gce # oci +# openstack PLATFORM = 'lxd_container' # The cloud-specific instance type to run. E.g., a1.medium on AWS @@ -90,6 +91,13 @@ PUBLIC_SSH_KEY = None KEYPAIR_NAME = None ################################################################## +# OPENSTACK SETTINGS +################################################################## +# Network to use for Openstack. Should be one of the names/ids found +# in `openstack network list` +OPENSTACK_NETWORK = None + +################################################################## # USER SETTINGS OVERRIDES ################################################################## # Bring in any user-file defined settings |