summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/integration_tests/clouds.py44
-rw-r--r--tests/integration_tests/conftest.py2
-rw-r--r--tests/integration_tests/instances.py17
3 files changed, 43 insertions, 20 deletions
diff --git a/tests/integration_tests/clouds.py b/tests/integration_tests/clouds.py
index fe89c0c6..2841261b 100644
--- a/tests/integration_tests/clouds.py
+++ b/tests/integration_tests/clouds.py
@@ -4,6 +4,8 @@ import logging
from pycloudlib import EC2, GCE, Azure, OCI, LXD
+import cloudinit
+from cloudinit.subp import subp
from tests.integration_tests import integration_settings
from tests.integration_tests.instances import (
IntegrationEc2Instance,
@@ -55,6 +57,11 @@ class IntegrationCloud(ABC):
pass
return image_id
+ def _perform_launch(self, launch_kwargs):
+ pycloudlib_instance = self.cloud_instance.launch(**launch_kwargs)
+ pycloudlib_instance.wait(raise_on_cloudinit_failure=False)
+ return pycloudlib_instance
+
def launch(self, user_data=None, launch_kwargs=None,
settings=integration_settings):
if self.settings.EXISTING_INSTANCE_ID:
@@ -77,8 +84,9 @@ class IntegrationCloud(ABC):
"\n".join("{}={}".format(*item) for item in kwargs.items())
)
)
- pycloudlib_instance = self.cloud_instance.launch(**kwargs)
- pycloudlib_instance.wait(raise_on_cloudinit_failure=False)
+
+ pycloudlib_instance = self._perform_launch(kwargs)
+
log.info('Launched instance: %s', pycloudlib_instance)
return self.get_instance(pycloudlib_instance, settings)
@@ -141,3 +149,35 @@ class LxdContainerCloud(IntegrationCloud):
def _get_cloud_instance(self):
return LXD(tag='lxd-integration-test')
+
+ def _perform_launch(self, launch_kwargs):
+ launch_kwargs['inst_type'] = launch_kwargs.pop('instance_type', None)
+ launch_kwargs.pop('wait')
+
+ pycloudlib_instance = self.cloud_instance.init(
+ launch_kwargs.pop('name', None),
+ launch_kwargs.pop('image_id'),
+ **launch_kwargs
+ )
+ if self.settings.CLOUD_INIT_SOURCE == 'IN_PLACE':
+ self._mount_source(pycloudlib_instance)
+ pycloudlib_instance.start(wait=False)
+ pycloudlib_instance.wait(raise_on_cloudinit_failure=False)
+ return pycloudlib_instance
+
+ def _mount_source(self, instance):
+ container_path = '/usr/lib/python3/dist-packages/cloudinit'
+ format_variables = {
+ 'name': instance.name,
+ 'cloudinit_path': cloudinit.__path__[0],
+ 'container_path': container_path,
+ }
+ log.info(
+ 'Mounting source {cloudinit_path} directly onto LXD container/vm '
+ 'named {name} at {container_path}'.format(**format_variables))
+ command = (
+ 'lxc config device add {name} host-cloud-init disk '
+ 'source={cloudinit_path} '
+ 'path={container_path}'
+ ).format(**format_variables)
+ subp(command.split())
diff --git a/tests/integration_tests/conftest.py b/tests/integration_tests/conftest.py
index eacb2ae2..e31a9192 100644
--- a/tests/integration_tests/conftest.py
+++ b/tests/integration_tests/conftest.py
@@ -81,7 +81,7 @@ def setup_image(session_cloud):
if session_cloud.datasource != 'lxd_container':
raise ValueError(
'IN_PLACE as CLOUD_INIT_SOURCE only works for LXD')
- # The mount needs to happen after the instance is launched, so
+ # The mount needs to happen after the instance is created, so
# no further action needed here
elif integration_settings.CLOUD_INIT_SOURCE == 'PROPOSED':
client = session_cloud.launch()
diff --git a/tests/integration_tests/instances.py b/tests/integration_tests/instances.py
index 0db7c07b..67a6fb92 100644
--- a/tests/integration_tests/instances.py
+++ b/tests/integration_tests/instances.py
@@ -5,8 +5,6 @@ from tempfile import NamedTemporaryFile
from pycloudlib.instance import BaseInstance
-import cloudinit
-from cloudinit.subp import subp
from tests.integration_tests import integration_settings
try:
@@ -129,18 +127,3 @@ class IntegrationOciInstance(IntegrationInstance):
class IntegrationLxdContainerInstance(IntegrationInstance):
use_sudo = False
-
- def __init__(self, cloud: 'IntegrationCloud', instance: BaseInstance,
- settings=integration_settings):
- super().__init__(cloud, instance, settings)
- if self.settings.CLOUD_INIT_SOURCE == 'IN_PLACE':
- self._mount_source()
-
- def _mount_source(self):
- command = (
- 'lxc config device add {name} host-cloud-init disk '
- 'source={cloudinit_path} '
- 'path=/usr/lib/python3/dist-packages/cloudinit'
- ).format(
- name=self.instance.name, cloudinit_path=cloudinit.__path__[0])
- subp(command.split())