libcloud-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From to...@apache.org
Subject [1/2] git commit: LIBCLOUD-514: Add create/delete tag support into the CloudStack driver. New tests and fixtures are also included.
Date Sun, 09 Feb 2014 20:35:32 GMT
Updated Branches:
  refs/heads/trunk 981611409 -> 91c6281db


LIBCLOUD-514: Add create/delete tag support into the CloudStack driver. New tests and fixtures
are also included.

Closes #248.

Signed-off-by: Tomaz Muraus <tomaz@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/7d1d1cf6
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/7d1d1cf6
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/7d1d1cf6

Branch: refs/heads/trunk
Commit: 7d1d1cf63122ddf503d3c8a5dd018488790060fc
Parents: 9816114
Author: Chris DeRamus <chris@divvycloud.com>
Authored: Sat Feb 8 07:56:36 2014 -0500
Committer: Tomaz Muraus <tomaz@apache.org>
Committed: Sun Feb 9 21:29:29 2014 +0100

----------------------------------------------------------------------
 libcloud/compute/drivers/cloudstack.py          | 63 ++++++++++++++++++++
 .../fixtures/cloudstack/createTags_default.json |  1 +
 .../fixtures/cloudstack/deleteTags_default.json |  1 +
 .../queryAsyncJobResult_createtagsjob.json      |  1 +
 .../queryAsyncJobResult_deletetagsjob.json      |  1 +
 libcloud/test/compute/test_cloudstack.py        | 12 ++++
 6 files changed, 79 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/7d1d1cf6/libcloud/compute/drivers/cloudstack.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/cloudstack.py b/libcloud/compute/drivers/cloudstack.py
index 7bc2516..5d66e8d 100644
--- a/libcloud/compute/drivers/cloudstack.py
+++ b/libcloud/compute/drivers/cloudstack.py
@@ -1692,6 +1692,69 @@ class CloudStackNodeDriver(CloudStackDriverMixIn, NodeDriver):
 
         return limits
 
