From 379cfe7e4cce5209b6353e3087bc3131671a9924 Mon Sep 17 00:00:00 2001 From: Lucas Di Pentima Date: Tue, 29 Aug 2017 19:06:18 -0300 Subject: [PATCH 1/5] Use TagSpecification parameter on EC2 create_node --- libcloud/__init__.py | 2 +- libcloud/compute/drivers/ec2.py | 22 +++++++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/libcloud/__init__.py b/libcloud/__init__.py index 24d4a68dcd..773c03fdb2 100644 --- a/libcloud/__init__.py +++ b/libcloud/__init__.py @@ -36,7 +36,7 @@ '__version__', 'enable_debug' ] -__version__ = '2.2.0' +__version__ = '2.2.0.dev1' def enable_debug(fo): diff --git a/libcloud/compute/drivers/ec2.py b/libcloud/compute/drivers/ec2.py index efb62750de..fd807aa10b 100644 --- a/libcloud/compute/drivers/ec2.py +++ b/libcloud/compute/drivers/ec2.py @@ -3765,19 +3765,23 @@ def create_node(self, **kwargs): if subnet_id: params['SubnetId'] = subnet_id + # Specify tags at instance creation time + tags = {'Name': kwargs['name']} + if 'ex_metadata' in kwargs: + tags.update(kwargs['ex_metadata']) + tagspec_root = 'TagSpecification.1.' + params[tagspec_root + 'ResourceType'] = 'instance' + tag_nr = 1 + for k, v in tags.iteritems(): + tag_root = tagspec_root + "Tag.{}.".format(tag_nr) + params[tag_root + "Key"] = k + params[tag_root + "Value"] = v + tag_nr += 1 + object = self.connection.request(self.path, params=params).object nodes = self._to_nodes(object, 'instancesSet/item') for node in nodes: - tags = {'Name': kwargs['name']} - if 'ex_metadata' in kwargs: - tags.update(kwargs['ex_metadata']) - - try: - self.ex_create_tags(resource=node, tags=tags) - except Exception: - continue - node.name = kwargs['name'] node.extra.update({'tags': tags}) From 386456c245a3518254f5f6a045832ceb6451e486 Mon Sep 17 00:00:00 2001 From: Lucas Di Pentima Date: Wed, 30 Aug 2017 18:03:47 -0300 Subject: [PATCH 2/5] Updated code so it's Python 3 compatible. --- libcloud/compute/drivers/ec2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libcloud/compute/drivers/ec2.py b/libcloud/compute/drivers/ec2.py index fd807aa10b..9737e13076 100644 --- a/libcloud/compute/drivers/ec2.py +++ b/libcloud/compute/drivers/ec2.py @@ -3772,7 +3772,7 @@ def create_node(self, **kwargs): tagspec_root = 'TagSpecification.1.' params[tagspec_root + 'ResourceType'] = 'instance' tag_nr = 1 - for k, v in tags.iteritems(): + for k, v in tags.items(): tag_root = tagspec_root + "Tag.{}.".format(tag_nr) params[tag_root + "Key"] = k params[tag_root + "Value"] = v From f9118e8d62825e42fd155b387bcdf8472f089783 Mon Sep 17 00:00:00 2001 From: Lucas Di Pentima Date: Wed, 30 Aug 2017 18:22:52 -0300 Subject: [PATCH 3/5] Updated code so it's also compatible with Python 2.6 --- libcloud/compute/drivers/ec2.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libcloud/compute/drivers/ec2.py b/libcloud/compute/drivers/ec2.py index 9737e13076..f2526b089e 100644 --- a/libcloud/compute/drivers/ec2.py +++ b/libcloud/compute/drivers/ec2.py @@ -3773,9 +3773,9 @@ def create_node(self, **kwargs): params[tagspec_root + 'ResourceType'] = 'instance' tag_nr = 1 for k, v in tags.items(): - tag_root = tagspec_root + "Tag.{}.".format(tag_nr) - params[tag_root + "Key"] = k - params[tag_root + "Value"] = v + tag_root = tagspec_root + 'Tag.%d.' % tag_nr + params[tag_root + 'Key'] = k + params[tag_root + 'Value'] = v tag_nr += 1 object = self.connection.request(self.path, params=params).object From 6f0d3aa6d3b5d9db58a998a91ad1088ff3fe6413 Mon Sep 17 00:00:00 2001 From: Lucas Di Pentima Date: Thu, 31 Aug 2017 15:26:03 -0300 Subject: [PATCH 4/5] * Reverted version number. * Removed MockHttp methods as requested on the PR. --- libcloud/__init__.py | 2 +- libcloud/test/compute/test_ec2.py | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/libcloud/__init__.py b/libcloud/__init__.py index 773c03fdb2..24d4a68dcd 100644 --- a/libcloud/__init__.py +++ b/libcloud/__init__.py @@ -36,7 +36,7 @@ '__version__', 'enable_debug' ] -__version__ = '2.2.0.dev1' +__version__ = '2.2.0' def enable_debug(fo): diff --git a/libcloud/test/compute/test_ec2.py b/libcloud/test/compute/test_ec2.py index 2766fc7ad8..f8a2687e49 100644 --- a/libcloud/test/compute/test_ec2.py +++ b/libcloud/test/compute/test_ec2.py @@ -1526,10 +1526,6 @@ def _ModifySnapshotAttribute(self, method, url, body, headers): body = self.fixtures.load('modify_snapshot_attribute.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) - def _idempotent_CreateTags(self, method, url, body, headers): - body = self.fixtures.load('create_tags.xml') - return (httplib.OK, body, {}, httplib.responses[httplib.OK]) - def _CreateVolume(self, method, url, body, headers): body = self.fixtures.load('create_volume.xml') return (httplib.OK, body, {}, httplib.responses[httplib.OK]) @@ -1741,10 +1737,6 @@ def _services_Eucalyptus_RunInstances(self, method, url, body, headers): return self._RunInstances(method, url, body, headers) - def _services_Eucalyptus_CreateTags(self, method, url, body, - headers): - return self._CreateTags(method, url, body, headers) - def _services_Eucalyptus_DescribeInstanceTypes(self, method, url, body, headers): body = self.fixtures.load('describe_instance_types.xml') From f33345cc00d1d2feeea5c6f680160104a8cc5bd1 Mon Sep 17 00:00:00 2001 From: Lucas Di Pentima Date: Wed, 13 Sep 2017 12:32:16 -0300 Subject: [PATCH 5/5] Accessing blob storage in alternate cloud environments. --- libcloud/compute/drivers/azure_arm.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libcloud/compute/drivers/azure_arm.py b/libcloud/compute/drivers/azure_arm.py index ec71af447f..f7e8a1b89d 100644 --- a/libcloud/compute/drivers/azure_arm.py +++ b/libcloud/compute/drivers/azure_arm.py @@ -538,9 +538,10 @@ def _get_instance_vhd(): n = 0 while True: try: - instance_vhd = "https://%s.blob.core.windows.net" \ + instance_vhd = "https://%s.blob%s" \ "/%s/%s-os_%i.vhd" \ % (ex_storage_account, + self.connection.storage_suffix, ex_blob_container, name, n)