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)
Beispiel #2
0
 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)
Beispiel #3
0
 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)
Beispiel #4
0
    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
Beispiel #5
0
    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)
Beispiel #6
0
 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, ))
Beispiel #7
0
 def testTemplateFromXML(self):
     template = Template(self.template_xml)
     self.assertEqual(self.template_xml, template.xml)
     self.assertFalse(template.identifier)
     self.assertFalse(template.url)
Beispiel #8
0
 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)