summaryrefslogtreecommitdiffstats
path: root/snaps/openstack/tests/create_stack_tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'snaps/openstack/tests/create_stack_tests.py')
-rw-r--r--snaps/openstack/tests/create_stack_tests.py184
1 files changed, 159 insertions, 25 deletions
diff --git a/snaps/openstack/tests/create_stack_tests.py b/snaps/openstack/tests/create_stack_tests.py
index 17acede..7da5bc7 100644
--- a/snaps/openstack/tests/create_stack_tests.py
+++ b/snaps/openstack/tests/create_stack_tests.py
@@ -22,7 +22,8 @@ import snaps
from snaps import file_utils
from snaps.config.flavor import FlavorConfig
from snaps.config.image import ImageConfig
-from snaps.config.stack import StackConfigError, StackConfig
+from snaps.config.stack import (StackConfigError, StackConfig,
+ STATUS_UPDATE_COMPLETE)
from snaps.openstack.create_flavor import OpenStackFlavor
from snaps.openstack.create_image import OpenStackImage
@@ -150,10 +151,11 @@ class CreateStackSuccessTests(OSIntegrationTestCase):
self.image_creator.create()
# Create Flavor
+ flavor_config = openstack_tests.get_flavor_config(
+ name=self.guid + '-flavor-name', ram=256, disk=10,
+ vcpus=1, metadata=self.flavor_metadata)
self.flavor_creator = OpenStackFlavor(
- self.admin_os_creds,
- FlavorConfig(
- name=self.guid + '-flavor-name', ram=256, disk=10, vcpus=1))
+ self.admin_os_creds, flavor_config)
self.flavor_creator.create()
self.network_name = self.guid + '-net'
@@ -207,7 +209,7 @@ class CreateStackSuccessTests(OSIntegrationTestCase):
env_values=self.env_values)
self.stack_creator = OpenStackHeatStack(
self.os_creds, stack_settings)
- created_stack = self.stack_creator.create()
+ created_stack = self.stack_creator.create(block=True)
self.assertIsNotNone(created_stack)
retrieved_stack = heat_utils.get_stack_by_id(self.heat_cli,
@@ -238,7 +240,7 @@ class CreateStackSuccessTests(OSIntegrationTestCase):
self.stack_creator = OpenStackHeatStack(
self.os_creds, stack_settings)
with self.assertRaises(StackCreationError):
- self.stack_creator.create()
+ self.stack_creator.create(block=True)
def test_create_stack_template_dict(self):
"""
@@ -255,7 +257,7 @@ class CreateStackSuccessTests(OSIntegrationTestCase):
env_values=self.env_values)
self.stack_creator = OpenStackHeatStack(
self.os_creds, stack_settings)
- created_stack = self.stack_creator.create()
+ created_stack = self.stack_creator.create(block=True)
self.assertIsNotNone(created_stack)
retrieved_stack = heat_utils.get_stack_by_id(self.heat_cli,
@@ -279,7 +281,7 @@ class CreateStackSuccessTests(OSIntegrationTestCase):
env_values=self.env_values)
self.stack_creator = OpenStackHeatStack(
self.os_creds, stack_settings)
- created_stack = self.stack_creator.create()
+ created_stack = self.stack_creator.create(block=True)
self.assertIsNotNone(created_stack)
retrieved_stack = heat_utils.get_stack_by_id(self.heat_cli,
@@ -323,7 +325,7 @@ class CreateStackSuccessTests(OSIntegrationTestCase):
env_values=self.env_values)
self.stack_creator = OpenStackHeatStack(
self.os_creds, stack_settings)
- created_stack1 = self.stack_creator.create()
+ created_stack1 = self.stack_creator.create(block=True)
retrieved_stack = heat_utils.get_stack_by_id(self.heat_cli,
created_stack1.id)
@@ -334,7 +336,7 @@ class CreateStackSuccessTests(OSIntegrationTestCase):
# Should be retrieving the instance data
stack_creator2 = OpenStackHeatStack(self.os_creds, stack_settings)
- stack2 = stack_creator2.create()
+ stack2 = stack_creator2.create(block=True)
self.assertEqual(created_stack1.id, stack2.id)
def test_retrieve_network_creators(self):
@@ -348,7 +350,7 @@ class CreateStackSuccessTests(OSIntegrationTestCase):
env_values=self.env_values)
self.stack_creator = OpenStackHeatStack(
self.os_creds, stack_settings)
- created_stack = self.stack_creator.create()
+ created_stack = self.stack_creator.create(block=True)
self.assertIsNotNone(created_stack)
net_creators = self.stack_creator.get_network_creators()
@@ -389,7 +391,7 @@ class CreateStackSuccessTests(OSIntegrationTestCase):
env_values=self.env_values)
self.stack_creator = OpenStackHeatStack(
self.os_creds, stack_settings)
- created_stack = self.stack_creator.create()
+ created_stack = self.stack_creator.create(block=True)
self.assertIsNotNone(created_stack)
vm_inst_creators = self.stack_creator.get_vm_inst_creators()
@@ -446,6 +448,7 @@ class CreateStackFloatingIpTests(OSIntegrationTestCase):
'image2_name': self.image_creator.image_settings.name,
'flavor1_name': self.flavor1_name,
'flavor2_name': self.flavor2_name,
+ 'flavor_extra_specs': self.flavor_metadata,
'net_name': self.network_name,
'subnet_name': self.subnet_name,
'inst1_name': self.vm_inst1_name,
@@ -501,7 +504,7 @@ class CreateStackFloatingIpTests(OSIntegrationTestCase):
self.stack_creator = OpenStackHeatStack(
self.os_creds, stack_settings,
[self.image_creator.image_settings])
- created_stack = self.stack_creator.create()
+ created_stack = self.stack_creator.create(block=True)
self.assertIsNotNone(created_stack)
self.vm_inst_creators = self.stack_creator.get_vm_inst_creators(
@@ -530,7 +533,7 @@ class CreateStackFloatingIpTests(OSIntegrationTestCase):
self.stack_creator = OpenStackHeatStack(
self.os_creds, stack_settings,
[self.image_creator.image_settings])
- created_stack = self.stack_creator.create()
+ created_stack = self.stack_creator.create(block=True)
self.assertIsNotNone(created_stack)
derived_stack = create_stack.generate_creator(
@@ -568,6 +571,114 @@ class CreateStackNestedResourceTests(OSIntegrationTestCase):
self.image_creator = OpenStackImage(
self.os_creds, openstack_tests.cirros_image_settings(
+ name="{}-{}".format(self.guid, 'image'),
+ image_metadata=self.image_metadata))
+ self.image_creator.create()
+
+ flavor_config = openstack_tests.get_flavor_config(
+ name="{}-{}".format(self.guid, 'flavor-name'), ram=256, disk=10,
+ vcpus=1, metadata=self.flavor_metadata)
+ self.flavor_creator = OpenStackFlavor(
+ self.admin_os_creds, flavor_config)
+ self.flavor_creator.create()
+
+ env_values = {
+ 'network_name': self.guid + '-network',
+ 'public_network': self.ext_net_name,
+ 'agent_image': self.image_creator.image_settings.name,
+ 'agent_flavor': self.flavor_creator.flavor_settings.name,
+ 'key_name': self.guid + '-key',
+ }
+
+ heat_tmplt_path = pkg_resources.resource_filename(
+ 'snaps.openstack.tests.heat', 'agent-group.yaml')
+ heat_resource_path = pkg_resources.resource_filename(
+ 'snaps.openstack.tests.heat', 'agent.yaml')
+
+ stack_settings = StackConfig(
+ name="{}-{}".format(
+ self.__class__.__name__, str(self.guid) + '-stack'),
+ template_path=heat_tmplt_path,
+ resource_files=[heat_resource_path],
+ env_values=env_values)
+
+ self.stack_creator = OpenStackHeatStack(
+ self.os_creds, stack_settings,
+ [self.image_creator.image_settings])
+
+ self.vm_inst_creators = list()
+
+ def tearDown(self):
+ """
+ Cleans the stack and downloaded stack file
+ """
+ if self.stack_creator:
+ try:
+ self.stack_creator.clean()
+ except:
+ pass
+
+ if self.image_creator:
+ try:
+ self.image_creator.clean()
+ except:
+ pass
+
+ if self.flavor_creator:
+ try:
+ self.flavor_creator.clean()
+ except:
+ pass
+
+ for vm_inst_creator in self.vm_inst_creators:
+ try:
+ keypair_settings = vm_inst_creator.keypair_settings
+ if keypair_settings and keypair_settings.private_filepath:
+ expanded_path = os.path.expanduser(
+ keypair_settings.private_filepath)
+ os.chmod(expanded_path, 0o755)
+ os.remove(expanded_path)
+ except:
+ pass
+
+ super(self.__class__, self).__clean__()
+
+ def test_nested(self):
+ """
+ Tests the creation of an OpenStack stack from Heat template file and
+ the retrieval of two VM instance creators and attempt to connect via
+ SSH to the first one with a floating IP.
+ """
+ created_stack = self.stack_creator.create(block=True)
+ self.assertIsNotNone(created_stack)
+
+ self.vm_inst_creators = self.stack_creator.get_vm_inst_creators(
+ heat_keypair_option='private_key')
+ self.assertIsNotNone(self.vm_inst_creators)
+ self.assertEqual(1, len(self.vm_inst_creators))
+
+ for vm_inst_creator in self.vm_inst_creators:
+ self.assertTrue(
+ create_instance_tests.validate_ssh_client(vm_inst_creator))
+
+
+class CreateStackUpdateTests(OSIntegrationTestCase):
+ """
+ Tests to ensure that stack update commands work
+ """
+
+ def setUp(self):
+ self.user_roles = ['heat_stack_owner']
+
+ super(self.__class__, self).__start__()
+
+ self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
+
+ self.heat_cli = heat_utils.heat_client(self.os_creds, self.os_session)
+ self.stack_creator = None
+
+ self.image_creator = OpenStackImage(
+ self.os_creds, openstack_tests.cirros_image_settings(
name=self.guid + '-image',
image_metadata=self.image_metadata))
self.image_creator.create()
@@ -638,13 +749,14 @@ class CreateStackNestedResourceTests(OSIntegrationTestCase):
super(self.__class__, self).__clean__()
- def test_nested(self):
+ def test_update(self):
"""
- Tests the creation of an OpenStack stack from Heat template file and
+ Tests the update of an OpenStack stack from Heat template file
+ by changing the number of VM instances from 1 to 2, and
the retrieval of two VM instance creators and attempt to connect via
SSH to the first one with a floating IP.
"""
- created_stack = self.stack_creator.create()
+ created_stack = self.stack_creator.create(block=True)
self.assertIsNotNone(created_stack)
self.vm_inst_creators = self.stack_creator.get_vm_inst_creators(
@@ -656,6 +768,28 @@ class CreateStackNestedResourceTests(OSIntegrationTestCase):
self.assertTrue(
create_instance_tests.validate_ssh_client(vm_inst_creator))
+ env_values = {
+ 'network_name': self.guid + '-network',
+ 'public_network': self.ext_net_name,
+ 'agent_count': 2,
+ 'agent_image': self.image_creator.image_settings.name,
+ 'agent_flavor': self.flavor_creator.flavor_settings.name,
+ 'key_name': self.guid + '-key',
+ }
+
+ updated_stack = self.stack_creator.update(env_values, block=True)
+ self.assertIsNotNone(updated_stack)
+ self.assertEqual(STATUS_UPDATE_COMPLETE, updated_stack.status)
+
+ self.vm_inst_creators = self.stack_creator.get_vm_inst_creators(
+ heat_keypair_option='private_key')
+ self.assertIsNotNone(self.vm_inst_creators)
+ self.assertEqual(2, len(self.vm_inst_creators))
+
+ for vm_inst_creator in self.vm_inst_creators:
+ self.assertTrue(
+ create_instance_tests.validate_ssh_client(vm_inst_creator))
+
class CreateStackRouterTests(OSIntegrationTestCase):
"""
@@ -698,7 +832,7 @@ class CreateStackRouterTests(OSIntegrationTestCase):
env_values=self.env_values)
self.stack_creator = OpenStackHeatStack(
self.os_creds, stack_settings)
- self.created_stack = self.stack_creator.create()
+ self.created_stack = self.stack_creator.create(block=True)
self.assertIsNotNone(self.created_stack)
def tearDown(self):
@@ -764,7 +898,7 @@ class CreateStackVolumeTests(OSIntegrationTestCase):
env_values=self.env_values)
self.stack_creator = OpenStackHeatStack(
self.os_creds, stack_settings)
- self.created_stack = self.stack_creator.create()
+ self.created_stack = self.stack_creator.create(block=True)
self.assertIsNotNone(self.created_stack)
def tearDown(self):
@@ -850,7 +984,7 @@ class CreateStackFlavorTests(OSIntegrationTestCase):
template_path=self.heat_tmplt_path)
self.stack_creator = OpenStackHeatStack(
self.os_creds, stack_settings)
- self.created_stack = self.stack_creator.create()
+ self.created_stack = self.stack_creator.create(block=True)
self.assertIsNotNone(self.created_stack)
def tearDown(self):
@@ -916,7 +1050,7 @@ class CreateStackKeypairTests(OSIntegrationTestCase):
env_values=self.env_values)
self.stack_creator = OpenStackHeatStack(
self.os_creds, stack_settings)
- self.created_stack = self.stack_creator.create()
+ self.created_stack = self.stack_creator.create(block=True)
self.assertIsNotNone(self.created_stack)
self.keypair_creators = list()
@@ -1000,7 +1134,7 @@ class CreateStackSecurityGroupTests(OSIntegrationTestCase):
env_values=self.env_values)
self.stack_creator = OpenStackHeatStack(
self.os_creds, stack_settings)
- self.created_stack = self.stack_creator.create()
+ self.created_stack = self.stack_creator.create(block=True)
self.assertIsNotNone(self.created_stack)
def tearDown(self):
@@ -1089,7 +1223,7 @@ class CreateStackNegativeTests(OSIntegrationTestCase):
self.stack_creator = OpenStackHeatStack(
self.os_creds, stack_settings)
with self.assertRaises(HTTPBadRequest):
- self.stack_creator.create()
+ self.stack_creator.create(block=True)
def test_bad_stack_file(self):
"""
@@ -1100,7 +1234,7 @@ class CreateStackNegativeTests(OSIntegrationTestCase):
self.stack_creator = OpenStackHeatStack(
self.os_creds, stack_settings)
with self.assertRaises(IOError):
- self.stack_creator.create()
+ self.stack_creator.create(block=True)
class CreateStackFailureTests(OSIntegrationTestCase):
@@ -1197,7 +1331,7 @@ class CreateStackFailureTests(OSIntegrationTestCase):
with self.assertRaises(StackError):
try:
- self.stack_creator.create()
+ self.stack_creator.create(block=True)
except StackError:
resources = heat_utils.get_resources(
self.heat_cli, self.stack_creator.get_stack().id)