Fix handle_restore for server and volume resources
When resource references are used for properties restore
does not work for nova server and volume resources.
This patch fixes it and adds a functional test for it.
Change-Id: I34efb3f4e0d3578d95134793f5c5d413667790e0
Closes-Bug: #1687009
diff --git a/functional/test_snapshot_restore.py b/functional/test_snapshot_restore.py
new file mode 100644
index 0000000..f63a360
--- /dev/null
+++ b/functional/test_snapshot_restore.py
@@ -0,0 +1,76 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+
+from heat_integrationtests.functional import functional_base
+
+
+class StackSnapshotRestoreTest(functional_base.FunctionalTestsBase):
+
+ def setUp(self):
+ super(StackSnapshotRestoreTest, self).setUp()
+ if not self.conf.minimal_image_ref:
+ raise self.skipException("No image configured to test")
+
+ if not self.conf.minimal_instance_type:
+ raise self.skipException(
+ "No minimal_instance_type configured to test")
+
+ self.assign_keypair()
+
+ def test_stack_snapshot_restore(self):
+ template = '''
+heat_template_version: ocata
+parameters:
+ keyname:
+ type: string
+ flavor:
+ type: string
+ image:
+ type: string
+ network:
+ type: string
+resources:
+ my_port:
+ type: OS::Neutron::Port
+ properties:
+ network: {get_param: network}
+ my_server:
+ type: OS::Nova::Server
+ properties:
+ image: {get_param: image}
+ flavor: {get_param: flavor}
+ key_name: {get_param: keyname}
+ networks: [{port: {get_resource: my_port} }]
+
+'''
+
+ def get_server_image(server_id):
+ server = self.compute_client.servers.get(server_id)
+ return server.image['id']
+
+ parameters = {'keyname': self.keypair_name,
+ 'flavor': self.conf.minimal_instance_type,
+ 'image': self.conf.minimal_image_ref,
+ 'network': self.conf.fixed_network_name}
+ stack_identifier = self.stack_create(template=template,
+ parameters=parameters)
+ server_resource = self.client.resources.get(
+ stack_identifier, 'my_server')
+ server_id = server_resource.physical_resource_id
+ prev_image_id = get_server_image(server_id)
+
+ # Do snapshot and restore
+ snapshot_id = self.stack_snapshot(stack_identifier)
+ self.stack_restore(stack_identifier, snapshot_id)
+
+ self.assertNotEqual(prev_image_id, get_server_image(server_id))