pep 8ify
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/d776d646 Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/d776d646 Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/d776d646 Branch: refs/heads/trunk Commit: d776d646d68e8e084acbbf706addf0a5535b4313 Parents: d4ae1ab Author: mitch <[email protected]> Authored: Tue Oct 2 17:28:42 2018 -0400 Committer: mitch <[email protected]> Committed: Tue Oct 2 17:28:42 2018 -0400 ---------------------------------------------------------------------- libcloud/common/nttcis.py | 184 +++----------- libcloud/compute/drivers/nttcis.py | 342 +++++++++++++++++---------- libcloud/loadbalancer/drivers/nttcis.py | 66 +++--- tests/lib_create_test.py | 19 ++ tests/lib_list_test.py | 4 - 5 files changed, 305 insertions(+), 310 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/libcloud/blob/d776d646/libcloud/common/nttcis.py ---------------------------------------------------------------------- diff --git a/libcloud/common/nttcis.py b/libcloud/common/nttcis.py index d58e2d3..82822e5 100644 --- a/libcloud/common/nttcis.py +++ b/libcloud/common/nttcis.py @@ -346,12 +346,12 @@ class NttCisResponse(XmlResponse): if message is not None: break raise NttCisAPIException(code=code, - msg=message, - driver=self.connection.driver) + msg=message, + driver=self.connection.driver) if self.status is not httplib.OK: raise NttCisAPIException(code=self.status, - msg=body, - driver=self.connection.driver) + msg=body, + driver=self.connection.driver) return self.body @@ -416,8 +416,8 @@ class NttCisConnection(ConnectionUserAndKey): .format(self.active_api_version) raise NttCisAPIException(code=None, - msg=msg, - driver=self.driver) + msg=msg, + driver=self.driver) elif LooseVersion(api_version) > LooseVersion( self.latest_api_version): msg = 'Unsupported API Version. The version specified is ' \ @@ -426,8 +426,8 @@ class NttCisConnection(ConnectionUserAndKey): .format(self.active_api_version) raise NttCisAPIException(code=None, - msg=msg, - driver=self.driver) + msg=msg, + driver=self.driver) else: # Overwrite default version using the version user specified @@ -486,7 +486,6 @@ class NttCisConnection(ConnectionUserAndKey): params=params, data=data, method=method, headers=headers) - def paginated_request_with_orgId_api_2(self, action, params=None, data='', headers=None, method='GET', page_size=250): @@ -597,7 +596,8 @@ class NttCisConnection(ConnectionUserAndKey): if isinstance(result, Node): object_state = result.state else: - # BUG: need to use result.status.lower() or will never match if client uses lower case + # BUG: need to use result.status.lower() or + # will never match if client uses lower case object_state = result.status.lower() if object_state is state or object_state in state: @@ -607,8 +607,8 @@ class NttCisConnection(ConnectionUserAndKey): msg = 'Status check for object %s timed out' % (result) raise NttCisAPIException(code=object_state, - msg=msg, - driver=self.driver) + msg=msg, + driver=self.driver) def _get_orgId(self): """ @@ -812,7 +812,8 @@ class NttCisScsiController(object): """ A class that represents the disk on a server """ - def __init__(self, id: str=None, adapter_type: str=None, bus_number: str=None, state: str=None): + def __init__(self, id: str=None, adapter_type: str=None, + bus_number: str=None, state: str=None): """ Instantiate a new :class:`DimensionDataServerDisk` @@ -875,8 +876,9 @@ class NttCisSnapshot(object): """ NTTCIS Class representing server snapshots """ - def __init__(self, server_id, service_plan, id=None, window_id=None, start_time=None, - state=None, end_time=None, type=None, expiry_time=None, action=None): + def __init__(self, server_id, service_plan, id=None, window_id=None, + start_time=None, state=None, end_time=None, + type=None, expiry_time=None, action=None): self.server_id = server_id self.service_plan = service_plan self.id = id @@ -894,15 +896,16 @@ class NttCisSnapshot(object): 'id=%s, start_time=%s, ' 'end_time=%s, self.type=%s, ' 'self.expiry_timne=%s, self.state=%s>') - % (self.id, self.start_time, self.end_time, self.type, self.expiry_time, self.state)) + % (self.id, self.start_time, self.end_time, + self.type, self.expiry_time, self.state)) class NttCisReservedIpAddress(object): """ NTTCIS Rerverse IPv4 address """ - - def __init__(self, datacenter_id, exclusive, vlan_id, ip, description=None): + def __init__(self, datacenter_id, exclusive, vlan_id, ip, + description=None): self.datacenter_id = datacenter_id self.exclusive = exclusive self.vlan_id = vlan_id @@ -911,15 +914,16 @@ class NttCisReservedIpAddress(object): def __repr__(self): return (('<NttCisReservedIpAddress ' - 'datacenterId=%s, exclusiven=%s, vlanId=%s, ipAddress=%s, description=-%s') % - (self.datacenter_id, self.exclusive, self.vlan_id, self.ip, self.description)) + 'datacenterId=%s, exclusiven=%s, vlanId=%s, ipAddress=%s,' + ' description=-%s') % (self.datacenter_id, self.exclusive, + self.vlan_id, self.ip, + self.description)) class NttCisFirewallRule(object): """ NTTCIS Firewall Rule for a network domain """ - def __init__(self, id, name, action, location, network_domain, status, ip_version, protocol, source, destination, enabled): @@ -947,9 +951,7 @@ class NttCisFirewallRule(object): """ class NttCisFirewallAddress(object): - The source or destination model in a firewall rule - def __init__(self, any_ip, ip_address, ip_prefix_size, port_begin, port_end, address_list_id, port_list_id): @@ -961,7 +963,6 @@ class NttCisFirewallAddress(object): self.port_end = port_end self.address_list_id = address_list_id self.port_list_id = port_list_id - def __repr__(self): return ( '<NttCisFirewallAddress: any_ip=%s, ip_address=%s, ' @@ -985,10 +986,14 @@ class NttCisFirewallAddress(object): port_list_id=None): """ param any_ip: used to set ip address to "ANY" - :param ip_address: An ip address of either IPv4 decimal notation or an IPv6 address + :param ip_address: An ip address of either IPv4 decimal + notation or an IPv6 address :param ip_prefix_size: An integer denoting prefix size. - :param port_begin: integer for an individual port or start of a list of ports if not using a port list - :param port_end: integer required if using a list of ports (NOT a port list but a list starting with port begin) + :param port_begin: integer for an individual port or start of a list + of ports if + not using a port list + :param port_end: integer required if using a list of ports + (NOT a port list but a list starting with port begin) :param address_list_id: An id identifying an address list :param port_list_id: An id identifying a port list """ @@ -1427,13 +1432,6 @@ class NttCisBackupDetails(object): % (self.asset_id)) -class NttCisDataCenter(object): - """ - Class that represents a Cloud Infrastructure Datacenter - """ - - - class NttCisBackupClient(object): """ An object that represents a backup client @@ -1443,33 +1441,25 @@ class NttCisBackupClient(object): alert=None, running_job=None): """ Initialize an instance of :class:`NttCisBackupClient` - :param id: Unique ID for the client :type id: ``str`` - :param type: The type of client that this client is :type type: :class:`NttCisBackupClientType` - :param status: The states of this particular backup client. i.e. (Unregistered) :type status: ``str`` - :param schedule_policy: The schedule policy for this client NOTE: NTTCIS only sends back the name of the schedule policy, no further details :type schedule_policy: ``str`` - :param storage_policy: The storage policy for this client NOTE: NTTCIS only sends back the name of the storage policy, no further details :type storage_policy: ``str`` - :param download_url: The download url for this client :type download_url: ``str`` - :param alert: The alert configured for this backup client (optional) :type alert: :class:`NttCisBackupClientAlert` - :param alert: The running job for the client (optional) :type alert: :class:`NttCisBackupClientRunningJob` """ @@ -1924,113 +1914,3 @@ class NttCisNic(object): return ('<NttCisNic: private_ip_v4=%s, vlan=%s,' 'network_adapter_name=%s>' % (self.private_ip_v4, self.vlan, self.network_adapter_name)) - - -##### Testing new concept below this line - -class XmlListConfig(list): - - def __init__(self, elem_list): - for element in elem_list: - if element is not None: - # treat like dict - #print(element.attrib, len(element)) - if len(element) >= 0 or element[0].tag != element[1].tag: - self.append(XmlDictConfig(element)) - # treat like list - elif element[0].tag == element[1].tag: - if 'property' in element.tag: - self.append({element.attrib.get('name'): element.attrib.get('value')}) - else: - self.append(element.attrib) - elif element.text: - text = element.text.strip() - if text: - self.append(text) - - -class XmlDictConfig(dict): - - def __init__(self, parent_element): - if parent_element.items(): - if 'property' in parent_element.tag: - self.update({parent_element.attrib.get('name'): parent_element.attrib.get('value')}) - else: - self.update(dict(parent_element.items())) - - for element in parent_element: - if len(element) > 0: - # treat like dict - we assume that if the first two tags - # in a series are different, then they are all different. - if len(element) == 1 or element[0].tag != element[1].tag: - elem_dict = XmlDictConfig(element) - - # treat like list - we assume that if the first two tags - # in a series are the same, then the rest are the same. - else: - # here, we put the list in dictionary; the key is the - # tag name the list elements all share in common, and - # the value is the list itself - elem_dict = {element[0].tag.split('}')[1]: XmlListConfig(element)} - - # if the tag has attributes, add those to the dict - if element.items(): - elem_dict.update(dict(element.items())) - self.update({element.tag.split('}')[1]: elem_dict}) - # this assumes that if you've got an attribute in a tag, - # you won't be having any text. This may or may not be a - # good idea -- time will tell. It works for the way we are - # currently doing XML configuration files... - elif element.items(): - # It is possible to have duplicate element tags. If so, convert to a dict of lists - if element.tag in self: - tmp_list = list() - tmp_dict = dict() - if isinstance(self[element.tag], list): - tmp_list.append(element.tag) - else: - for k, v in self[element.tag].items(): - if isinstance(k, XmlListConfig): - tmp_list.append(k) - else: - tmp_dict.update({k: v}) - tmp_list.append(tmp_dict) - tmp_list.append(dict(element.items())) - self[element.tag] = tmp_list - else: - self.update({element.tag.split('}')[1]: dict(element.items())}) - # finally, if there are no child tags and no attributes, extract - # the text - else: - self.update({element.tag.split('}')[1]: element.text}) - - -class Generic: - def __new__(cls, arg): - if isinstance(arg, abc.Mapping): - return super().__new__(cls) - elif isinstance(arg, abc.MutableSequence): - return [cls(item) for item in arg] - else: - return arg - - def __init__(self, mapping): - self.__data = {} - for key, value in mapping.items(): - if iskeyword(key): - key += '_' - self.__data[key] = value - - def __getattr__(self, name): - if hasattr(self.__data, name): - return getattr(self.__data, name) - else: - return Generic(self.__data[name]) - - def __repr__(self): - values = ','.join("{}={!r}".format(k, v) for k,v in self.__data.items()) - return values - - -def cloud_factory(from_dict: dict): - pass http://git-wip-us.apache.org/repos/asf/libcloud/blob/d776d646/libcloud/compute/drivers/nttcis.py ---------------------------------------------------------------------- diff --git a/libcloud/compute/drivers/nttcis.py b/libcloud/compute/drivers/nttcis.py index bce144f..4a1bb6b 100644 --- a/libcloud/compute/drivers/nttcis.py +++ b/libcloud/compute/drivers/nttcis.py @@ -24,7 +24,7 @@ from libcloud.compute.base import NodeSize, NodeImage, NodeLocation from libcloud.common.nttcis import dd_object_to_id from libcloud.common.nttcis import NttCisAPIException from libcloud.common.nttcis import (NttCisConnection, - NttCisStatus) + NttCisStatus) from libcloud.common.nttcis import NttCisNetwork from libcloud.common.nttcis import NttCisNetworkDomain from libcloud.common.nttcis import NttCisVlan @@ -48,7 +48,6 @@ from libcloud.common.nttcis import NttCisNic from libcloud.common.nttcis import NetworkDomainServicePlan from libcloud.common.nttcis import NttCisTagKey from libcloud.common.nttcis import NttCisTag -from libcloud.common.nttcis import XmlDictConfig, XmlListConfig, Generic from libcloud.common.nttcis import API_ENDPOINTS, DEFAULT_REGION from libcloud.common.nttcis import TYPES_URN from libcloud.common.nttcis import SERVER_NS, NETWORK_NS, GENERAL_NS @@ -130,11 +129,11 @@ class NttCisNodeDriver(NodeDriver): self.api_version = api_version super(NttCisNodeDriver, self).__init__(key=key, secret=secret, - secure=secure, host=host, - port=port, - api_version=api_version, - region=region, - **kwargs) + secure=secure, host=host, + port=port, + api_version=api_version, + region=region, + **kwargs) def _ex_connection_class_kwargs(self): """ @@ -284,7 +283,7 @@ class NttCisNodeDriver(NodeDriver): **kwargs ): """ - Create a new DimensionData node in MCP2. However, it is still + Create a new NTTCIS node in MCP2. However, it is still backward compatible for MCP1 for a limited time. Please consider using MCP2 datacenter as MCP1 will phase out soon. @@ -298,7 +297,7 @@ class NttCisNodeDriver(NodeDriver): >>> >>> # Get NTTC-CIS driver >>> libcloud.security.VERIFY_SSL_CERT = False - >>> DimensionData = get_driver(Provider.DIMENSIONDATA) + >>> NTTCIS = get_driver(Provider.NTTCIS) >>> driver = cls('myusername','mypassword', region='dd-au') >>> >>> # Password @@ -333,7 +332,7 @@ class NttCisNodeDriver(NodeDriver): >>> >>> # Get NTTC-CIS driver >>> libcloud.security.VERIFY_SSL_CERT = True - >>> cls = get_driver(Provider.DIMENSIONDATA) + >>> cls = get_driver(Provider.NTTCIS) >>> driver = cls('myusername','mypassword', region='dd-au') >>> >>> # Password @@ -454,7 +453,7 @@ class NttCisNodeDriver(NodeDriver): will not be configured correctly. :type ex_ipv4_gateway: ``str`` - :keyword ex_disks: (optional) Dimensiondata disks. Optional disk + :keyword ex_disks: (optional) NTTCIS disks. Optional disk elements can be used to define the disk speed that each disk on the Server; inherited from the source Server Image will be deployed to. It is @@ -526,7 +525,7 @@ class NttCisNodeDriver(NodeDriver): vlans = kwargs.get('ex_additional_nics_vlan') if isinstance(vlans, (list, tuple)): for v in vlans: - add_nic =NttCisNic(vlan=v) + add_nic = NttCisNic(vlan=v) additional_nics.append(add_nic) else: raise TypeError("ex_additional_nics_vlan must " @@ -880,7 +879,6 @@ class NttCisNodeDriver(NodeDriver): ).object ) - def ex_get_datacneter(self, ex_id): """ List locations (datacenters) available for instantiating servers and @@ -898,7 +896,6 @@ class NttCisNodeDriver(NodeDriver): return self.connection.request_with_orgId_api_2('infrastructure/datacenter', params=params) - def list_snapshot_windows(self, location: str, plan: str) -> list: """ List snapshot windows in a given location @@ -911,8 +908,8 @@ class NttCisNodeDriver(NodeDriver): params['datacenterId'] = self._location_to_location_id(location) params['servicePlan'] = plan return self._to_windows(self.connection.request_with_orgId_api_2( - 'infrastructure/snapshotWindow', - params=params).object) + 'infrastructure/snapshotWindow', + params=params).object) def list_networks(self, location=None): """ @@ -1018,7 +1015,8 @@ class NttCisNodeDriver(NodeDriver): 'urn:guestOsCustomization' ).text = is_guest_os_customization - if tagkey_name_value_dictionaries is not None and len(tagkey_name_value_dictionaries) > 0: + if tagkey_name_value_dictionaries is not None and \ + len(tagkey_name_value_dictionaries) > 0: for k, v in tagkey_name_value_dictionaries.items(): tag_elem = ET.SubElement( import_image_elem, @@ -1123,7 +1121,9 @@ class NttCisNodeDriver(NodeDriver): nodes_obj = self._list_nodes_single_page(params) yield self._to_nodes(nodes_obj) - def ex_edit_metadata(self, node: Node, name: str = None, description: str = None, drs_eligible: str = None) -> bool: + def ex_edit_metadata(self, node: Node, name: str = None, + description: str = None, + drs_eligible: str = None) -> bool: request_elem = ET.Element('editServerMetadata', {'xmlns': TYPES_URN, 'id': node.id}) if name is not None: ET.SubElement(request_elem, 'name').text = name @@ -1282,7 +1282,8 @@ class NttCisNodeDriver(NodeDriver): response_code = findtext(body, 'result', GENERAL_NS) return response_code in ['IN_PROGRESS', 'SUCCESS'] - def ex_enable_snapshots(self, node: str, window: str, plan: str='ADVANCED', initiate: str = 'true') -> bool: + def ex_enable_snapshots(self, node: str, window: str, plan: str='ADVANCED', + initiate: str = 'true') -> bool: update_node = ET.Element('enableSnapshotService', {'xmlns': TYPES_URN}) window_id = window @@ -1310,8 +1311,6 @@ class NttCisNodeDriver(NodeDriver): return self._to_snapshot(self.connection.request_with_orgId_api_2( 'snapshot/snapshot/%s' % snapshot_id).object) - - def ex_disable_snapshots(self, node: str) -> bool: update_node = ET.Element('disableSnapshotService', {'xmlns': TYPES_URN}) @@ -1325,7 +1324,8 @@ class NttCisNodeDriver(NodeDriver): response_code = findtext(result, 'responseCode', TYPES_URN) return response_code in ['IN_PROGRESS', 'OK'] - def ex_initiate_manual_snapshot(self, name: str, server_id: str = None) -> bool: + def ex_initiate_manual_snapshot(self, name: str, server_id: str = None) -> \ + bool: """ Initiate a manual snapshot on the fly :param node: A node object from which to get the node id @@ -1338,7 +1338,9 @@ class NttCisNodeDriver(NodeDriver): node = self.list_nodes(ex_name=name) if len(node) > 1: raise RuntimeError("Found more than one server Id, " - "please use one the following along with name parameter: {}".format([n.id for n in node])) + "please use one the following along" + " with name parameter: {}". + format([n.id for n in node])) else: node = [] node.append(self.ex_get_node_by_id(server_id)) @@ -1352,8 +1354,57 @@ class NttCisNodeDriver(NodeDriver): response_code = findtext(result, 'responseCode', TYPES_URN) return response_code in ['IN_PROGRESS', 'OK'] - def ex_create_snapshot_preview_server(self, ): - pass + def ex_create_snapshot_preview_server(self, snapshot_id, server_name, + server_started, nics_connected, + server_description=None, + target_cluster_id=None, + preserve_mac_addresses=None, + tag_key_name=None, + tag_key_id=None, tag_value=None): + create_preview = ET.Element('createSnapshotPreviewServer', + {'xmlns': TYPES_URN, + 'snapshotId': snapshot_id}) + ET.SubElement(create_preview, 'serverName').text = server_name + if server_description is not None: + ET.SubElement(create_preview, 'serverDescription').text = \ + server_description + if target_cluster_id is not None: + ET.SubElement(create_preview, 'targetClusterId').text = \ + target_cluster_id + ET.SubElement(create_preview, 'serverStarted').text = \ + server_started + ET.SubElement(create_preview, 'nicsConnected').text = \ + nics_connected + if preserve_mac_addresses is not None: + ET.SubElement(create_preview, 'preserveMacAddresses').text = \ + preserve_mac_addresses + if tag_key_name is not None: + tag_elem = ET.SubElement(create_preview, 'tag') + ET.SubElement(tag_elem, 'tagKeyName').text = tag_key_name + ET.SubElement(tag_elem, 'value').text = tag_value + elif tag_key_id is not None: + tag_elem = ET.SubElement(create_preview, 'tagById') + ET.SubElement(create_preview, 'tagKeyId').text = tag_key_name + ET.SubElement(tag_elem, 'value').text = tag_value + test = ET.tostring(create_preview) + result = self.connection.request_with_orgId_api_2( + 'snapshot/createSnapshotPreviewServer', + method='POST', + data=ET.tostring(create_preview)).object + for info in findall(result, 'info', TYPES_URN): + if info.get('name') == 'serverId': + return info.get('value') + + def ex_migrate_preview_server(self, preview_id): + migrate_preview = ET.Element('migrateSnapshotPreviewServer', + {'xmlns': TYPES_URN, + 'serverId': preview_id}) + result = self.connection.request_with_orgId_api_2( + 'snapshot/migrateSnapshotPreviewServer', + method='POST', + data=ET.tostring(migrate_preview)).object + response_code = findtext(result, 'responseCode', TYPES_URN) + return response_code in ['IN_PROGRESS', 'OK'] def ex_create_anti_affinity_rule(self, node_list): """ @@ -1395,7 +1446,8 @@ class NttCisNodeDriver(NodeDriver): rule_id = anti_affinity_rule #rule_id = self._anti_affinity_rule_to_anti_affinity_rule_id( # anti_affinity_rule) - update_node = ET.Element('deleteAntiAffinityRule', {"xmlns": TYPES_URN}) + update_node = ET.Element('deleteAntiAffinityRule', + {"xmlns": TYPES_URN}) update_node.set('id', rule_id) result = self.connection.request_with_orgId_api_2( 'server/deleteAntiAffinityRule', @@ -1935,9 +1987,10 @@ class NttCisNodeDriver(NodeDriver): params['ipv6Address'] = ipv6_address if state is not None: params['state'] = state - response = self.connection.request_with_orgId_api_2('network/vlan', - params=params) \ - .object + response = self.connection.request_with_orgId_api_2( + 'network/vlan', + params=params).\ + object return self._to_vlans(response) def ex_add_public_ip_block_to_network_domain(self, network_domain): @@ -1985,13 +2038,16 @@ class NttCisNodeDriver(NodeDriver): # 09/10/18 Adding private IPv4 and IPv6 addressing capability - def ex_reserve_ip(self, vlan: NttCisVlan, ip: str, description: None) -> bool: + def ex_reserve_ip(self, vlan: NttCisVlan, ip: str, description: None) ->\ + bool: vlan_id = self._vlan_to_vlan_id(vlan) if re.match(r'(\d+\.){3}', ip): - private_ip = ET.Element('reservePrivateIpv4Address', {'xmlns': TYPES_URN}) + private_ip = ET.Element('reservePrivateIpv4Address', + {'xmlns': TYPES_URN}) resource = 'network/reservePrivateIpv4Address' elif re.search(r':', ip): - private_ip = ET.Element('reserveIpv6Address', {'xmlns': TYPES_URN}) + private_ip = ET.Element('reserveIpv6Address', + {'xmlns': TYPES_URN}) resource = 'network/reserveIpv6Address' ET.SubElement(private_ip, 'vlanId').text = vlan_id ET.SubElement(private_ip, 'ipAddress').text = ip @@ -1999,19 +2055,23 @@ class NttCisNodeDriver(NodeDriver): ET.SubElement(private_ip, 'description').text = description result = self.connection.request_with_orgId_api_2( - resource, - method='POST', - data=ET.tostring(private_ip)).object + resource, + method='POST', + data=ET.tostring( + private_ip) + ).object response_code = findtext(result, 'responseCode', TYPES_URN) return response_code in ['IN_PROGRESS', 'OK'] def ex_unreserve_ip_addresses(self, vlan: NttCisVlan, ip: str) -> bool: vlan_id = self._vlan_to_vlan_id(vlan) if re.match(r'(\d+\.){3}', ip): - private_ip = ET.Element('unreservePrivateIpv4Address', {'xmlns': TYPES_URN}) + private_ip = ET.Element('unreservePrivateIpv4Address', + {'xmlns': TYPES_URN}) resource = 'network/reservePrivateIpv4Address' elif re.search(r':', ip): - private_ip = ET.Element('unreserveIpv6Address', {'xmlns': TYPES_URN}) + private_ip = ET.Element('unreserveIpv6Address', + {'xmlns': TYPES_URN}) resource = 'network/unreserveIpv6Address' ET.SubElement(private_ip, 'vlanId').text = vlan_id ET.SubElement(private_ip, 'ipAddress').text = ip @@ -2023,38 +2083,47 @@ class NttCisNodeDriver(NodeDriver): response_code = findtext(result, 'responseCode', TYPES_URN) return response_code in ['IN_PROGRESS', 'OK'] - def ex_list_reserved_ipv4(self, vlan: NttCisVlan=None, datacenter_id: str=None): + def ex_list_reserved_ipv4(self, vlan: NttCisVlan=None, + datacenter_id: str=None): if vlan is not None: vlan_id = self._vlan_to_vlan_id(vlan) params = {"vlanId": vlan_id} response = self.connection \ - .request_with_orgId_api_2('network/reservedPrivateIpv4Address', params=params).object + .request_with_orgId_api_2('network/reservedPrivateIpv4Address', + params=params).object elif datacenter_id is not None: params = {'datacenterId': datacenter_id} response = self.connection \ - .request_with_orgId_api_2('network/reservedPrivateIpv4Address', params=params).object + .request_with_orgId_api_2('network/reservedPrivateIpv4Address', + params=params).object else: response = self.connection \ - .request_with_orgId_api_2('network/reservedPrivateIpv4Address').object + .request_with_orgId_api_2( + 'network/reservedPrivateIpv4Address' + ).object addresses = self._to_ipv4_addresses(response) return addresses - def ex_list_reserved_ipv6(self, vlan: NttCisVlan=None, datacenter_id: str=None): + def ex_list_reserved_ipv6(self, vlan: NttCisVlan=None, + datacenter_id: str=None): if vlan is not None: vlan_id = self._vlan_to_vlan_id(vlan) params = {"vlanId": vlan_id} response = self.connection \ - .request_with_orgId_api_2('network/reservedIpv6Address', params=params).object + .request_with_orgId_api_2('network/reservedIpv6Address', + params=params).object elif datacenter_id is not None: params = {'datacenterId': datacenter_id} response = self.connection \ - .request_with_orgId_api_2('network/reservedIpv6Address', params=params).object + .request_with_orgId_api_2('network/reservedIpv6Address', + params=params).object else: response = self.connection \ - .request_with_orgId_api_2('network/reservedIpv6Address').object + .request_with_orgId_api_2( + 'network/reservedIpv6Address').object addresses = self._to_ipv6_addresses(response) return addresses @@ -2147,7 +2216,8 @@ class NttCisNodeDriver(NodeDriver): 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) + 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 @@ -2191,8 +2261,11 @@ class NttCisNodeDriver(NodeDriver): return rule """ - def ex_create_firewall_rule(self, network_domain, name, action, ip_version, protocol, - source_addr, destination, position, enabled=1, position_relative_to_rule=None): + def ex_create_firewall_rule(self, network_domain, name, action, + ip_version, protocol, + source_addr, destination, + position, enabled=1, + position_relative_to_rule=None): """ Creates a firewall rule @@ -2317,7 +2390,7 @@ class NttCisNodeDriver(NodeDriver): >>> >>> # Get NTTC-CIS driver >>> libcloud.security.VERIFY_SSL_CERT = True - >>> cls = get_driver(Provider.DIMENSIONDATA) + >>> cls = get_driver(Provider.NTTCIS) >>> driver = cls('myusername','mypassword', region='dd-au') >>> >>> # Get location @@ -2702,7 +2775,9 @@ class NttCisNodeDriver(NodeDriver): response_code = findtext(result, 'responseCode', TYPES_URN) return response_code in ['IN_PROGRESS', 'OK'] - def ex_add_scsi_controller_to_node(self, server_id: str, adapter_type: str, bus_number: str=None) -> bool: + def ex_add_scsi_controller_to_node(self, server_id: str, + adapter_type: str, + bus_number: str=None) -> bool: """ Added 8/27/18: Adds a SCSI Controller by node id :param server_id: server id @@ -2711,7 +2786,8 @@ class NttCisNodeDriver(NodeDriver): :return: whether addition is in progress or 'OK' otherwise false """ - update_node = ET.Element('addScsiController', {'xmlns': TYPES_URN}) + update_node = ET.Element('addScsiController', + {'xmlns': TYPES_URN}) ET.SubElement(update_node, 'serverId').text = server_id ET.SubElement(update_node, 'adapterType').text = adapter_type if bus_number is not None: @@ -2740,13 +2816,15 @@ class NttCisNodeDriver(NodeDriver): return response_code in ['IN_PROGRESS', 'OK'] def ex_add_storage_to_node(self, amount, node=None, - speed='STANDARD', controller_id=None, scsi_id=None): + speed='STANDARD', controller_id=None, + scsi_id=None): """ Updated 8/23/18 Add storage to the node One of node or controller_id must be selected - :param node: The server to add storage to (required if controller_id is not used + :param node: The server to add storage to (required if + controller_id is not used :type node: :class:`Node` :param amount: The amount of storage to add, in GB @@ -2755,7 +2833,9 @@ class NttCisNodeDriver(NodeDriver): :param speed: The disk speed type :type speed: ``str`` - :param conrollter_id: The disk may be added using the cotnroller id (required if node object is not used) + :param conrollter_id: The disk may be added using the + cotnroller id (required if node + object is not used) :type controller_id: ``str`` :param scsi_id: The target SCSI ID (optional) @@ -2764,8 +2844,10 @@ class NttCisNodeDriver(NodeDriver): :rtype: ``bool`` """ - if (node is None and controller_id is None) or (node is not None and controller_id is not None): - raise RuntimeError("Either a node or a controller id must be specified") + if (node is None and controller_id is None) or \ + (node is not None and controller_id is not None): + raise RuntimeError("Either a node or a controller " + "id must be specified") update_node = ET.Element('addDisk', {'xmlns': TYPES_URN}) @@ -2886,8 +2968,8 @@ class NttCisNodeDriver(NodeDriver): response_code = findtext(result, 'responseCode', TYPES_URN) return response_code in ['IN_PROGRESS', 'OK'] - def ex_reconfigure_node(self, node, memory_gb=None, cpu_count=None, cores_per_socket=None, - cpu_performance=None): + def ex_reconfigure_node(self, node, memory_gb=None, cpu_count=None, + cores_per_socket=None, cpu_performance=None): """ Reconfigure the virtual hardware specification of a node @@ -3177,7 +3259,8 @@ class NttCisNodeDriver(NodeDriver): def ex_get_tag_key_by_name(self, name): """ - NOTICE: Tag key is one of those instances where Libloud handles the search of a list for the client code. + NOTICE: Tag key is one of those instances where Libloud + handles the search of a list for the client code. This behavior exists inconsistently across libcloud. Get a specific tag key by Name @@ -3477,7 +3560,9 @@ class NttCisNodeDriver(NodeDriver): % (datacenter_id, start_date, end_date)) return self._format_csv(result.response) - def ex_list_ip_address_list(self, ex_network_domain:NttCisIpAddressList) -> object: + def ex_list_ip_address_list(self, + ex_network_domain:NttCisIpAddressList) -> \ + object: """ List IP Address List by network domain ID specified @@ -3488,7 +3573,7 @@ class NttCisNodeDriver(NodeDriver): >>> >>> # Get NTTC-CIS driver >>> libcloud.security.VERIFY_SSL_CERT = True - >>> cls = get_driver(Provider.DIMENSIONDATA) + >>> cls = get_driver(Provider.NTTCIS) >>> driver = cls('myusername','mypassword', region='dd-au') >>> >>> # Get location @@ -3529,7 +3614,7 @@ class NttCisNodeDriver(NodeDriver): >>> >>> # Get NTTC-CIS driver >>> libcloud.security.VERIFY_SSL_CERT = True - >>> cls = get_driver(Provider.DIMENSIONDATA) + >>> cls = get_driver(Provider.NTTCIS) >>> driver = cls('myusername','mypassword', region='dd-au') >>> >>> # Get location @@ -3574,12 +3659,12 @@ class NttCisNodeDriver(NodeDriver): >>> from pprint import pprint >>> from libcloud.compute.types import Provider >>> from libcloud.compute.providers import get_driver - >>> from libcloud.common.dimensiondata import DimensionDataIpAddress + >>> from libcloud.common.nttcis import NttCisIpAddress >>> import libcloud.security >>> >>> # Get NTTC-CIS driver >>> libcloud.security.VERIFY_SSL_CERT = True - >>> cls = get_driver(Provider.DIMENSIONDATA) + >>> cls = get_driver(Provider.NTTCIS) >>> driver = cls('myusername','mypassword', region='dd-au') >>> >>> # Get location @@ -3592,10 +3677,10 @@ class NttCisNodeDriver(NodeDriver): networkDomainName][0] >>> >>> # IP Address collection - >>> ipAddress_1 = DimensionDataIpAddress(begin='190.2.2.100') - >>> ipAddress_2 = DimensionDataIpAddress(begin='190.2.2.106', + >>> ipAddress_1 = NttCisIpAddress(begin='190.2.2.100') + >>> ipAddress_2 = NttCisIpAddress(begin='190.2.2.106', end='190.2.2.108') - >>> ipAddress_3 = DimensionDataIpAddress(begin='190.2.2.0', + >>> ipAddress_3 = NttCisIpAddress(begin='190.2.2.0', prefix_size='24') >>> ip_address_collection = [ipAddress_1, ipAddress_2, ipAddress_3] >>> @@ -3702,24 +3787,25 @@ class NttCisNodeDriver(NodeDriver): ip_address_collection=None, child_ip_address_lists=None): """ - Edit IP Address List. IP Address list. Bear in mind you cannot add ip addresses to + Edit IP Address List. IP Address list. + Bear in mind you cannot add ip addresses to >>> from pprint import pprint >>> from libcloud.compute.types import Provider >>> from libcloud.compute.providers import get_driver - >>> from libcloud.common.dimensiondata import DimensionDataIpAddress + >>> from libcloud.common.NTTCIS import NttCisIpAddress >>> import libcloud.security >>> >>> # Get NTTC-CIS driver >>> libcloud.security.VERIFY_SSL_CERT = True - >>> cls = get_driver(Provider.DIMENSIONDATA) + >>> cls = get_driver(Provider.NTTCIS) >>> 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', + >>> ipAddress_1 = NttCisIpAddress(begin='190.2.2.100') + >>> ipAddress_2 = NttCisIpAddress(begin='190.2.2.106', >>> end='190.2.2.108') - >>> ipAddress_3 = DimensionDataIpAddress( + >>> ipAddress_3 = NttCisIpAddress( >>> begin='190.2.2.0', prefix_size='24') >>> ip_address_collection = [ipAddress_1, ipAddress_2, ipAddress_3] >>> @@ -3769,7 +3855,8 @@ class NttCisNodeDriver(NodeDriver): 'description' ).text = description else: - ET.SubElement(edit_ip_address_list, 'description', {'xsi:nil': 'true'}) + ET.SubElement(edit_ip_address_list, 'description', + {'xsi:nil': 'true'}) if ip_address_collection is not None: for ip in ip_address_collection: @@ -3817,7 +3904,7 @@ class NttCisNodeDriver(NodeDriver): >>> >>> # Get NTTC-CIS driver >>> libcloud.security.VERIFY_SSL_CERT = True - >>> cls = get_driver(Provider.DIMENSIONDATA) + >>> cls = get_driver(Provider.NTTCIS) >>> driver = cls('myusername','mypassword', region='dd-au') >>> >>> ip_address_list_id = '5e7c323f-c885-4e4b-9a27-94c44217dbd3' @@ -3856,7 +3943,7 @@ class NttCisNodeDriver(NodeDriver): >>> >>> # Get NTTC-CIS driver >>> libcloud.security.VERIFY_SSL_CERT = True - >>> cls = get_driver(Provider.DIMENSIONDATA) + >>> cls = get_driver(Provider.NTTCIS) >>> driver = cls('myusername','mypassword', region='dd-au') >>> >>> # Get location @@ -3897,7 +3984,7 @@ class NttCisNodeDriver(NodeDriver): >>> >>> # Get NTTC-CIS driver >>> libcloud.security.VERIFY_SSL_CERT = True - >>> cls = get_driver(Provider.DIMENSIONDATA) + >>> cls = get_driver(Provider.NTTCIS) >>> driver = cls('myusername','mypassword', region='dd-au') >>> >>> # Get specific portlist by ID @@ -3924,12 +4011,12 @@ class NttCisNodeDriver(NodeDriver): >>> from pprint import pprint >>> from libcloud.compute.types import Provider >>> from libcloud.compute.providers import get_driver - >>> from libcloud.common.dimensiondata import DimensionDataPort + >>> from libcloud.common.nttcis import NttCisPort >>> import libcloud.security >>> >>> # Get NTTC-CIS driver >>> libcloud.security.VERIFY_SSL_CERT = True - >>> cls = get_driver(Provider.DIMENSIONDATA) + >>> cls = get_driver(Provider.NTTCIS) >>> driver = cls('myusername','mypassword', region='dd-au') >>> >>> # Get location @@ -4027,12 +4114,12 @@ class NttCisNodeDriver(NodeDriver): >>> from pprint import pprint >>> from libcloud.compute.types import Provider >>> from libcloud.compute.providers import get_driver - >>> from libcloud.common.dimensiondata import DimensionDataPort + >>> from libcloud.common.NTTCIS import DimensionDataPort >>> import libcloud.security >>> >>> # Get NTTC-CIS driver >>> libcloud.security.VERIFY_SSL_CERT = True - >>> cls = get_driver(Provider.DIMENSIONDATA) + >>> cls = get_driver(Provider.NTTCIS) >>> driver = cls('myusername','mypassword', region='dd-au') >>> >>> # Port Collection @@ -4086,7 +4173,8 @@ class NttCisNodeDriver(NodeDriver): 'description' ).text = description else: - ET.SubElement(existing_port_address_list, "description", {"xsi:nil": "true"}) + ET.SubElement(existing_port_address_list, "description", + {"xsi:nil": "true"}) if port_collection is not None: for port in port_collection: @@ -4131,7 +4219,7 @@ class NttCisNodeDriver(NodeDriver): >>> >>> # Get NTTC-CIS driver >>> libcloud.security.VERIFY_SSL_CERT = True - >>> cls = get_driver(Provider.DIMENSIONDATA) + >>> cls = get_driver(Provider.NTTCIS) >>> driver = cls('myusername','mypassword', region='dd-au') >>> >>> # Delete Port List @@ -4775,7 +4863,8 @@ class NttCisNodeDriver(NodeDriver): network_domains = [] locations = self.list_locations() for element in findall(object, 'networkDomain', TYPES_URN): - network_domains.append(self._to_network_domain(element, locations)) + network_domains.append(self._to_network_domain( + element, locations)) return network_domains @@ -4898,12 +4987,15 @@ class NttCisNodeDriver(NodeDriver): return [self._to_snapshot(el) for el in snapshot_elements] def _to_snapshot(self, element: ET): - return {'id': element.get('id'), 'start_time': findtext(element, 'startTime', TYPES_URN), + return {'id': element.get('id'), 'start_time': + findtext(element, 'startTime', TYPES_URN), 'end_time': findtext(element, 'endTime', TYPES_URN), 'expiry_time':findtext(element, 'expiryTime', TYPES_URN), 'type': findtext(element, 'type', TYPES_URN), - 'state': findtext(element, 'state', TYPES_URN)} - #'server_config': self.to_snapshot_conf_elems(findtext(element, 'serverConfig', TYPES_URN)} + 'state': findtext(element, 'state', TYPES_URN), + 'server_config': self.to_snapshot_conf_elems( + findtext(element, 'serverConfig', TYPES_URN)) + } def _to_ipv4_addresses(self, object): ipv4_address_elements = object.findall(fixxpath('ipv4', TYPES_URN)) @@ -4919,18 +5011,18 @@ class NttCisNodeDriver(NodeDriver): element.get('exclusive'), findtext(element, 'vlanId', TYPES_URN), findtext(element, 'ipAddress', TYPES_URN), - description=findtext(element, 'description', TYPES_URN), - ) - - + description= + findtext(element, 'description', TYPES_URN),) def _to_windows(self, object): - snapshot_window_elements = object.findall(fixxpath('snapshotWindow', TYPES_URN)) + snapshot_window_elements = object.findall(fixxpath( + 'snapshotWindow', TYPES_URN)) return [self._to_window(el) for el in snapshot_window_elements] def _to_window(self, element): return {'id': element.get('id'), 'day_of_week': element.get('dayOfWeek'), - 'start_hour': element.get('startHour'), 'availability_status': element.get('availabilityStatus')} + 'start_hour': element.get('startHour'), + 'availability_status': element.get('availabilityStatus')} def _to_nodes(self, object): node_elements = object.findall(fixxpath('server', TYPES_URN)) @@ -4947,14 +5039,20 @@ class NttCisNodeDriver(NodeDriver): = element.find(fixxpath('networkInfo', TYPES_URN)) is not None cpu_spec = self._to_cpu_spec(element.find(fixxpath('cpu', TYPES_URN))) - has_snapshot = element.find(fixxpath('snapshotService', TYPES_URN)) is not None - has_scsi = element.find(fixxpath('scsiController', TYPES_URN)) is not None - has_sata = element.find(fixxpath('sataController', TYPES_URN)) is not None + has_snapshot = element.find(fixxpath('snapshotService', + TYPES_URN)) is not None + has_scsi = element.find(fixxpath('scsiController', + TYPES_URN)) is not None + has_sata = element.find(fixxpath('sataController', + TYPES_URN)) is not None has_ide = element.find(fixxpath('ideController')) is not None scsi_controllers = [] disks = [] if has_scsi: - scsi_controllers.append(self._to_scsi_controllers(element.find(fixxpath('scsiController', TYPES_URN)))) + scsi_controllers.append( + self._to_scsi_controllers( + element.find(fixxpath( + 'scsiController', TYPES_URN)))) for scsi in element.findall(fixxpath('scsiController', TYPES_URN)): disks.extend(self._to_disks(scsi)) if has_sata: @@ -4997,8 +5095,10 @@ class NttCisNodeDriver(NodeDriver): if has_network_info else None, 'datacenterId': element.get('datacenterId'), 'deployedTime': findtext(element, 'createTime', TYPES_URN), - 'window': (element.find(fixxpath('snapshotService/window', TYPES_URN)).get('dayOfWeek'), - element.find(fixxpath('snapshotService/window', TYPES_URN)).get('startHour')) + 'window': (element.find(fixxpath('snapshotService/window', + TYPES_URN)).get('dayOfWeek'), + element.find(fixxpath('snapshotService/window', + TYPES_URN)).get('startHour')) if has_snapshot else None, 'cpu': cpu_spec, 'memoryMb': int(findtext( @@ -5045,34 +5145,22 @@ class NttCisNodeDriver(NodeDriver): if element is None: return NttCisStatus() s = NttCisStatus(action=findtext(element, 'action', TYPES_URN), - request_time=findtext( - element, - 'requestTime', - TYPES_URN), - user_name=findtext( - element, - 'userName', - TYPES_URN), - number_of_steps=findtext( - element, - 'numberOfSteps', - TYPES_URN), - step_name=findtext( - element, - 'step/name', - TYPES_URN), - step_number=findtext( - element, - 'step_number', - TYPES_URN), - step_percent_complete=findtext( - element, - 'step/percentComplete', - TYPES_URN), - failure_reason=findtext( - element, - 'failureReason', - TYPES_URN)) + request_time=findtext(element, 'requestTime', + TYPES_URN), + user_name=findtext(element, 'userName', TYPES_URN), + number_of_steps=findtext(element, 'numberOfSteps', + TYPES_URN), + step_name=findtext(element, 'step/name', TYPES_URN), + step_number=findtext(element, 'step_number', + TYPES_URN), + step_percent_complete=findtext( + element, + 'step/percentComplete', + TYPES_URN), + failure_reason=findtext( + element, + 'failureReason', + TYPES_URN)) return s def _to_ip_address_lists(self, object): http://git-wip-us.apache.org/repos/asf/libcloud/blob/d776d646/libcloud/loadbalancer/drivers/nttcis.py ---------------------------------------------------------------------- diff --git a/libcloud/loadbalancer/drivers/nttcis.py b/libcloud/loadbalancer/drivers/nttcis.py index 29e21bf..d7464a9 100644 --- a/libcloud/loadbalancer/drivers/nttcis.py +++ b/libcloud/loadbalancer/drivers/nttcis.py @@ -48,8 +48,6 @@ class NttCisLBDriver(Driver): type = Provider.NTTCIS api_version = 1.0 - #network_domain_id = None - _VALUE_TO_ALGORITHM_MAP = { 'ROUND_ROBIN': Algorithm.ROUND_ROBIN, 'LEAST_CONNECTIONS_MEMBER': Algorithm.LEAST_CONNECTIONS_MEMBER, @@ -72,8 +70,9 @@ class NttCisLBDriver(Driver): 'REQUIRES_SUPPORT': State.ERROR } - def __init__(self, key, network_domain_id, secret=None, secure=True, host=None, port=None, - api_version=None, region=DEFAULT_REGION, **kwargs): + def __init__(self, key, network_domain_id, secret=None, secure=True, + host=None, port=None, api_version=None, + region=DEFAULT_REGION, **kwargs): self.network_domain_id = network_domain_id @@ -100,25 +99,28 @@ class NttCisLBDriver(Driver): kwargs['region'] = self.selected_region return kwargs - def create_balancer(self, name, listener_port=None, port=None, protocol=None, - algorithm=None, members=None, optimization_profile=None, + def create_balancer(self, name, listener_port=None, port=None, + protocol=None, algorithm=None, members=None, + optimization_profile=None, ex_listener_ip_address=None): """ - BUG: libcloud.common.nttcis.NttCisAPIException: CONFIGURATION_NOT_SUPPORTED: - optimizationProfile is required for type STANDARD and protocol TCP. - + BUG: libcloud.common.nttcis.NttCisAPIException: + CONFIGURATION_NOT_SUPPORTED: optimizationProfile is required for type + STANDARD and protocol TCP. Create a new load balancer instance :param name: Name of the new load balancer (required) :type name: ``str`` - :param listener_port: An integer in the range of 1-65535. If not supplied, - it will be taken to mean 'Any Port' + :param listener_port: An integer in the range of 1-65535. + If not supplied, it will be taken to + mean 'Any Port' :type port: ``int :param port: An integer in the range of 1-65535. If not supplied, - it will be taken to mean 'Any Port' Assumed that node ports will different from listener port. + it will be taken to mean 'Any Port' Assumed that + node ports will different from listener port. :type port: ``int`` :param protocol: Loadbalancer protocol, defaults to http. @@ -130,8 +132,10 @@ class NttCisLBDriver(Driver): :param algorithm: Load balancing algorithm, defaults to ROUND_ROBIN. :type algorithm: :class:`.Algorithm` - :param optimization_profile: For STANDARD type and protocol TCP an optimization type of - TCP, LAN_OPT, WAN_OPT, MOBILE_OPT, or TCP_LEGACY is required + :param optimization_profile: For STANDARD type and protocol TCP + an optimization type of TCP, LAN_OPT, + WAN_OPT, MOBILE_OPT, or TCP_LEGACY is + required :type protcol: ``str`` :param ex_listener_ip_address: Must be a valid IPv4 in dot-decimal @@ -193,15 +197,18 @@ class NttCisLBDriver(Driver): 'listener_ip_address': ex_listener_ip_address} ) - def ex_update_listener(self, virtual_listener: NttCisVirtualListener, **kwargs) -> NttCisVirtualListener: + def ex_update_listener(self, virtual_listener: NttCisVirtualListener, + **kwargs) -> bool: """ Update a current virtual listener. :param virtual_listener: The listener to be updated :return: The edited version of the listener """ - edit_listener_elm = ET.Element('editVirtualListener', {'xmlns': TYPES_URN, - 'id': virtual_listener.id, - 'xmlns:xsi': "http://www.w3.org/2001/XMLSchema-instance"}) + edit_listener_elm = ET.Element('editVirtualListener', + {'xmlns': TYPES_URN, + 'id': virtual_listener.id, + 'xmlns:xsi': + "http://www.w3.org/2001/XMLSchema-instance"}) for k, v in kwargs.items(): if v is None: ET.SubElement(edit_listener_elm, k, {'xsi:nil': 'true'}) @@ -234,8 +241,8 @@ class NttCisLBDriver(Driver): return self._to_balancers( self.connection - .request_with_orgId_api_2('networkDomainVip/virtualListener', - params=params).object) + .request_with_orgId_api_2('networkDomainVip/virtualListener', + params=params).object) def get_balancer(self, balancer_id): """ @@ -431,7 +438,8 @@ class NttCisLBDriver(Driver): connection_rate_limit=2000): """ Inconsistent use of objects. - Either always pass an object and have the method get the id, or always pass the id. + Either always pass an object and have the method get the id, or + always pass the id. Create a new node @@ -628,7 +636,7 @@ class NttCisLBDriver(Driver): fallback_persistence_profile=None, irule=None, protocol='TCP', - optimization_profile = None, + optimization_profile=None, connection_limit=25000, connection_rate_limit=2000, source_port_preservation='PRESERVE'): @@ -668,8 +676,10 @@ class NttCisLBDriver(Driver): for PERFORMANCE_LAYER_4 choice of ANY, TCP, UDP, HTTP :type protcol: ``str`` - :param optimization_profile: For STANDARD type and protocol TCP an optimization type of - TCP, LAN_OPT, WAN_OPT, MOBILE_OPT, or TCP_LEGACY is required + :param optimization_profile: For STANDARD type and protocol + TCP an optimization type of TCP, LAN_OPT, + WAN_OPT, MOBILE_OPT, + or TCP_LEGACY is required :type protcol: ``str`` :param connection_limit: Maximum number @@ -692,8 +702,9 @@ class NttCisLBDriver(Driver): listener_type = 'STANDARD' if listener_type == 'STANDARD' and optimization_profile is None: - raise ValueError(" CONFIGURATION_NOT_SUPPORTED: optimizationProfile is required for type STANDARD and protocol TCP") - + raise ValueError( + " CONFIGURATION_NOT_SUPPORTED: optimizationProfile is" + " required for type STANDARD and protocol TCP") create_node_elm = ET.Element('createVirtualListener', {'xmlns': TYPES_URN}) @@ -724,7 +735,8 @@ class NttCisLBDriver(Driver): ET.SubElement(create_node_elm, "persistenceProfileId") \ .text = persistence_profile.id if optimization_profile is not None: - ET.SubElement(create_node_elm, 'optimizationProfile').text = optimization_profile + ET.SubElement(create_node_elm, 'optimizationProfile').text = \ + optimization_profile if fallback_persistence_profile is not None: ET.SubElement(create_node_elm, "fallbackPersistenceProfileId") \ .text = fallback_persistence_profile.id http://git-wip-us.apache.org/repos/asf/libcloud/blob/d776d646/tests/lib_create_test.py ---------------------------------------------------------------------- diff --git a/tests/lib_create_test.py b/tests/lib_create_test.py index 3beec92..2bf9ab9 100644 --- a/tests/lib_create_test.py +++ b/tests/lib_create_test.py @@ -252,3 +252,22 @@ def test_create_and_apply_tag(compute_driver, compute_driver_na): assert result is True +def test_create_preivew_server(compute_driver): + snapshot_id = '7118cd30-3184-4a3a-b097-2a2d25b9cb28' + preview_server_name = 'web2_snapshot' + server_description = 'A server created from latest snapshot at preview creation time' + server_started = 'true' + nics_connected = 'true' + tag_name = 'sdk_test_tag' + value = 'IT' + result = compute_driver.ex_create_snapshot_preview_server(snapshot_id, preview_server_name, server_started, + nics_connected=nics_connected, + server_description=server_description, + tag_key_name=tag_name, tag_value=value) + print(result) + + +def test_migrate_preview_server(compute_driver): + preview_id = "a598375f-40f4-4745-9556-ef8a8625734d" + result = compute_driver.ex_migrate_preview_server(preview_id) + assert result is True \ No newline at end of file http://git-wip-us.apache.org/repos/asf/libcloud/blob/d776d646/tests/lib_list_test.py ---------------------------------------------------------------------- diff --git a/tests/lib_list_test.py b/tests/lib_list_test.py index 77079ef..2fe4bda 100644 --- a/tests/lib_list_test.py +++ b/tests/lib_list_test.py @@ -274,10 +274,6 @@ def test_list_snapshots(compute_driver): assert 'expiry_time' in snapshot -def test_list_nics(compute_driver): - result = compute_driver.ex_list_ - - def test_list_vlans(compute_driver): vlans = compute_driver.ex_list_vlans() print(vlans)
