diff --git a/unit_tests/utilities/test_zaza_utilities_openstack.py b/unit_tests/utilities/test_zaza_utilities_openstack.py index a8ab03f..b6a156f 100644 --- a/unit_tests/utilities/test_zaza_utilities_openstack.py +++ b/unit_tests/utilities/test_zaza_utilities_openstack.py @@ -302,6 +302,20 @@ class TestOpenStackUtils(ut_utils.BaseTestCase): self.build_opener.assert_called_once_with(ProxyHandler_mock) self.ProxyHandler.assert_called_once_with({'http': 'http://squidy'}) + def test_get_images_by_name(self): + image_mock1 = mock.MagicMock() + image_mock1.name = 'bob' + image_mock2 = mock.MagicMock() + image_mock2.name = 'bill' + glance_client = mock.MagicMock() + glance_client.images.list.return_value = [image_mock1, image_mock2] + self.assertEqual( + openstack_utils.get_images_by_name(glance_client, 'bob'), + [image_mock1]) + self.assertEqual( + openstack_utils.get_images_by_name(glance_client, 'frank'), + []) + def test_find_cirros_image(self): urllib_opener_mock = mock.MagicMock() self.patch_object(openstack_utils, "get_urllib_opener") diff --git a/zaza/charm_tests/glance/setup.py b/zaza/charm_tests/glance/setup.py index cd7f9e4..c550f71 100644 --- a/zaza/charm_tests/glance/setup.py +++ b/zaza/charm_tests/glance/setup.py @@ -14,6 +14,7 @@ """Code for configuring glance.""" +import logging import zaza.utilities.openstack as openstack_utils @@ -35,11 +36,14 @@ def add_cirros_image(glance_client=None): keystone_session = openstack_utils.get_overcloud_keystone_session() glance_client = openstack_utils.get_glance_session_client( keystone_session) - image_url = openstack_utils.find_cirros_image(arch='x86_64') - openstack_utils.create_image( - glance_client, - image_url, - 'cirros') + if openstack_utils.get_images_by_name(glance_client, 'cirros'): + logging.warning('Using existing glance image') + else: + image_url = openstack_utils.find_cirros_image(arch='x86_64') + openstack_utils.create_image( + glance_client, + image_url, + 'cirros') def add_lts_image(glance_client=None): @@ -52,11 +56,13 @@ def add_lts_image(glance_client=None): keystone_session = openstack_utils.get_overcloud_keystone_session() glance_client = openstack_utils.get_glance_session_client( keystone_session) - image_url = openstack_utils.find_ubuntu_image( - release='bionic', - arch='amd64') - print(image_url) - openstack_utils.create_image( - glance_client, - image_url, - 'bionic') + if openstack_utils.get_images_by_name(glance_client, 'bionic'): + logging.warning('Using existing glance image') + else: + image_url = openstack_utils.find_ubuntu_image( + release='bionic', + arch='amd64') + openstack_utils.create_image( + glance_client, + image_url, + 'bionic') diff --git a/zaza/charm_tests/nova/tests.py b/zaza/charm_tests/nova/tests.py index e900e16..d9dbfbf 100644 --- a/zaza/charm_tests/nova/tests.py +++ b/zaza/charm_tests/nova/tests.py @@ -30,7 +30,7 @@ class BaseGuestCreateTest(unittest.TestCase): boot_tests = { 'cirros': { - 'image_name': 'cirrosimage', + 'image_name': 'cirros', 'flavor_name': 'm1.tiny', 'username': 'cirros', 'bootstring': 'gocubsgo', diff --git a/zaza/configure/network.py b/zaza/configure/network.py index 257b128..0b10b56 100755 --- a/zaza/configure/network.py +++ b/zaza/configure/network.py @@ -114,6 +114,7 @@ def setup_sdn(network_config, keystone_session=None): project_id = openstack_utils.get_project_id( keystone_client, "admin", + domain_name="admin_domain", ) # Network Setup subnetpools = False diff --git a/zaza/utilities/openstack.py b/zaza/utilities/openstack.py index 2499be6..2785305 100644 --- a/zaza/utilities/openstack.py +++ b/zaza/utilities/openstack.py @@ -1366,6 +1366,20 @@ def get_urllib_opener(): return urllib.request.build_opener(handler) +def get_images_by_name(glance, image_name): + """Get all glance image objects with the given name. + + :param glance: Authenticated glanceclient + :type glance: glanceclient.Client + :param image_name: Name of image + :type image_name: str + + :returns: List of glance images + :rtype: [glanceclient.v2.image, ...] + """ + return [i for i in glance.images.list() if image_name == i.name] + + def find_cirros_image(arch): """Return the url for the latest cirros image for the given architecture.