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(
58 self.os_creds, self.os_session)
60 metadata = self.image_metadata
63 if 'extra_properties' not in metadata:
64 metadata['extra_properties'] = dict()
65 metadata['extra_properties']['os_distro'] = 'cirros'
67 os_image_settings = openstack_tests.cirros_image_settings(
68 name=self.guid + '-image', image_metadata=metadata)
70 self.image_creator = OpenStackImage(self.os_creds, os_image_settings)
72 self.flavor_creator = OpenStackFlavor(
73 self.os_creds, FlavorConfig(
74 name=self.guid + '-flavor', ram=512, disk=10, vcpus=1))
76 keypair_priv_filepath = 'tmp/' + self.guid
77 keypair_pub_filepath = keypair_priv_filepath + '.pub'
79 self.keypair_creator = OpenStackKeypair(
80 self.os_creds, KeypairConfig(
81 name=self.guid + '-keypair',
82 public_filepath=keypair_pub_filepath,
83 private_filepath=keypair_priv_filepath))
85 self.cluster_template_creator = None
87 self.cluster_template_config = ClusterTemplateConfig(
88 name=self.cluster_type_name,
89 image=self.image_creator.image_settings.name,
90 keypair=self.keypair_creator.keypair_settings.name,
91 external_net=self.ext_net_name,
92 flavor=self.flavor_creator.flavor_settings.name)
95 self.image_creator.create()
96 self.flavor_creator.create()
97 self.keypair_creator.create()
104 Cleans the template config
106 if self.cluster_template_creator:
108 self.cluster_template_creator.clean()
111 if self.keypair_creator:
113 self.keypair_creator.clean()
116 if self.flavor_creator:
118 self.flavor_creator.clean()
121 if self.image_creator:
123 self.image_creator.clean()
127 super(self.__class__, self).__clean__()
129 def test_create_cluster_template(self):
131 Tests the creation of an OpenStack cluster template.
133 # Create ClusterTemplate
134 self.cluster_template_creator = OpenStackClusterTemplate(
135 self.os_creds, self.cluster_template_config)
136 created_cluster_template = self.cluster_template_creator.create()
137 self.assertIsNotNone(created_cluster_template)
138 self.assertEqual(self.cluster_template_config.name,
139 created_cluster_template.name)
141 retrieved_cluster_template1 = magnum_utils.get_cluster_template(
142 self.magnum, template_config=self.cluster_template_config)
143 self.assertIsNotNone(retrieved_cluster_template1)
144 self.assertEqual(created_cluster_template, retrieved_cluster_template1)
146 retrieved_cluster_template2 = magnum_utils.get_cluster_template_by_id(
147 self.magnum, created_cluster_template.id)
148 self.assertEqual(created_cluster_template, retrieved_cluster_template2)
150 def test_create_delete_cluster_template(self):
152 Tests the creation then deletion of an OpenStack template config to
153 ensure clean() does not raise an Exception.
155 # Create ClusterTemplate
156 self.cluster_template_creator = OpenStackClusterTemplate(
157 self.os_creds, self.cluster_template_config)
158 created_cluster_template = self.cluster_template_creator.create()
159 self.assertIsNotNone(created_cluster_template)
161 self.cluster_template_creator.clean()
163 tmplt = magnum_utils.get_cluster_template(
164 self.magnum, template_name=self.cluster_template_config.name)
165 self.assertIsNone(tmplt)
167 def test_create_same_cluster_template(self):
169 Tests the creation of an OpenStack cluster_template when one already
172 # Create ClusterTemplate
173 self.cluster_template_creator = OpenStackClusterTemplate(
174 self.os_creds, self.cluster_template_config)
175 cluster_template1 = self.cluster_template_creator.create()
177 retrieved_cluster_template = magnum_utils.get_cluster_template(
178 self.magnum, template_config=self.cluster_template_config)
179 self.assertEqual(cluster_template1, retrieved_cluster_template)
181 # Should be retrieving the instance data
182 os_cluster_template_2 = OpenStackClusterTemplate(
183 self.os_creds, self.cluster_template_config)
184 cluster_template2 = os_cluster_template_2.create()
185 self.assertEqual(cluster_template2, cluster_template2)
187 def test_create_cluster_template_bad_flavor(self):
189 Tests the creation of an OpenStack cluster template raises an
190 exception with an invalid flavor.
192 # Create ClusterTemplate
193 cluster_template_config = ClusterTemplateConfig(
194 name=self.cluster_type_name,
195 image=self.image_creator.image_settings.name,
196 keypair=self.keypair_creator.keypair_settings.name,
197 external_net=self.ext_net_name,
200 self.cluster_template_creator = OpenStackClusterTemplate(
201 self.os_creds, cluster_template_config)
203 with self.assertRaises(BadRequest):
204 self.cluster_template_creator.create()
206 def test_create_cluster_template_bad_master_flavor(self):
208 Tests the creation of an OpenStack cluster template raises an
209 exception with an invalid master flavor.
211 # Create ClusterTemplate
212 cluster_template_config = ClusterTemplateConfig(
213 name=self.cluster_type_name,
214 image=self.image_creator.image_settings.name,
215 keypair=self.keypair_creator.keypair_settings.name,
216 external_net=self.ext_net_name,
217 flavor=self.flavor_creator.flavor_settings.name,
220 self.cluster_template_creator = OpenStackClusterTemplate(
221 self.os_creds, cluster_template_config)
223 with self.assertRaises(BadRequest):
224 self.cluster_template_creator.create()
226 def test_create_cluster_template_bad_image(self):
228 Tests the creation of an OpenStack cluster template raises an
229 exception with an invalid image.
231 # Create ClusterTemplate
232 cluster_template_config = ClusterTemplateConfig(
233 name=self.cluster_type_name,
235 keypair=self.keypair_creator.keypair_settings.name,
236 external_net=self.ext_net_name,
237 flavor=self.flavor_creator.flavor_settings.name)
239 self.cluster_template_creator = OpenStackClusterTemplate(
240 self.os_creds, cluster_template_config)
242 with self.assertRaises(BadRequest):
243 self.cluster_template_creator.create()
245 def test_create_cluster_template_bad_network_driver(self):
247 Tests the creation of an OpenStack cluster template raises an
248 exception with an invalid keypair.
250 # Create ClusterTemplate
251 cluster_template_config = ClusterTemplateConfig(
252 name=self.cluster_type_name,
253 image=self.image_creator.image_settings.name,
254 keypair=self.keypair_creator.keypair_settings.name,
255 external_net=self.ext_net_name,
256 flavor=self.flavor_creator.flavor_settings.name,
257 network_driver='foo')
259 self.cluster_template_creator = OpenStackClusterTemplate(
260 self.os_creds, cluster_template_config)
262 with self.assertRaises(BadRequest):
263 self.cluster_template_creator.create()
265 def test_create_cluster_template_bad_volume_driver(self):
267 Tests the creation of an OpenStack cluster template raises an
268 exception with an invalid keypair.
270 # Create ClusterTemplate
271 cluster_template_config = ClusterTemplateConfig(
272 name=self.cluster_type_name,
273 image=self.image_creator.image_settings.name,
274 keypair=self.keypair_creator.keypair_settings.name,
275 external_net=self.ext_net_name,
276 flavor=self.flavor_creator.flavor_settings.name,
279 self.cluster_template_creator = OpenStackClusterTemplate(
280 self.os_creds, cluster_template_config)
282 with self.assertRaises(BadRequest):
283 self.cluster_template_creator.create()