def _ensure_image_with_template(self, image_id, template, image_desc=None): if not (type(template) == Template): template = Template(template) if not image_desc: name = self._xml_node(template.xml, '/template/name') if name: image_desc = '<image><name>%s</name></image>' % name else: image_desc = '<image/>' if not template.identifier: template.identifier = self.warehouse.store_template(template.xml) return self._ensure_image(image_id, image_desc, template.identifier)
def testTemplateFromURL(self): template_id = self.warehouse.store_template(self.template_xml) template_url = "%s/%s/%s" % ( self.warehouse.url, self.warehouse.template_bucket, template_id) template = Template(template_url) self.assertEqual(template_url, template.url) self.assertEqual(template_id, template.identifier) self.assertEqual(self.template_xml, template.xml)
def testTemplateFromImageID(self): template_id = self.warehouse.store_template(self.template_xml) template = Template(template_id) target = "mock" builder = Mock_Builder(self.template_xml, target) builder.build_image() metadata = dict(template=template_id, target=target, icicle="None", target_parameters="None") self.warehouse.store_target_image(builder.new_image_id, builder.image, metadata=metadata) image_template = Template(builder.new_image_id) self.assertEqual(template_id, image_template.identifier) self.assertEqual(self.template_xml, image_template.xml) self.assertFalse(template.url)
def push_image_to_provider(self, builder, provider, credentials, target, target_image, parameters): # Our target_image is already a raw KVM image. All we need to do is upload to glance self.builder = builder self.active_image = self.builder.provider_image self.openstack_decode_credentials(credentials) provider_data = self.get_dynamic_provider_data(provider) if provider_data is None: raise ImageFactoryException( "OpenStack KVM instance not found in XML or JSON provided") # Image is always here and it is the target_image datafile input_image = self.builder.target_image.data # If the template species a name, use that, otherwise create a name # using provider_image.identifier. template = Template(self.builder.provider_image.template) if template.name: image_name = template.name else: image_name = 'ImageFactory created image - %s' % ( self.builder.provider_image.identifier) if self.check_qcow_size(input_image): self.log.debug("Uploading image to glance, detected qcow format") disk_format = 'qcow2' else: self.log.debug("Uploading image to glance, assuming raw format") disk_format = 'raw' # Support openstack grizzly keystone authentication and glance upload if self.version == 2: if self.credentials_token is None: self.credentials_token = self.keystone_authenticate( **self.credentials_dict) provider_data['name'] = image_name provider_data['disk_format'] = disk_format image_id = self.glance_upload_v2(input_image, self.credentials_token, **provider_data) else: # Also support backward compatible for folsom image_id = self.glance_upload(input_image, creds=self.credentials_dict, token=self.credentials_token, host=provider_data['glance-host'], port=provider_data['glance-port'], name=image_name, disk_format=disk_format) self.builder.provider_image.identifier_on_provider = image_id if 'username' in self.credentials_dict: self.builder.provider_image.provider_account_identifier = self.credentials_dict[ 'username'] self.percent_complete = 100
def testTemplateFromPath(self): (fd, template_path) = tempfile.mkstemp(prefix="test_image_factory-") os.write(fd, self.template_xml) os.close(fd) template = Template(template_path) self.assertFalse(template.url) self.assertFalse(template.identifier) self.assertEqual(self.template_xml, template.xml) os.remove(template_path)
def testTemplateStringRepresentation(self): template = Template(self.template_xml) self.assertEqual(self.template_xml, repr(template)) self.assertEqual(self.template_xml, str(template)) self.assertEqual(self.template_xml, "%r" % (template, )) self.assertEqual(self.template_xml, "%s" % (template, ))
def testTemplateFromXML(self): template = Template(self.template_xml) self.assertEqual(self.template_xml, template.xml) self.assertFalse(template.identifier) self.assertFalse(template.url)
def testTemplateFromUUID(self): template_id = self.warehouse.store_template(self.template_xml) template = Template(template_id) self.assertEqual(template_id, template.identifier) self.assertEqual(self.template_xml, template.xml) self.assertFalse(template.url)