summaryrefslogtreecommitdiffstats
path: root/snaps/openstack/tests/create_stack_tests.py
diff options
context:
space:
mode:
authormbeierl <mark.beierl@dell.com>2018-05-10 16:16:25 -0400
committerspisarski <s.pisarski@cablelabs.com>2018-06-20 15:45:46 -0600
commit0175feef9f00ea7595e4f7cc13f3b7a9c26e9a02 (patch)
tree875646d39b55059b6d3a8c6af86b162548d3a963 /snaps/openstack/tests/create_stack_tests.py
parentb2590d79a80dc12948d028ffee5b911b59daa777 (diff)
Adds Stack Update
Adds function to allow stack update to occur. Includes higher level object calls for stack update. Added blocking parameter to create() and update() Rebase screwed up some changes. Added new test to test_suite_builder.py and updated IntegrationTests.rst accordingly Change-Id: I4558befb3ea8ea7982faff79d1ebb54fbb3d44a7 Signed-off-by: mbeierl <mark.beierl@dell.com>
Diffstat (limited to 'snaps/openstack/tests/create_stack_tests.py')
-rw-r--r--snaps/openstack/tests/create_stack_tests.py170
1 files changed, 150 insertions, 20 deletions
diff --git a/snaps/openstack/tests/create_stack_tests.py b/snaps/openstack/tests/create_stack_tests.py
index a320aa0..be4d6ea 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
@@ -208,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,
@@ -239,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):
"""
@@ -256,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,
@@ -280,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,
@@ -324,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)
@@ -335,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):
@@ -349,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()
@@ -390,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()
@@ -502,7 +503,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(
@@ -531,7 +532,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(
@@ -647,7 +648,7 @@ class CreateStackNestedResourceTests(OSIntegrationTestCase):
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(
@@ -660,6 +661,135 @@ class CreateStackNestedResourceTests(OSIntegrationTestCase):
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()
+
+ self.flavor_creator = OpenStackFlavor(
+ self.admin_os_creds,
+ FlavorConfig(
+ name=self.guid + '-flavor-name', ram=256, disk=10, vcpus=1))
+ 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=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_update(self):
+ """
+ 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(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))
+
+ 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):
"""
Tests for the CreateStack class defined in create_stack.py where the
@@ -701,7 +831,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):
@@ -767,7 +897,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):
@@ -853,7 +983,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):
@@ -919,7 +1049,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()
@@ -1003,7 +1133,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):
@@ -1092,7 +1222,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):
"""
@@ -1103,7 +1233,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):
@@ -1200,7 +1330,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)