This attribute represents the newly allocated target or provider image
ID, so a name like new_image_id makes sense and reduces confusion with
the UUID of the image object in IWHD.
---
imagefactory/BuildDispatcher.py | 8 ++--
imagefactory/builders/BaseBuilder.py | 6 ++--
imagefactory/builders/FedoraBuilder.py | 46 ++++++++++++++--------------
imagefactory/builders/IBuilder.py | 4 +-
imagefactory/builders/MockBuilder.py | 10 +++---
imagefactory/qmfagent/BuildAdaptor.py | 2 +-
imagefactory/qmfagent/ImageFactoryAgent.py | 2 +-
tests/builders/testBaseBuilder.py | 2 +-
tests/builders/testMockBuilder.py | 2 +-
tests/testTemplate.py | 4 +-
10 files changed, 43 insertions(+), 43 deletions(-)
diff --git a/imagefactory/BuildDispatcher.py b/imagefactory/BuildDispatcher.py
index d6e72cd..87adb9d 100644
--- a/imagefactory/BuildDispatcher.py
+++ b/imagefactory/BuildDispatcher.py
@@ -29,7 +29,7 @@ class BuildDispatcher(object):
target = props.prop("_target", "The target property.")
status = props.prop("_status", "The status property.")
percent_complete = props.prop("_percent_complete", "The
percent_complete property.")
- image_id = props.prop("_image_id" "The image property.")
+ new_image_id = props.prop("_new_image_id" "The image property.")
def __init__(self, template, target):
super(BuildDispatcher, self).__init__()
@@ -40,11 +40,11 @@ class BuildDispatcher(object):
self.target = target
self.status = "New"
self.percent_complete = 0
- self.image_id = "None"
self._builder = self._get_builder()
self._builder.delegate = self
- self.image_id = self._builder.image_id
+
+ self.new_image_id = self._builder.new_image_id
def build_image(self):
self._start_builder_thread("build_image")
@@ -84,7 +84,7 @@ class BuildDispatcher(object):
return builder_class(template_object, self.target)
def _start_builder_thread(self, method_name, arg_dict={}):
- thread_name = "%s.%s()" % (self.image_id, method_name)
+ thread_name = "%s.%s()" % (self.new_image_id, method_name)
# using args to pass the method we want to call on the target object.
builder_thread = Thread(target = self._builder, name=thread_name,
args=(method_name), kwargs=arg_dict)
builder_thread.start()
diff --git a/imagefactory/builders/BaseBuilder.py b/imagefactory/builders/BaseBuilder.py
index e74df56..5df6eb4 100644
--- a/imagefactory/builders/BaseBuilder.py
+++ b/imagefactory/builders/BaseBuilder.py
@@ -37,7 +37,7 @@ class BaseBuilder(object):
target = props.prop("_target", "The target cloud for which to build
this image.")
target_id = props.prop("_target_id", "The identifier provided by the
target.")
provider = props.prop("_provider", "The a string name of the target
region or provider.")
- image_id = props.prop("_image_id", "The uuid of the image.")
+ new_image_id = props.prop("_new_image_id", "The uuid of the newly
created target or provider image.")
image = props.prop("_image", "The image file path.")
output_descriptor = props.prop("_output_descriptor", "An XML string
describing the completed image, aka: CDL or ICICLE.")
delegate = props.prop("_delegate", "An object that responds to
IBuilderDelegate methods.")
@@ -102,7 +102,7 @@ class BaseBuilder(object):
def __init__(self, template, target):
super(BaseBuilder, self).__init__()
self.log = logging.getLogger('%s.%s' % (__name__,
self.__class__.__name__))
- self.image_id = str(uuid.uuid4())
+ self.new_image_id = str(uuid.uuid4())
if(type(template) == Template):
self.template = template
elif(type(template) == str):
@@ -139,7 +139,7 @@ class BaseBuilder(object):
template_id = self.warehouse.store_template(self.template.xml,
self.template.identifier)
icicle_id = self.warehouse.store_icicle(self.output_descriptor)
metadata = dict(template=template_id, target=self.target, icicle=icicle_id,
target_parameters=target_parameters)
- self.warehouse.store_image(self.image_id, self.image, metadata=metadata)
+ self.warehouse.store_image(self.new_image_id, self.image, metadata=metadata)
def push_image(self, image_id, provider, credentials):
"""Prep the image for the provider and deploy. This method is
implemented by subclasses of the
diff --git a/imagefactory/builders/FedoraBuilder.py
b/imagefactory/builders/FedoraBuilder.py
index c832149..75e0c12 100644
--- a/imagefactory/builders/FedoraBuilder.py
+++ b/imagefactory/builders/FedoraBuilder.py
@@ -99,10 +99,10 @@ class FedoraBuilder(BaseBuilder):
self.guest = oz.Fedora.get_class(self.tdlobj, config, None)
else:
self.guest = FedoraRemoteGuest(self.tdlobj, config, None, "virtio",
True, "virtio", True)
- self.guest.diskimage = self.app_config["imgdir"] +
"/base-image-" + self.image_id + ".dsk"
+ self.guest.diskimage = self.app_config["imgdir"] +
"/base-image-" + self.new_image_id + ".dsk"
# Oz assumes unique names - TDL built for multiple backends guarantees they are
not unique
# We don't really care about the name so just force uniqueness
- self.guest.name = self.guest.name + "-" + self.image_id
+ self.guest.name = self.guest.name + "-" + self.new_image_id
def build_image(self):
try:
@@ -124,7 +124,7 @@ class FedoraBuilder(BaseBuilder):
def build_snapshot(self):
# All we need do here is store the relevant bits in the Warehouse
self.log.debug("Building Linux for non-upload cloud (%s)" %
(self.target))
- self.image = "%s/placeholder-linux-image-%s" %
(self.app_config['imgdir'], self.image_id)
+ self.image = "%s/placeholder-linux-image-%s" %
(self.app_config['imgdir'], self.new_image_id)
image_file = open(self.image, 'w')
image_file.write("Placeholder for non upload cloud Linux image")
image_file.close()
@@ -210,7 +210,7 @@ class FedoraBuilder(BaseBuilder):
def vmware_transform_image(self):
# On entry the image points to our generic KVM raw image
# Convert to stream-optimized VMDK and then update the image property
- target_image = self.app_config['imgdir'] + "/vmware-image-" +
self.image_id + ".vmdk"
+ target_image = self.app_config['imgdir'] + "/vmware-image-" +
self.new_image_id + ".vmdk"
self.log.debug("Converting raw kvm image (%s) to vmware stream-optimized
image (%s)" % (self.image, target_image))
convert_to_stream(self.image, target_image)
self.log.debug("VMWare stream conversion complete")
@@ -265,7 +265,7 @@ class FedoraBuilder(BaseBuilder):
def ec2_copy_filesystem(self, output_dir):
- target_image=output_dir + "/ec2-image-" + self.image_id +
".dsk"
+ target_image=output_dir + "/ec2-image-" + self.new_image_id +
".dsk"
self.log.debug("init guestfs")
g = guestfs.GuestFS ()
@@ -283,7 +283,7 @@ class FedoraBuilder(BaseBuilder):
self.log.debug("creat tmp image")
# We need a small FS to mount target and dest on - make image file for it
# TODO: Use Marek's create mount point trick instead of a temp file
- tmp_image_file = "/tmp/tmp-img-" + self.image_id
+ tmp_image_file = "/tmp/tmp-img-" + self.new_image_id
f = open (tmp_image_file, "w")
f.truncate (10 * 1024 * 1024)
f.close
@@ -522,7 +522,7 @@ class FedoraBuilder(BaseBuilder):
mypub = open("/etc/oz/id_rsa-icicle-gen.pub")
server_files = { "/root/.ssh/authorized_keys":mypub }
- instance_name = "factory-build-%s" % (self.image_id, )
+ instance_name = "factory-build-%s" % (self.new_image_id, )
jeos_instance = cloudservers.servers.create(instance_name,jeos_image, onegig_flavor,
files=server_files)
for i in range(30):
@@ -574,7 +574,7 @@ class FedoraBuilder(BaseBuilder):
self.guest.do_customize(guestaddr)
self.log.debug("Done!")
- image_name = "factory-image-%s" % (self.image_id, )
+ image_name = "factory-image-%s" % (self.new_image_id, )
snap_image = cloudservers.images.create(image_name, jeos_instance)
self.log.debug("New Rackspace image created with ID: %s" %
(snap_image.id))
@@ -590,7 +590,7 @@ class FedoraBuilder(BaseBuilder):
self.log.debug("Storing Rackspace image ID (%s) and details in
Warehouse" % (snap_image.id))
metadata = dict(image=image_id, provider=provider, icicle="none",
target_identifier=snap_image.id)
- self.warehouse.create_provider_image(self.image_id, metadata=metadata)
+ self.warehouse.create_provider_image(self.new_image_id, metadata=metadata)
finally:
self.log.debug("Shutting down Rackspace server")
@@ -694,7 +694,7 @@ chmod 600 /root/.ssh/authorized_keys
conn = ec2region.connect(aws_access_key_id=self.ec2_access_key,
aws_secret_access_key=self.ec2_secret_key)
# Create a use-once SSH-able security group
- factory_security_group_name = "imagefactory-%s" % (self.image_id, )
+ factory_security_group_name = "imagefactory-%s" % (self.new_image_id,
)
factory_security_group_desc = "Temporary ImageFactory generated security
group with SSH access"
self.log.debug("Creating temporary security group (%s)" %
(factory_security_group_name))
factory_security_group = conn.create_security_group(factory_security_group_name,
factory_security_group_desc)
@@ -794,7 +794,7 @@ chmod 600 /root/.ssh/authorized_keys
ec2_uid = self.ec2_user_id
arch = self.tdlobj.arch
# AKI is set above
- uuid = self.image_id
+ uuid = self.new_image_id
# We exclude /mnt /tmp and /root/.ssh to avoid embedding our utility key into
the image
command = "euca-bundle-vol -c /tmp/%s -k /tmp/%s -u %s -e
/mnt,/tmp,/root/.ssh --arch %s -d /mnt/bundles --kernel %s -p %s -s 10240 --ec2cert
/tmp/cert-ec2.pem --fstab /etc/fstab -v /" % (os.path.basename(cert),
os.path.basename(key), ec2_uid, arch, aki, uuid)
@@ -836,13 +836,13 @@ chmod 600 /root/.ssh/authorized_keys
self.log.debug("Extracted AMI ID: %s " % (ami_id))
metadata = dict(image=image_id, provider=provider, icicle="none",
target_identifier=ami_id)
- self.warehouse.create_provider_image(self.image_id, metadata=metadata)
+ self.warehouse.create_provider_image(self.new_image_id, metadata=metadata)
finally:
self.log.debug("Stopping EC2 instance and deleting temp security
group")
instance.stop()
factory_security_group.delete()
- self.log.debug("FedoraBuilder instance %s pushed image with uuid %s to
provider_image UUID (%s) and set metadata: %s" % (id(self), image_id, self.image_id,
str(metadata)))
+ self.log.debug("FedoraBuilder instance %s pushed image with uuid %s to
provider_image UUID (%s) and set metadata: %s" % (id(self), image_id,
self.new_image_id, str(metadata)))
self.percent_complete=100
self.status="COMPLETED"
@@ -864,7 +864,7 @@ chmod 600 /root/.ssh/authorized_keys
if not os.path.isdir(staging):
raise ImageFactoryException("Staging dir (%s) for condorcloud is not
present" % (staging))
- image_base = "/condorimage-" + self.image_id + ".img"
+ image_base = "/condorimage-" + self.new_image_id + ".img"
staging_image = staging + image_base
# Copy to staging location
@@ -874,7 +874,7 @@ chmod 600 /root/.ssh/authorized_keys
raise ImageFactoryException("Copy of condorcloud image to staging
location (%s) failed" % (staging_image))
# Retrieve original XML and write it out to the final dir
- image_xml_base="/condorimage-" + self.image_id + ".xml"
+ image_xml_base="/condorimage-" + self.new_image_id + ".xml"
image_xml_file= storage + image_xml_base
image_metadata =
self.warehouse.metadata_for_id_of_type(("target_parameters",), image_id,
"image")
@@ -891,8 +891,8 @@ chmod 600 /root/.ssh/authorized_keys
if subprocess.call(["mv", "-f", staging_image,
final_image]):
raise ImageFactoryException("Move of condorcloud image to final location
(%s) failed" % (final_image))
- metadata = dict(image=image_id, provider=provider, icicle="none",
target_identifier=self.image_id)
- self.warehouse.create_provider_image(self.image_id, metadata=metadata)
+ metadata = dict(image=image_id, provider=provider, icicle="none",
target_identifier=self.new_image_id)
+ self.warehouse.create_provider_image(self.new_image_id, metadata=metadata)
self.percent_complete = 100
def vmware_push_image_upload(self, image_id, provider, credentials):
@@ -917,7 +917,7 @@ chmod 600 /root/.ssh/authorized_keys
# {"westford_esx": {"api-url":
"https://vsphere.virt.bos.redhat.com/sdk", "username":
"Administrator", "password": "changeme",
# "datastore": "datastore1", "network_name":
"VM Network" } }
- vm_name = "factory-image-" + self.image_id
+ vm_name = "factory-image-" + self.new_image_id
vm_import = VMImport(provider_data['api-url'],
provider_data['username'], provider_data['password'])
vm_import.import_vm(datastore=provider_data['datastore'], network_name =
provider_data['network_name'],
name=vm_name, disksize_kb = (10*1024*1024 + 2 ), memory=512,
num_cpus=1,
@@ -925,7 +925,7 @@ chmod 600 /root/.ssh/authorized_keys
# Create the provdier image
metadata = dict(image=image_id, provider=provider, icicle="none",
target_identifier=vm_name)
- self.warehouse.create_provider_image(self.image_id, metadata=metadata)
+ self.warehouse.create_provider_image(self.new_image_id, metadata=metadata)
self.percent_complete = 100
@@ -960,7 +960,7 @@ chmod 600 /root/.ssh/authorized_keys
# Create the provdier image
metadata = dict(image=image_id, provider=provider, icicle="none",
target_identifier=rhevm_uuid)
- self.warehouse.create_provider_image(self.image_id, metadata=metadata)
+ self.warehouse.create_provider_image(self.new_image_id, metadata=metadata)
self.percent_complete = 100
@@ -1160,11 +1160,11 @@ chmod 600 /root/.ssh/authorized_keys
# TODO: Generate and store ICICLE
self.status = "PUSHING"
metadata = dict(image=image_id, provider=provider, icicle="none",
target_identifier=ami_id)
- self.warehouse.create_provider_image(self.image_id, metadata=metadata)
+ self.warehouse.create_provider_image(self.new_image_id, metadata=metadata)
#self.output_descriptor="unknown"
- #metadata = dict(uuid=self.image_id, type="provider_image",
template=self.template, target=self.target, icicle=self.output_descriptor, image=image_id,
provider=provider, target_identifier=ami_id)
- self.log.debug("FedoraBuilder instance %s pushed image with uuid %s to
provider_image UUID (%s) and set metadata: %s" % (id(self), image_id, self.image_id,
str(metadata)))
+ #metadata = dict(uuid=self.new_image_id, type="provider_image",
template=self.template, target=self.target, icicle=self.output_descriptor, image=image_id,
provider=provider, target_identifier=ami_id)
+ self.log.debug("FedoraBuilder instance %s pushed image with uuid %s to
provider_image UUID (%s) and set metadata: %s" % (id(self), image_id,
self.new_image_id, str(metadata)))
self.percent_complete=100
def abort(self):
diff --git a/imagefactory/builders/IBuilder.py b/imagefactory/builders/IBuilder.py
index 39c92d5..1485cbf 100644
--- a/imagefactory/builders/IBuilder.py
+++ b/imagefactory/builders/IBuilder.py
@@ -30,7 +30,7 @@ def conforms_to_interface_invariant(obj):
getattr(obj, "target")
getattr(obj, "target_id")
getattr(obj, "provider")
- getattr(obj, "image_id")
+ getattr(obj, "new_image_id")
getattr(obj, "image")
getattr(obj, "status")
getattr(obj, "percent_complete")
@@ -53,7 +53,7 @@ class IBuilder(Interface):
target = Attribute("""The target backend the image is being built
for.""")
target_id = Attribute("""The unique handle or representation of the
Replicated Image in the provider instance. For Amazon this will be an AMI. It's
unclear what this might be on other providers.""")
provider = Attribute("""Where the image is to be deployed / launched.
(eg. ec2-us-west)""")
- image_id = Attribute("""A Universal Unique Identifier for the
image.""")
+ new_image_id = Attribute("""A Universal Unique Identifier for the
newly created target or provider image.""")
image = Attribute("""Reference to the image file being
built.""")
status = Attribute("""Status of the image build
process.""")
percent_complete = Attribute("""Completion percentage for an image
build in progress.""")
diff --git a/imagefactory/builders/MockBuilder.py b/imagefactory/builders/MockBuilder.py
index 18719f4..b9e57bd 100644
--- a/imagefactory/builders/MockBuilder.py
+++ b/imagefactory/builders/MockBuilder.py
@@ -47,7 +47,7 @@ class MockBuilder(BaseBuilder):
failing_thread.start()
else:
self.log.debug("build_image() called on MockBuilder...")
- self.image = "%s/deltacloud-%s/images/%s.yml" %
(self.app_config['imgdir'], os.getlogin(), self.image_id)
+ self.image = "%s/deltacloud-%s/images/%s.yml" %
(self.app_config['imgdir'], os.getlogin(), self.new_image_id)
self.log.debug("Setting image build path: %s" % (self.image, ))
self.status = "INITIALIZING"
self.log.debug("Initializing mock image...")
@@ -69,7 +69,7 @@ class MockBuilder(BaseBuilder):
image_file.write(':architecture: mock_architecture\n')
self.percent_complete = 20
image_file.write(":object_id: %s\n" % (id(self), ))
- image_file.write(":uuid: %s\n" % (self.image_id, ))
+ image_file.write(":uuid: %s\n" % (self.new_image_id, ))
image_file.write(":created_by: %s\n" %
(sys.argv[0].rpartition('/')[2], ))
image_file.write(":created_on: %s\n" % (time.strftime("%a,
%d %b %Y %H:%M:%S +0000", time.gmtime()), ))
image_file.close()
@@ -91,7 +91,7 @@ class MockBuilder(BaseBuilder):
self.status = "PENDING"
image, image_metadata = self.warehouse.image_with_id(image_id,
metadata_keys=("icicle", ))
# write the provider image out to the filesystem
- image_path = "%s/deltacloud-%s/%s/images/%s.yml" %
(self.app_config['imgdir'], os.getlogin(), provider, self.image_id)
+ image_path = "%s/deltacloud-%s/%s/images/%s.yml" %
(self.app_config['imgdir'], os.getlogin(), provider, self.new_image_id)
self.log.debug("Storing mock image for %s at path: %s" % (provider,
image_path))
directory = os.path.dirname(image_path)
if (not os.path.exists(directory)):
@@ -100,8 +100,8 @@ class MockBuilder(BaseBuilder):
image_file.write(image)
image_file.close()
# push the provider image up to the warehouse
- metadata = dict(image=image_id, provider=provider,
icicle=image_metadata["icicle"], target_identifier="Mock_%s_%s" %
(provider, self.image_id))
- self.warehouse.create_provider_image(self.image_id, txt=image,
metadata=metadata)
+ metadata = dict(image=image_id, provider=provider,
icicle=image_metadata["icicle"], target_identifier="Mock_%s_%s" %
(provider, self.new_image_id))
+ self.warehouse.create_provider_image(self.new_image_id, txt=image,
metadata=metadata)
self.status = "FINISHING"
self.log.debug("MockBuilder instance %s pushed image with uuid %s to
warehouse (%s/%s) and set metadata: %s" % (id(self), image_id, self.warehouse.url,
self.warehouse.provider_image_bucket, metadata))
self.status = "COMPLETED"
diff --git a/imagefactory/qmfagent/BuildAdaptor.py
b/imagefactory/qmfagent/BuildAdaptor.py
index 751d1ef..119dedf 100644
--- a/imagefactory/qmfagent/BuildAdaptor.py
+++ b/imagefactory/qmfagent/BuildAdaptor.py
@@ -64,7 +64,7 @@ class BuildAdaptor(BuildDispatcher):
status = props.subprop("qmf_object", "status", "The status
property.")
percent_complete = props.subprop("qmf_object",
"percent_complete", "The percent_complete property.")
- image_id = props.subprop("qmf_object", "image_id", "The
image property.")
+ new_image_id = props.subprop("qmf_object", "image_id", "The
image property.")
qmf_object = props.prop("_qmf_object", "The qmf_object
property.")
def __init__(self, template, target, agent=None):
diff --git a/imagefactory/qmfagent/ImageFactoryAgent.py
b/imagefactory/qmfagent/ImageFactoryAgent.py
index 3b838ac..e8f1910 100644
--- a/imagefactory/qmfagent/ImageFactoryAgent.py
+++ b/imagefactory/qmfagent/ImageFactoryAgent.py
@@ -80,7 +80,7 @@ class ImageFactoryAgent(AgentHandler):
result = getattr(target_obj, methodName)(**args)
if ((addr == self.image_factory_addr) and (methodName in ("image",
"provider_image"))):
- build_adaptor_instance_name = "build_adaptor:%s:%s" %
(methodName, result.image_id)
+ build_adaptor_instance_name = "build_adaptor:%s:%s" %
(methodName, result.new_image_id)
qmf_object_addr = self.session.addData(result.qmf_object,
build_adaptor_instance_name, persistent=True)
self.managedObjects[repr(qmf_object_addr)] = result
handle.addReturnArgument("build_adaptor",
qmf_object_addr.asMap())
diff --git a/tests/builders/testBaseBuilder.py b/tests/builders/testBaseBuilder.py
index a75e265..5ec5a05 100644
--- a/tests/builders/testBaseBuilder.py
+++ b/tests/builders/testBaseBuilder.py
@@ -48,7 +48,7 @@ class TestBaseBuilder(unittest.TestCase):
self.assert_(callable(self.builder))
def testImageIdSet(self):
- self.assert_(self.builder.image_id, 'Initilizer failed to set
\'image_id\'...')
+ self.assert_(self.builder.new_image_id, 'Initilizer failed to set
\'image_id\'...')
def testDelegateAssignment(self):
self.builder.delegate = self.delegate
diff --git a/tests/builders/testMockBuilder.py b/tests/builders/testMockBuilder.py
index 27aaa4e..e1fbcac 100644
--- a/tests/builders/testMockBuilder.py
+++ b/tests/builders/testMockBuilder.py
@@ -41,7 +41,7 @@ class TestMockBuilder(unittest.TestCase):
self.assert_(IBuilder.implementedBy(MockBuilder), 'MockBuilder does not
implement the ImageBuilder interface...')
def testInit(self):
- self.assertIn(self.builder.template, (self.template, self.builder.image_id))
+ self.assertIn(self.builder.template, (self.template, self.builder.new_image_id))
self.assertEqual(self.builder.target, self.target)
def testBuildImage(self):
diff --git a/tests/testTemplate.py b/tests/testTemplate.py
index 2a801a7..7b4dcce 100644
--- a/tests/testTemplate.py
+++ b/tests/testTemplate.py
@@ -52,8 +52,8 @@ class testTemplate(unittest.TestCase):
builder = MockBuilder(self.template_xml, target)
builder.build_image()
metadata = dict(template=template_id, target=target, icicle="None",
target_parameters="None")
- self.warehouse.store_image(builder.image_id, builder.image, metadata=metadata)
- image_template = Template(builder.image_id)
+ self.warehouse.store_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.assertIsNone(template.url)
--
1.7.4.4