+    def ex_create_tags(self, resource_ids, resource_type, tags):
+        """
+        Create tags for a resource (Node/StorageVolume/etc).
+        A list of resource types can be found at http://goo.gl/6OKphH
+
+        :param resource_ids: Resource IDs to be tagged. The resource IDs must
+                             all be associated with the resource_type.
+                             For example, for virtual machines (UserVm) you
+                             can only specify a list of virtual machine IDs.
+        :type  resource_ids: ``list`` of resource IDs
+
+        :param resource_type: Resource type (eg: UserVm)
+        :type  resource_type: ``str``
+
+        :param tags: A dictionary or other mapping of strings to strings,
+                     associating tag names with tag values.
+        :type  tags: ``dict``
+
+        :rtype: ``bool``
+        """
+        params = {'resourcetype': resource_type,
+                  'resourceids': ','.join(resource_ids)}
+
+        for i, key in enumerate(tags):
+            params['tags[%d].key' % i] = key
+            params['tags[%d].value' % i] = tags[key]
+
+        self._async_request(command='createTags',
+                            params=params,
+                            method='GET')
+        return True
+
+    def ex_delete_tags(self, resource_ids, resource_type, tag_keys):
+        """
+        Delete tags from a resource.
+
+        :param resource_ids: Resource IDs to be tagged. The resource IDs must
+                             all be associated with the resource_type.
+                             For example, for virtual machines (UserVm) you
+                             can only specify a list of virtual machine IDs.
+        :type  resource_ids: ``list`` of resource IDs
+
+        :param resource_type: Resource type (eg: UserVm)
+        :type  resource_type: ``str``
+
+        :param tag_keys: A list of keys to delete. CloudStack only requires
+                         the keys from the key/value pair.
+        :type  tag_keys: ``list``
+
+        :rtype: ``bool``
+        """
+        params = {'resourcetype': resource_type,
+                  'resourceids': ','.join(resource_ids)}
+
+        for i, key in enumerate(tag_keys):
+            params['tags[%s].key' % i] = key
+
+        self._async_request(command='deleteTags',
+                            params=params,
+                            method='GET')
+
+        return True
+
     def _to_node(self, data, public_ips=None):
         """
         :param data: Node data object.

http://git-wip-us.apache.org/repos/asf/libcloud/blob/7d1d1cf6/libcloud/test/compute/fixtures/cloudstack/createTags_default.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/cloudstack/createTags_default.json b/libcloud/test/compute/fixtures/cloudstack/createTags_default.json
new file mode 100644
index 0000000..aeeb1e0
--- /dev/null
+++ b/libcloud/test/compute/fixtures/cloudstack/createTags_default.json
@@ -0,0 +1 @@
+{ "createtagsresponse" : {"id":"60338035-92fb-4d27-98d4-b60ad4b38b87","jobid":"createtagsjob"}
}

http://git-wip-us.apache.org/repos/asf/libcloud/blob/7d1d1cf6/libcloud/test/compute/fixtures/cloudstack/deleteTags_default.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/cloudstack/deleteTags_default.json b/libcloud/test/compute/fixtures/cloudstack/deleteTags_default.json
new file mode 100644
index 0000000..e136a00
--- /dev/null
+++ b/libcloud/test/compute/fixtures/cloudstack/deleteTags_default.json
@@ -0,0 +1 @@
+{ "deletetagsresponse" : {"id":"60338035-92fb-4d27-98d4-b60ad4b38b87","jobid":"deletetagsjob"}
}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/libcloud/blob/7d1d1cf6/libcloud/test/compute/fixtures/cloudstack/queryAsyncJobResult_createtagsjob.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/cloudstack/queryAsyncJobResult_createtagsjob.json
b/libcloud/test/compute/fixtures/cloudstack/queryAsyncJobResult_createtagsjob.json
new file mode 100644
index 0000000..ab6a845
--- /dev/null
+++ b/libcloud/test/compute/fixtures/cloudstack/queryAsyncJobResult_createtagsjob.json
@@ -0,0 +1 @@
+{ "queryasyncjobresultresponse" : {"accountid":"dcfd4b83-2ae6-43d1-a2eb-af87066ecbc9","userid":"c3d3cb3c-0f13-429a-b900-5bacc346df32","cmd":"com.cloud.api.commands.CreateTagsCmd","jobstatus":1,"jobprocstatus":0,"jobresultcode":0,"jobresulttype":"object","jobresult":{"success":true},"created":"2014-02-07T20:10:40+0100","jobid":"2a7426a5-e25e-4400-900d-09bca3c0a039"}
}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/libcloud/blob/7d1d1cf6/libcloud/test/compute/fixtures/cloudstack/queryAsyncJobResult_deletetagsjob.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/cloudstack/queryAsyncJobResult_deletetagsjob.json
b/libcloud/test/compute/fixtures/cloudstack/queryAsyncJobResult_deletetagsjob.json
new file mode 100644
index 0000000..b16cb4d
--- /dev/null
+++ b/libcloud/test/compute/fixtures/cloudstack/queryAsyncJobResult_deletetagsjob.json
@@ -0,0 +1 @@
+{ "queryasyncjobresultresponse" : {"accountid":"dcfd4b83-2ae6-43d1-a2eb-af87066ecbc9","userid":"c3d3cb3c-0f13-429a-b900-5bacc346df32","cmd":"com.cloud.api.commands.DeleteTagsCmd","jobstatus":1,"jobprocstatus":0,"jobresultcode":0,"jobresulttype":"object","jobresult":{"success":true},"created":"2014-02-08T13:43:24+0100","jobid":"02425faf-4cf4-44c2-9241-cb8b1eabc957"}
}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/libcloud/blob/7d1d1cf6/libcloud/test/compute/test_cloudstack.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_cloudstack.py b/libcloud/test/compute/test_cloudstack.py
index c54d423..fc73116 100644
--- a/libcloud/test/compute/test_cloudstack.py
+++ b/libcloud/test/compute/test_cloudstack.py
@@ -496,6 +496,18 @@ class CloudStackCommonTestCase(TestCaseMixin):
         self.assertEqual(limits['max_volumes'], 20)
         self.assertEqual(limits['max_snapshots'], 20)
 
+    def test_ex_create_tags(self):
+        node = self.driver.list_nodes()[0]
+        tags = {'Region': 'Canada'}
+        resp = self.driver.ex_create_tags([node.id], 'UserVm', tags)
+        self.assertTrue(resp)
+
+    def test_ex_delete_tags(self):
+        node = self.driver.list_nodes()[0]
+        tag_keys = ['Region']
+        resp = self.driver.ex_delete_tags([node.id], 'UserVm', tag_keys)
+        self.assertTrue(resp)
+
 
 class CloudStackTestCase(CloudStackCommonTestCase, unittest.TestCase):
     def test_driver_instantiation(self):


Mime
View raw message