Added CloudStackNodeDriver.ex_get_volume and test Shortcut for get only one volume (Little py3 fix for CloudStackNodeDriver.ex_get_node)
Signed-off-by: Sebastien Goasguen <[email protected]> This closes #532 Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/13fe5a55 Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/13fe5a55 Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/13fe5a55 Branch: refs/heads/trunk Commit: 13fe5a5574dcdeb8bfe39f0ac9f2b0e9a2c71fdb Parents: e6fa98b Author: ZuluPro <[email protected]> Authored: Wed May 27 13:15:02 2015 -0400 Committer: Sebastien Goasguen <[email protected]> Committed: Tue Jun 2 06:35:04 2015 +0200 ---------------------------------------------------------------------- CHANGES.rst | 4 ++++ libcloud/compute/drivers/cloudstack.py | 33 ++++++++++++++++++++++++++- libcloud/test/compute/test_cloudstack.py | 4 ++++ 3 files changed, 40 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/libcloud/blob/13fe5a55/CHANGES.rst ---------------------------------------------------------------------- diff --git a/CHANGES.rst b/CHANGES.rst index c66d27b..b8bd91f 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -199,6 +199,10 @@ Compute (GITHUB-528) [Michael Bennett] +- Add ``ex_get_node`` and ``ex_get_volume`` methods to CloudStack driver + (GITHUB-532) + [ZuluPro] + Storage ~~~~~~~ http://git-wip-us.apache.org/repos/asf/libcloud/blob/13fe5a55/libcloud/compute/drivers/cloudstack.py ---------------------------------------------------------------------- diff --git a/libcloud/compute/drivers/cloudstack.py b/libcloud/compute/drivers/cloudstack.py index f768783..b226c55 100644 --- a/libcloud/compute/drivers/cloudstack.py +++ b/libcloud/compute/drivers/cloudstack.py @@ -1440,7 +1440,7 @@ class CloudStackNodeDriver(CloudStackDriverMixIn, NodeDriver): continue public_ips[addr['ipaddress']] = addr['id'] - node = self._to_node(data=vm, public_ips=public_ips.keys()) + node = self._to_node(data=vm, public_ips=list(public_ips.keys())) addresses = public_ips.items() addresses = [CloudStackAddress(node, v, k) for k, v in addresses] @@ -2173,6 +2173,37 @@ class CloudStackNodeDriver(CloudStackDriverMixIn, NodeDriver): extra=extra)) return list_volumes + def ex_get_volume(self, volume_id, project=None): + """ + Return a StorageVolume object based on its ID. + + :param volume_id: The id of the volume + :type volume_id: ``str`` + + :keyword project: Limit volume returned to those configured under + the defined project. + :type project: :class:`.CloudStackProject` + + :rtype: :class:`CloudStackNode` + """ + args = {'id': volume_id} + if project: + args['projectid'] = project.id + volumes = self._sync_request(command='listVolumes', params=args) + if not volumes: + raise Exception("Volume '%s' not found" % volume_id) + vol = volumes['volume'][0] + + extra_map = RESOURCE_EXTRA_ATTRIBUTES_MAP['volume'] + extra = self._get_extra_dict(vol, extra_map) + + if 'tags' in vol: + extra['tags'] = self._get_resource_tags(vol['tags']) + + volume = StorageVolume(id=vol['id'], name=vol['name'], + size=vol['size'], driver=self, extra=extra) + return volume + def list_key_pairs(self, **kwargs): """ List registered key pairs. http://git-wip-us.apache.org/repos/asf/libcloud/blob/13fe5a55/libcloud/test/compute/test_cloudstack.py ---------------------------------------------------------------------- diff --git a/libcloud/test/compute/test_cloudstack.py b/libcloud/test/compute/test_cloudstack.py index a9d0b55..ed83d70 100644 --- a/libcloud/test/compute/test_cloudstack.py +++ b/libcloud/test/compute/test_cloudstack.py @@ -572,6 +572,10 @@ class CloudStackCommonTestCase(TestCaseMixin): self.assertEqual(1, len(volumes)) self.assertEqual('ROOT-69942', volumes[0].name) + def test_ex_get_volume(self): + volume = self.driver.ex_get_volume(2600) + self.assertEqual('ROOT-69942', volume.name) + def test_list_nodes(self): nodes = self.driver.list_nodes() self.assertEqual(2, len(nodes))
