You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by an...@apache.org on 2016/10/10 00:01:55 UTC
[01/13] libcloud git commit: Added property plan in
DimensionDataNetworkDomain return
Repository: libcloud
Updated Branches:
refs/heads/trunk 9ebc0b49e -> 4d11ec272
Added property plan in DimensionDataNetworkDomain return
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/ff06265c
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/ff06265c
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/ff06265c
Branch: refs/heads/trunk
Commit: ff06265c4132b15b8818f795980a5ba04b8aeb22
Parents: 4c0bc38
Author: Samuel Chong <sa...@gmail.com>
Authored: Wed Oct 5 13:05:46 2016 +1100
Committer: Samuel Chong <sa...@gmail.com>
Committed: Wed Oct 5 13:05:46 2016 +1100
----------------------------------------------------------------------
libcloud/common/dimensiondata.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff06265c/libcloud/common/dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/common/dimensiondata.py b/libcloud/common/dimensiondata.py
index 90a0728..45f2c5e 100644
--- a/libcloud/common/dimensiondata.py
+++ b/libcloud/common/dimensiondata.py
@@ -672,9 +672,9 @@ class DimensionDataNetworkDomain(object):
def __repr__(self):
return (('<DimensionDataNetworkDomain: id=%s, name=%s, '
- 'description=%s, location=%s, status=%s>')
+ 'description=%s, location=%s, status=%s, plan=%s>')
% (self.id, self.name, self.description, self.location,
- self.status))
+ self.status, self.plan))
class DimensionDataPublicIpBlock(object):
[05/13] libcloud git commit: Added Data contract classes for
IpAddressList, PortList, NIC
Posted by an...@apache.org.
Added Data contract classes for IpAddressList, PortList, NIC
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/e6d582e5
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/e6d582e5
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/e6d582e5
Branch: refs/heads/trunk
Commit: e6d582e55c4f5bbc906456b7003ded471a6434c6
Parents: 5327c11
Author: Samuel Chong <sa...@gmail.com>
Authored: Thu Oct 6 11:30:46 2016 +1100
Committer: Samuel Chong <sa...@gmail.com>
Committed: Thu Oct 6 11:30:46 2016 +1100
----------------------------------------------------------------------
libcloud/common/dimensiondata.py | 230 ++++++++++++++++++++++++++++++++++
1 file changed, 230 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/e6d582e5/libcloud/common/dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/common/dimensiondata.py b/libcloud/common/dimensiondata.py
index af792c3..6633e64 100644
--- a/libcloud/common/dimensiondata.py
+++ b/libcloud/common/dimensiondata.py
@@ -848,6 +848,7 @@ class DimensionDataFirewallAddress(object):
self.port_begin, self.port_end, self.address_list_id,
self.port_list_id))
+
class DimensionDataNatRule(object):
"""
An IP NAT rule in a network domain
@@ -1519,3 +1520,232 @@ class DimensionDataTagKey(object):
def __repr__(self):
return (('<DimensionDataTagKey: name=%s>')
% (self.name))
+
+
+class DimensionDataIpAddressList(object):
+ """
+ DimensionData IP Address list
+ """
+
+ def __init__(self, id, name, description, ip_version,
+ ip_address_collection,
+ state, create_time, child_ip_address_lists=None):
+ """"
+ Initialize an instance of :class:`DimensionDataIpAddressList`
+
+ :param id: GUID of the IP Address List key
+ :type id: ``str``
+
+ :param name: Name of the IP Address List
+ :type name: ``str``
+
+ :param description: Description of the IP Address List
+ :type description: ``str``
+
+ :param ip_version: IP version. E.g. IPV4, IPV6
+ :type ip_version: ``str``
+
+ :param ip_address_collection: Collection of DimensionDataIpAddress
+ :type ip_address_collection: ``List``
+
+ :param state: IP Address list state
+ :type state: ``str``
+
+ :param create_time: IP Address List created time
+ :type create_time: ``date time``
+
+ :param child_ip_address_lists: List of IP address list to be included
+ :type child_ip_address_lists: List
+ of :class:'DimensionDataIpAddressList'
+ """
+ self.id = id
+ self.name = name
+ self.description = description
+ self.ip_version = ip_version
+ self.ip_address_collection = ip_address_collection
+ self.state = state
+ self.create_time = create_time
+ self.child_ip_address_lists = child_ip_address_lists
+
+ def __repr__(self):
+ return ('<DimensionDataIpAddressList: id=%s, name=%s, description=%s, '
+ 'ip_version=%s, ip_address_collection=%s, state=%s, '
+ 'create_time=%s, child_ip_address_lists=%s>'
+ % (self.id, self.name, self.description, self.ip_version,
+ self.ip_address_collection, self.state, self.create_time,
+ self.child_ip_address_lists))
+
+
+class DimensionDataChildIpAddressList(object):
+ """
+ DimensionData Child IP Address list
+ """
+
+ def __init__(self, id, name):
+ """"
+ Initialize an instance of :class:`DimensionDataChildIpAddressList`
+
+ :param id: GUID of the IP Address List key
+ :type id: ``str``
+
+ :param name: Name of the IP Address List
+ :type name: ``str``
+
+ """
+ self.id = id
+ self.name = name
+
+ def __repr__(self):
+ return ('<DimensionDataChildIpAddressList: id=%s, name=%s>'
+ % (self.id, self.name))
+
+
+class DimensionDataIpAddress(object):
+ """
+ A representation of IP Address in Dimension Data
+ """
+
+ def __init__(self, begin, end=None, prefix_size=None):
+ """
+ Initialize an instance of :class:`DimensionDataIpAddress`
+
+ :param begin: IP Address Begin
+ :type begin: ``str``
+
+ :param end: IP Address end
+ :type end: ``str``
+
+ :param prefixSize: IP Address prefix size
+ :type prefixSize: ``int``
+ """
+ self.begin = begin
+ self.end = end
+ self.prefix_size = prefix_size
+
+ def __repr__(self):
+ return ('<DimensionDataIpAddress: begin=%s, end=%s, prefix_size=%s>'
+ % (self.begin, self.end, self.prefix_size))
+
+
+class DimensionDataPortList(object):
+ """
+ DimensionData Port list
+ """
+
+ def __init__(self, id, name, description, port_collection,
+ child_port_list_lists,
+ state, create_time):
+ """"
+ Initialize an instance of :class:`DimensionDataPortList`
+
+ :param id: GUID of the Port List key
+ :type id: ``str``
+
+ :param name: Name of the Port List
+ :type name: ``str``
+
+ :param description: Description of the Port List
+ :type description: ``str``
+
+ :param port_collection: Collection of DimensionDataPort
+ :type port_collection: ``List``
+
+ :param child_port_list_lists: Collection of DimensionDataChildPort
+ :type child_port_list_lists: ``List``
+
+ :param state: Port list state
+ :type state: ``str``
+
+ :param create_time: Port List created time
+ :type create_time: ``date time``
+ """
+ self.id = id
+ self.name = name
+ self.description = description
+ self.port_collection = port_collection
+ self.child_port_list_lists = child_port_list_lists
+ self.state = state
+ self.create_time = create_time
+
+ def __repr__(self):
+ return (
+ "<DimensionDataPortList: id=%s, name=%s, description=%s, "
+ "port_collection=%s, child_port_list=%s, state=%s, create_time=%s>"
+ % (self.id, self.name, self.description,
+ self.port_collection, self.child_port_list, self.state,
+ self.create_time))
+
+
+class DimensionDataChildPortList(object):
+ """
+ DimensionData Child Port list
+ """
+
+ def __init__(self, id, name):
+ """"
+ Initialize an instance of :class:`DimensionDataChildIpAddressList`
+
+ :param id: GUID of the child port list key
+ :type id: ``str``
+
+ :param name: Name of the child port List
+ :type name: ``str``
+
+ """
+ self.id = id
+ self.name = name
+
+ def __repr__(self):
+ return ('<DimensionDataChildPortList: id=%s, name=%s>'
+ % (self.id, self.name))
+
+
+class DimensionDataPort(object):
+ """
+ A representation of Port in Dimension Data
+ """
+
+ def __init__(self, begin, end=None):
+ """
+ Initialize an instance of :class:`DimensionDataPort`
+
+ :param begin: Port Number Begin
+ :type begin: ``str``
+
+ :param end: Port Number end
+ :type end: ``str``
+ """
+ self.begin = begin
+ self.end = end
+
+ def __repr__(self):
+ return ('<DimensionDataPort: begin=%s, end=%s>'
+ % (self.begin, self.end))
+
+
+class DimensionDataNic(object):
+ """
+ A representation of Network Adapter in Dimension Data
+ """
+
+ def __init__(self, private_ip_v4=None, vlan=None, network_adapter=None):
+ """
+ Initialize an instance of :class:`DimensionDataNic`
+
+ :param private_ip_v4: IPv4
+ :type private_ip_v4: ``str``
+
+ :param vlan: Network VLAN
+ :type vlan: class: DimensionDataVlan or ``str``
+
+ :param network_adapter: Network Adapter Name
+ :type network_adapter: ``str``
+ """
+ self.private_ip_v4 = private_ip_v4
+ self.vlan = vlan
+ self.network_adapter_name = network_adapter
+
+ def __repr__(self):
+ return ('<DimensionDataNic: private_ip_v4=%s, vlan=%s,'
+ 'network_adapter=%s>'
+ % (self.private_ip_v4, self.vlan, self.network_adapter))
[06/13] libcloud git commit: Added Edit firewall rule feature and
CRUD operation for IpAddressList, PortList in DD driver
Posted by an...@apache.org.
Added Edit firewall rule feature and CRUD operation for IpAddressList, PortList in DD driver
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/2eb1b4a3
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/2eb1b4a3
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/2eb1b4a3
Branch: refs/heads/trunk
Commit: 2eb1b4a32e1048d063da0ebea4cac01f2da60270
Parents: e6d582e
Author: Samuel Chong <sa...@gmail.com>
Authored: Thu Oct 6 11:43:28 2016 +1100
Committer: Samuel Chong <sa...@gmail.com>
Committed: Thu Oct 6 11:43:28 2016 +1100
----------------------------------------------------------------------
libcloud/compute/drivers/dimensiondata.py | 640 +++++++++++++++++++++++++
1 file changed, 640 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/2eb1b4a3/libcloud/compute/drivers/dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/dimensiondata.py b/libcloud/compute/drivers/dimensiondata.py
index 9bdeb86..89f7c66 100644
--- a/libcloud/compute/drivers/dimensiondata.py
+++ b/libcloud/compute/drivers/dimensiondata.py
@@ -38,6 +38,13 @@ from libcloud.common.dimensiondata import DimensionDataFirewallRule
from libcloud.common.dimensiondata import DimensionDataFirewallAddress
from libcloud.common.dimensiondata import DimensionDataNatRule
from libcloud.common.dimensiondata import DimensionDataAntiAffinityRule
+from libcloud.common.dimensiondata import DimensionDataIpAddressList
+from libcloud.common.dimensiondata import DimensionDataChildIpAddressList
+from libcloud.common.dimensiondata import DimensionDataIpAddress
+from libcloud.common.dimensiondata import DimensionDataPortList
+from libcloud.common.dimensiondata import DimensionDataPort
+from libcloud.common.dimensiondata import DimensionDataChildPortList
+from libcloud.common.dimensiondata import DimensionDataNic
from libcloud.common.dimensiondata import NetworkDomainServicePlan
from libcloud.common.dimensiondata import DimensionDataTagKey
from libcloud.common.dimensiondata import DimensionDataTag
@@ -1470,6 +1477,113 @@ class DimensionDataNodeDriver(NodeDriver):
rule.id = rule_id
return rule
+ def ex_edit_firewall_rule(self, rule, position,
+ relative_rule_for_position=None):
+ """
+ Edit a firewall rule
+
+ :param rule: (required) The rule in which to create
+ :type rule: :class:`DimensionDataFirewallRule`
+
+ :param position: (required) There are two types of positions
+ with position_relative_to_rule arg and without it
+ With: 'BEFORE' or 'AFTER'
+ Without: 'FIRST' or 'LAST'
+ :type position: ``str``
+
+ :param relative_rule_for_position: (optional) The rule or rule name in
+ which to decide the relative rule
+ for positioning.
+ :type relative_rule_for_position:
+ :class:`DimensionDataFirewallRule` or ``str``
+
+ :rtype: ``bool``
+ """
+
+ positions_without_rule = ('FIRST', 'LAST')
+ positions_with_rule = ('BEFORE', 'AFTER')
+
+ edit_node = ET.Element('editFirewallRule',
+ {'xmlns': TYPES_URN, 'id': rule.id})
+ ET.SubElement(edit_node, "action").text = rule.action
+ ET.SubElement(edit_node, "protocol").text = rule.protocol
+
+ # Source address
+ source = ET.SubElement(edit_node, "source")
+ if rule.source.address_list_id is not None:
+ source_ip = ET.SubElement(source, 'ipAddressListId')
+ source_ip.text = rule.source.address_list_id
+ else:
+ source_ip = ET.SubElement(source, 'ip')
+ if rule.source.any_ip:
+ source_ip.set('address', 'ANY')
+ else:
+ source_ip.set('address', rule.source.ip_address)
+ if rule.source.ip_prefix_size is not None:
+ source_ip.set('prefixSize',
+ str(rule.source.ip_prefix_size))
+
+ # Setup source port rule
+ if rule.source.port_list_id is not None:
+ source_port = ET.SubElement(source, 'portListId')
+ source_port.text = rule.source.port_list_id
+ else:
+ if rule.source.port_begin is not None:
+ source_port = ET.SubElement(source, 'port')
+ source_port.set('begin', rule.source.port_begin)
+ if rule.source.port_end is not None:
+ source_port.set('end', rule.source.port_end)
+ # Setup destination port rule
+ dest = ET.SubElement(edit_node, "destination")
+ if rule.destination.address_list_id is not None:
+ dest_ip = ET.SubElement(dest, 'ipAddressListId')
+ dest_ip.text = rule.destination.address_list_id
+ else:
+ dest_ip = ET.SubElement(dest, 'ip')
+ if rule.destination.any_ip:
+ dest_ip.set('address', 'ANY')
+ else:
+ dest_ip.set('address', rule.destination.ip_address)
+ if rule.destination.ip_prefix_size is not None:
+ dest_ip.set('prefixSize', rule.destination.ip_prefix_size)
+ if rule.destination.port_list_id is not None:
+ dest_port = ET.SubElement(dest, 'portListId')
+ dest_port.text = rule.destination.port_list_id
+ else:
+ if rule.destination.port_begin is not None:
+ dest_port = ET.SubElement(dest, 'port')
+ dest_port.set('begin', rule.destination.port_begin)
+ if rule.destination.port_end is not None:
+ dest_port.set('end', rule.destination.port_end)
+ # Set up positioning of rule
+ ET.SubElement(edit_node, "enabled").text = str(rule.enabled).lower()
+ placement = ET.SubElement(edit_node, "placement")
+ if relative_rule_for_position is not None:
+ if position not in positions_with_rule:
+ raise ValueError("When position_relative_to_rule is specified"
+ " position must be %s"
+ % ', '.join(positions_with_rule))
+ if isinstance(relative_rule_for_position,
+ DimensionDataFirewallRule):
+ rule_name = relative_rule_for_position.name
+ else:
+ rule_name = relative_rule_for_position
+ placement.set('relativeToRule', rule_name)
+ else:
+ if position not in positions_without_rule:
+ raise ValueError("When position_relative_to_rule is not"
+ " specified position must be %s"
+ % ', '.join(positions_without_rule))
+ placement.set('position', position)
+
+ response = self.connection.request_with_orgId_api_2(
+ 'network/editFirewallRule',
+ method='POST',
+ data=ET.tostring(edit_node)).object
+
+ response_code = findtext(response, 'responseCode', TYPES_URN)
+ return response_code in ['IN_PROGRESS', 'OK']
+
def ex_get_firewall_rule(self, network_domain, rule_id):
locations = self.list_locations()
rule = self.connection.request_with_orgId_api_2(
@@ -2379,6 +2493,427 @@ class DimensionDataNodeDriver(NodeDriver):
% (datacenter_id, start_date, end_date))
return self._format_csv(result.response)
+ def ex_list_ip_address_list(self, ex_network_domain):
+ """
+ List IP Address List by network domain ID specified
+
+ :param ex_network_domain: The network domain or network domain ID
+ :type ex_network_domain: :class:`DimensionDataNetworkDomain` or 'str'
+
+ :return: a list of DimensionDataIpAddressList objects
+ :rtype: ``list`` of :class:`DimensionDataIpAddressList`
+ """
+ params = {'networkDomainId': self._network_domain_to_network_domain_id(
+ ex_network_domain)}
+ response = self.connection.request_with_orgId_api_2(
+ 'network/ipAddressList', params=params).object
+ return self._to_ip_address_lists(response)
+
+ def ex_get_ip_address_list(self, ex_network_domain,
+ ex_ip_address_list_name):
+ """
+ Get IP Address List by name in network domain specified
+
+ :param ex_network_domain: (required) The network domain or network
+ domain ID in which ipaddresslist resides.
+ :type ex_network_domain: :class:`DimensionDataNetworkDomain` or 'str'
+
+ :param ex_ip_address_list_name: (required) Get 'IP Address List' by
+ name
+ :type ex_ip_address_list_name: :``str``
+
+ :return: a list of DimensionDataIpAddressList objects
+ :rtype: ``list`` of :class:`DimensionDataIpAddressList`
+ """
+
+ ip_address_lists = self.ex_list_ip_address_list(ex_network_domain)
+ return list(filter(lambda x: x.name == ex_ip_address_list_name,
+ ip_address_lists))
+
+ def ex_create_ip_address_list(self, ex_network_domain, name,
+ description,
+ ip_version, ip_address_collection,
+ child_ip_address_list=None):
+ """
+ Create IP Address List. IP Address list.
+
+ :param ex_network_domain: The network domain or network domain ID
+ :type ex_network_domain: :class:`DimensionDataNetworkDomain` or 'str'
+
+ :param name: IP Address List Name (required)
+ :type name: :``str``
+
+ :param description: IP Address List Description (optional)
+ :type description: :``str``
+
+ :param ip_version: IP Version of ip address (required)
+ :type ip_version: :``str``
+
+ :param ip_address_collection: List of IP Address. At least one
+ ipAddress element or one
+ childIpAddressListId element must
+ be provided.
+ :type ip_address_collection: :``str``
+
+ :param child_ip_address_list: Child IP Address List or id to be
+ included in this IP Address List.
+ At least one ipAddress or
+ one childIpAddressListId
+ must be provided.
+ :type child_ip_address_list:
+ :class:'DimensionDataChildIpAddressList` or `str``
+
+ :return: a list of DimensionDataIpAddressList objects
+ :rtype: ``list`` of :class:`DimensionDataIpAddressList`
+ """
+ if (ip_address_collection is None and
+ child_ip_address_list is None):
+ raise ValueError("At least one ipAddress element or one "
+ "childIpAddressListId element must be "
+ "provided.")
+
+ create_ip_address_list = ET.Element('createIpAddressList',
+ {'xmlns': TYPES_URN})
+ ET.SubElement(
+ create_ip_address_list,
+ 'networkDomainId'
+ ).text = self._network_domain_to_network_domain_id(ex_network_domain)
+
+ ET.SubElement(
+ create_ip_address_list,
+ 'name'
+ ).text = name
+
+ ET.SubElement(
+ create_ip_address_list,
+ 'description'
+ ).text = description
+
+ ET.SubElement(
+ create_ip_address_list,
+ 'ipVersion'
+ ).text = ip_version
+
+ for ip in ip_address_collection:
+ ip_address = ET.SubElement(
+ create_ip_address_list,
+ 'ipAddress',
+ )
+ ip_address.set('begin', ip.begin)
+
+ if ip.end:
+ ip_address.set('end', ip.end)
+
+ if ip.prefix_size:
+ ip_address.set('prefixSize', ip.prefix_size)
+
+ if child_ip_address_list is not None:
+ ET.SubElement(
+ create_ip_address_list,
+ 'childIpAddressListId'
+ ).text = \
+ self._child_ip_address_list_to_child_ip_address_list_id(
+ child_ip_address_list)
+
+ response = self.connection.request_with_orgId_api_2(
+ 'network/createIpAddressList',
+ method='POST',
+ data=ET.tostring(create_ip_address_list)).object
+
+ response_code = findtext(response, 'responseCode', TYPES_URN)
+ return response_code in ['IN_PROGRESS', 'OK']
+
+ def ex_edit_ip_address_list(self, ex_ip_address_list, description,
+ ip_address_collection,
+ child_ip_address_lists=None):
+ """
+ Edit IP Address List. IP Address list.
+
+ :param ex_ip_address_list: (required) IpAddressList object or
+ IpAddressList ID
+ :type ex_ip_address_list: :class:'DimensionDataIpAddressList'
+ or ``str``
+
+ :param description: IP Address List Description
+ :type description: :``str``
+
+ :param ip_address_collection: List of IP Address
+ :type ip_address_collection: ''list'' of
+ :class:'DimensionDataIpAddressList'
+
+ :param child_ip_address_lists: Child IP Address List or id to be
+ included in this IP Address List
+ :type child_ip_address_lists: ``list`` of
+ :class:'DimensionDataChildIpAddressList'
+ or ``str``
+
+ :return: a list of DimensionDataIpAddressList objects
+ :rtype: ``list`` of :class:`DimensionDataIpAddressList`
+ """
+ edit_ip_address_list = ET.Element(
+ 'editIpAddressList',
+ {'xmlns': TYPES_URN,
+ "id": self._ip_address_list_to_ip_address_list_id(
+ ex_ip_address_list),
+ 'xmlns:xsi': "http://www.w3.org/2001/XMLSchema-instance"
+ })
+
+ ET.SubElement(
+ edit_ip_address_list,
+ 'description'
+ ).text = description
+
+ for ip in ip_address_collection:
+ ip_address = ET.SubElement(
+ edit_ip_address_list,
+ 'ipAddress',
+ )
+ ip_address.set('begin', ip.begin)
+
+ if ip.end:
+ ip_address.set('end', ip.end)
+
+ if ip.prefix_size:
+ ip_address.set('prefixSize', ip.prefix_size)
+
+ if child_ip_address_lists is not None:
+ ET.SubElement(
+ edit_ip_address_list,
+ 'childIpAddressListId'
+ ).text = self._child_ip_address_list_to_child_ip_address_list_id(
+ child_ip_address_lists)
+ else:
+ ET.SubElement(
+ edit_ip_address_list,
+ 'childIpAddressListId',
+ {'xsi:nil': 'true'}
+ )
+
+ response = self.connection.request_with_orgId_api_2(
+ 'network/editIpAddressList',
+ method='POST',
+ data=ET.tostring(edit_ip_address_list)).object
+
+ response_code = findtext(response, 'responseCode', TYPES_URN)
+ return response_code in ['IN_PROGRESS', 'OK']
+
+ def ex_delete_ip_address_list(self, ex_ip_address_list):
+ """
+ Delete IP Address List by ID
+
+ :param ex_ip_address_list: IP Address List object or IP Address
+ List ID (required)
+ :type ex_ip_address_list: :class:'DimensionDataIpAddressList'
+ or ``str``
+
+ :rtype: ``bool``
+ """
+
+ delete_ip_address_list = \
+ ET.Element('deleteIpAddressList', {'xmlns': TYPES_URN, 'id': self
+ ._ip_address_list_to_ip_address_list_id(
+ ex_ip_address_list)})
+
+ response = self.connection.request_with_orgId_api_2(
+ 'network/deleteIpAddressList',
+ method='POST',
+ data=ET.tostring(delete_ip_address_list)).object
+
+ response_code = findtext(response, 'responseCode', TYPES_URN)
+ return response_code in ['IN_PROGRESS', 'OK']
+
+ def ex_list_port_list(self, ex_network_domain):
+ """
+ List Port List by network domain ID specified
+
+ :param ex_network_domain: The network domain or network domain ID
+ :type ex_network_domain: :class:`DimensionDataNetworkDomain` or 'str'
+
+ :return: a list of DimensionDataPortList objects
+ :rtype: ``list`` of :class:`DimensionDataPortList`
+ """
+ params = {'networkDomainId':
+ self._network_domain_to_network_domain_id(ex_network_domain)}
+ response = self.connection.request_with_orgId_api_2(
+ 'network/portList', params=params).object
+ return self._to_port_lists(response)
+
+ def ex_get_port_list(self, ex_port_list):
+ """
+ Get Port List
+
+ :param ex_port_list: The ex_port_list or ex_port_list ID
+ :type ex_port_list: :class:`DimensionDataNetworkDomain` or 'str'
+
+ :return: DimensionDataPortList object
+ :rtype: :class:`DimensionDataPort`
+ """
+
+ url_path = ('network/portList/%s' % self._port_list_to_port_list_id(
+ ex_port_list))
+ response = self.connection.request_with_orgId_api_2(
+ url_path).object
+ return self._to_port_list(response)
+
+ def ex_create_port_list(self, ex_network_domain, name, description,
+ port_collection, child_port_list_lists=None):
+ """
+ Create Port List.
+
+ :param ex_network_domain: (required) The network domain in
+ which to create PortList. Provide
+ networkdomain object or its id.
+ :type ex_network_domain: :``str``
+
+ :param name: Port List Name
+ :type name: :``str``
+
+ :param description: IP Address List Description
+ :type description: :``str``
+
+ :param port_collection: List of Port Address
+ :type port_collection: :``str``
+
+ :param child_port_list_lists: Child Port List to be included in
+ this Port List
+ :type child_port_list_lists: :``str`` or ''list of
+ :class:'DimensionDataChildPortList'
+
+ :return: result of operation
+ :rtype: ``bool``
+ """
+ new_port_list = ET.Element('createPortList', {'xmlns': TYPES_URN})
+ ET.SubElement(
+ new_port_list,
+ 'networkDomainId'
+ ).text = self._network_domain_to_network_domain_id(ex_network_domain)
+
+ ET.SubElement(
+ new_port_list,
+ 'name'
+ ).text = name
+
+ ET.SubElement(
+ new_port_list,
+ 'description'
+ ).text = description
+
+ for port in port_collection:
+ p = ET.SubElement(
+ new_port_list,
+ 'port'
+ )
+ p.set('begin', port.begin)
+
+ if port.end:
+ p.set('end', port.end)
+
+ if child_port_list_lists is not None:
+ for child in child_port_list_lists:
+ ET.SubElement(
+ new_port_list,
+ 'childPortListId'
+ ).text = self._child_port_list_to_child_port_list_id(child)
+
+ response = self.connection.request_with_orgId_api_2(
+ 'network/createPortList',
+ method='POST',
+ data=ET.tostring(new_port_list)).object
+
+ response_code = findtext(response, 'responseCode', TYPES_URN)
+ return response_code in ['IN_PROGRESS', 'OK']
+
+ def ex_edit_port_list(self, ex_port_list, description,
+ port_collection, child_port_list_lists=None):
+ """
+ Edit Port List.
+
+ :param ex_port_list: Port List to be edited
+ (required)
+ :type ex_port_list: :``str`` or :class:'DimensionDataPortList'
+
+ :param description: Port List Description
+ :type description: :``str``
+
+ :param port_collection: List of Port Address
+ :type port_collection: :``str``
+
+ :param child_port_list_lists: Child Port List to be included in
+ this IP Address List
+ :type child_port_list_lists: :``list`` of
+ :class'DimensionDataChildPortList'
+ or ''str''
+
+ :return: a list of DimensionDataPortList objects
+ :rtype: ``list`` of :class:`DimensionDataPortList`
+ """
+
+ existing_port_address_list = ET.Element(
+ 'editPortList',
+ {
+ "id": self._port_list_to_port_list_id(ex_port_list),
+ 'xmlns': TYPES_URN,
+ 'xmlns:xsi': "http://www.w3.org/2001/XMLSchema-instance"
+ })
+
+ ET.SubElement(
+ existing_port_address_list,
+ 'description'
+ ).text = description
+
+ for port in port_collection:
+ p = ET.SubElement(
+ existing_port_address_list,
+ 'port'
+ )
+ p.set('begin', port.begin)
+
+ if port.end:
+ p.set('end', port.end)
+
+ if child_port_list_lists is not None:
+ for child in child_port_list_lists:
+ ET.SubElement(
+ existing_port_address_list,
+ 'childPortListId'
+ ).text = self._child_port_list_to_child_port_list_id(child)
+ else:
+ ET.SubElement(
+ existing_port_address_list,
+ 'childPortListId',
+ {'xsi:nil': 'true'}
+ )
+
+ response = self.connection.request_with_orgId_api_2(
+ 'network/editPortList',
+ method='POST',
+ data=ET.tostring(existing_port_address_list)).object
+
+ response_code = findtext(response, 'responseCode', TYPES_URN)
+ return response_code in ['IN_PROGRESS', 'OK']
+
+ def ex_delete_port_list(self, ex_port_list):
+ """
+ Delete Port List
+ :param ex_port_list: Port List to be deleted
+ :type ex_port_list: :``str`` or :class:'DimensionDataPortList'
+
+ :rtype: ``bool``
+ """
+
+ delete_port_list = ET.Element(
+ 'deletePortList',
+ {'xmlns': TYPES_URN,
+ 'id': self._port_list_to_port_list_id(ex_port_list)})
+
+ response = self.connection.request_with_orgId_api_2(
+ 'network/deletePortList',
+ method='POST',
+ data=ET.tostring(delete_port_list)).object
+
+ response_code = findtext(response, 'responseCode', TYPES_URN)
+ return response_code in ['IN_PROGRESS', 'OK']
+
def _format_csv(self, http_response):
text = http_response.read()
lines = str.splitlines(ensure_string(text))
@@ -2828,6 +3363,75 @@ class DimensionDataNodeDriver(NodeDriver):
TYPES_URN))
return s
+ def _to_ip_address_lists(self, object):
+ ip_address_lists = []
+ for element in findall(object, 'ipAddressList', TYPES_URN):
+ ip_address_lists.append(self._to_ip_address_list(element))
+
+ return ip_address_lists
+
+ def _to_ip_address_list(self, element):
+ ipAddresses = []
+ for ip in findall(element, 'ipAddress', TYPES_URN):
+ ipAddresses.append(self._to_ip_address(ip))
+
+ child_ip_address_lists = []
+ for child_ip_list in findall(element, 'childIpAddressList',
+ TYPES_URN):
+ child_ip_address_lists.append(self
+ ._to_child_ip_list(child_ip_list))
+
+ return DimensionDataIpAddressList(
+ id=element.get('id'),
+ name=findtext(element, 'name', TYPES_URN),
+ description=findtext(element, 'description', TYPES_URN),
+ ip_version=findtext(element, 'ipVersion', TYPES_URN),
+ ip_address_collection=ipAddresses,
+ state=findtext(element, 'state', TYPES_URN),
+ create_time=findtext(element, 'createTime', TYPES_URN),
+ child_ip_address_lists=child_ip_address_lists
+ )
+
+ def _to_child_ip_list(self, element):
+ return DimensionDataChildIpAddressList(
+ id=element.get('id'),
+ name=element.get('name')
+ )
+
+ def _to_ip_address(self, element):
+ return DimensionDataIpAddress(
+ begin=element.get('begin'),
+ end=element.get('end'),
+ prefix_size=element.get('prefixSize')
+ )
+
+ def _to_port_lists(self, object):
+ port_lists = []
+ for element in findall(object, 'portList', TYPES_URN):
+ port_lists.append(self._to_port_list(element))
+
+ return port_lists
+
+ def _to_port_list(self, element):
+ ports = []
+ for port in findall(element, 'port', TYPES_URN):
+ ports.append(self._to_port(element=port))
+
+ child_port_list_lists = []
+ for child in findall(element, 'childPortList', TYPES_URN):
+ child_port_list_lists.append(
+ self._to_child_port_list(element=child))
+
+ return DimensionDataPortList(
+ id=element.get('id'),
+ name=findtext(element, 'name', TYPES_URN),
+ description=findtext(element, 'description', TYPES_URN),
+ port_collection=ports,
+ child_port_list_lists=child_port_list_lists,
+ state=findtext(element, 'state', TYPES_URN),
+ create_time=findtext(element, 'createTime', TYPES_URN)
+ )
+
def _image_needs_auth(self, image):
if not isinstance(image, NodeImage):
image = self.ex_get_image_by_id(image)
@@ -2836,6 +3440,20 @@ class DimensionDataNodeDriver(NodeDriver):
return True
@staticmethod
+ def _to_port(element):
+ return DimensionDataPort(
+ begin=element.get('begin'),
+ end=element.get('end')
+ )
+
+ @staticmethod
+ def _to_child_port_list(element):
+ return DimensionDataChildPortList(
+ id=element.get('id'),
+ name=element.get('name')
+ )
+
+ @staticmethod
def _get_node_state(state, started, action):
try:
return NODE_STATE_MAP[(state, started, action)]
@@ -2882,5 +3500,27 @@ class DimensionDataNodeDriver(NodeDriver):
return dd_object_to_id(tag_key, DimensionDataTagKey, id_value='name')
@staticmethod
+ def _ip_address_list_to_ip_address_list_id(ip_addr_list):
+ return dd_object_to_id(ip_addr_list, DimensionDataIpAddressList,
+ id_value='id')
+
+ @staticmethod
+ def _child_ip_address_list_to_child_ip_address_list_id(child_ip_addr_list):
+ return dd_object_to_id(child_ip_addr_list,
+ DimensionDataChildIpAddressList,
+ id_value='id')
+
+ @staticmethod
+ def _port_list_to_port_list_id(port_list):
+ return dd_object_to_id(port_list, DimensionDataPortList,
+ id_value='id')
+
+ @staticmethod
+ def _child_port_list_to_child_port_list_id(child_port_list):
+ return dd_object_to_id(child_port_list,
+ DimensionDataChildPortList,
+ id_value='id')
+
+ @staticmethod
def _str2bool(string):
return string.lower() in ("true")
[03/13] libcloud git commit: Merge branch 'trunk' of
https://github.com/samuelchong/libcloud into trunk
Posted by an...@apache.org.
Merge branch 'trunk' of https://github.com/samuelchong/libcloud into trunk
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/2672b78f
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/2672b78f
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/2672b78f
Branch: refs/heads/trunk
Commit: 2672b78f9a9ee5f88656ba5dce9366493b73f65f
Parents: 25c5ba9 7440bf5
Author: Samuel Chong <sa...@gmail.com>
Authored: Thu Oct 6 11:04:39 2016 +1100
Committer: Samuel Chong <sa...@gmail.com>
Committed: Thu Oct 6 11:04:39 2016 +1100
----------------------------------------------------------------------
----------------------------------------------------------------------
[08/13] libcloud git commit: Unit test for firewall edit,
portlist CRUD and IPAddressList CRUD
Posted by an...@apache.org.
Unit test for firewall edit, portlist CRUD and IPAddressList CRUD
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/04c70e22
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/04c70e22
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/04c70e22
Branch: refs/heads/trunk
Commit: 04c70e2285f3e2d64f72b16874f0882374133701
Parents: 009f226
Author: Samuel Chong <sa...@gmail.com>
Authored: Thu Oct 6 15:14:00 2016 +1100
Committer: Samuel Chong <sa...@gmail.com>
Committed: Thu Oct 6 15:14:00 2016 +1100
----------------------------------------------------------------------
.../dimensiondata/ip_address_list_create.xml | 9 +
.../dimensiondata/ip_address_list_delete.xml | 10 +
.../dimensiondata/ip_address_list_edit.xml | 10 +
.../fixtures/dimensiondata/ip_address_lists.xml | 46 ++
.../ip_address_lists_FILTERBYNAME.xml | 14 +
.../fixtures/dimensiondata/port_list_create.xml | 9 +
.../fixtures/dimensiondata/port_list_delete.xml | 10 +
.../fixtures/dimensiondata/port_list_edit.xml | 8 +
.../fixtures/dimensiondata/port_list_get.xml | 15 +
.../fixtures/dimensiondata/port_list_lists.xml | 38 +
libcloud/test/compute/test_dimensiondata.py | 753 ++++++++++++++++++-
11 files changed, 921 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/04c70e22/libcloud/test/compute/fixtures/dimensiondata/ip_address_list_create.xml
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/dimensiondata/ip_address_list_create.xml b/libcloud/test/compute/fixtures/dimensiondata/ip_address_list_create.xml
new file mode 100644
index 0000000..09317ef
--- /dev/null
+++ b/libcloud/test/compute/fixtures/dimensiondata/ip_address_list_create.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<response
+ requestId="na9_20160321T074626030-0400_7e9fffe7-190b-46f2-9107- 9d52fe57d0ad"
+ xmlns="urn:didata.com:api:cloud:types">
+ <operation>CREATE_IP_ADDRESS_LIST</operation>
+ <responseCode>OK</responseCode>
+ <message>IP Address List 'myAddressList' has been created.</message>
+ <info name="ipAddressListId" value="9e6b496d-5261-4542-91aa-b50c7f569c54"/>
+</response>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/04c70e22/libcloud/test/compute/fixtures/dimensiondata/ip_address_list_delete.xml
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/dimensiondata/ip_address_list_delete.xml b/libcloud/test/compute/fixtures/dimensiondata/ip_address_list_delete.xml
new file mode 100644
index 0000000..13f323a
--- /dev/null
+++ b/libcloud/test/compute/fixtures/dimensiondata/ip_address_list_delete.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<response
+ requestId="na9_20160321T074626030-0400_7e9fffe7-190b-46f2-9107- 9d52fe57d0ad"
+ xmlns="urn:didata.com:api:cloud:types">
+ <operation>DELETE_IP_ADDRESS_LIST</operation>
+ <responseCode>OK</responseCode>
+ <message>IP Address List with Id 84e34850-595d-436e-a885-7cd37edb24a4 has
+ been deleted.
+ </message>
+</response>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/04c70e22/libcloud/test/compute/fixtures/dimensiondata/ip_address_list_edit.xml
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/dimensiondata/ip_address_list_edit.xml b/libcloud/test/compute/fixtures/dimensiondata/ip_address_list_edit.xml
new file mode 100644
index 0000000..3462afa
--- /dev/null
+++ b/libcloud/test/compute/fixtures/dimensiondata/ip_address_list_edit.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<response
+ requestId="na9_20160321T074626030-0400_7e9fffe7-190b-46f2-9107- 9d52fe57d0ad"
+ xmlns="urn:didata.com:api:cloud:types">
+ <operation>EDIT_IP_ADDRESS_LIST</operation>
+ <responseCode>OK</responseCode>
+ <message>IP Address List 'MyIpAddressList' has been edited
+ successfully.
+ </message>
+</response>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/04c70e22/libcloud/test/compute/fixtures/dimensiondata/ip_address_lists.xml
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/dimensiondata/ip_address_lists.xml b/libcloud/test/compute/fixtures/dimensiondata/ip_address_lists.xml
new file mode 100644
index 0000000..708c882
--- /dev/null
+++ b/libcloud/test/compute/fixtures/dimensiondata/ip_address_lists.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ipAddressLists xmlns="urn:didata.com:api:cloud:types" pageNumber="1" pageCount="4" totalCount="4" pageSize="250">
+ <ipAddressList id="0291ef78-4059-4bc1-b433-3f6ad698dc41">
+ <name>TestIPList2</name>
+ <description>Test web server IP addresses list</description>
+ <ipVersion>IPV4</ipVersion>
+ <ipAddress begin="190.1.1.0"/>
+ <ipAddress begin="190.1.1.3"/>
+ <ipAddress begin="190.1.1.10" end="190.1.1.20"/>
+ <ipAddress begin="190.1.2.0" prefixSize="24"/>
+ <state>NORMAL</state>
+ <createTime>2016-09-01T01:19:53.000Z</createTime>
+ </ipAddressList>
+ <ipAddressList id="bf09778f-b5ef-43a0-ba41-24ce30085deb">
+ <name>TestIPList_sub_2</name>
+ <description>Test web server IP addresses list</description>
+ <ipVersion>IPV4</ipVersion>
+ <ipAddress begin="190.1.1.0"/>
+ <ipAddress begin="190.1.1.3"/>
+ <ipAddress begin="190.1.1.10" end="190.1.1.20"/>
+ <ipAddress begin="190.1.2.0" prefixSize="24"/>
+ <childIpAddressList id="0291ef78-4059-4bc1-b433-3f6ad698dc41" name="TestIPList2"/>
+ <state>NORMAL</state>
+ <createTime>2016-09-01T01:20:56.000Z</createTime>
+ </ipAddressList>
+ <ipAddressList id="863847dd-046d-492d-9b84-ebea39c262c6">
+ <name>Test_IP_Address_List_2</name>
+ <description>Test Description</description>
+ <ipVersion>IPV4</ipVersion>
+ <ipAddress begin="190.2.2.100"/>
+ <childIpAddressList id="0291ef78-4059-4bc1-b433-3f6ad698dc41" name="TestIPList2"/>
+ <state>NORMAL</state>
+ <createTime>2016-09-05T05:37:56.000Z</createTime>
+ </ipAddressList>
+ <ipAddressList id="5e7c323f-c885-4e4b-9a27-94c44217dbd3">
+ <name>Test_IP_Address_List_3</name>
+ <description>Test Description</description>
+ <ipVersion>IPV4</ipVersion>
+ <ipAddress begin="190.2.2.0" prefixSize="24"/>
+ <ipAddress begin="190.2.2.100"/>
+ <ipAddress begin="190.2.2.106" end="190.2.2.108"/>
+ <childIpAddressList id="0291ef78-4059-4bc1-b433-3f6ad698dc41" name="TestIPList2"/>
+ <state>NORMAL</state>
+ <createTime>2016-09-05T05:57:53.000Z</createTime>
+ </ipAddressList>
+</ipAddressLists>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/04c70e22/libcloud/test/compute/fixtures/dimensiondata/ip_address_lists_FILTERBYNAME.xml
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/dimensiondata/ip_address_lists_FILTERBYNAME.xml b/libcloud/test/compute/fixtures/dimensiondata/ip_address_lists_FILTERBYNAME.xml
new file mode 100644
index 0000000..301a106
--- /dev/null
+++ b/libcloud/test/compute/fixtures/dimensiondata/ip_address_lists_FILTERBYNAME.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ipAddressLists xmlns="urn:didata.com:api:cloud:types" pageNumber="1" pageCount="1" totalCount="1" pageSize="250">
+ <ipAddressList id="5e7c323f-c885-4e4b-9a27-94c44217dbd3">
+ <name>Test_IP_Address_List_3</name>
+ <description>Test Description</description>
+ <ipVersion>IPV4</ipVersion>
+ <ipAddress begin="190.2.2.0" prefixSize="24"/>
+ <ipAddress begin="190.2.2.100"/>
+ <ipAddress begin="190.2.2.106" end="190.2.2.108"/>
+ <childIpAddressList id="0291ef78-4059-4bc1-b433-3f6ad698dc41" name="TestIPList2"/>
+ <state>NORMAL</state>
+ <createTime>2016-09-05T05:57:53.000Z</createTime>
+ </ipAddressList>
+</ipAddressLists>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/04c70e22/libcloud/test/compute/fixtures/dimensiondata/port_list_create.xml
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/dimensiondata/port_list_create.xml b/libcloud/test/compute/fixtures/dimensiondata/port_list_create.xml
new file mode 100644
index 0000000..eb1ba7e
--- /dev/null
+++ b/libcloud/test/compute/fixtures/dimensiondata/port_list_create.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<response
+ requestId="na9_20160321T074626030-0400_7e9fffe7-190b-46f2-9107- 9d52fe57d0ad"
+ xmlns="urn:didata.com:api:cloud:types">
+ <operation>CREATE_PORT_LIST</operation>
+ <responseCode>OK</responseCode>
+ <message>Port List 'MyPortList' has been created.</message>
+ <info name="portListId" value="9e6b496d-5261-4542-91aa-b50c7f569c54"/>
+</response>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/04c70e22/libcloud/test/compute/fixtures/dimensiondata/port_list_delete.xml
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/dimensiondata/port_list_delete.xml b/libcloud/test/compute/fixtures/dimensiondata/port_list_delete.xml
new file mode 100644
index 0000000..6414c26
--- /dev/null
+++ b/libcloud/test/compute/fixtures/dimensiondata/port_list_delete.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<response
+ requestId="na9_20160321T074626030-0400_7e9fffe7-190b-46f2-9107- 9d52fe57d0ad"
+ xmlns="urn:didata.com:api:cloud:types">
+ <operation>DELETE_PORT_LIST</operation>
+ <responseCode>OK</responseCode>
+ <message>Port List with Id 84e34850-595d-436e-a885-7cd37edb24a4 has been
+ deleted.
+ </message>
+</response>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/04c70e22/libcloud/test/compute/fixtures/dimensiondata/port_list_edit.xml
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/dimensiondata/port_list_edit.xml b/libcloud/test/compute/fixtures/dimensiondata/port_list_edit.xml
new file mode 100644
index 0000000..fe95f57
--- /dev/null
+++ b/libcloud/test/compute/fixtures/dimensiondata/port_list_edit.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<response
+ requestId="na9_20160321T074626030-0400_7e9fffe7-190b-46f2-9107- 9d52fe57d0ad"
+ xmlns="urn:didata.com:api:cloud:types">
+ <operation>EDIT_PORT_LIST</operation>
+ <responseCode>OK</responseCode>
+ <message>Port List 'MyPortList' has been edited successfully.</message>
+</response>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/04c70e22/libcloud/test/compute/fixtures/dimensiondata/port_list_get.xml
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/dimensiondata/port_list_get.xml b/libcloud/test/compute/fixtures/dimensiondata/port_list_get.xml
new file mode 100644
index 0000000..815a48b
--- /dev/null
+++ b/libcloud/test/compute/fixtures/dimensiondata/port_list_get.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<portList id="c8c92ea3-2da8-4d51-8153-f39bec794d69"
+ xmlns="urn:didata.com:api:cloud:types">
+ <name>MyPortList</name>
+ <description>Production Servers</description>
+ <port begin="8000" end="9600"/>
+ <port begin="25"/>
+ <port begin="443"/>
+ <childPortList id="c8c92ea3-2da8-4d51-8153-f39bec794d68"
+ name="tomcatPorts"/>
+ <childPortList id="c8c92ea3-2da8-4d51-8153-f39bec794d67"
+ name="mySqlPorts"/>
+ <state>NORMAL</state>
+ <createTime>2015-06-21T18:54:42.000Z</createTime>
+</portList>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/04c70e22/libcloud/test/compute/fixtures/dimensiondata/port_list_lists.xml
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/dimensiondata/port_list_lists.xml b/libcloud/test/compute/fixtures/dimensiondata/port_list_lists.xml
new file mode 100644
index 0000000..e42bd47
--- /dev/null
+++ b/libcloud/test/compute/fixtures/dimensiondata/port_list_lists.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<portLists pageNumber="1" pageCount="1" totalCount="3" pageSize="3"
+ xmlns="urn:didata.com:api:cloud:types">
+ <!--Zero or more repetitions:-->
+ <portList id="c8c92ea3-2da8-4d51-8153-f39bec794d69"
+ xmlns="urn:didata.com:api:cloud:types">
+ <name>MyPortList</name>
+ <description>Production Servers</description>
+ <port begin="8000" end="9600"/>
+ <port begin="25"/>
+ <port begin="443"/>
+ <childPortList id="c8c92ea3-2da8-4d51-8153-f39bec794d68"
+ name="tomcatPorts"/>
+ <childPortList id="c8c92ea3-2da8-4d51-8153-f39bec794d67"
+ name="mySqlPorts"/>
+ <state>NORMAL</state>
+ <createTime>2015-06-21T18:54:42.000Z</createTime>
+ </portList>
+ <portList id="d52198b1-4a89-4d09-bc29-7b94fd9129dc">
+ <name>MyPortList2</name>
+ <description>Core functions</description>
+ <port begin="8080"/>
+ <port begin="8899" end="9023"/>
+ <port begin="9500"/>
+ <childPortList id="a9cd4984-6ff5-4f93-89ff-8618ab642bb9" name="MyPortList"/>
+ <state>NORMAL</state>
+ <createTime>2016-09-01T01:36:49.000Z</createTime>
+ </portList>
+ <portList id="b6557c5a-45fa-4138-89bd-8fe68392691b">
+ <name>Test_Port_List_1</name>
+ <description>Test Description</description>
+ <port begin="6000"/>
+ <port begin="6001" end="6010"/>
+ <childPortList id="a9cd4984-6ff5-4f93-89ff-8618ab642bb9" name="MyPortList"/>
+ <state>NORMAL</state>
+ <createTime>2016-09-06T02:32:29.000Z</createTime>
+ </portList>
+</portLists>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/04c70e22/libcloud/test/compute/test_dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_dimensiondata.py b/libcloud/test/compute/test_dimensiondata.py
index b7da6ae..a7bfa92 100644
--- a/libcloud/test/compute/test_dimensiondata.py
+++ b/libcloud/test/compute/test_dimensiondata.py
@@ -26,6 +26,9 @@ from libcloud.common.types import InvalidCredsError
from libcloud.common.dimensiondata import DimensionDataAPIException, NetworkDomainServicePlan
from libcloud.common.dimensiondata import DimensionDataServerCpuSpecification, DimensionDataServerDisk, DimensionDataServerVMWareTools
from libcloud.common.dimensiondata import DimensionDataTag, DimensionDataTagKey
+from libcloud.common.dimensiondata import DimensionDataIpAddress, \
+ DimensionDataIpAddressList, DimensionDataChildIpAddressList, \
+ DimensionDataPortList, DimensionDataPort, DimensionDataChildPortList
from libcloud.common.dimensiondata import TYPES_URN
from libcloud.compute.drivers.dimensiondata import DimensionDataNodeDriver as DimensionData
from libcloud.compute.base import Node, NodeAuthPassword, NodeLocation
@@ -33,7 +36,7 @@ from libcloud.test import MockHttp, unittest, MockRawResponse, StorageMockHttp
from libcloud.test.compute import TestCaseMixin
from libcloud.test.file_fixtures import ComputeFileFixtures
from libcloud.test.secrets import DIMENSIONDATA_PARAMS
-from libcloud.utils.xml import fixxpath, findtext
+from libcloud.utils.xml import fixxpath, findtext, findall
class DimensionDataTests(unittest.TestCase, TestCaseMixin):
@@ -745,6 +748,48 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
rule = self.driver.ex_create_firewall_rule(net, specific_source_ip_rule, 'FIRST')
self.assertEqual(rule.id, 'd0a20f59-77b9-4f28-a63b-e58496b73a6c')
+ def test_ex_create_firewall_rule_with_source_ip(self):
+ net = self.driver.ex_get_network_domain(
+ '8cdfd607-f429-4df6-9352-162cfc0891be')
+ rules = self.driver.ex_list_firewall_rules(net)
+ specific_source_ip_rule = \
+ list(filter(lambda x: x.name == 'SpecificSourceIP',
+ rules))[0]
+ specific_source_ip_rule.source.any_ip = False
+ specific_source_ip_rule.source.ip_address = '10.0.0.1'
+ specific_source_ip_rule.source.ip_prefix_size = '15'
+ rule = self.driver.ex_create_firewall_rule(net,
+ specific_source_ip_rule,
+ 'FIRST')
+ self.assertEqual(rule.id, 'd0a20f59-77b9-4f28-a63b-e58496b73a6c')
+
+ def test_ex_create_firewall_rule_with_any_ip(self):
+ net = self.driver.ex_get_network_domain(
+ '8cdfd607-f429-4df6-9352-162cfc0891be')
+ rules = self.driver.ex_list_firewall_rules(net)
+ specific_source_ip_rule = \
+ list(filter(lambda x: x.name == 'SpecificSourceIP',
+ rules))[0]
+ specific_source_ip_rule.source.any_ip = True
+ rule = self.driver.ex_create_firewall_rule(net,
+ specific_source_ip_rule,
+ 'FIRST')
+ self.assertEqual(rule.id, 'd0a20f59-77b9-4f28-a63b-e58496b73a6c')
+
+ def test_ex_create_firewall_rule_ip_prefix_size(self):
+ net = self.driver.ex_get_network_domain(
+ '8cdfd607-f429-4df6-9352-162cfc0891be')
+ rule = self.driver.ex_list_firewall_rules(net)[0]
+ rule.source.address_list_id = None
+ rule.source.any_ip = False
+ rule.source.ip_address = '10.2.1.1'
+ rule.source.ip_prefix_size = '10'
+ rule.destination.address_list_id = None
+ rule.destination.any_ip = False
+ rule.destination.ip_address = '10.0.0.1'
+ rule.destination.ip_prefix_size = '20'
+ self.driver.ex_create_firewall_rule(net, rule, 'LAST')
+
def test_ex_create_firewall_rule_address_list(self):
net = self.driver.ex_get_network_domain('8cdfd607-f429-4df6-9352-162cfc0891be')
rule = self.driver.ex_list_firewall_rules(net)[0]
@@ -759,6 +804,18 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
rule.destination.port_list_id = '12345'
self.driver.ex_create_firewall_rule(net, rule, 'LAST')
+ def test_ex_create_firewall_rule_port(self):
+ net = self.driver.ex_get_network_domain(
+ '8cdfd607-f429-4df6-9352-162cfc0891be')
+ rule = self.driver.ex_list_firewall_rules(net)[0]
+ rule.source.port_list_id = None
+ rule.source.port_begin = '8000'
+ rule.source.port_end = '8005'
+ rule.destination.port_list_id = None
+ rule.destination.port_begin = '7000'
+ rule.destination.port_end = '7005'
+ self.driver.ex_create_firewall_rule(net, rule, 'LAST')
+
def test_ex_create_firewall_rule_ALL_VALUES(self):
net = self.driver.ex_get_network_domain('8cdfd607-f429-4df6-9352-162cfc0891be')
rules = self.driver.ex_list_firewall_rules(net)
@@ -806,6 +863,146 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
result = self.driver.ex_delete_firewall_rule(rule)
self.assertTrue(result)
+ def test_ex_edit_firewall_rule(self):
+ net = self.driver.ex_get_network_domain(
+ '8cdfd607-f429-4df6-9352-162cfc0891be')
+ rule = self.driver.ex_get_firewall_rule(
+ net, 'd0a20f59-77b9-4f28-a63b-e58496b73a6c')
+ rule.source.any_ip = True
+ result = self.driver.ex_edit_firewall_rule(rule=rule, position='LAST')
+ self.assertTrue(result)
+
+ def test_ex_edit_firewall_rule_source_ipaddresslist(self):
+ net = self.driver.ex_get_network_domain(
+ '8cdfd607-f429-4df6-9352-162cfc0891be')
+ rule = self.driver.ex_get_firewall_rule(
+ net, 'd0a20f59-77b9-4f28-a63b-e58496b73a6c')
+ rule.source.address_list_id = '802abc9f-45a7-4efb-9d5a-810082368222'
+ rule.source.any_ip = False
+ rule.source.ip_address = '10.0.0.1'
+ rule.source.ip_prefix_size = 10
+ result = self.driver.ex_edit_firewall_rule(rule=rule, position='LAST')
+ self.assertTrue(result)
+
+ def test_ex_edit_firewall_rule_destination_ipaddresslist(self):
+ net = self.driver.ex_get_network_domain(
+ '8cdfd607-f429-4df6-9352-162cfc0891be')
+ rule = self.driver.ex_get_firewall_rule(
+ net, 'd0a20f59-77b9-4f28-a63b-e58496b73a6c')
+ rule.destination.address_list_id = '802abc9f-45a7-4efb-9d5a-810082368222'
+ rule.destination.any_ip = False
+ rule.destination.ip_address = '10.0.0.1'
+ rule.destination.ip_prefix_size = 10
+ result = self.driver.ex_edit_firewall_rule(rule=rule, position='LAST')
+ self.assertTrue(result)
+
+ def test_ex_edit_firewall_rule_destination_ipaddress(self):
+ net = self.driver.ex_get_network_domain(
+ '8cdfd607-f429-4df6-9352-162cfc0891be')
+ rule = self.driver.ex_get_firewall_rule(
+ net, 'd0a20f59-77b9-4f28-a63b-e58496b73a6c')
+ rule.source.address_list_id = None
+ rule.source.any_ip = False
+ rule.source.ip_address = '10.0.0.1'
+ rule.source.ip_prefix_size = '10'
+ result = self.driver.ex_edit_firewall_rule(rule=rule, position='LAST')
+ self.assertTrue(result)
+
+ def test_ex_edit_firewall_rule_source_ipaddress(self):
+ net = self.driver.ex_get_network_domain(
+ '8cdfd607-f429-4df6-9352-162cfc0891be')
+ rule = self.driver.ex_get_firewall_rule(
+ net, 'd0a20f59-77b9-4f28-a63b-e58496b73a6c')
+ rule.destination.address_list_id = None
+ rule.destination.any_ip = False
+ rule.destination.ip_address = '10.0.0.1'
+ rule.destination.ip_prefix_size = '10'
+ result = self.driver.ex_edit_firewall_rule(rule=rule, position='LAST')
+ self.assertTrue(result)
+
+ def test_ex_edit_firewall_rule_with_relative_rule(self):
+ net = self.driver.ex_get_network_domain(
+ '8cdfd607-f429-4df6-9352-162cfc0891be')
+ rule = self.driver.ex_get_firewall_rule(
+ net, 'd0a20f59-77b9-4f28-a63b-e58496b73a6c')
+ placement_rule = self.driver.ex_list_firewall_rules(
+ network_domain=net)[-1]
+ result = self.driver.ex_edit_firewall_rule(
+ rule=rule, position='BEFORE',
+ relative_rule_for_position=placement_rule)
+ self.assertTrue(result)
+
+ def test_ex_edit_firewall_rule_with_relative_rule_by_name(self):
+ net = self.driver.ex_get_network_domain(
+ '8cdfd607-f429-4df6-9352-162cfc0891be')
+ rule = self.driver.ex_get_firewall_rule(
+ net, 'd0a20f59-77b9-4f28-a63b-e58496b73a6c')
+ placement_rule = self.driver.ex_list_firewall_rules(
+ network_domain=net)[-1]
+ result = self.driver.ex_edit_firewall_rule(
+ rule=rule, position='BEFORE',
+ relative_rule_for_position=placement_rule.name)
+ self.assertTrue(result)
+
+ def test_ex_edit_firewall_rule_source_portlist(self):
+ net = self.driver.ex_get_network_domain(
+ '8cdfd607-f429-4df6-9352-162cfc0891be')
+ rule = self.driver.ex_get_firewall_rule(
+ net, 'd0a20f59-77b9-4f28-a63b-e58496b73a6c')
+ rule.source.port_list_id = '802abc9f-45a7-4efb-9d5a-810082368222'
+ result = self.driver.ex_edit_firewall_rule(rule=rule, position='LAST')
+ self.assertTrue(result)
+
+ def test_ex_edit_firewall_rule_source_port(self):
+ net = self.driver.ex_get_network_domain(
+ '8cdfd607-f429-4df6-9352-162cfc0891be')
+ rule = self.driver.ex_get_firewall_rule(
+ net, 'd0a20f59-77b9-4f28-a63b-e58496b73a6c')
+ rule.source.port_list_id = None
+ rule.source.port_begin = '3'
+ rule.source.port_end = '10'
+ result = self.driver.ex_edit_firewall_rule(rule=rule, position='LAST')
+ self.assertTrue(result)
+
+ def test_ex_edit_firewall_rule_destination_portlist(self):
+ net = self.driver.ex_get_network_domain(
+ '8cdfd607-f429-4df6-9352-162cfc0891be')
+ rule = self.driver.ex_get_firewall_rule(
+ net, 'd0a20f59-77b9-4f28-a63b-e58496b73a6c')
+ rule.destination.port_list_id = '802abc9f-45a7-4efb-9d5a-810082368222'
+ result = self.driver.ex_edit_firewall_rule(rule=rule, position='LAST')
+ self.assertTrue(result)
+
+ def test_ex_edit_firewall_rule_destination_port(self):
+ net = self.driver.ex_get_network_domain(
+ '8cdfd607-f429-4df6-9352-162cfc0891be')
+ rule = self.driver.ex_get_firewall_rule(
+ net, 'd0a20f59-77b9-4f28-a63b-e58496b73a6c')
+ rule.destination.port_list_id = None
+ rule.destination.port_begin = '3'
+ rule.destination.port_end = '10'
+ result = self.driver.ex_edit_firewall_rule(rule=rule, position='LAST')
+ self.assertTrue(result)
+
+ def test_ex_edit_firewall_rule_invalid_position_fail(self):
+ net = self.driver.ex_get_network_domain(
+ '8cdfd607-f429-4df6-9352-162cfc0891be')
+ rule = self.driver.ex_get_firewall_rule(
+ net, 'd0a20f59-77b9-4f28-a63b-e58496b73a6c')
+ with self.assertRaises(ValueError):
+ self.driver.ex_edit_firewall_rule(rule=rule, position='BEFORE')
+
+ def test_ex_edit_firewall_rule_invalid_position_relative_rule_fail(self):
+ net = self.driver.ex_get_network_domain(
+ '8cdfd607-f429-4df6-9352-162cfc0891be')
+ rule = self.driver.ex_get_firewall_rule(
+ net, 'd0a20f59-77b9-4f28-a63b-e58496b73a6c')
+ relative_rule = self.driver.ex_list_firewall_rules(
+ network_domain=net)[-1]
+ with self.assertRaises(ValueError):
+ self.driver.ex_edit_firewall_rule(rule=rule, position='FIRST',
+ relative_rule_for_position=relative_rule)
+
def test_ex_create_nat_rule(self):
net = self.driver.ex_get_network_domain('8cdfd607-f429-4df6-9352-162cfc0891be')
rule = self.driver.ex_create_nat_rule(net, '1.2.3.4', '4.3.2.1')
@@ -1185,6 +1382,370 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
self.assertEqual(len(report_content), 42)
self.assertEqual(len(report_content[0]), 4)
+ def test_ex_list_ip_address_list(self):
+ net_domain = self.driver.ex_list_network_domains()[0]
+ ip_list = self.driver.ex_list_ip_address_list(
+ ex_network_domain=net_domain)
+ self.assertTrue(isinstance(ip_list, list))
+ self.assertEqual(len(ip_list), 4)
+ self.assertTrue(isinstance(ip_list[0].name, str))
+ self.assertTrue(isinstance(ip_list[0].description, str))
+ self.assertTrue(isinstance(ip_list[0].ip_version, str))
+ self.assertTrue(isinstance(ip_list[0].state, str))
+ self.assertTrue(isinstance(ip_list[0].create_time, str))
+ self.assertTrue(isinstance(ip_list[0].child_ip_address_lists, list))
+ self.assertEqual(len(ip_list[1].child_ip_address_lists), 1)
+ self.assertTrue(isinstance(ip_list[1].child_ip_address_lists[0].name,
+ str))
+
+ def test_ex_get_ip_address_list(self):
+ net_domain = self.driver.ex_list_network_domains()[0]
+ DimensionDataMockHttp.type = 'FILTERBYNAME'
+ ip_list = self.driver.ex_get_ip_address_list(
+ ex_network_domain=net_domain.id,
+ ex_ip_address_list_name='Test_IP_Address_List_3')
+ self.assertTrue(isinstance(ip_list, list))
+ self.assertEqual(len(ip_list), 1)
+ self.assertTrue(isinstance(ip_list[0].name, str))
+ self.assertTrue(isinstance(ip_list[0].description, str))
+ self.assertTrue(isinstance(ip_list[0].ip_version, str))
+ self.assertTrue(isinstance(ip_list[0].state, str))
+ self.assertTrue(isinstance(ip_list[0].create_time, str))
+ ips = ip_list[0].ip_address_collection
+ self.assertEqual(len(ips), 3)
+ self.assertTrue(isinstance(ips[0].begin, str))
+ self.assertTrue(isinstance(ips[0].prefix_size, str))
+ self.assertTrue(isinstance(ips[2].end, str))
+
+ def test_ex_create_ip_address_list_FAIL(self):
+ net_domain = self.driver.ex_list_network_domains()[0]
+
+ with self.assertRaises(TypeError):
+ self.driver.ex_create_ip_address_list(
+ ex_network_domain=net_domain.id)
+
+ def test_ex_create_ip_address_list(self):
+ name = "Test_IP_Address_List_3"
+ description = "Test Description"
+ ip_version = "IPV4"
+ child_ip_address_list_id = '0291ef78-4059-4bc1-b433-3f6ad698dc41'
+ child_ip_address_list = DimensionDataChildIpAddressList(
+ id=child_ip_address_list_id,
+ name="test_child_ip_addr_list")
+ net_domain = self.driver.ex_list_network_domains()[0]
+ ip_address_1 = DimensionDataIpAddress(begin='190.2.2.100')
+ ip_address_2 = DimensionDataIpAddress(begin='190.2.2.106',
+ end='190.2.2.108')
+ ip_address_3 = DimensionDataIpAddress(begin='190.2.2.0',
+ prefix_size='24')
+ ip_address_collection = {ip_address_1, ip_address_2,
+ ip_address_3}
+
+ # Create IP Address List
+ success = self.driver.ex_create_ip_address_list(
+ ex_network_domain=net_domain, name=name,
+ ip_version=ip_version, description=description,
+ ip_address_collection=ip_address_collection,
+ child_ip_address_list=child_ip_address_list)
+
+ self.assertTrue(success)
+
+ def test_ex_create_ip_address_list_STR(self):
+ name = "Test_IP_Address_List_3"
+ description = "Test Description"
+ ip_version = "IPV4"
+ child_ip_address_list_id = '0291ef78-4059-4bc1-b433-3f6ad698dc41'
+ net_domain = self.driver.ex_list_network_domains()[0]
+ ip_address_1 = DimensionDataIpAddress(begin='190.2.2.100')
+ ip_address_2 = DimensionDataIpAddress(begin='190.2.2.106',
+ end='190.2.2.108')
+ ip_address_3 = DimensionDataIpAddress(begin='190.2.2.0',
+ prefix_size='24')
+ ip_address_collection = {ip_address_1, ip_address_2,
+ ip_address_3}
+
+ # Create IP Address List
+ success = self.driver.ex_create_ip_address_list(
+ ex_network_domain=net_domain.id, name=name,
+ ip_version=ip_version, description=description,
+ ip_address_collection=ip_address_collection,
+ child_ip_address_list=child_ip_address_list_id)
+
+ self.assertTrue(success)
+
+ def test_ex_edit_ip_address_list(self):
+ ip_address_1 = DimensionDataIpAddress(begin='190.2.2.111')
+ ip_address_collection = {ip_address_1}
+
+ child_ip_address_list = DimensionDataChildIpAddressList(
+ id='2221ef78-4059-4bc1-b433-3f6ad698dc41',
+ name="test_child_ip_address_list edited")
+
+ ip_address_list = DimensionDataIpAddressList(
+ id='1111ef78-4059-4bc1-b433-3f6ad698d111',
+ name="test ip address list edited",
+ ip_version="IPv4", description="test",
+ ip_address_collection=ip_address_collection,
+ child_ip_address_lists=child_ip_address_list,
+ state="NORMAL",
+ create_time='2015-09-29T02:49:45'
+ )
+
+ success = self.driver.ex_edit_ip_address_list(
+ ex_ip_address_list=ip_address_list,
+ description="test ip address list",
+ ip_address_collection=ip_address_collection,
+ child_ip_address_lists=child_ip_address_list
+ )
+
+ self.assertTrue(success)
+
+ def test_ex_edit_ip_address_list_STR(self):
+ ip_address_1 = DimensionDataIpAddress(begin='190.2.2.111')
+ ip_address_collection = {ip_address_1}
+
+ child_ip_address_list = DimensionDataChildIpAddressList(
+ id='2221ef78-4059-4bc1-b433-3f6ad698dc41',
+ name="test_child_ip_address_list edited")
+
+ success = self.driver.ex_edit_ip_address_list(
+ ex_ip_address_list='84e34850-595d- 436e-a885-7cd37edb24a4',
+ description="test ip address list",
+ ip_address_collection=ip_address_collection,
+ child_ip_address_lists=child_ip_address_list
+ )
+
+ self.assertTrue(success)
+
+ def test_ex_delete_ip_address_list(self):
+ child_ip_address_list = DimensionDataChildIpAddressList(
+ id='2221ef78-4059-4bc1-b433-3f6ad698dc41',
+ name="test_child_ip_address_list edited")
+
+ ip_address_list = DimensionDataIpAddressList(
+ id='1111ef78-4059-4bc1-b433-3f6ad698d111',
+ name="test ip address list edited",
+ ip_version="IPv4", description="test",
+ ip_address_collection=None,
+ child_ip_address_lists=child_ip_address_list,
+ state="NORMAL",
+ create_time='2015-09-29T02:49:45'
+ )
+
+ success = self.driver.ex_delete_ip_address_list(
+ ex_ip_address_list=ip_address_list)
+ self.assertTrue(success)
+
+ def test_ex_delete_ip_address_list_STR(self):
+ success = self.driver.ex_delete_ip_address_list(
+ ex_ip_address_list='111ef78-4059-4bc1-b433-3f6ad698d111')
+ self.assertTrue(success)
+
+ def test_ex_list_port_lists(self):
+ net_domain = self.driver.ex_list_network_domains()[0]
+ port_list = self.driver.ex_list_port_list(
+ ex_network_domain=net_domain)
+ self.assertTrue(isinstance(port_list, list))
+ self.assertEqual(len(port_list), 3)
+ self.assertTrue(isinstance(port_list[0].name, str))
+ self.assertTrue(isinstance(port_list[0].description, str))
+ self.assertTrue(isinstance(port_list[0].state, str))
+ self.assertTrue(isinstance(port_list[0].port_collection, list))
+ self.assertTrue(isinstance(port_list[0].port_collection[0].begin, str))
+ self.assertTrue(isinstance(port_list[0].port_collection[0].end, str))
+ self.assertTrue(isinstance(port_list[0].child_port_list_lists, list))
+ self.assertTrue(isinstance(port_list[0].child_port_list_lists[0].id,
+ str))
+ self.assertTrue(isinstance(port_list[0].child_port_list_lists[0].name,
+ str))
+ self.assertTrue(isinstance(port_list[0].create_time, str))
+
+ def test_ex_get_port_list(self):
+ net_domain = self.driver.ex_list_network_domains()[0]
+
+ port_list = self.driver.ex_list_port_list(
+ ex_network_domain=net_domain)[0]
+
+ port_list = self.driver.ex_get_port_list(
+ ex_port_list=port_list)
+ self.assertTrue(isinstance(port_list, DimensionDataPortList))
+
+ self.assertTrue(isinstance(port_list.name, str))
+ self.assertTrue(isinstance(port_list.description, str))
+ self.assertTrue(isinstance(port_list.state, str))
+ self.assertTrue(isinstance(port_list.port_collection, list))
+ self.assertTrue(isinstance(port_list.port_collection[0].begin, str))
+ self.assertTrue(isinstance(port_list.port_collection[0].end, str))
+ self.assertTrue(isinstance(port_list.child_port_list_lists, list))
+ self.assertTrue(isinstance(port_list.child_port_list_lists[0].id,
+ str))
+ self.assertTrue(isinstance(port_list.child_port_list_lists[0].name,
+ str))
+ self.assertTrue(isinstance(port_list.create_time, str))
+
+ def test_ex_get_port_list_STR(self):
+ net_domain = self.driver.ex_list_network_domains()[0]
+
+ port_list = self.driver.ex_list_port_list(
+ ex_network_domain=net_domain)[0]
+
+ port_list = self.driver.ex_get_port_list(
+ ex_port_list=port_list.id)
+ self.assertTrue(isinstance(port_list, DimensionDataPortList))
+
+ self.assertTrue(isinstance(port_list.name, str))
+ self.assertTrue(isinstance(port_list.description, str))
+ self.assertTrue(isinstance(port_list.state, str))
+ self.assertTrue(isinstance(port_list.port_collection, list))
+ self.assertTrue(isinstance(port_list.port_collection[0].begin, str))
+ self.assertTrue(isinstance(port_list.port_collection[0].end, str))
+ self.assertTrue(isinstance(port_list.child_port_list_lists, list))
+ self.assertTrue(isinstance(port_list.child_port_list_lists[0].id,
+ str))
+ self.assertTrue(isinstance(port_list.child_port_list_lists[0].name,
+ str))
+ self.assertTrue(isinstance(port_list.create_time, str))
+
+ def test_ex_create_port_list_NOCHILDPORTLIST(self):
+ name = "Test_Port_List"
+ description = "Test Description"
+
+ net_domain = self.driver.ex_list_network_domains()[0]
+
+ port_1 = DimensionDataPort(begin='8080')
+ port_2 = DimensionDataIpAddress(begin='8899',
+ end='9023')
+ port_collection = {port_1, port_2}
+
+ # Create IP Address List
+ success = self.driver.ex_create_port_list(
+ ex_network_domain=net_domain, name=name,
+ description=description,
+ port_collection=port_collection
+ )
+
+ self.assertTrue(success)
+
+ def test_ex_create_port_list(self):
+ name = "Test_Port_List"
+ description = "Test Description"
+
+ net_domain = self.driver.ex_list_network_domains()[0]
+
+ port_1 = DimensionDataPort(begin='8080')
+ port_2 = DimensionDataIpAddress(begin='8899',
+ end='9023')
+ port_collection = {port_1, port_2}
+
+ child_port_1 = DimensionDataChildPortList(
+ id="333174a2-ae74-4658-9e56-50fc90e086cf", name='test port 1')
+ child_port_2 = DimensionDataChildPortList(
+ id="311174a2-ae74-4658-9e56-50fc90e04444", name='test port 2')
+ child_ports = {child_port_1, child_port_2}
+
+ # Create IP Address List
+ success = self.driver.ex_create_port_list(
+ ex_network_domain=net_domain, name=name,
+ description=description,
+ port_collection=port_collection,
+ child_port_list_lists=child_ports
+ )
+
+ self.assertTrue(success)
+
+ def test_ex_create_port_list_STR(self):
+ name = "Test_Port_List"
+ description = "Test Description"
+
+ net_domain = self.driver.ex_list_network_domains()[0]
+
+ port_1 = DimensionDataPort(begin='8080')
+ port_2 = DimensionDataIpAddress(begin='8899',
+ end='9023')
+ port_collection = {port_1, port_2}
+
+ child_port_1 = DimensionDataChildPortList(
+ id="333174a2-ae74-4658-9e56-50fc90e086cf", name='test port 1')
+ child_port_2 = DimensionDataChildPortList(
+ id="311174a2-ae74-4658-9e56-50fc90e04444", name='test port 2')
+ child_ports_ids = {child_port_1.id, child_port_2.id}
+
+ # Create IP Address List
+ success = self.driver.ex_create_port_list(
+ ex_network_domain=net_domain.id, name=name,
+ description=description,
+ port_collection=port_collection,
+ child_port_list_lists=child_ports_ids
+ )
+
+ self.assertTrue(success)
+
+ def test_ex_edit_port_list(self):
+ net_domain = self.driver.ex_list_network_domains()[0]
+ port_list = self.driver.ex_list_port_list(net_domain)[0]
+
+ description = "Test Description"
+
+ port_1 = DimensionDataPort(begin='8080')
+ port_2 = DimensionDataIpAddress(begin='8899',
+ end='9023')
+ port_collection = {port_1, port_2}
+
+ child_port_1 = DimensionDataChildPortList(
+ id="333174a2-ae74-4658-9e56-50fc90e086cf", name='test port 1')
+ child_port_2 = DimensionDataChildPortList(
+ id="311174a2-ae74-4658-9e56-50fc90e04444", name='test port 2')
+ child_ports = {child_port_1.id, child_port_2.id}
+
+ # Create IP Address List
+ success = self.driver.ex_edit_port_list(
+ ex_port_list=port_list,
+ description=description,
+ port_collection=port_collection,
+ child_port_list_lists=child_ports
+ )
+ self.assertTrue(success)
+
+ def test_ex_edit_port_list_STR(self):
+ port_list_id = "484174a2-ae74-4658-9e56-50fc90e086cf"
+ description = "Test Description"
+
+ port_1 = DimensionDataPort(begin='8080')
+ port_2 = DimensionDataIpAddress(begin='8899',
+ end='9023')
+ port_collection = {port_1, port_2}
+
+ child_port_1 = DimensionDataChildPortList(
+ id="333174a2-ae74-4658-9e56-50fc90e086cf", name='test port 1')
+ child_port_2 = DimensionDataChildPortList(
+ id="311174a2-ae74-4658-9e56-50fc90e04444", name='test port 2')
+ child_ports_ids = {child_port_1.id, child_port_2.id}
+
+ # Create IP Address List
+ success = self.driver.ex_edit_port_list(
+ ex_port_list=port_list_id,
+ description=description,
+ port_collection=port_collection,
+ child_port_list_lists=child_ports_ids
+ )
+ self.assertTrue(success)
+
+ def test_ex_delete_port_list(self):
+ net_domain = self.driver.ex_list_network_domains()[0]
+ port_list = self.driver.ex_list_port_list(net_domain)[0]
+
+ success = self.driver.ex_delete_port_list(
+ ex_port_list=port_list)
+ self.assertTrue(success)
+
+ def test_ex_delete_port_list_STR(self):
+ net_domain = self.driver.ex_list_network_domains()[0]
+ port_list = self.driver.ex_list_port_list(net_domain)[0]
+
+ success = self.driver.ex_delete_port_list(
+ ex_port_list=port_list.id)
+ self.assertTrue(success)
+
class InvalidRequestError(Exception):
def __init__(self, tag):
@@ -2234,5 +2795,195 @@ class DimensionDataMockHttp(StorageMockHttp, MockHttp):
)
return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+ def _caas_2_3_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_ipAddressList(
+ self, method, url, body, headers):
+ body = self.fixtures.load('ip_address_lists.xml')
+ return httplib.OK, body, {}, httplib.responses[httplib.OK]
+
+ def _caas_2_3_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_ipAddressList_FILTERBYNAME(
+ self, method, url, body, headers):
+ body = self.fixtures.load('ip_address_lists_FILTERBYNAME.xml')
+ return httplib.OK, body, {}, httplib.responses[httplib.OK]
+
+ def _caas_2_3_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_createIpAddressList(
+ self, method, url, body, headers):
+ request = ET.fromstring(body)
+ if request.tag != "{urn:didata.com:api:cloud:types}" \
+ "createIpAddressList":
+ raise InvalidRequestError(request.tag)
+
+ net_domain = findtext(request, 'networkDomainId', TYPES_URN)
+ if net_domain is None:
+ raise ValueError("Network Domain should not be empty")
+
+ name = findtext(request, 'name', TYPES_URN)
+ if name is None:
+ raise ValueError("Name should not be empty")
+
+ ip_version = findtext(request, 'ipVersion', TYPES_URN)
+ if ip_version is None:
+ raise ValueError("IP Version should not be empty")
+
+ ip_address_col_required = findall(request, 'ipAddress', TYPES_URN)
+ child_ip_address_required = findall(request, 'childIpAddressListId',
+ TYPES_URN)
+
+ if 0 == len(ip_address_col_required) and \
+ 0 == len(child_ip_address_required):
+ raise ValueError("At least one ipAddress element or "
+ "one childIpAddressListId element must be "
+ "provided.")
+
+ if ip_address_col_required[0].get('begin') is None:
+ raise ValueError("IP Address should not be empty")
+
+ body = self.fixtures.load(
+ 'ip_address_list_create.xml'
+ )
+ return httplib.OK, body, {}, httplib.responses[httplib.OK]
+
+ def _caas_2_3_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_editIpAddressList(
+ self, method, url, body, headers):
+ request = ET.fromstring(body)
+ if request.tag != "{urn:didata.com:api:cloud:types}" \
+ "editIpAddressList":
+ raise InvalidRequestError(request.tag)
+
+ ip_address_list = request.get('id')
+ if ip_address_list is None:
+ raise ValueError("IpAddressList ID should not be empty")
+
+ name = findtext(request, 'name', TYPES_URN)
+ if name is not None:
+ raise ValueError("Name should not exists in request")
+
+ ip_version = findtext(request, 'ipVersion', TYPES_URN)
+ if ip_version is not None:
+ raise ValueError("IP Version should not exists in request")
+
+ ip_address_col_required = findall(request, 'ipAddress', TYPES_URN)
+ child_ip_address_required = findall(request, 'childIpAddressListId',
+ TYPES_URN)
+
+ if 0 == len(ip_address_col_required) and \
+ 0 == len(child_ip_address_required):
+ raise ValueError("At least one ipAddress element or "
+ "one childIpAddressListId element must be "
+ "provided.")
+
+ if ip_address_col_required[0].get('begin') is None:
+ raise ValueError("IP Address should not be empty")
+
+ body = self.fixtures.load(
+ 'ip_address_list_edit.xml'
+ )
+ return httplib.OK, body, {}, httplib.responses[httplib.OK]
+
+ def _caas_2_3_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_deleteIpAddressList(
+ self, method, url, body, headers):
+ request = ET.fromstring(body)
+ if request.tag != "{urn:didata.com:api:cloud:types}" \
+ "deleteIpAddressList":
+ raise InvalidRequestError(request.tag)
+
+ ip_address_list = request.get('id')
+ if ip_address_list is None:
+ raise ValueError("IpAddressList ID should not be empty")
+
+ body = self.fixtures.load(
+ 'ip_address_list_delete.xml'
+ )
+
+ return httplib.OK, body, {}, httplib.responses[httplib.OK]
+
+ def _caas_2_3_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_portList(
+ self, method, url, body, headers):
+ body = self.fixtures.load(
+ 'port_list_lists.xml'
+ )
+
+ return httplib.OK, body, {}, httplib.responses[httplib.OK]
+
+ def _caas_2_3_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_portList_c8c92ea3_2da8_4d51_8153_f39bec794d69(
+ self, method, url, body, headers):
+ body = self.fixtures.load(
+ 'port_list_get.xml'
+ )
+
+ return httplib.OK, body, {}, httplib.responses[httplib.OK]
+
+ def _caas_2_3_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_createPortList(
+ self, method, url, body, headers):
+
+ request = ET.fromstring(body)
+ if request.tag != "{urn:didata.com:api:cloud:types}" \
+ "createPortList":
+ raise InvalidRequestError(request.tag)
+
+ net_domain = findtext(request, 'networkDomainId', TYPES_URN)
+ if net_domain is None:
+ raise ValueError("Network Domain should not be empty")
+
+ ports_required = findall(request, 'port', TYPES_URN)
+ child_port_list_required = findall(request, 'childPortListId',
+ TYPES_URN)
+
+ if 0 == len(ports_required) and \
+ 0 == len(child_port_list_required):
+ raise ValueError("At least one port element or one "
+ "childPortListId element must be provided")
+
+ if ports_required[0].get('begin') is None:
+ raise ValueError("PORT begin value should not be empty")
+
+ body = self.fixtures.load(
+ 'port_list_create.xml'
+ )
+
+ return httplib.OK, body, {}, httplib.responses[httplib.OK]
+
+ def _caas_2_3_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_editPortList(
+ self, method, url, body, headers):
+
+ request = ET.fromstring(body)
+ if request.tag != "{urn:didata.com:api:cloud:types}" \
+ "editPortList":
+ raise InvalidRequestError(request.tag)
+
+ ports_required = findall(request, 'port', TYPES_URN)
+ child_port_list_required = findall(request, 'childPortListId',
+ TYPES_URN)
+
+ if 0 == len(ports_required) and \
+ 0 == len(child_port_list_required):
+ raise ValueError("At least one port element or one "
+ "childPortListId element must be provided")
+
+ if ports_required[0].get('begin') is None:
+ raise ValueError("PORT begin value should not be empty")
+
+ body = self.fixtures.load(
+ 'port_list_edit.xml'
+ )
+
+ return httplib.OK, body, {}, httplib.responses[httplib.OK]
+
+ def _caas_2_3_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_network_deletePortList(
+ self, method, url, body, headers):
+ request = ET.fromstring(body)
+ if request.tag != "{urn:didata.com:api:cloud:types}" \
+ "deletePortList":
+ raise InvalidRequestError(request.tag)
+
+ port_list = request.get('id')
+ if port_list is None:
+ raise ValueError("Port List ID should not be empty")
+
+ body = self.fixtures.load(
+ 'ip_address_list_delete.xml'
+ )
+
+ return httplib.OK, body, {}, httplib.responses[httplib.OK]
+
if __name__ == '__main__':
sys.exit(unittest.main())
[02/13] libcloud git commit: Merge remote-tracking branch
'apache/trunk' into trunk
Posted by an...@apache.org.
Merge remote-tracking branch 'apache/trunk' into trunk
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/7440bf51
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/7440bf51
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/7440bf51
Branch: refs/heads/trunk
Commit: 7440bf51c023936c7d1895e8f37ce707b26832d7
Parents: ff06265 e2e3476
Author: Samuel Chong <sa...@gmail.com>
Authored: Wed Oct 5 17:07:15 2016 +1100
Committer: Samuel Chong <sa...@gmail.com>
Committed: Wed Oct 5 17:07:15 2016 +1100
----------------------------------------------------------------------
----------------------------------------------------------------------
[04/13] libcloud git commit: Added post_list_id property to
DimensionDataFirewallAddress class
Posted by an...@apache.org.
Added post_list_id property to DimensionDataFirewallAddress class
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/5327c110
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/5327c110
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/5327c110
Branch: refs/heads/trunk
Commit: 5327c11048392f06eef901547a94bd899a26169d
Parents: 2672b78
Author: Samuel Chong <sa...@gmail.com>
Authored: Thu Oct 6 11:26:56 2016 +1100
Committer: Samuel Chong <sa...@gmail.com>
Committed: Thu Oct 6 11:26:56 2016 +1100
----------------------------------------------------------------------
libcloud/common/dimensiondata.py | 9 +++++++++
1 file changed, 9 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/5327c110/libcloud/common/dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/common/dimensiondata.py b/libcloud/common/dimensiondata.py
index 45f2c5e..af792c3 100644
--- a/libcloud/common/dimensiondata.py
+++ b/libcloud/common/dimensiondata.py
@@ -833,11 +833,20 @@ class DimensionDataFirewallAddress(object):
self.any_ip = any_ip
self.ip_address = ip_address
self.ip_prefix_size = ip_prefix_size
+ self.port_list_id = port_list_id
self.port_begin = port_begin
self.port_end = port_end
self.address_list_id = address_list_id
self.port_list_id = port_list_id
+ def __repr__(self):
+ return (
+ '<DimensionDataFirewallAddress: any_ip=%s, ip_address=%s, '
+ 'ip_prefix_size=%s, port_begin=%s, port_end=%s, '
+ 'address_list_id=%s, port_list_id=%s>'
+ % (self.any_ip, self.ip_address, self.ip_prefix_size,
+ self.port_begin, self.port_end, self.address_list_id,
+ self.port_list_id))
class DimensionDataNatRule(object):
"""
[12/13] libcloud git commit: fix network_adapter_name property in
DimensionDataNic data contract class
Posted by an...@apache.org.
fix network_adapter_name property in DimensionDataNic data contract class
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/487e0b77
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/487e0b77
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/487e0b77
Branch: refs/heads/trunk
Commit: 487e0b77aae6c8bedcc1a0cbe1df038861c1fa29
Parents: a32546f
Author: Samuel Chong <sa...@gmail.com>
Authored: Mon Oct 10 10:53:36 2016 +1100
Committer: Samuel Chong <sa...@gmail.com>
Committed: Mon Oct 10 10:53:36 2016 +1100
----------------------------------------------------------------------
libcloud/common/dimensiondata.py | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/487e0b77/libcloud/common/dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/common/dimensiondata.py b/libcloud/common/dimensiondata.py
index 5f618f9..84bca0d 100644
--- a/libcloud/common/dimensiondata.py
+++ b/libcloud/common/dimensiondata.py
@@ -1729,7 +1729,8 @@ class DimensionDataNic(object):
A representation of Network Adapter in Dimension Data
"""
- def __init__(self, private_ip_v4=None, vlan=None, network_adapter=None):
+ def __init__(self, private_ip_v4=None, vlan=None,
+ network_adapter_name=None):
"""
Initialize an instance of :class:`DimensionDataNic`
@@ -1739,14 +1740,14 @@ class DimensionDataNic(object):
:param vlan: Network VLAN
:type vlan: class: DimensionDataVlan or ``str``
- :param network_adapter: Network Adapter Name
- :type network_adapter: ``str``
+ :param network_adapter_name: Network Adapter Name
+ :type network_adapter_name: ``str``
"""
self.private_ip_v4 = private_ip_v4
self.vlan = vlan
- self.network_adapter_name = network_adapter
+ self.network_adapter_name = network_adapter_name
def __repr__(self):
return ('<DimensionDataNic: private_ip_v4=%s, vlan=%s,'
- 'network_adapter=%s>'
- % (self.private_ip_v4, self.vlan, self.network_adapter))
+ 'network_adapter_name=%s>'
+ % (self.private_ip_v4, self.vlan, self.network_adapter_name))
[10/13] libcloud git commit: Add sample code for Edit FW,
CRUD for ipaddresslist and portlist
Posted by an...@apache.org.
Add sample code for Edit FW, CRUD for ipaddresslist and portlist
Add sample codes and rename port_list_list to portlist_list to avoid
confusion
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/9e3c7da2
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/9e3c7da2
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/9e3c7da2
Branch: refs/heads/trunk
Commit: 9e3c7da2403b30da67441e5a63ca79fff6236e3d
Parents: 026c973
Author: Samuel Chong <sa...@gmail.com>
Authored: Fri Oct 7 17:05:40 2016 +1100
Committer: Samuel Chong <sa...@gmail.com>
Committed: Fri Oct 7 17:05:40 2016 +1100
----------------------------------------------------------------------
libcloud/compute/drivers/dimensiondata.py | 350 +++++++++++++++++++++--
libcloud/test/compute/test_dimensiondata.py | 128 ++++-----
2 files changed, 384 insertions(+), 94 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/9e3c7da2/libcloud/compute/drivers/dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/dimensiondata.py b/libcloud/compute/drivers/dimensiondata.py
index a76fcdc..08343ad 100644
--- a/libcloud/compute/drivers/dimensiondata.py
+++ b/libcloud/compute/drivers/dimensiondata.py
@@ -1481,6 +1481,44 @@ class DimensionDataNodeDriver(NodeDriver):
"""
Edit a firewall rule
+ >>> from pprint import pprint
+ >>> from libcloud.compute.types import Provider
+ >>> from libcloud.compute.providers import get_driver
+ >>> import libcloud.security
+ >>>
+ >>> # Get dimension data driver
+ >>> libcloud.security.VERIFY_SSL_CERT = True
+ >>> cls = get_driver(Provider.DIMENSIONDATA)
+ >>> # driver = cls('myusername','mypassword', region='dd-au')
+ >>>
+ >>> # Get location
+ >>> location = driver.ex_get_location_by_id(id='AU9')
+ >>>
+ >>> # Get network domain by location
+ >>> networkDomainName = "Baas QA"
+ >>> network_domains = driver.ex_list_network_domains(location=location)
+ >>> my_network_domain = [d for d in network_domains if d.name ==
+ networkDomainName][0]
+ >>>
+ >>>
+ >>> # List firewall rules
+ >>> firewall_rules = driver.ex_list_firewall_rules(my_network_domain)
+ >>>
+ >>> # Get Firewall Rule by name
+ >>> pprint("List specific firewall rule by name")
+ >>> fire_rule_under_test = (list(filter(lambda x: x.name ==
+ 'My_New_Firewall_Rule', firewall_rules))[0])
+ >>> pprint(fire_rule_under_test.source)
+ >>> pprint(fire_rule_under_test.destination)
+ >>>
+ >>> # Edit Firewall
+ >>> fire_rule_under_test.destination.address_list_id =
+ '5e7c323f-c885-4e4b-9a27-94c44217dbd3'
+ >>> fire_rule_under_test.destination.port_list_id =
+ 'b6557c5a-45fa-4138-89bd-8fe68392691b'
+ >>> result = driver.ex_edit_firewall_rule(fire_rule_under_test, 'LAST')
+ >>> pprint(result)
+
:param rule: (required) The rule in which to create
:type rule: :class:`DimensionDataFirewallRule`
@@ -2496,6 +2534,30 @@ class DimensionDataNodeDriver(NodeDriver):
"""
List IP Address List by network domain ID specified
+ >>> from pprint import pprint
+ >>> from libcloud.compute.types import Provider
+ >>> from libcloud.compute.providers import get_driver
+ >>> import libcloud.security
+ >>>
+ >>> # Get dimension data driver
+ >>> libcloud.security.VERIFY_SSL_CERT = True
+ >>> cls = get_driver(Provider.DIMENSIONDATA)
+ >>> driver = cls('myusername','mypassword', region='dd-au')
+ >>>
+ >>> # Get location
+ >>> location = driver.ex_get_location_by_id(id='AU9')
+ >>>
+ >>> # Get network domain by location
+ >>> networkDomainName = "Baas QA"
+ >>> network_domains = driver.ex_list_network_domains(location=location)
+ >>> my_network_domain = [d for d in network_domains if d.name ==
+ networkDomainName][0]
+ >>>
+ >>> # List IP Address List of network domain
+ >>> ipaddresslist_list = driver.ex_list_ip_address_list(
+ >>> ex_network_domain=my_network_domain)
+ >>> pprint(ipaddresslist_list)
+
:param ex_network_domain: The network domain or network domain ID
:type ex_network_domain: :class:`DimensionDataNetworkDomain` or 'str'
@@ -2513,6 +2575,32 @@ class DimensionDataNodeDriver(NodeDriver):
"""
Get IP Address List by name in network domain specified
+ >>> from pprint import pprint
+ >>> from libcloud.compute.types import Provider
+ >>> from libcloud.compute.providers import get_driver
+ >>> import libcloud.security
+ >>>
+ >>> # Get dimension data driver
+ >>> libcloud.security.VERIFY_SSL_CERT = True
+ >>> cls = get_driver(Provider.DIMENSIONDATA)
+ >>> driver = cls('myusername','mypassword', region='dd-au')
+ >>>
+ >>> # Get location
+ >>> location = driver.ex_get_location_by_id(id='AU9')
+ >>>
+ >>> # Get network domain by location
+ >>> networkDomainName = "Baas QA"
+ >>> network_domains = driver.ex_list_network_domains(location=location)
+ >>> my_network_domain = [d for d in network_domains if d.name ==
+ networkDomainName][0]
+ >>>
+ >>> # Get IP Address List by Name
+ >>> ipaddresslist_list_by_name = driver.ex_get_ip_address_list(
+ >>> ex_network_domain=my_network_domain,
+ >>> ex_ip_address_list_name='My_IP_AddressList_1')
+ >>> pprint(ipaddresslist_list_by_name)
+
+
:param ex_network_domain: (required) The network domain or network
domain ID in which ipaddresslist resides.
:type ex_network_domain: :class:`DimensionDataNetworkDomain` or 'str'
@@ -2536,6 +2624,47 @@ class DimensionDataNodeDriver(NodeDriver):
"""
Create IP Address List. IP Address list.
+ >>> from pprint import pprint
+ >>> from libcloud.compute.types import Provider
+ >>> from libcloud.compute.providers import get_driver
+ >>> from libcloud.common.dimensiondata import DimensionDataIpAddress
+ >>> import libcloud.security
+ >>>
+ >>> # Get dimension data driver
+ >>> libcloud.security.VERIFY_SSL_CERT = True
+ >>> cls = get_driver(Provider.DIMENSIONDATA)
+ >>> driver = cls('myusername','mypassword', region='dd-au')
+ >>>
+ >>> # Get location
+ >>> location = driver.ex_get_location_by_id(id='AU9')
+ >>>
+ >>> # Get network domain by location
+ >>> networkDomainName = "Baas QA"
+ >>> network_domains = driver.ex_list_network_domains(location=location)
+ >>> my_network_domain = [d for d in network_domains if d.name ==
+ networkDomainName][0]
+ >>>
+ >>> # IP Address collection
+ >>> ipAddress_1 = DimensionDataIpAddress(begin='190.2.2.100')
+ >>> ipAddress_2 = DimensionDataIpAddress(begin='190.2.2.106',
+ end='190.2.2.108')
+ >>> ipAddress_3 = DimensionDataIpAddress(begin='190.2.2.0',
+ prefix_size='24')
+ >>> ip_address_collection = {ipAddress_1, ipAddress_2, ipAddress_3}
+ >>>
+ >>> # Create IPAddressList
+ >>> result = driver.ex_create_ip_address_list(
+ >>> ex_network_domain=my_network_domain,
+ >>> name='My_IP_AddressList_2',
+ >>> ip_version='IPV4',
+ >>> description='Test only',
+ >>> ip_address_collection=ip_address_collection,
+ >>> child_ip_address_list='08468e26-eeb3-4c3d-8ff2-5351fa6d8a04'
+ >>> )
+ >>>
+ >>> pprint(result)
+
+
:param ex_network_domain: The network domain or network domain ID
:type ex_network_domain: :class:`DimensionDataNetworkDomain` or 'str'
@@ -2628,6 +2757,35 @@ class DimensionDataNodeDriver(NodeDriver):
"""
Edit IP Address List. IP Address list.
+ >>> from pprint import pprint
+ >>> from libcloud.compute.types import Provider
+ >>> from libcloud.compute.providers import get_driver
+ >>> from libcloud.common.dimensiondata import DimensionDataIpAddress
+ >>> import libcloud.security
+ >>>
+ >>> # Get dimension data driver
+ >>> libcloud.security.VERIFY_SSL_CERT = True
+ >>> cls = get_driver(Provider.DIMENSIONDATA)
+ >>> driver = cls('myusername','mypassword', region='dd-au')
+ >>>
+ >>> # IP Address collection
+ >>> ipAddress_1 = DimensionDataIpAddress(begin='190.2.2.100')
+ >>> ipAddress_2 = DimensionDataIpAddress(begin='190.2.2.106',
+ >>> end='190.2.2.108')
+ >>> ipAddress_3 = DimensionDataIpAddress(
+ >>> begin='190.2.2.0', prefix_size='24')
+ >>> ip_address_collection = {ipAddress_1, ipAddress_2, ipAddress_3}
+ >>>
+ >>> # Edit IP Address List
+ >>> ip_address_list_id = '5e7c323f-c885-4e4b-9a27-94c44217dbd3'
+ >>> result = driver.ex_edit_ip_address_list(
+ >>> ex_ip_address_list=ip_address_list_id,
+ >>> description="Edit Test",
+ >>> ip_address_collection=ip_address_collection,
+ >>> child_ip_address_lists=None
+ >>> )
+ >>> pprint(result)
+
:param ex_ip_address_list: (required) IpAddressList object or
IpAddressList ID
:type ex_ip_address_list: :class:'DimensionDataIpAddressList'
@@ -2700,8 +2858,22 @@ class DimensionDataNodeDriver(NodeDriver):
"""
Delete IP Address List by ID
+ >>> from pprint import pprint
+ >>> from libcloud.compute.types import Provider
+ >>> from libcloud.compute.providers import get_driver
+ >>> import libcloud.security
+ >>>
+ >>> # Get dimension data driver
+ >>> libcloud.security.VERIFY_SSL_CERT = True
+ >>> cls = get_driver(Provider.DIMENSIONDATA)
+ >>> driver = cls('myusername','mypassword', region='dd-au')
+ >>>
+ >>> ip_address_list_id = '5e7c323f-c885-4e4b-9a27-94c44217dbd3'
+ >>> result = driver.ex_delete_ip_address_list(ip_address_list_id)
+ >>> pprint(result)
+
:param ex_ip_address_list: IP Address List object or IP Address
- List ID (required)
+ List ID (required)
:type ex_ip_address_list: :class:'DimensionDataIpAddressList'
or ``str``
@@ -2721,9 +2893,34 @@ class DimensionDataNodeDriver(NodeDriver):
response_code = findtext(response, 'responseCode', TYPES_URN)
return response_code in ['IN_PROGRESS', 'OK']
- def ex_list_port_list(self, ex_network_domain):
- """
- List Port List by network domain ID specified
+ def ex_list_portlist(self, ex_network_domain):
+ """
+ List Portlist by network domain ID specified
+
+ >>> from pprint import pprint
+ >>> from libcloud.compute.types import Provider
+ >>> from libcloud.compute.providers import get_driver
+ >>> import libcloud.security
+ >>>
+ >>> # Get dimension data driver
+ >>> libcloud.security.VERIFY_SSL_CERT = True
+ >>> cls = get_driver(Provider.DIMENSIONDATA)
+ >>> driver = cls('myusername','mypassword', region='dd-au')
+ >>>
+ >>> # Get location
+ >>> location = driver.ex_get_location_by_id(id='AU9')
+ >>>
+ >>> # Get network domain by location
+ >>> networkDomainName = "Baas QA"
+ >>> network_domains = driver.ex_list_network_domains(location=location)
+ >>> my_network_domain = [d for d in network_domains if d.name ==
+ >>> networkDomainName][0]
+ >>>
+ >>> # List portlist
+ >>> portLists = driver.ex_list_portlist(
+ >>> ex_network_domain=my_network_domain)
+ >>> pprint(portLists)
+ >>>
:param ex_network_domain: The network domain or network domain ID
:type ex_network_domain: :class:`DimensionDataNetworkDomain` or 'str'
@@ -2737,28 +2934,77 @@ class DimensionDataNodeDriver(NodeDriver):
'network/portList', params=params).object
return self._to_port_lists(response)
- def ex_get_port_list(self, ex_port_list):
+ def ex_get_portlist(self, ex_portlist_id):
"""
Get Port List
- :param ex_port_list: The ex_port_list or ex_port_list ID
- :type ex_port_list: :class:`DimensionDataNetworkDomain` or 'str'
+ >>> from pprint import pprint
+ >>> from libcloud.compute.types import Provider
+ >>> from libcloud.compute.providers import get_driver
+ >>> import libcloud.security
+ >>>
+ >>> # Get dimension data driver
+ >>> libcloud.security.VERIFY_SSL_CERT = True
+ >>> cls = get_driver(Provider.DIMENSIONDATA)
+ >>> driver = cls('myusername','mypassword', region='dd-au')
+ >>>
+ >>> # Get specific portlist by ID
+ >>> portlist_id = '27dd8c66-80ff-496b-9f54-2a3da2fe679e'
+ >>> portlist = driver.ex_get_portlist(portlist_id)
+ >>> pprint(portlist)
+
+ :param ex_portlist_id: The ex_port_list or ex_port_list ID
+ :type ex_portlist_id: :class:`DimensionDataNetworkDomain` or 'str'
:return: DimensionDataPortList object
:rtype: :class:`DimensionDataPort`
"""
- url_path = ('network/portList/%s' % self._port_list_to_port_list_id(
- ex_port_list))
+ url_path = ('network/portList/%s' % ex_portlist_id)
response = self.connection.request_with_orgId_api_2(
url_path).object
return self._to_port_list(response)
- def ex_create_port_list(self, ex_network_domain, name, description,
- port_collection, child_port_list_lists=None):
+ def ex_create_portlist(self, ex_network_domain, name, description,
+ port_collection, child_portlist_list=None):
"""
Create Port List.
+ >>> from pprint import pprint
+ >>> from libcloud.compute.types import Provider
+ >>> from libcloud.compute.providers import get_driver
+ >>> from libcloud.common.dimensiondata import DimensionDataPort
+ >>> import libcloud.security
+ >>>
+ >>> # Get dimension data driver
+ >>> libcloud.security.VERIFY_SSL_CERT = True
+ >>> cls = get_driver(Provider.DIMENSIONDATA)
+ >>> driver = cls('myusername','mypassword', region='dd-au')
+ >>>
+ >>> # Get location
+ >>> location = driver.ex_get_location_by_id(id='AU9')
+ >>>
+ >>> # Get network domain by location
+ >>> networkDomainName = "Baas QA"
+ >>> network_domains = driver.ex_list_network_domains(location=location)
+ >>> my_network_domain = [d for d in network_domains if d.name ==
+ networkDomainName][0]
+ >>>
+ >>> # Port Collection
+ >>> port_1 = DimensionDataPort(begin='1000')
+ >>> port_2 = DimensionDataPort(begin='1001', end='1003')
+ >>> port_collection = {port_1, port_2}
+ >>>
+ >>> # Create Port List
+ >>> new_portlist = driver.ex_create_portlist(
+ >>> ex_network_domain=my_network_domain,
+ >>> name='MyPortListX',
+ >>> description="Test only",
+ >>> port_collection=port_collection,
+ >>> child_portlist_list={'a9cd4984-6ff5-4f93-89ff-8618ab642bb9'}
+ >>> )
+ >>> pprint(new_portlist)
+
:param ex_network_domain: (required) The network domain in
which to create PortList. Provide
networkdomain object or its id.
@@ -2773,9 +3019,9 @@ class DimensionDataNodeDriver(NodeDriver):
:param port_collection: List of Port Address
:type port_collection: :``str``
- :param child_port_list_lists: Child Port List to be included in
- this Port List
- :type child_port_list_lists: :``str`` or ''list of
+ :param child_portlist_list: List of Child Portlist to be
+ included in this Port List
+ :type child_portlist_list: :``str`` or ''list of
:class:'DimensionDataChildPortList'
:return: result of operation
@@ -2807,8 +3053,8 @@ class DimensionDataNodeDriver(NodeDriver):
if port.end:
p.set('end', port.end)
- if child_port_list_lists is not None:
- for child in child_port_list_lists:
+ if child_portlist_list is not None:
+ for child in child_portlist_list:
ET.SubElement(
new_port_list,
'childPortListId'
@@ -2822,24 +3068,52 @@ class DimensionDataNodeDriver(NodeDriver):
response_code = findtext(response, 'responseCode', TYPES_URN)
return response_code in ['IN_PROGRESS', 'OK']
- def ex_edit_port_list(self, ex_port_list, description,
- port_collection, child_port_list_lists=None):
+ def ex_edit_portlist(self, ex_portlist, description,
+ port_collection, child_portlist_list=None):
"""
Edit Port List.
- :param ex_port_list: Port List to be edited
+ >>> from pprint import pprint
+ >>> from libcloud.compute.types import Provider
+ >>> from libcloud.compute.providers import get_driver
+ >>> from libcloud.common.dimensiondata import DimensionDataPort
+ >>> import libcloud.security
+ >>>
+ >>> # Get dimension data driver
+ >>> libcloud.security.VERIFY_SSL_CERT = True
+ >>> cls = get_driver(Provider.DIMENSIONDATA)
+ >>> driver = cls('myusername','mypassword', region='dd-au')
+ >>>
+ >>> # Port Collection
+ >>> port_1 = DimensionDataPort(begin='4200')
+ >>> port_2 = DimensionDataPort(begin='4201', end='4210')
+ >>> port_collection = {port_1, port_2}
+ >>>
+ >>> # Edit Port List
+ >>> editPortlist = driver.ex_get_portlist(
+ '27dd8c66-80ff-496b-9f54-2a3da2fe679e')
+ >>>
+ >>> result = driver.ex_edit_portlist(
+ >>> ex_portlist=editPortlist.id,
+ >>> description="Make Changes in portlist",
+ >>> port_collection=port_collection,
+ >>> child_portlist_list={'a9cd4984-6ff5-4f93-89ff-8618ab642bb9'}
+ >>> )
+ >>> pprint(result)
+
+ :param ex_portlist: Port List to be edited
(required)
- :type ex_port_list: :``str`` or :class:'DimensionDataPortList'
+ :type ex_portlist: :``str`` or :class:'DimensionDataPortList'
:param description: Port List Description
:type description: :``str``
- :param port_collection: List of Port Address
+ :param port_collection: List of Ports
:type port_collection: :``str``
- :param child_port_list_lists: Child Port List to be included in
+ :param child_portlist_list: Child PortList to be included in
this IP Address List
- :type child_port_list_lists: :``list`` of
+ :type child_portlist_list: :``list`` of
:class'DimensionDataChildPortList'
or ''str''
@@ -2850,7 +3124,7 @@ class DimensionDataNodeDriver(NodeDriver):
existing_port_address_list = ET.Element(
'editPortList',
{
- "id": self._port_list_to_port_list_id(ex_port_list),
+ "id": self._port_list_to_port_list_id(ex_portlist),
'xmlns': TYPES_URN,
'xmlns:xsi': "http://www.w3.org/2001/XMLSchema-instance"
})
@@ -2870,8 +3144,8 @@ class DimensionDataNodeDriver(NodeDriver):
if port.end:
p.set('end', port.end)
- if child_port_list_lists is not None:
- for child in child_port_list_lists:
+ if child_portlist_list is not None:
+ for child in child_portlist_list:
ET.SubElement(
existing_port_address_list,
'childPortListId'
@@ -2891,11 +3165,27 @@ class DimensionDataNodeDriver(NodeDriver):
response_code = findtext(response, 'responseCode', TYPES_URN)
return response_code in ['IN_PROGRESS', 'OK']
- def ex_delete_port_list(self, ex_port_list):
+ def ex_delete_portlist(self, ex_portlist):
"""
Delete Port List
- :param ex_port_list: Port List to be deleted
- :type ex_port_list: :``str`` or :class:'DimensionDataPortList'
+
+ >>> from pprint import pprint
+ >>> from libcloud.compute.types import Provider
+ >>> from libcloud.compute.providers import get_driver
+ >>> import libcloud.security
+ >>>
+ >>> # Get dimension data driver
+ >>> libcloud.security.VERIFY_SSL_CERT = True
+ >>> cls = get_driver(Provider.DIMENSIONDATA)
+ >>> driver = cls('myusername','mypassword', region='dd-au')
+ >>>
+ >>> # Delete Port List
+ >>> portlist_id = '157531ce-77d4-493c-866b-d3d3fc4a912a'
+ >>> response = driver.ex_delete_portlist(portlist_id)
+ >>> pprint(response)
+
+ :param ex_portlist: Port List to be deleted
+ :type ex_portlist: :``str`` or :class:'DimensionDataPortList'
:rtype: ``bool``
"""
@@ -2903,7 +3193,7 @@ class DimensionDataNodeDriver(NodeDriver):
delete_port_list = ET.Element(
'deletePortList',
{'xmlns': TYPES_URN,
- 'id': self._port_list_to_port_list_id(ex_port_list)})
+ 'id': self._port_list_to_port_list_id(ex_portlist)})
response = self.connection.request_with_orgId_api_2(
'network/deletePortList',
http://git-wip-us.apache.org/repos/asf/libcloud/blob/9e3c7da2/libcloud/test/compute/test_dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_dimensiondata.py b/libcloud/test/compute/test_dimensiondata.py
index a7bfa92..941784e 100644
--- a/libcloud/test/compute/test_dimensiondata.py
+++ b/libcloud/test/compute/test_dimensiondata.py
@@ -1541,56 +1541,56 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
ex_ip_address_list='111ef78-4059-4bc1-b433-3f6ad698d111')
self.assertTrue(success)
- def test_ex_list_port_lists(self):
+ def test_ex_list_portlist(self):
net_domain = self.driver.ex_list_network_domains()[0]
- port_list = self.driver.ex_list_port_list(
+ portlist = self.driver.ex_list_portlist(
ex_network_domain=net_domain)
- self.assertTrue(isinstance(port_list, list))
- self.assertEqual(len(port_list), 3)
- self.assertTrue(isinstance(port_list[0].name, str))
- self.assertTrue(isinstance(port_list[0].description, str))
- self.assertTrue(isinstance(port_list[0].state, str))
- self.assertTrue(isinstance(port_list[0].port_collection, list))
- self.assertTrue(isinstance(port_list[0].port_collection[0].begin, str))
- self.assertTrue(isinstance(port_list[0].port_collection[0].end, str))
- self.assertTrue(isinstance(port_list[0].child_port_list_lists, list))
- self.assertTrue(isinstance(port_list[0].child_port_list_lists[0].id,
+ self.assertTrue(isinstance(portlist, list))
+ self.assertEqual(len(portlist), 3)
+ self.assertTrue(isinstance(portlist[0].name, str))
+ self.assertTrue(isinstance(portlist[0].description, str))
+ self.assertTrue(isinstance(portlist[0].state, str))
+ self.assertTrue(isinstance(portlist[0].port_collection, list))
+ self.assertTrue(isinstance(portlist[0].port_collection[0].begin, str))
+ self.assertTrue(isinstance(portlist[0].port_collection[0].end, str))
+ self.assertTrue(isinstance(portlist[0].child_portlist_list, list))
+ self.assertTrue(isinstance(portlist[0].child_portlist_list[0].id,
str))
- self.assertTrue(isinstance(port_list[0].child_port_list_lists[0].name,
+ self.assertTrue(isinstance(portlist[0].child_portlist_list[0].name,
str))
- self.assertTrue(isinstance(port_list[0].create_time, str))
+ self.assertTrue(isinstance(portlist[0].create_time, str))
def test_ex_get_port_list(self):
net_domain = self.driver.ex_list_network_domains()[0]
- port_list = self.driver.ex_list_port_list(
- ex_network_domain=net_domain)[0]
-
- port_list = self.driver.ex_get_port_list(
- ex_port_list=port_list)
- self.assertTrue(isinstance(port_list, DimensionDataPortList))
-
- self.assertTrue(isinstance(port_list.name, str))
- self.assertTrue(isinstance(port_list.description, str))
- self.assertTrue(isinstance(port_list.state, str))
- self.assertTrue(isinstance(port_list.port_collection, list))
- self.assertTrue(isinstance(port_list.port_collection[0].begin, str))
- self.assertTrue(isinstance(port_list.port_collection[0].end, str))
- self.assertTrue(isinstance(port_list.child_port_list_lists, list))
- self.assertTrue(isinstance(port_list.child_port_list_lists[0].id,
+ portlist_id = self.driver.ex_list_portlist(
+ ex_network_domain=net_domain)[0].id
+
+ portlist = self.driver.ex_get_portlist(
+ ex_portlist_id=portlist_id)
+ self.assertTrue(isinstance(portlist, DimensionDataPortList))
+
+ self.assertTrue(isinstance(portlist.name, str))
+ self.assertTrue(isinstance(portlist.description, str))
+ self.assertTrue(isinstance(portlist.state, str))
+ self.assertTrue(isinstance(portlist.port_collection, list))
+ self.assertTrue(isinstance(portlist.port_collection[0].begin, str))
+ self.assertTrue(isinstance(portlist.port_collection[0].end, str))
+ self.assertTrue(isinstance(portlist.child_portlist_list, list))
+ self.assertTrue(isinstance(portlist.child_portlist_list[0].id,
str))
- self.assertTrue(isinstance(port_list.child_port_list_lists[0].name,
+ self.assertTrue(isinstance(portlist.child_portlist_list[0].name,
str))
- self.assertTrue(isinstance(port_list.create_time, str))
+ self.assertTrue(isinstance(portlist.create_time, str))
- def test_ex_get_port_list_STR(self):
+ def test_ex_get_portlist_STR(self):
net_domain = self.driver.ex_list_network_domains()[0]
- port_list = self.driver.ex_list_port_list(
+ portlist = self.driver.ex_list_portlist(
ex_network_domain=net_domain)[0]
- port_list = self.driver.ex_get_port_list(
- ex_port_list=port_list.id)
+ port_list = self.driver.ex_get_portlist(
+ ex_portlist_id=portlist.id)
self.assertTrue(isinstance(port_list, DimensionDataPortList))
self.assertTrue(isinstance(port_list.name, str))
@@ -1599,14 +1599,14 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
self.assertTrue(isinstance(port_list.port_collection, list))
self.assertTrue(isinstance(port_list.port_collection[0].begin, str))
self.assertTrue(isinstance(port_list.port_collection[0].end, str))
- self.assertTrue(isinstance(port_list.child_port_list_lists, list))
- self.assertTrue(isinstance(port_list.child_port_list_lists[0].id,
+ self.assertTrue(isinstance(port_list.child_portlist_list, list))
+ self.assertTrue(isinstance(port_list.child_portlist_list[0].id,
str))
- self.assertTrue(isinstance(port_list.child_port_list_lists[0].name,
+ self.assertTrue(isinstance(port_list.child_portlist_list[0].name,
str))
self.assertTrue(isinstance(port_list.create_time, str))
- def test_ex_create_port_list_NOCHILDPORTLIST(self):
+ def test_ex_create_portlist_NOCHILDPORTLIST(self):
name = "Test_Port_List"
description = "Test Description"
@@ -1618,7 +1618,7 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
port_collection = {port_1, port_2}
# Create IP Address List
- success = self.driver.ex_create_port_list(
+ success = self.driver.ex_create_portlist(
ex_network_domain=net_domain, name=name,
description=description,
port_collection=port_collection
@@ -1626,7 +1626,7 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
self.assertTrue(success)
- def test_ex_create_port_list(self):
+ def test_ex_create_portlist(self):
name = "Test_Port_List"
description = "Test Description"
@@ -1644,16 +1644,16 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
child_ports = {child_port_1, child_port_2}
# Create IP Address List
- success = self.driver.ex_create_port_list(
+ success = self.driver.ex_create_portlist(
ex_network_domain=net_domain, name=name,
description=description,
port_collection=port_collection,
- child_port_list_lists=child_ports
+ child_portlist_list=child_ports
)
self.assertTrue(success)
- def test_ex_create_port_list_STR(self):
+ def test_ex_create_portlist_STR(self):
name = "Test_Port_List"
description = "Test Description"
@@ -1671,18 +1671,18 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
child_ports_ids = {child_port_1.id, child_port_2.id}
# Create IP Address List
- success = self.driver.ex_create_port_list(
+ success = self.driver.ex_create_portlist(
ex_network_domain=net_domain.id, name=name,
description=description,
port_collection=port_collection,
- child_port_list_lists=child_ports_ids
+ child_portlist_list=child_ports_ids
)
self.assertTrue(success)
- def test_ex_edit_port_list(self):
+ def test_ex_edit_portlist(self):
net_domain = self.driver.ex_list_network_domains()[0]
- port_list = self.driver.ex_list_port_list(net_domain)[0]
+ portlist = self.driver.ex_list_portlist(net_domain)[0]
description = "Test Description"
@@ -1698,16 +1698,16 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
child_ports = {child_port_1.id, child_port_2.id}
# Create IP Address List
- success = self.driver.ex_edit_port_list(
- ex_port_list=port_list,
+ success = self.driver.ex_edit_portlist(
+ ex_portlist=portlist,
description=description,
port_collection=port_collection,
- child_port_list_lists=child_ports
+ child_portlist_list=child_ports
)
self.assertTrue(success)
- def test_ex_edit_port_list_STR(self):
- port_list_id = "484174a2-ae74-4658-9e56-50fc90e086cf"
+ def test_ex_edit_portlist_STR(self):
+ portlist_id = "484174a2-ae74-4658-9e56-50fc90e086cf"
description = "Test Description"
port_1 = DimensionDataPort(begin='8080')
@@ -1722,28 +1722,28 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
child_ports_ids = {child_port_1.id, child_port_2.id}
# Create IP Address List
- success = self.driver.ex_edit_port_list(
- ex_port_list=port_list_id,
+ success = self.driver.ex_edit_portlist(
+ ex_portlist=portlist_id,
description=description,
port_collection=port_collection,
- child_port_list_lists=child_ports_ids
+ child_portlist_list=child_ports_ids
)
self.assertTrue(success)
- def test_ex_delete_port_list(self):
+ def test_ex_delete_portlist(self):
net_domain = self.driver.ex_list_network_domains()[0]
- port_list = self.driver.ex_list_port_list(net_domain)[0]
+ portlist = self.driver.ex_list_portlist(net_domain)[0]
- success = self.driver.ex_delete_port_list(
- ex_port_list=port_list)
+ success = self.driver.ex_delete_portlist(
+ ex_portlist=portlist)
self.assertTrue(success)
- def test_ex_delete_port_list_STR(self):
+ def test_ex_delete_portlist_STR(self):
net_domain = self.driver.ex_list_network_domains()[0]
- port_list = self.driver.ex_list_port_list(net_domain)[0]
+ portlist = self.driver.ex_list_portlist(net_domain)[0]
- success = self.driver.ex_delete_port_list(
- ex_port_list=port_list.id)
+ success = self.driver.ex_delete_portlist(
+ ex_portlist=portlist.id)
self.assertTrue(success)
[11/13] libcloud git commit: fix syntax error of list. Using square
bracket instead of curly braces
Posted by an...@apache.org.
fix syntax error of list. Using square bracket instead of curly braces
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/a32546f9
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/a32546f9
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/a32546f9
Branch: refs/heads/trunk
Commit: a32546f94ba3e8e4e8f505617a8826b2a5fc63d8
Parents: 9e3c7da
Author: Samuel Chong <sa...@gmail.com>
Authored: Mon Oct 10 10:31:14 2016 +1100
Committer: Samuel Chong <sa...@gmail.com>
Committed: Mon Oct 10 10:31:14 2016 +1100
----------------------------------------------------------------------
libcloud/compute/drivers/dimensiondata.py | 10 ++++----
libcloud/test/compute/test_dimensiondata.py | 30 ++++++++++++------------
2 files changed, 20 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/a32546f9/libcloud/compute/drivers/dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/dimensiondata.py b/libcloud/compute/drivers/dimensiondata.py
index 08343ad..8900086 100644
--- a/libcloud/compute/drivers/dimensiondata.py
+++ b/libcloud/compute/drivers/dimensiondata.py
@@ -1489,7 +1489,7 @@ class DimensionDataNodeDriver(NodeDriver):
>>> # Get dimension data driver
>>> libcloud.security.VERIFY_SSL_CERT = True
>>> cls = get_driver(Provider.DIMENSIONDATA)
- >>> # driver = cls('myusername','mypassword', region='dd-au')
+ >>> driver = cls('myusername','mypassword', region='dd-au')
>>>
>>> # Get location
>>> location = driver.ex_get_location_by_id(id='AU9')
@@ -2650,7 +2650,7 @@ class DimensionDataNodeDriver(NodeDriver):
end='190.2.2.108')
>>> ipAddress_3 = DimensionDataIpAddress(begin='190.2.2.0',
prefix_size='24')
- >>> ip_address_collection = {ipAddress_1, ipAddress_2, ipAddress_3}
+ >>> ip_address_collection = [ipAddress_1, ipAddress_2, ipAddress_3]
>>>
>>> # Create IPAddressList
>>> result = driver.ex_create_ip_address_list(
@@ -2774,7 +2774,7 @@ class DimensionDataNodeDriver(NodeDriver):
>>> end='190.2.2.108')
>>> ipAddress_3 = DimensionDataIpAddress(
>>> begin='190.2.2.0', prefix_size='24')
- >>> ip_address_collection = {ipAddress_1, ipAddress_2, ipAddress_3}
+ >>> ip_address_collection = [ipAddress_1, ipAddress_2, ipAddress_3]
>>>
>>> # Edit IP Address List
>>> ip_address_list_id = '5e7c323f-c885-4e4b-9a27-94c44217dbd3'
@@ -2993,7 +2993,7 @@ class DimensionDataNodeDriver(NodeDriver):
>>> # Port Collection
>>> port_1 = DimensionDataPort(begin='1000')
>>> port_2 = DimensionDataPort(begin='1001', end='1003')
- >>> port_collection = {port_1, port_2}
+ >>> port_collection = [port_1, port_2]
>>>
>>> # Create Port List
>>> new_portlist = driver.ex_create_portlist(
@@ -3087,7 +3087,7 @@ class DimensionDataNodeDriver(NodeDriver):
>>> # Port Collection
>>> port_1 = DimensionDataPort(begin='4200')
>>> port_2 = DimensionDataPort(begin='4201', end='4210')
- >>> port_collection = {port_1, port_2}
+ >>> port_collection = [port_1, port_2]
>>>
>>> # Edit Port List
>>> editPortlist = driver.ex_get_portlist(
http://git-wip-us.apache.org/repos/asf/libcloud/blob/a32546f9/libcloud/test/compute/test_dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_dimensiondata.py b/libcloud/test/compute/test_dimensiondata.py
index 941784e..36e9a63 100644
--- a/libcloud/test/compute/test_dimensiondata.py
+++ b/libcloud/test/compute/test_dimensiondata.py
@@ -1438,8 +1438,8 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
end='190.2.2.108')
ip_address_3 = DimensionDataIpAddress(begin='190.2.2.0',
prefix_size='24')
- ip_address_collection = {ip_address_1, ip_address_2,
- ip_address_3}
+ ip_address_collection = [ip_address_1, ip_address_2,
+ ip_address_3]
# Create IP Address List
success = self.driver.ex_create_ip_address_list(
@@ -1461,8 +1461,8 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
end='190.2.2.108')
ip_address_3 = DimensionDataIpAddress(begin='190.2.2.0',
prefix_size='24')
- ip_address_collection = {ip_address_1, ip_address_2,
- ip_address_3}
+ ip_address_collection = [ip_address_1, ip_address_2,
+ ip_address_3]
# Create IP Address List
success = self.driver.ex_create_ip_address_list(
@@ -1475,7 +1475,7 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
def test_ex_edit_ip_address_list(self):
ip_address_1 = DimensionDataIpAddress(begin='190.2.2.111')
- ip_address_collection = {ip_address_1}
+ ip_address_collection = [ip_address_1]
child_ip_address_list = DimensionDataChildIpAddressList(
id='2221ef78-4059-4bc1-b433-3f6ad698dc41',
@@ -1502,7 +1502,7 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
def test_ex_edit_ip_address_list_STR(self):
ip_address_1 = DimensionDataIpAddress(begin='190.2.2.111')
- ip_address_collection = {ip_address_1}
+ ip_address_collection = [ip_address_1]
child_ip_address_list = DimensionDataChildIpAddressList(
id='2221ef78-4059-4bc1-b433-3f6ad698dc41',
@@ -1615,7 +1615,7 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
port_1 = DimensionDataPort(begin='8080')
port_2 = DimensionDataIpAddress(begin='8899',
end='9023')
- port_collection = {port_1, port_2}
+ port_collection = [port_1, port_2]
# Create IP Address List
success = self.driver.ex_create_portlist(
@@ -1635,13 +1635,13 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
port_1 = DimensionDataPort(begin='8080')
port_2 = DimensionDataIpAddress(begin='8899',
end='9023')
- port_collection = {port_1, port_2}
+ port_collection = [port_1, port_2]
child_port_1 = DimensionDataChildPortList(
id="333174a2-ae74-4658-9e56-50fc90e086cf", name='test port 1')
child_port_2 = DimensionDataChildPortList(
id="311174a2-ae74-4658-9e56-50fc90e04444", name='test port 2')
- child_ports = {child_port_1, child_port_2}
+ child_ports = [child_port_1, child_port_2]
# Create IP Address List
success = self.driver.ex_create_portlist(
@@ -1662,13 +1662,13 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
port_1 = DimensionDataPort(begin='8080')
port_2 = DimensionDataIpAddress(begin='8899',
end='9023')
- port_collection = {port_1, port_2}
+ port_collection = [port_1, port_2]
child_port_1 = DimensionDataChildPortList(
id="333174a2-ae74-4658-9e56-50fc90e086cf", name='test port 1')
child_port_2 = DimensionDataChildPortList(
id="311174a2-ae74-4658-9e56-50fc90e04444", name='test port 2')
- child_ports_ids = {child_port_1.id, child_port_2.id}
+ child_ports_ids = [child_port_1.id, child_port_2.id]
# Create IP Address List
success = self.driver.ex_create_portlist(
@@ -1689,13 +1689,13 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
port_1 = DimensionDataPort(begin='8080')
port_2 = DimensionDataIpAddress(begin='8899',
end='9023')
- port_collection = {port_1, port_2}
+ port_collection = [port_1, port_2]
child_port_1 = DimensionDataChildPortList(
id="333174a2-ae74-4658-9e56-50fc90e086cf", name='test port 1')
child_port_2 = DimensionDataChildPortList(
id="311174a2-ae74-4658-9e56-50fc90e04444", name='test port 2')
- child_ports = {child_port_1.id, child_port_2.id}
+ child_ports = [child_port_1.id, child_port_2.id]
# Create IP Address List
success = self.driver.ex_edit_portlist(
@@ -1713,13 +1713,13 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
port_1 = DimensionDataPort(begin='8080')
port_2 = DimensionDataIpAddress(begin='8899',
end='9023')
- port_collection = {port_1, port_2}
+ port_collection = [port_1, port_2]
child_port_1 = DimensionDataChildPortList(
id="333174a2-ae74-4658-9e56-50fc90e086cf", name='test port 1')
child_port_2 = DimensionDataChildPortList(
id="311174a2-ae74-4658-9e56-50fc90e04444", name='test port 2')
- child_ports_ids = {child_port_1.id, child_port_2.id}
+ child_ports_ids = [child_port_1.id, child_port_2.id]
# Create IP Address List
success = self.driver.ex_edit_portlist(
[09/13] libcloud git commit: rename property name to
child_portlist_list
Posted by an...@apache.org.
rename property name to child_portlist_list
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/026c973e
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/026c973e
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/026c973e
Branch: refs/heads/trunk
Commit: 026c973e6f5114825c04c69128401f94e89434c5
Parents: 04c70e2
Author: Samuel Chong <sa...@gmail.com>
Authored: Thu Oct 6 16:54:54 2016 +1100
Committer: Samuel Chong <sa...@gmail.com>
Committed: Thu Oct 6 16:54:54 2016 +1100
----------------------------------------------------------------------
libcloud/common/dimensiondata.py | 13 +++++++------
libcloud/compute/drivers/dimensiondata.py | 6 +++---
2 files changed, 10 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/026c973e/libcloud/common/dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/common/dimensiondata.py b/libcloud/common/dimensiondata.py
index 6633e64..5f618f9 100644
--- a/libcloud/common/dimensiondata.py
+++ b/libcloud/common/dimensiondata.py
@@ -1633,7 +1633,7 @@ class DimensionDataPortList(object):
"""
def __init__(self, id, name, description, port_collection,
- child_port_list_lists,
+ child_portlist_list,
state, create_time):
""""
Initialize an instance of :class:`DimensionDataPortList`
@@ -1650,8 +1650,8 @@ class DimensionDataPortList(object):
:param port_collection: Collection of DimensionDataPort
:type port_collection: ``List``
- :param child_port_list_lists: Collection of DimensionDataChildPort
- :type child_port_list_lists: ``List``
+ :param child_portlist_list: Collection of DimensionDataChildPort
+ :type child_portlist_list: ``List``
:param state: Port list state
:type state: ``str``
@@ -1663,16 +1663,17 @@ class DimensionDataPortList(object):
self.name = name
self.description = description
self.port_collection = port_collection
- self.child_port_list_lists = child_port_list_lists
+ self.child_portlist_list = child_portlist_list
self.state = state
self.create_time = create_time
def __repr__(self):
return (
"<DimensionDataPortList: id=%s, name=%s, description=%s, "
- "port_collection=%s, child_port_list=%s, state=%s, create_time=%s>"
+ "port_collection=%s, child_portlist_list=%s, state=%s, "
+ "create_time=%s>"
% (self.id, self.name, self.description,
- self.port_collection, self.child_port_list, self.state,
+ self.port_collection, self.child_portlist_list, self.state,
self.create_time))
http://git-wip-us.apache.org/repos/asf/libcloud/blob/026c973e/libcloud/compute/drivers/dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/dimensiondata.py b/libcloud/compute/drivers/dimensiondata.py
index 52283b2..a76fcdc 100644
--- a/libcloud/compute/drivers/dimensiondata.py
+++ b/libcloud/compute/drivers/dimensiondata.py
@@ -3416,9 +3416,9 @@ class DimensionDataNodeDriver(NodeDriver):
for port in findall(element, 'port', TYPES_URN):
ports.append(self._to_port(element=port))
- child_port_list_lists = []
+ child_portlist_list = []
for child in findall(element, 'childPortList', TYPES_URN):
- child_port_list_lists.append(
+ child_portlist_list.append(
self._to_child_port_list(element=child))
return DimensionDataPortList(
@@ -3426,7 +3426,7 @@ class DimensionDataNodeDriver(NodeDriver):
name=findtext(element, 'name', TYPES_URN),
description=findtext(element, 'description', TYPES_URN),
port_collection=ports,
- child_port_list_lists=child_port_list_lists,
+ child_portlist_list=child_portlist_list,
state=findtext(element, 'state', TYPES_URN),
create_time=findtext(element, 'createTime', TYPES_URN)
)
[07/13] libcloud git commit: Removed unused import
Posted by an...@apache.org.
Removed unused import
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/009f2266
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/009f2266
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/009f2266
Branch: refs/heads/trunk
Commit: 009f2266d4d4d1dff1bd6d83463b37757796f787
Parents: 2eb1b4a
Author: Samuel Chong <sa...@gmail.com>
Authored: Thu Oct 6 11:46:16 2016 +1100
Committer: Samuel Chong <sa...@gmail.com>
Committed: Thu Oct 6 11:46:16 2016 +1100
----------------------------------------------------------------------
libcloud/compute/drivers/dimensiondata.py | 1 -
1 file changed, 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/009f2266/libcloud/compute/drivers/dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/dimensiondata.py b/libcloud/compute/drivers/dimensiondata.py
index 89f7c66..52283b2 100644
--- a/libcloud/compute/drivers/dimensiondata.py
+++ b/libcloud/compute/drivers/dimensiondata.py
@@ -44,7 +44,6 @@ from libcloud.common.dimensiondata import DimensionDataIpAddress
from libcloud.common.dimensiondata import DimensionDataPortList
from libcloud.common.dimensiondata import DimensionDataPort
from libcloud.common.dimensiondata import DimensionDataChildPortList
-from libcloud.common.dimensiondata import DimensionDataNic
from libcloud.common.dimensiondata import NetworkDomainServicePlan
from libcloud.common.dimensiondata import DimensionDataTagKey
from libcloud.common.dimensiondata import DimensionDataTag
[13/13] libcloud git commit: Merge branch 'libcloud893' into trunk
Closes #893
Posted by an...@apache.org.
Merge branch 'libcloud893' into trunk
Closes #893
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/4d11ec27
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/4d11ec27
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/4d11ec27
Branch: refs/heads/trunk
Commit: 4d11ec272957606d07c13171b1f73493b26b8736
Parents: 9ebc0b4 487e0b7
Author: Anthony Shaw <an...@apache.org>
Authored: Mon Oct 10 10:58:55 2016 +1100
Committer: Anthony Shaw <an...@apache.org>
Committed: Mon Oct 10 10:58:55 2016 +1100
----------------------------------------------------------------------
libcloud/common/dimensiondata.py | 241 +++++
libcloud/compute/drivers/dimensiondata.py | 929 +++++++++++++++++++
.../dimensiondata/ip_address_list_create.xml | 9 +
.../dimensiondata/ip_address_list_delete.xml | 10 +
.../dimensiondata/ip_address_list_edit.xml | 10 +
.../fixtures/dimensiondata/ip_address_lists.xml | 46 +
.../ip_address_lists_FILTERBYNAME.xml | 14 +
.../fixtures/dimensiondata/port_list_create.xml | 9 +
.../fixtures/dimensiondata/port_list_delete.xml | 10 +
.../fixtures/dimensiondata/port_list_edit.xml | 8 +
.../fixtures/dimensiondata/port_list_get.xml | 15 +
.../fixtures/dimensiondata/port_list_lists.xml | 38 +
libcloud/test/compute/test_dimensiondata.py | 753 ++++++++++++++-
13 files changed, 2091 insertions(+), 1 deletion(-)
----------------------------------------------------------------------