Repository: libcloud Updated Branches: refs/heads/trunk 5b2a26c0a -> 9fe309ddd
DimensionData adding disk configurations to node object Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/afbb8ecf Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/afbb8ecf Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/afbb8ecf Branch: refs/heads/trunk Commit: afbb8ecf7a02c6ead9fc6eae657a4725347a5508 Parents: 5b2a26c Author: Jeffrey Dunham <jeffrey.a.dun...@gmail.com> Authored: Fri Feb 19 18:09:38 2016 -0500 Committer: anthony-shaw <anthony.p.s...@gmail.com> Committed: Mon Feb 29 16:19:53 2016 +1100 ---------------------------------------------------------------------- libcloud/common/dimensiondata.py | 35 ++++++++++++++++++++++++ libcloud/compute/drivers/dimensiondata.py | 19 +++++++++++-- libcloud/test/compute/test_dimensiondata.py | 7 +++-- 3 files changed, 57 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/libcloud/blob/afbb8ecf/libcloud/common/dimensiondata.py ---------------------------------------------------------------------- diff --git a/libcloud/common/dimensiondata.py b/libcloud/common/dimensiondata.py index ca0b57f..11de593 100644 --- a/libcloud/common/dimensiondata.py +++ b/libcloud/common/dimensiondata.py @@ -608,6 +608,41 @@ class DimensionDataServerCpuSpecification(object): % (self.cpu_count, self.cores_per_socket, self.performance)) +class DimensionDataServerDisk(object): + """ + A class that represents the disk on a server + """ + def __init__(self, id, scsiId, sizeGb, speed, state): + """ + Instantiate a new :class:`DimensionDataServerDisk` + + :param id: The id of the disk + :type id: ``str`` + + :param scsiId: Representation for scsi + :type scsiId: ``int`` + + :param sizeGb: Size of the disk + :type sizeGb: ``int`` + + :param speed: Speed of the disk (i.e. STANDARD) + :type speed: ``str`` + + :param state: State of the disk (i.e. PENDING) + :type state: ``str`` + """ + self.id = id + self.scsiId = scsiId + self.sizeGb = sizeGb + self.speed = speed + self.state = state + + def __repr__(self): + return (('<DimensionDataServerDisk: ' + 'id=%s, sizeGb=%s') + % (self.id, self.sizeGb)) + + class DimensionDataFirewallRule(object): """ DimensionData Firewall Rule for a network domain http://git-wip-us.apache.org/repos/asf/libcloud/blob/afbb8ecf/libcloud/compute/drivers/dimensiondata.py ---------------------------------------------------------------------- diff --git a/libcloud/compute/drivers/dimensiondata.py b/libcloud/compute/drivers/dimensiondata.py index 938d07c..67c727e 100644 --- a/libcloud/compute/drivers/dimensiondata.py +++ b/libcloud/compute/drivers/dimensiondata.py @@ -29,6 +29,7 @@ from libcloud.common.dimensiondata import DimensionDataNetwork from libcloud.common.dimensiondata import DimensionDataNetworkDomain from libcloud.common.dimensiondata import DimensionDataVlan from libcloud.common.dimensiondata import DimensionDataServerCpuSpecification +from libcloud.common.dimensiondata import DimensionDataServerDisk from libcloud.common.dimensiondata import DimensionDataPublicIpBlock from libcloud.common.dimensiondata import DimensionDataFirewallRule from libcloud.common.dimensiondata import DimensionDataFirewallAddress @@ -1851,6 +1852,19 @@ class DimensionDataNodeDriver(NodeDriver): cores_per_socket=int(element.get('coresPerSocket')), performance=element.get('speed')) + def _to_disks(self, object): + disk_elements = object.findall(fixxpath('disk', TYPES_URN)) + return [self._to_disk(el) for el in disk_elements] + + def _to_disk(self, element): + return DimensionDataServerDisk( + id=element.get('id'), + scsiId=element.get('scsiId'), + sizeGb=element.get('sizeGb'), + speed=element.get('speed'), + state=element.get('state') + ) + def _to_nodes(self, object): node_elements = object.findall(fixxpath('server', TYPES_URN)) return [self._to_node(el) for el in node_elements] @@ -1866,7 +1880,7 @@ class DimensionDataNodeDriver(NodeDriver): = element.find(fixxpath('networkInfo', TYPES_URN)) is not None cpu_spec = self._to_cpu_spec(element.find(fixxpath('cpu', TYPES_URN))) - + disks = self._to_disks(element) extra = { 'description': findtext(element, 'description', TYPES_URN), 'sourceImageId': findtext(element, 'sourceImageId', TYPES_URN), @@ -1891,7 +1905,8 @@ class DimensionDataNodeDriver(NodeDriver): 'OS_displayName': element.find(fixxpath( 'operatingSystem', TYPES_URN)).get('displayName'), - 'status': status + 'status': status, + 'disks': disks } public_ip = findtext(element, 'publicIpAddress', TYPES_URN) http://git-wip-us.apache.org/repos/asf/libcloud/blob/afbb8ecf/libcloud/test/compute/test_dimensiondata.py ---------------------------------------------------------------------- diff --git a/libcloud/test/compute/test_dimensiondata.py b/libcloud/test/compute/test_dimensiondata.py index ba748d9..f6484f3 100644 --- a/libcloud/test/compute/test_dimensiondata.py +++ b/libcloud/test/compute/test_dimensiondata.py @@ -23,7 +23,7 @@ from libcloud.utils.py3 import httplib from libcloud.common.types import InvalidCredsError from libcloud.common.dimensiondata import DimensionDataAPIException, NetworkDomainServicePlan -from libcloud.common.dimensiondata import DimensionDataServerCpuSpecification +from libcloud.common.dimensiondata import DimensionDataServerCpuSpecification, DimensionDataServerDisk from libcloud.compute.drivers.dimensiondata import DimensionDataNodeDriver as DimensionData from libcloud.compute.base import Node, NodeAuthPassword, NodeLocation @@ -67,13 +67,16 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin): DimensionDataMockHttp.type = None ret = self.driver.list_nodes() self.assertTrue(ret[0].state == 'running') - print(ret[1].state) self.assertTrue(ret[1].state == 'starting') self.assertTrue(ret[2].state == 'stopping') self.assertTrue(ret[3].state == 'reconfiguring') self.assertTrue(ret[4].state == 'running') self.assertTrue(ret[5].state == 'terminated') self.assertTrue(ret[6].state == 'stopped') + self.assertEqual(len(ret), 7) + node = ret[0] + self.assertTrue(isinstance(node.extra['disks'], list)) + self.assertTrue(isinstance(node.extra['disks'][0], DimensionDataServerDisk)) def test_list_nodes_response_PAGINATED(self): DimensionDataMockHttp.type = 'PAGINATED'