1 # Copyright (c) 2017 Cable Television Laboratories, Inc. ("CableLabs")
2 # and others. All rights reserved.
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at:
8 # http://www.apache.org/licenses/LICENSE-2.0
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15 from magnumclient.common.apiclient.exceptions import BadRequest
17 from snaps.config.cluster_template import ClusterTemplateConfig
18 from snaps.config.flavor import FlavorConfig
19 from snaps.config.keypair import KeypairConfig
20 from snaps.openstack.cluster_template import OpenStackClusterTemplate
21 from snaps.openstack.create_flavor import OpenStackFlavor
22 from snaps.openstack.create_image import OpenStackImage
23 from snaps.openstack.create_keypairs import OpenStackKeypair
24 from snaps.openstack.tests import openstack_tests
27 from urllib.request import URLError
29 from urllib2 import URLError
34 from snaps.openstack.tests.os_source_file_test import OSIntegrationTestCase
35 from snaps.openstack.utils import magnum_utils
37 __author__ = 'spisarski'
39 logger = logging.getLogger('cluster_template_tests')
42 class CreateClusterTemplateTests(OSIntegrationTestCase):
44 Test for the OpenStackClusterTemplate class defined in py
45 without any QoS Specs or Encryption
50 Instantiates the CreateClusterTemplate object that is responsible for
51 downloading and creating an OS template config file within OpenStack
53 super(self.__class__, self).__start__()
55 self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
56 self.cluster_type_name = self.guid + '-cluster-type'
57 self.magnum = magnum_utils.magnum_client(self.os_creds)
59 metadata = self.image_metadata
62 if 'extra_properties' not in metadata:
63 metadata['extra_properties'] = dict()
64 metadata['extra_properties']['os_distro'] = 'cirros'
66 os_image_settings = openstack_tests.cirros_image_settings(
67 name=self.guid + '-image', image_metadata=metadata)
69 self.image_creator = OpenStackImage(self.os_creds, os_image_settings)
71 self.flavor_creator = OpenStackFlavor(
72 self.os_creds, FlavorConfig(
73 name=self.guid + '-flavor', ram=512, disk=10, vcpus=1))
75 keypair_priv_filepath = 'tmp/' + self.guid
76 keypair_pub_filepath = keypair_priv_filepath + '.pub'
78 self.keypair_creator = OpenStackKeypair(
79 self.os_creds, KeypairConfig(
80 name=self.guid + '-keypair',
81 public_filepath=keypair_pub_filepath,
82 private_filepath=keypair_priv_filepath))
84 self.cluster_template_creator = None
86 self.cluster_template_config = ClusterTemplateConfig(
87 name=self.cluster_type_name,
88 image=self.image_creator.image_settings.name,
89 keypair=self.keypair_creator.keypair_settings.name,
90 external_net=self.ext_net_name,
91 flavor=self.flavor_creator.flavor_settings.name)
94 self.image_creator.create()
95 self.flavor_creator.create()
96 self.keypair_creator.create()
103 Cleans the template config
105 if self.cluster_template_creator:
107 self.cluster_template_creator.clean()
110 if self.keypair_creator:
112 self.keypair_creator.clean()
115 if self.flavor_creator:
117 self.flavor_creator.clean()
120 if self.image_creator:
122 self.image_creator.clean()
126 super(self.__class__, self).__clean__()
128 def test_create_cluster_template(self):
130 Tests the creation of an OpenStack cluster template.
132 # Create ClusterTemplate
133 self.cluster_template_creator = OpenStackClusterTemplate(
134 self.os_creds, self.cluster_template_config)
135 created_cluster_template = self.cluster_template_creator.create()
136 self.assertIsNotNone(created_cluster_template)
137 self.assertEqual(self.cluster_template_config.name,
138 created_cluster_template.name)
140 retrieved_cluster_template1 = magnum_utils.get_cluster_template(
141 self.magnum, template_config=self.cluster_template_config)
142 self.assertIsNotNone(retrieved_cluster_template1)
143 self.assertEqual(created_cluster_template, retrieved_cluster_template1)
145 retrieved_cluster_template2 = magnum_utils.get_cluster_template_by_id(
146 self.magnum, created_cluster_template.id)
147 self.assertEqual(created_cluster_template, retrieved_cluster_template2)
149 def test_create_delete_cluster_template(self):
151 Tests the creation then deletion of an OpenStack template config to
152 ensure clean() does not raise an Exception.
154 # Create ClusterTemplate
155 self.cluster_template_creator = OpenStackClusterTemplate(
156 self.os_creds, self.cluster_template_config)
157 created_cluster_template = self.cluster_template_creator.create()
158 self.assertIsNotNone(created_cluster_template)
160 self.cluster_template_creator.clean()
162 tmplt = magnum_utils.get_cluster_template(
163 self.magnum, template_name=self.cluster_template_config.name)
164 self.assertIsNone(tmplt)
166 def test_create_same_cluster_template(self):
168 Tests the creation of an OpenStack cluster_template when one already
171 # Create ClusterTemplate
172 self.cluster_template_creator = OpenStackClusterTemplate(
173 self.os_creds, self.cluster_template_config)
174 cluster_template1 = self.cluster_template_creator.create()
176 retrieved_cluster_template = magnum_utils.get_cluster_template(
177 self.magnum, template_config=self.cluster_template_config)
178 self.assertEqual(cluster_template1, retrieved_cluster_template)
180 # Should be retrieving the instance data
181 os_cluster_template_2 = OpenStackClusterTemplate(
182 self.os_creds, self.cluster_template_config)
183 cluster_template2 = os_cluster_template_2.create()
184 self.assertEqual(cluster_template2, cluster_template2)
186 def test_create_cluster_template_bad_flavor(self):
188 Tests the creation of an OpenStack cluster template raises an
189 exception with an invalid flavor.
191 # Create ClusterTemplate
192 cluster_template_config = ClusterTemplateConfig(
193 name=self.cluster_type_name,
194 image=self.image_creator.image_settings.name,
195 keypair=self.keypair_creator.keypair_settings.name,
196 external_net=self.ext_net_name,
199 self.cluster_template_creator = OpenStackClusterTemplate(
200 self.os_creds, cluster_template_config)
202 with self.assertRaises(BadRequest):
203 self.cluster_template_creator.create()
205 def test_create_cluster_template_bad_master_flavor(self):
207 Tests the creation of an OpenStack cluster template raises an
208 exception with an invalid master flavor.
210 # Create ClusterTemplate
211 cluster_template_config = ClusterTemplateConfig(
212 name=self.cluster_type_name,
213 image=self.image_creator.image_settings.name,
214 keypair=self.keypair_creator.keypair_settings.name,
215 external_net=self.ext_net_name,
216 flavor=self.flavor_creator.flavor_settings.name,
219 self.cluster_template_creator = OpenStackClusterTemplate(
220 self.os_creds, cluster_template_config)
222 with self.assertRaises(BadRequest):
223 self.cluster_template_creator.create()
225 def test_create_cluster_template_bad_image(self):
227 Tests the creation of an OpenStack cluster template raises an
228 exception with an invalid image.
230 # Create ClusterTemplate
231 cluster_template_config = ClusterTemplateConfig(
232 name=self.cluster_type_name,
234 keypair=self.keypair_creator.keypair_settings.name,
235 external_net=self.ext_net_name,
236 flavor=self.flavor_creator.flavor_settings.name)
238 self.cluster_template_creator = OpenStackClusterTemplate(
239 self.os_creds, cluster_template_config)
241 with self.assertRaises(BadRequest):
242 self.cluster_template_creator.create()
244 def test_create_cluster_template_bad_network_driver(self):
246 Tests the creation of an OpenStack cluster template raises an
247 exception with an invalid keypair.
249 # Create ClusterTemplate
250 cluster_template_config = ClusterTemplateConfig(
251 name=self.cluster_type_name,
252 image=self.image_creator.image_settings.name,
253 keypair=self.keypair_creator.keypair_settings.name,
254 external_net=self.ext_net_name,
255 flavor=self.flavor_creator.flavor_settings.name,
256 network_driver='foo')
258 self.cluster_template_creator = OpenStackClusterTemplate(
259 self.os_creds, cluster_template_config)
261 with self.assertRaises(BadRequest):
262 self.cluster_template_creator.create()
264 def test_create_cluster_template_bad_volume_driver(self):
266 Tests the creation of an OpenStack cluster template raises an
267 exception with an invalid keypair.
269 # Create ClusterTemplate
270 cluster_template_config = ClusterTemplateConfig(
271 name=self.cluster_type_name,
272 image=self.image_creator.image_settings.name,
273 keypair=self.keypair_creator.keypair_settings.name,
274 external_net=self.ext_net_name,
275 flavor=self.flavor_creator.flavor_settings.name,
278 self.cluster_template_creator = OpenStackClusterTemplate(
279 self.os_creds, cluster_template_config)
281 with self.assertRaises(BadRequest):
282 self.cluster_template_creator.create()