Add support for network interfaces
This commit is contained in:
parent
741a99e458
commit
580801c900
@ -61,12 +61,25 @@ class _BaseHNVModel(model.Model):
|
||||
is associated with network objects that are ancestors of the parent
|
||||
of the necessary resource."""
|
||||
|
||||
operation_id = model.Field(name="operation_id", key="operation-id",
|
||||
is_property=False, is_required=False,
|
||||
is_read_only=True)
|
||||
"""The value of the x-ms-request-id header returned by the resource
|
||||
provider."""
|
||||
|
||||
instance_id = model.Field(name="instance_id", key="instanceId",
|
||||
is_property=False)
|
||||
"""The globally unique Id generated and used internally by the Network
|
||||
Controller. The mapping resource that enables the client to map between
|
||||
the instanceId and the resourceId."""
|
||||
|
||||
resource_metadata = model.Field(name="resource_metadata",
|
||||
key="resourceMetadata",
|
||||
is_property=False, is_required=False)
|
||||
"""Structured data that the client provides to the server. This is an
|
||||
optional element but it is suggested that all clients fill in the data
|
||||
that is applicable to them."""
|
||||
|
||||
etag = model.Field(name="etag", key="etag", is_property=False)
|
||||
"""An opaque string representing the state of the resource at the
|
||||
time the response was generated."""
|
||||
@ -196,6 +209,16 @@ class _BaseHNVModel(model.Model):
|
||||
# Lock the current model
|
||||
self._provision_done = True
|
||||
|
||||
@classmethod
|
||||
def from_raw_data(cls, raw_data):
|
||||
"""Create a new model using raw API response."""
|
||||
raw_metadata = raw_data.get("resourceMetadata", None)
|
||||
if raw_metadata is not None:
|
||||
metadata = ResourceMetadata.from_raw_data(raw_metadata)
|
||||
raw_data["resourceMetadata"] = metadata
|
||||
|
||||
return super(_BaseHNVModel, cls).from_raw_data(raw_data)
|
||||
|
||||
|
||||
class Resource(model.Model):
|
||||
|
||||
@ -206,6 +229,47 @@ class Resource(model.Model):
|
||||
"""A relative URI to an associated resource."""
|
||||
|
||||
|
||||
class ResourceMetadata(model.Model):
|
||||
|
||||
"""Model for Resource Metadata.
|
||||
|
||||
Structured data that the client provides to the server. This is an
|
||||
optional element but it is suggested that all clients fill in the
|
||||
data that is applicable to them.
|
||||
"""
|
||||
|
||||
client = model.Field(name="client", key="client",
|
||||
is_property=False, is_required=False)
|
||||
"""Indicates the client that creates or updates the resource.
|
||||
Although this element is optional, it is strongly recommended that it
|
||||
contain an appropriate value."""
|
||||
|
||||
tenant_id = model.Field(name="tenant_id", key="tenantId",
|
||||
is_property=False, is_required=False)
|
||||
"""The identifier of the tenant in the client environment.
|
||||
Provides linkage between the resource in the Network Controller
|
||||
and the tenant in the client network."""
|
||||
|
||||
group_id = model.Field(name="group_id", key="groupId",
|
||||
is_property=False, is_required=False)
|
||||
"""The identifier of the group that the tenant belongs to within
|
||||
the client environment. This is usually used in environments that
|
||||
contain multiple tenants that are aggregated into groups that the
|
||||
client manages. This provides linkage between the resource in the
|
||||
Network Controller and the group that the tenant belongs to in the
|
||||
client network."""
|
||||
|
||||
resource_name = model.Field(name="resource_name", key="name",
|
||||
is_property=False, is_required=False)
|
||||
"""Indicates the globally unique name of the resource. If it
|
||||
is not assigned a value then it will be blank."""
|
||||
|
||||
original_href = model.Field(name="original_href", key="originalHref",
|
||||
is_property=False, is_required=False)
|
||||
"""The original URI of the resource if the client uses a URI based
|
||||
system to organize resources."""
|
||||
|
||||
|
||||
class IPPools(_BaseHNVModel):
|
||||
|
||||
"""Model for IP Pools.
|
||||
@ -281,7 +345,7 @@ class LogicalSubnetworks(_BaseHNVModel):
|
||||
address_prefix = model.Field(name="address_prefix", key="addressPrefix")
|
||||
"""Identifies the subnet id in form of ipAddresss/prefixlength."""
|
||||
|
||||
vlan_id = model.Field(name="vlan_id", key="vlanId", is_required=True,
|
||||
vlan_id = model.Field(name="vlan_id", key="vlanID", is_required=True,
|
||||
default=0)
|
||||
"""Indicates the VLAN ID associated with the logical subnet."""
|
||||
|
||||
@ -297,6 +361,11 @@ class LogicalSubnetworks(_BaseHNVModel):
|
||||
"""Indicates one or more DNS servers that are used for resolving DNS
|
||||
queries by devices or host connected to this logical subnet."""
|
||||
|
||||
ip_configurations = model.Field(name="ip_configurations",
|
||||
key="ipConfigurations")
|
||||
"""Indicates an array of IP configurations that are contained
|
||||
in the network interface."""
|
||||
|
||||
network_interfaces = model.Field(name="network_interfaces",
|
||||
key="networkInterfaces",
|
||||
is_read_only=True)
|
||||
@ -311,6 +380,13 @@ class LogicalSubnetworks(_BaseHNVModel):
|
||||
key="defaultGateways")
|
||||
"""A collection of one or more gateways for the subnet."""
|
||||
|
||||
gateway_pools = model.Field(name="gateway_pools", key="gatewayPools",
|
||||
is_required=False, is_read_only=True)
|
||||
"""Indicates a collection of references to gatewayPools resources
|
||||
in which connections can be created. This information is populated
|
||||
at the time of subscription and can be changed only via the Service
|
||||
administrator portal."""
|
||||
|
||||
@classmethod
|
||||
def from_raw_data(cls, raw_data):
|
||||
"""Create a new model using raw API response."""
|
||||
@ -322,6 +398,13 @@ class LogicalSubnetworks(_BaseHNVModel):
|
||||
ip_pools.append(IPPools.from_raw_data(raw_ip_pool))
|
||||
properties["ipPools"] = ip_pools
|
||||
|
||||
ip_configurations = []
|
||||
raw_settings = properties.get("ipConfigurations", [])
|
||||
for raw_configuration in raw_settings:
|
||||
ip_configuration = IPConfiguration.from_raw_data(raw_configuration)
|
||||
ip_configurations.append(ip_configuration)
|
||||
properties["ipConfigurations"] = ip_configurations
|
||||
|
||||
return super(LogicalSubnetworks, cls).from_raw_data(raw_data)
|
||||
|
||||
|
||||
@ -370,3 +453,288 @@ class LogicalNetworks(_BaseHNVModel):
|
||||
properties["virtualNetworks"] = virtual_networks
|
||||
|
||||
return super(LogicalNetworks, cls).from_raw_data(raw_data)
|
||||
|
||||
|
||||
class IPConfiguration(_BaseHNVModel):
|
||||
|
||||
"""IP Configuration Model.
|
||||
|
||||
This resource represents configuration information for IP addresses:
|
||||
allocation method, actual IP address, membership of a logical or virtual
|
||||
subnet, load balancing and access control information.
|
||||
"""
|
||||
|
||||
_endpoint = ("/networking/v1/networkInterfaces/{parent_id}"
|
||||
"/ipConfigurations/{resource_id}")
|
||||
|
||||
parent_id = model.Field(name="parent_id",
|
||||
key="parentResourceID",
|
||||
is_property=False, is_required=True,
|
||||
is_read_only=True)
|
||||
"""The parent resource ID field contains the resource ID that is
|
||||
associated with network objects that are ancestors of the necessary
|
||||
resource.
|
||||
"""
|
||||
|
||||
access_controll_list = model.Field(name="access_controll_list",
|
||||
key="accessControlList",
|
||||
is_required=False)
|
||||
"""Indicates a reference to an accessControlList resource that defines
|
||||
the ACLs in and out of the IP Configuration."""
|
||||
|
||||
backend_address_pools = model.Field(
|
||||
name="backend_address_pools", key="loadBalancerBackendAddressPools",
|
||||
is_required=False, is_read_only=True)
|
||||
"""Reference to backendAddressPools child resource of loadBalancers
|
||||
resource."""
|
||||
|
||||
inbound_nat_rules = model.Field(
|
||||
name="loadBalancerInboundNatRules", key="loadBalancerInboundNatRules",
|
||||
is_required=False)
|
||||
"""Reference to inboundNatRules child resource of loadBalancers
|
||||
resource."""
|
||||
|
||||
private_ip_address = model.Field(
|
||||
name="private_ip_address", key="privateIPAddress",
|
||||
is_required=False)
|
||||
"""Indicates the private IP address of the IP Configuration."""
|
||||
|
||||
private_ip_allocation_method = model.Field(
|
||||
name="private_ip_allocation_method", key="privateIPAllocationMethod",
|
||||
is_required=False)
|
||||
"""Indicates the allocation method (Static or Dynamic)."""
|
||||
|
||||
public_ip_address = model.Field(
|
||||
name="public_ip_address", key="privateIpAddress",
|
||||
is_required=False)
|
||||
"""Indicates the public IP address of the IP Configuration."""
|
||||
|
||||
service_insertion = model.Field(
|
||||
name="service_insertion", key="serviceInsertion",
|
||||
is_required=False)
|
||||
"""Indicates a reference to a serviceInsertion resource that defines
|
||||
the service insertion in and out of the IP Configuration."""
|
||||
|
||||
subnet = model.Field(name="subnet", key="subnet", is_read_only=True)
|
||||
"""Indicates a reference to the subnet resource that the IP Configuration
|
||||
is connected to."""
|
||||
|
||||
|
||||
class DNSSettings(model.Model):
|
||||
|
||||
"""Model for DNS Setting for Network Interfaces."""
|
||||
|
||||
dns_servers = model.Field(name="dns_servers", key="dnsServers",
|
||||
is_property=False, is_required=False)
|
||||
"""Indicates an array of IP Addresses that the network interface
|
||||
resource will use for the DNS servers."""
|
||||
|
||||
|
||||
class QosSettings(model.Model):
|
||||
|
||||
"""Qos Settings Model."""
|
||||
|
||||
outbound_reserved_value = model.Field(name="outbound_reserved_value",
|
||||
key="outboundReservedValue",
|
||||
is_required=False,
|
||||
is_property=False)
|
||||
"""If outboundReservedMode is "absolute" then the value indicates the
|
||||
bandwidth, in Mbps, guaranteed to the virtual port for transmission
|
||||
(egress)."""
|
||||
|
||||
outbound_maximum_mbps = model.Field(name="outbound_maximum_mbps",
|
||||
key="outboundMaximumMbps",
|
||||
is_required=False,
|
||||
is_property=False)
|
||||
"""Indicates the maximum permitted send-side bandwidth, in Mbps,
|
||||
for the virtual port (egress)."""
|
||||
|
||||
inbound_maximum_mbps = model.Field(name="inbound_maximum_mbps",
|
||||
key="inboundMaximumMbps",
|
||||
is_required=False,
|
||||
is_property=False)
|
||||
"""Indicates the maximum permitted receive-side bandwidth for the
|
||||
virtual port (ingress) in Mbps."""
|
||||
|
||||
|
||||
class PortSettings(model.Model):
|
||||
|
||||
"""Port Settings Model."""
|
||||
|
||||
mac_spoofing = model.Field(name="mac_spoofing", key="macSpoofingEnabled",
|
||||
is_required=False, is_property=False)
|
||||
"""Specifies whether virtual machines can change the source MAC
|
||||
address in outgoing packets to one not assigned to them."""
|
||||
|
||||
arp_guard = model.Field(name="arp_guard", key="arpGuardEnabled",
|
||||
is_required=False, is_property=False)
|
||||
"""Specifies whether ARP guard is enabled or not. ARP guard
|
||||
will allow only addresses specified in ArpFilter to pass through
|
||||
the port."""
|
||||
|
||||
dhcp_guard = model.Field(name="dhcp_guard", key="dhcpGuardEnabled",
|
||||
is_required=False, is_property=False)
|
||||
"""Specifies the number of broadcast, multicast, and unknown
|
||||
unicast packets per second a virtual machine is allowed to
|
||||
send through the specified virtual network adapter."""
|
||||
|
||||
storm_limit = model.Field(name="storm_limit", key="stormLimit",
|
||||
is_required=False, is_property=False)
|
||||
"""Specifies the number of broadcast, multicast, and unknown
|
||||
unicast packets per second a virtual machine is allowed to
|
||||
send through the specified virtual network adapter."""
|
||||
|
||||
port_flow_limit = model.Field(name="port_flow_limit",
|
||||
key="portFlowLimit",
|
||||
is_required=False, is_property=False)
|
||||
"""Specifies the maximum number of flows that can be executed
|
||||
for the port."""
|
||||
|
||||
vmq_weight = model.Field(name="vmq_weight", key="vmqWeight",
|
||||
is_required=False, is_property=False)
|
||||
"""Specifies whether virtual machine queue (VMQ) is to be
|
||||
enabled on the virtual network adapter."""
|
||||
|
||||
iov_weight = model.Field(name="iov_weight", key="iovWeight",
|
||||
is_required=False, is_property=False)
|
||||
"""Specifies whether single-root I/O virtualization (SR-IOV) is to
|
||||
be enabled on this virtual network adapter."""
|
||||
|
||||
iov_interrupt_moderation = model.Field(name="iov_interrupt_moderation",
|
||||
key="iovInterruptModeration",
|
||||
is_required=False,
|
||||
is_property=False)
|
||||
"""Specifies the interrupt moderation value for a single-root I/O
|
||||
virtualization (SR-IOV) virtual function assigned to a virtual
|
||||
network adapter."""
|
||||
|
||||
iov_queue_pairs = model.Field(name="iov_queue_pairs",
|
||||
key="iovQueuePairsRequested",
|
||||
is_required=False, is_property=False)
|
||||
"""Specifies the number of hardware queue pairs to be allocated
|
||||
to an SR-IOV virtual function."""
|
||||
|
||||
qos_settings = model.Field(name="qos_settings", key="qosSettings",
|
||||
is_required=False, is_property=False)
|
||||
|
||||
@classmethod
|
||||
def from_raw_data(cls, raw_data):
|
||||
"""Create a new model using raw API response."""
|
||||
raw_settings = raw_data.get("qosSettings", {})
|
||||
qos_settings = QosSettings.from_raw_data(raw_settings)
|
||||
raw_data["qosSettings"] = qos_settings
|
||||
return super(PortSettings, cls).from_raw_data(raw_data)
|
||||
|
||||
|
||||
class ConfigurationState(model.Model):
|
||||
|
||||
"""Model for configuration state."""
|
||||
|
||||
uuid = model.Field(name="uuid", key="id",
|
||||
is_property=False, is_required=False)
|
||||
status = model.Field(name="status", key="status",
|
||||
is_property=False, is_required=False)
|
||||
last_update = model.Field(name="last_update", key="lastUpdatedTime",
|
||||
is_property=False, is_required=False)
|
||||
detailed_info = model.Field(name="detailed_info", key="detailedInfo",
|
||||
is_property=False, is_required=False)
|
||||
interface_errors = model.Field(name="interface_errors",
|
||||
key="virtualNetworkInterfaceErrors",
|
||||
is_property=False, is_required=False)
|
||||
host_errors = model.Field(name="host_erros", key="hostErrors",
|
||||
is_property=False, is_required=False)
|
||||
|
||||
|
||||
class NetworkInterfaces(_BaseHNVModel):
|
||||
|
||||
"""Network Interface Model.
|
||||
|
||||
The networkInterfaces resource specifies the configuration of either
|
||||
a host virtual interface (host vNIC) or a virtual server NIC (VMNIC).
|
||||
"""
|
||||
|
||||
_endpoint = "/networking/v1/networkInterfaces/{resource_id}"
|
||||
|
||||
configuration_state = model.Field(name="configuration_state",
|
||||
key="configurationState",
|
||||
is_read_only=True, is_required=False)
|
||||
|
||||
dns_settings = model.Field(name="dns_settings", key="dnsSettings",
|
||||
is_read_only=False)
|
||||
"""Indicates the DNS settings of this network interface."""
|
||||
|
||||
ip_configurations = model.Field(name="ip_configurations",
|
||||
key="ipConfigurations")
|
||||
"""Indicates an array of IP configurations that are contained
|
||||
in the network interface."""
|
||||
|
||||
is_host = model.Field(name="is_host",
|
||||
key="isHostVirtualNetworkInterface")
|
||||
"""True if this is a host virtual interface (host vNIC)
|
||||
False if this is a virtual server NIC (VMNIC)."""
|
||||
|
||||
is_primary = model.Field(name="is_primary", key="isPrimary",
|
||||
default=True, is_static=True)
|
||||
"""`True` if this is the primary interface and the default
|
||||
value if the property is not set or `False` if this is a
|
||||
secondary interface."""
|
||||
|
||||
is_multitenant_stack = model.Field(name="is_multitenant_stack",
|
||||
key="isMultitenantStack",
|
||||
default=False)
|
||||
"""`True` if allows the NIC to be part of multiple virtual networks
|
||||
or `False` if the opposite."""
|
||||
|
||||
internal_dns_name = model.Field(name="internal_dns_name",
|
||||
key="internalDnsNameLabel")
|
||||
"""Determines the name that will be registered in iDNS
|
||||
when the iDnsServer resource is configured."""
|
||||
|
||||
server = model.Field(name="server", key="server",
|
||||
is_read_only=True)
|
||||
"""Indicates a reference to the servers resource for the
|
||||
machine that is currently hosting the virtual machine to
|
||||
which this network interface belongs."""
|
||||
|
||||
port_settings = model.Field(name="port_settings", key="portSettings")
|
||||
"""A PortSettings object."""
|
||||
|
||||
mac_address = model.Field(name="mac_address", key="privateMacAddress")
|
||||
"""Indicates the private MAC address of this network interface."""
|
||||
|
||||
mac_allocation_method = model.Field(name="mac_allocation_method",
|
||||
key="privateMacAllocationMethod")
|
||||
"""Indicates the allocation scheme of the MAC for this
|
||||
network interface."""
|
||||
|
||||
service_insertion_elements = model.Field(
|
||||
name="service_insertion_elements", key="serviceInsertionElements",
|
||||
is_read_only=True)
|
||||
"""Indicates an array of serviceInsertions resources that
|
||||
this networkInterfaces resource is part of."""
|
||||
|
||||
@classmethod
|
||||
def from_raw_data(cls, raw_data):
|
||||
"""Create a new model using raw API response."""
|
||||
properties = raw_data["properties"]
|
||||
|
||||
ip_configurations = []
|
||||
raw_settings = properties.get("ipConfigurations", [])
|
||||
for raw_configuration in raw_settings:
|
||||
ip_configuration = IPConfiguration.from_raw_data(raw_configuration)
|
||||
ip_configurations.append(ip_configuration)
|
||||
properties["ipConfigurations"] = ip_configurations
|
||||
|
||||
raw_settings = properties.get("dnsSettings", {})
|
||||
dns_settings = DNSSettings.from_raw_data(raw_settings)
|
||||
properties["dnsSettings"] = dns_settings
|
||||
|
||||
raw_settings = properties.get("portSettings", {})
|
||||
port_settings = PortSettings.from_raw_data(raw_settings)
|
||||
properties["portSettings"] = port_settings
|
||||
|
||||
raw_state = properties.get("configurationState", {})
|
||||
configuration = ConfigurationState.from_raw_data(raw_state)
|
||||
properties["configurationState"] = configuration
|
||||
|
||||
return super(NetworkInterfaces, cls).from_raw_data(raw_data)
|
||||
|
@ -45,3 +45,11 @@ class FakeResponse(object):
|
||||
def ip_pools(self):
|
||||
"""Fake GET(all) response for IP pools."""
|
||||
return self._load_resource("ip_pools.json")
|
||||
|
||||
def network_interfaces(self):
|
||||
"""Fake GET(all) response for network interfaces."""
|
||||
return self._load_resource("network_interfaces.json")
|
||||
|
||||
def ip_configurations(self):
|
||||
"""Fake GET(all) response for ip configurations."""
|
||||
return self._load_resource("ip_configurations.json")
|
||||
|
24
hnv_client/tests/fake/response/ip_configurations.json
Normal file
24
hnv_client/tests/fake/response/ip_configurations.json
Normal file
@ -0,0 +1,24 @@
|
||||
{
|
||||
"value": [
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/ee9be550-4dd3-43af-9b69-8a45f1ef3569 /ipConfigurations/c1fe8acf-cf68-45f0-bc70-f9a1cd8d3953",
|
||||
"resourceId": "c1fe8acf-cf68-45f0-bc70-f9a1cd8d3953",
|
||||
"etag": "W/\"d728c292-9499-497b-a328-0216b50e7f21\"",
|
||||
"instanceId": "2d254540-9c81-4216-8da6-44d498061040",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"privateIPAddress": "20.168.0.26",
|
||||
"privateIPAllocationMethod": "Static",
|
||||
"subnet": {
|
||||
"resourceRef": "/virtualNetworks/29d028bc-a244-4bec-b3bb-958ea0c64681 /subnets/c0f6d801-ca07-4345-8274-20b13454c51a"
|
||||
},
|
||||
"accessControlList": {
|
||||
"resourceRef": "/accessControlLists/28f4e1fc-2d3a-41c0-97f2-261be40bda77"
|
||||
},
|
||||
"loadBalancerBackendAddressPools": [],
|
||||
"loadBalancerInboundNatRules": []
|
||||
}
|
||||
}
|
||||
],
|
||||
"nextLink": ""
|
||||
}
|
@ -1,51 +1,21 @@
|
||||
{
|
||||
"value": [
|
||||
{
|
||||
"resourceId": "{uniqueString}",
|
||||
"etag": "00000000-0000-0000-0000-000000000000",
|
||||
"instanceId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
|
||||
"tags": {
|
||||
"key": "value"
|
||||
},
|
||||
"resourceMetadata": {
|
||||
"client": "<Insert likely client>",
|
||||
"tenantId": "{subscriptionid}",
|
||||
"groupId": "{groupname}",
|
||||
"name": "{name}",
|
||||
"originalHref": "https://..."
|
||||
},
|
||||
"resourceRef": "/logicalnetworks/a647c7f3-9203-44df-a15e-bfff856c83d7 /subnets/d1078059-fe58-4c26-bdce-9bf61e0d2be2/ipPools/9176fa09-48ca-4e0e-b953- c9c065561e03",
|
||||
"resourceId": "9176fa09-48ca-4e0e-b953-c9c065561e03",
|
||||
"etag": "W/\"fd2b18a6-f142-494c-adee-fb244cd7245d\"",
|
||||
"instanceId": "10080cf6-504d-4e6c-bf22-d2b90bd51090",
|
||||
"properties": {
|
||||
"provisioningState": "Updating|Deleting|Failed|Succeeded",
|
||||
"ipConfigurations": [],
|
||||
"networkInterfaces": [],
|
||||
"vlanID": "1",
|
||||
"routes": [],
|
||||
"dnsServers": [
|
||||
"10.0.0.1",
|
||||
"10.0.0.2"
|
||||
],
|
||||
"defaultGateways": [
|
||||
"192.168.1.1",
|
||||
"192.168.1.2"
|
||||
],
|
||||
"isPublic": true,
|
||||
"ipPools": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"resourceId": "{uniqueString}",
|
||||
"etag": "00000000-0000-0000-0000-000000000000",
|
||||
"instanceId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
|
||||
"tags": {
|
||||
"key": "value"
|
||||
},
|
||||
"resourceMetadata": {
|
||||
"client": "<Insert likely client>",
|
||||
"tenantId": "{subscriptionid}",
|
||||
"groupId": "{groupname}",
|
||||
"name": "{name}",
|
||||
"originalHref": "https://..."
|
||||
"provisioningState": "Succeeded",
|
||||
"startIpAddress": "15.65.2.100",
|
||||
"endIpAddress": "15.65.2.255",
|
||||
"usage": {
|
||||
"numberOfIPAddresses": 156,
|
||||
"numberofIPAddressesAllocated": 0,
|
||||
"numberOfIPAddressesInTransition": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"nextLink": ""
|
||||
}
|
||||
|
@ -23,7 +23,6 @@
|
||||
}
|
||||
],
|
||||
"gatewayPools": [],
|
||||
"networkConnections": [],
|
||||
"vlanID": "109",
|
||||
"ipPools": [
|
||||
{
|
||||
@ -53,12 +52,7 @@
|
||||
"defaultGateways": [
|
||||
"192.83.0.1"
|
||||
],
|
||||
"isPublic": false,
|
||||
"usage": {
|
||||
"numberOfIPAddresses": 65445,
|
||||
"numberofIPAddressesAllocated": 2,
|
||||
"numberOfIPAddressesInTransition": 0
|
||||
}
|
||||
"isPublic": false
|
||||
}
|
||||
}
|
||||
],
|
||||
|
831
hnv_client/tests/fake/response/network_interfaces.json
Normal file
831
hnv_client/tests/fake/response/network_interfaces.json
Normal file
@ -0,0 +1,831 @@
|
||||
{
|
||||
"value": [
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/00000000-3333-0000-0000-000000000001",
|
||||
"resourceId": "00000000-3333-0000-0000-000000000001",
|
||||
"etag": "W/\"f2bf845b-a81a-4148-9971-501fc017ffb0\"",
|
||||
"instanceId": "2c784cfe-47f4-499c-ab27-905cfad0fb22",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"dnsSettings": {},
|
||||
"privateMacAddress": "00FFFF009B80",
|
||||
"privateMacAllocationMethod": "Static",
|
||||
"serviceInsertionElements": [],
|
||||
"portSettings": {
|
||||
"macSpoofingEnabled": "Disabled",
|
||||
"arpGuardEnabled": "Disabled",
|
||||
"dhcpGuardEnabled": "Disabled",
|
||||
"stormLimit": 0,
|
||||
"portFlowLimit": 0,
|
||||
"iovWeight": 0,
|
||||
"iovInterruptModeration": "Off",
|
||||
"iovQueuePairsRequested": 0,
|
||||
"vmqWeight": 100
|
||||
},
|
||||
"isHostVirtualNetworkInterface": false,
|
||||
"configurationState": {
|
||||
"status": "Failure",
|
||||
"detailedInfo": [
|
||||
{
|
||||
"source": "VirtualSwitch",
|
||||
"message": "The Port is blocked on the host.",
|
||||
"code": "PortBlocked"
|
||||
}
|
||||
],
|
||||
"lastUpdatedTime": "2016-06-10T17:03:38.1131088-07:00",
|
||||
"id": "2c784cfe-47f4-499c-ab27-905cfad0fb22"
|
||||
},
|
||||
"isMultitenantStack": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/00000000-3333-0000-0000-000000000002",
|
||||
"resourceId": "00000000-3333-0000-0000-000000000002",
|
||||
"etag": "W/\"b69c7e1e-a13e-45e5-a5f5-3b7b7da4427a\"",
|
||||
"instanceId": "568a9d72-3790-4b99-a8cb-245caeeeeffb",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"dnsSettings": {},
|
||||
"privateMacAddress": "00FFFF0045FB",
|
||||
"privateMacAllocationMethod": "Static",
|
||||
"serviceInsertionElements": [],
|
||||
"portSettings": {
|
||||
"macSpoofingEnabled": "Disabled",
|
||||
"arpGuardEnabled": "Disabled",
|
||||
"dhcpGuardEnabled": "Disabled",
|
||||
"stormLimit": 0,
|
||||
"portFlowLimit": 0,
|
||||
"iovWeight": 0,
|
||||
"iovInterruptModeration": "Off",
|
||||
"iovQueuePairsRequested": 0,
|
||||
"vmqWeight": 100
|
||||
},
|
||||
"isHostVirtualNetworkInterface": false,
|
||||
"configurationState": {
|
||||
"status": "Failure",
|
||||
"detailedInfo": [
|
||||
{
|
||||
"source": "VirtualSwitch",
|
||||
"message": "The Port is blocked on the host.",
|
||||
"code": "PortBlocked"
|
||||
}
|
||||
],
|
||||
"lastUpdatedTime": "2016-06-10T17:03:38.1286886-07:00",
|
||||
"id": "568a9d72-3790-4b99-a8cb-245caeeeeffb"
|
||||
},
|
||||
"isMultitenantStack": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/12fc43be-402b-4251-9298-f983fc3f5342",
|
||||
"resourceId": "12fc43be-402b-4251-9298-f983fc3f5342",
|
||||
"etag": "W/\"bc08a698-966b-40e0-924a-47ca7f674a77\"",
|
||||
"instanceId": "f54b24e6-4ff8-46f0-88e8-3043087d871a",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"ipConfigurations": [
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/12fc43be-402b-4251-9298-f983fc3f5342/ipConfigurations/5941da25-a39b-43dc-afbe-014b3b105c16",
|
||||
"resourceId": "5941da25-a39b-43dc-afbe-014b3b105c16",
|
||||
"etag": "W/\"bc08a698-966b-40e0-924a-47ca7f674a77\"",
|
||||
"instanceId": "2f9e0add-e89a-4a51-8696-7b5c0ed1a1e3",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"privateIPAddress": "10.11.20.28",
|
||||
"privateIPAllocationMethod": "Static",
|
||||
"subnet": {
|
||||
"resourceRef": "/logicalnetworks/47931036-2874-4d45-b1f1-b69666088968/subnets/d977fe45-c5d0-43b6-8420-acc441cd15ec"
|
||||
},
|
||||
"accessControlList": {
|
||||
"resourceRef": "/accessControlLists/R2H06D4-ACS03"
|
||||
},
|
||||
"loadBalancerBackendAddressPools": [
|
||||
{
|
||||
"resourceRef": "/loadBalancers/539bd9de-9506-4423-9047-6eb9364c2a84/backendAddressPools/b6fbd9dd-1611-4ab0-ab3a-37176707bb9b"
|
||||
}
|
||||
],
|
||||
"loadBalancerInboundNatRules": []
|
||||
}
|
||||
}
|
||||
],
|
||||
"dnsSettings": {},
|
||||
"privateMacAddress": "00FFFF003561",
|
||||
"privateMacAllocationMethod": "Static",
|
||||
"serviceInsertionElements": [],
|
||||
"portSettings": {
|
||||
"macSpoofingEnabled": "Disabled",
|
||||
"arpGuardEnabled": "Disabled",
|
||||
"dhcpGuardEnabled": "Disabled",
|
||||
"stormLimit": 0,
|
||||
"portFlowLimit": 0,
|
||||
"iovWeight": 0,
|
||||
"iovInterruptModeration": "Off",
|
||||
"iovQueuePairsRequested": 0,
|
||||
"vmqWeight": 100
|
||||
},
|
||||
"isHostVirtualNetworkInterface": false,
|
||||
"configurationState": {
|
||||
"status": "Failure",
|
||||
"detailedInfo": [
|
||||
{
|
||||
"source": "VirtualSwitch",
|
||||
"message": "Failed to configure the policies on the Virtual Filtering Platform.",
|
||||
"code": "PolicyConfigurationFailureOnVfp"
|
||||
}
|
||||
],
|
||||
"lastUpdatedTime": "2016-06-10T17:03:37.7948284-07:00",
|
||||
"id": "f54b24e6-4ff8-46f0-88e8-3043087d871a"
|
||||
},
|
||||
"isMultitenantStack": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/2bebbd8f-e18b-4990-ba88-ed7c9b1892f5",
|
||||
"resourceId": "2bebbd8f-e18b-4990-ba88-ed7c9b1892f5",
|
||||
"etag": "W/\"e018a8ef-a59c-4dff-9aae-f3f5c8cd24a9\"",
|
||||
"instanceId": "38f40abe-9e46-4a00-beb1-3688652d3a4a",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"ipConfigurations": [
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/2bebbd8f-e18b-4990-ba88-ed7c9b1892f5/ipConfigurations/f0131475-1920-40c6-a951-789557254a54",
|
||||
"resourceId": "f0131475-1920-40c6-a951-789557254a54",
|
||||
"etag": "W/\"e018a8ef-a59c-4dff-9aae-f3f5c8cd24a9\"",
|
||||
"instanceId": "11f615e6-5527-4659-8c2c-6dc7104011d1",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"privateIPAddress": "10.11.20.25",
|
||||
"privateIPAllocationMethod": "Static",
|
||||
"subnet": {
|
||||
"resourceRef": "/logicalnetworks/47931036-2874-4d45-b1f1-b69666088968/subnets/d977fe45-c5d0-43b6-8420-acc441cd15ec"
|
||||
},
|
||||
"accessControlList": {
|
||||
"resourceRef": "/accessControlLists/R2H06D4-WAS01"
|
||||
},
|
||||
"loadBalancerBackendAddressPools": [
|
||||
{
|
||||
"resourceRef": "/loadBalancers/6e0d8b8d-6b9e-4704-b3a1-098f41ea0468/backendAddressPools/bf7d6edf-540f-4e3f-8984-06a86e89204a"
|
||||
},
|
||||
{
|
||||
"resourceRef": "/loadBalancers/67e54e56-e5e8-4a53-9a4b-cc932704b878/backendAddressPools/457cba88-2301-44cc-bc4a-9de74823ec2d"
|
||||
},
|
||||
{
|
||||
"resourceRef": "/loadBalancers/d1a62bf4-b448-40bb-9ebd-e14507c1a935/backendAddressPools/070493a5-3929-4292-80b5-0fdff61f8d39"
|
||||
}
|
||||
],
|
||||
"loadBalancerInboundNatRules": []
|
||||
}
|
||||
}
|
||||
],
|
||||
"dnsSettings": {},
|
||||
"privateMacAddress": "00FFFF0033D3",
|
||||
"privateMacAllocationMethod": "Static",
|
||||
"serviceInsertionElements": [],
|
||||
"portSettings": {
|
||||
"macSpoofingEnabled": "Disabled",
|
||||
"arpGuardEnabled": "Disabled",
|
||||
"dhcpGuardEnabled": "Disabled",
|
||||
"stormLimit": 0,
|
||||
"portFlowLimit": 0,
|
||||
"iovWeight": 0,
|
||||
"iovInterruptModeration": "Off",
|
||||
"iovQueuePairsRequested": 0,
|
||||
"vmqWeight": 100
|
||||
},
|
||||
"isHostVirtualNetworkInterface": false,
|
||||
"configurationState": {
|
||||
"status": "Failure",
|
||||
"detailedInfo": [
|
||||
{
|
||||
"source": "VirtualSwitch",
|
||||
"message": "Failed to configure the policies on the Virtual Filtering Platform.",
|
||||
"code": "PolicyConfigurationFailureOnVfp"
|
||||
}
|
||||
],
|
||||
"lastUpdatedTime": "2016-06-10T17:03:37.9099622-07:00",
|
||||
"id": "38f40abe-9e46-4a00-beb1-3688652d3a4a"
|
||||
},
|
||||
"isMultitenantStack": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/5508df81-a766-48d9-a42d-7a9ae1f6492d",
|
||||
"resourceId": "5508df81-a766-48d9-a42d-7a9ae1f6492d",
|
||||
"etag": "W/\"cda45dd0-9d32-44cf-af5f-deb74a246c62\"",
|
||||
"instanceId": "8372e129-0b4f-43f1-96f7-4bd49b3e6192",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"ipConfigurations": [
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/5508df81-a766-48d9-a42d-7a9ae1f6492d/ipConfigurations/e5ae036b-1b35-4529-9291-79522a5563e8",
|
||||
"resourceId": "e5ae036b-1b35-4529-9291-79522a5563e8",
|
||||
"etag": "W/\"cda45dd0-9d32-44cf-af5f-deb74a246c62\"",
|
||||
"instanceId": "4e301a29-a3aa-425e-a3b3-e0be0a3d333c",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"privateIPAddress": "10.11.20.29",
|
||||
"privateIPAllocationMethod": "Static",
|
||||
"subnet": {
|
||||
"resourceRef": "/logicalnetworks/47931036-2874-4d45-b1f1-b69666088968/subnets/d977fe45-c5d0-43b6-8420-acc441cd15ec"
|
||||
},
|
||||
"accessControlList": {
|
||||
"resourceRef": "/accessControlLists/R2H06D4-Xrp01"
|
||||
},
|
||||
"loadBalancerBackendAddressPools": [
|
||||
{
|
||||
"resourceRef": "/loadBalancers/7c13fef9-2dcd-4561-8b33-087425c0b519/backendAddressPools/2fd20693-a837-430c-b695-8a1c9323d158"
|
||||
},
|
||||
{
|
||||
"resourceRef": "/loadBalancers/888db9d4-716c-4002-8bee-fc1b933a1457/backendAddressPools/4374e94e-4aef-4f24-bdfa-bf6b51498da5"
|
||||
},
|
||||
{
|
||||
"resourceRef": "/loadBalancers/99bdd85b-f979-4d3f-931e-48a80a88a885/backendAddressPools/9bfcf3b2-1c25-4360-88d8-0158cd0859bd"
|
||||
},
|
||||
{
|
||||
"resourceRef": "/loadBalancers/c5d4d9c6-5cdd-401f-a08c-3ac01315036a/backendAddressPools/39eed82a-28b1-4288-be68-631262788785"
|
||||
}
|
||||
],
|
||||
"loadBalancerInboundNatRules": []
|
||||
}
|
||||
}
|
||||
],
|
||||
"dnsSettings": {},
|
||||
"privateMacAddress": "00FFFF008AE5",
|
||||
"privateMacAllocationMethod": "Static",
|
||||
"serviceInsertionElements": [],
|
||||
"portSettings": {
|
||||
"macSpoofingEnabled": "Disabled",
|
||||
"arpGuardEnabled": "Disabled",
|
||||
"dhcpGuardEnabled": "Disabled",
|
||||
"stormLimit": 0,
|
||||
"portFlowLimit": 0,
|
||||
"iovWeight": 0,
|
||||
"iovInterruptModeration": "Off",
|
||||
"iovQueuePairsRequested": 0,
|
||||
"vmqWeight": 100
|
||||
},
|
||||
"isHostVirtualNetworkInterface": false,
|
||||
"configurationState": {
|
||||
"status": "Failure",
|
||||
"detailedInfo": [
|
||||
{
|
||||
"source": "VirtualSwitch",
|
||||
"message": "Failed to configure the policies on the Virtual Filtering Platform.",
|
||||
"code": "PolicyConfigurationFailureOnVfp"
|
||||
}
|
||||
],
|
||||
"lastUpdatedTime": "2016-06-10T17:03:38.0193353-07:00",
|
||||
"id": "8372e129-0b4f-43f1-96f7-4bd49b3e6192"
|
||||
},
|
||||
"isMultitenantStack": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/5ecfd6cf-0792-45c4-8fce-63a201e3f5d9",
|
||||
"resourceId": "5ecfd6cf-0792-45c4-8fce-63a201e3f5d9",
|
||||
"etag": "W/\"2b58427a-8613-4a16-baa4-3fc7450f4a42\"",
|
||||
"instanceId": "c8d172b2-f756-4a25-8bcc-1d54d7d64955",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"ipConfigurations": [
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/5ecfd6cf-0792-45c4-8fce-63a201e3f5d9/ipConfigurations/33b79dbc-8632-439d-bd27-2b85d515f8f4",
|
||||
"resourceId": "33b79dbc-8632-439d-bd27-2b85d515f8f4",
|
||||
"etag": "W/\"2b58427a-8613-4a16-baa4-3fc7450f4a42\"",
|
||||
"instanceId": "317ce731-a7cb-4ef9-89fa-5e0f63574be9",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"privateIPAddress": "10.11.20.22",
|
||||
"privateIPAllocationMethod": "Static",
|
||||
"subnet": {
|
||||
"resourceRef": "/logicalnetworks/47931036-2874-4d45-b1f1-b69666088968/subnets/d977fe45-c5d0-43b6-8420-acc441cd15ec"
|
||||
},
|
||||
"accessControlList": {
|
||||
"resourceRef": "/accessControlLists/R2H06D4-ASql02"
|
||||
},
|
||||
"loadBalancerBackendAddressPools": [],
|
||||
"loadBalancerInboundNatRules": []
|
||||
}
|
||||
}
|
||||
],
|
||||
"dnsSettings": {},
|
||||
"privateMacAddress": "00FFFF003346",
|
||||
"privateMacAllocationMethod": "Static",
|
||||
"serviceInsertionElements": [],
|
||||
"portSettings": {
|
||||
"macSpoofingEnabled": "Disabled",
|
||||
"arpGuardEnabled": "Disabled",
|
||||
"dhcpGuardEnabled": "Disabled",
|
||||
"stormLimit": 0,
|
||||
"portFlowLimit": 0,
|
||||
"iovWeight": 0,
|
||||
"iovInterruptModeration": "Off",
|
||||
"iovQueuePairsRequested": 0,
|
||||
"vmqWeight": 100
|
||||
},
|
||||
"isHostVirtualNetworkInterface": false,
|
||||
"configurationState": {
|
||||
"status": "Failure",
|
||||
"detailedInfo": [
|
||||
{
|
||||
"source": "VirtualSwitch",
|
||||
"message": "Failed to configure the policies on the Virtual Filtering Platform.",
|
||||
"code": "PolicyConfigurationFailureOnVfp"
|
||||
}
|
||||
],
|
||||
"lastUpdatedTime": "2016-06-10T17:03:37.847415-07:00",
|
||||
"id": "c8d172b2-f756-4a25-8bcc-1d54d7d64955"
|
||||
},
|
||||
"isMultitenantStack": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/64814d86-8a2e-4a66-b452-f67b5e148a6f",
|
||||
"resourceId": "64814d86-8a2e-4a66-b452-f67b5e148a6f",
|
||||
"etag": "W/\"75a9396f-4fc9-47de-8404-eb33e38e0201\"",
|
||||
"instanceId": "35bac936-f071-4644-a6e9-1543054b0e50",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"ipConfigurations": [
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/64814d86-8a2e-4a66-b452-f67b5e148a6f/ipConfigurations/6d118103-b6b8-4621-8d67-93101a4770a5",
|
||||
"resourceId": "6d118103-b6b8-4621-8d67-93101a4770a5",
|
||||
"etag": "W/\"75a9396f-4fc9-47de-8404-eb33e38e0201\"",
|
||||
"instanceId": "c0bec304-d698-4278-8bcb-521bde580ec5",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"privateIPAddress": "10.11.20.31",
|
||||
"privateIPAllocationMethod": "Static",
|
||||
"subnet": {
|
||||
"resourceRef": "/logicalnetworks/47931036-2874-4d45-b1f1-b69666088968/subnets/d977fe45-c5d0-43b6-8420-acc441cd15ec"
|
||||
},
|
||||
"accessControlList": {
|
||||
"resourceRef": "/accessControlLists/R2H06D4-CA01"
|
||||
},
|
||||
"loadBalancerBackendAddressPools": [],
|
||||
"loadBalancerInboundNatRules": []
|
||||
}
|
||||
}
|
||||
],
|
||||
"dnsSettings": {},
|
||||
"privateMacAddress": "00FFFF0036EE",
|
||||
"privateMacAllocationMethod": "Static",
|
||||
"serviceInsertionElements": [],
|
||||
"portSettings": {
|
||||
"macSpoofingEnabled": "Disabled",
|
||||
"arpGuardEnabled": "Disabled",
|
||||
"dhcpGuardEnabled": "Disabled",
|
||||
"stormLimit": 0,
|
||||
"portFlowLimit": 0,
|
||||
"iovWeight": 0,
|
||||
"iovInterruptModeration": "Off",
|
||||
"iovQueuePairsRequested": 0,
|
||||
"vmqWeight": 100
|
||||
},
|
||||
"isHostVirtualNetworkInterface": false,
|
||||
"configurationState": {
|
||||
"status": "Failure",
|
||||
"detailedInfo": [
|
||||
{
|
||||
"source": "VirtualSwitch",
|
||||
"message": "Failed to configure the policies on the Virtual Filtering Platform.",
|
||||
"code": "PolicyConfigurationFailureOnVfp"
|
||||
}
|
||||
],
|
||||
"lastUpdatedTime": "2016-06-10T17:03:38.0974609-07:00",
|
||||
"id": "35bac936-f071-4644-a6e9-1543054b0e50"
|
||||
},
|
||||
"isMultitenantStack": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/665d0a8b-00bd-4db8-9a9d-d7a234e58dcd",
|
||||
"resourceId": "665d0a8b-00bd-4db8-9a9d-d7a234e58dcd",
|
||||
"etag": "W/\"df409b55-8ba2-4540-b274-69f90c09427f\"",
|
||||
"instanceId": "08062f05-7d88-4e0b-9ee9-5fd36e367a02",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"ipConfigurations": [
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/665d0a8b-00bd-4db8-9a9d-d7a234e58dcd/ipConfigurations/834c1c0a-3880-41b2-a034-58a9143d8853",
|
||||
"resourceId": "834c1c0a-3880-41b2-a034-58a9143d8853",
|
||||
"etag": "W/\"df409b55-8ba2-4540-b274-69f90c09427f\"",
|
||||
"instanceId": "bee20f5a-23ea-491a-9da6-041bfd927344",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"privateIPAddress": "10.11.20.30",
|
||||
"privateIPAllocationMethod": "Static",
|
||||
"subnet": {
|
||||
"resourceRef": "/logicalnetworks/47931036-2874-4d45-b1f1-b69666088968/subnets/d977fe45-c5d0-43b6-8420-acc441cd15ec"
|
||||
},
|
||||
"accessControlList": {
|
||||
"resourceRef": "/accessControlLists/R2H06D4-ADFS01"
|
||||
},
|
||||
"loadBalancerBackendAddressPools": [
|
||||
{
|
||||
"resourceRef": "/loadBalancers/92b66fb0-c8e4-4f2d-9548-aab8e70dd59a/backendAddressPools/15a0482e-0b94-4102-adf5-f6efb0c04237"
|
||||
},
|
||||
{
|
||||
"resourceRef": "/loadBalancers/c7672d18-8497-4359-85bf-e4e0982bf718/backendAddressPools/8b562e63-5b5a-4598-8953-52fd4c2e2f6e"
|
||||
}
|
||||
],
|
||||
"loadBalancerInboundNatRules": []
|
||||
}
|
||||
}
|
||||
],
|
||||
"dnsSettings": {},
|
||||
"privateMacAddress": "00FFFF00DF6A",
|
||||
"privateMacAllocationMethod": "Static",
|
||||
"serviceInsertionElements": [],
|
||||
"portSettings": {
|
||||
"macSpoofingEnabled": "Disabled",
|
||||
"arpGuardEnabled": "Disabled",
|
||||
"dhcpGuardEnabled": "Disabled",
|
||||
"stormLimit": 0,
|
||||
"portFlowLimit": 0,
|
||||
"iovWeight": 0,
|
||||
"iovInterruptModeration": "Off",
|
||||
"iovQueuePairsRequested": 0,
|
||||
"vmqWeight": 100
|
||||
},
|
||||
"isHostVirtualNetworkInterface": false,
|
||||
"configurationState": {
|
||||
"status": "Failure",
|
||||
"detailedInfo": [
|
||||
{
|
||||
"source": "VirtualSwitch",
|
||||
"message": "Failed to configure the policies on the Virtual Filtering Platform.",
|
||||
"code": "PolicyConfigurationFailureOnVfp"
|
||||
}
|
||||
],
|
||||
"lastUpdatedTime": "2016-06-10T17:03:38.066241-07:00",
|
||||
"id": "08062f05-7d88-4e0b-9ee9-5fd36e367a02"
|
||||
},
|
||||
"isMultitenantStack": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/6bfd26f7-c43e-4d25-9d9f-a995faf37e16",
|
||||
"resourceId": "6bfd26f7-c43e-4d25-9d9f-a995faf37e16",
|
||||
"etag": "W/\"a6c0a639-3182-4c64-bd8f-f21149f471f0\"",
|
||||
"instanceId": "ff62cf92-b5bb-4bf2-9259-0704e41a9243",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"ipConfigurations": [
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/6bfd26f7-c43e-4d25-9d9f-a995faf37e16/ipConfigurations/c4bbe7ab-e201-4fdd-9e97-fb6e11072829",
|
||||
"resourceId": "c4bbe7ab-e201-4fdd-9e97-fb6e11072829",
|
||||
"etag": "W/\"a6c0a639-3182-4c64-bd8f-f21149f471f0\"",
|
||||
"instanceId": "17735903-d811-4c5e-837e-74363be61be9",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"privateIPAddress": "10.11.20.20",
|
||||
"privateIPAllocationMethod": "Static",
|
||||
"subnet": {
|
||||
"resourceRef": "/logicalnetworks/47931036-2874-4d45-b1f1-b69666088968/subnets/d977fe45-c5d0-43b6-8420-acc441cd15ec"
|
||||
},
|
||||
"accessControlList": {
|
||||
"resourceRef": "/accessControlLists/R2H06D4-Con01"
|
||||
},
|
||||
"loadBalancerBackendAddressPools": [],
|
||||
"loadBalancerInboundNatRules": []
|
||||
}
|
||||
}
|
||||
],
|
||||
"dnsSettings": {},
|
||||
"privateMacAddress": "00FFFF00873D",
|
||||
"privateMacAllocationMethod": "Static",
|
||||
"serviceInsertionElements": [],
|
||||
"portSettings": {
|
||||
"macSpoofingEnabled": "Disabled",
|
||||
"arpGuardEnabled": "Disabled",
|
||||
"dhcpGuardEnabled": "Disabled",
|
||||
"stormLimit": 0,
|
||||
"portFlowLimit": 0,
|
||||
"iovWeight": 0,
|
||||
"iovInterruptModeration": "Off",
|
||||
"iovQueuePairsRequested": 0,
|
||||
"vmqWeight": 100
|
||||
},
|
||||
"isHostVirtualNetworkInterface": false,
|
||||
"configurationState": {
|
||||
"status": "Failure",
|
||||
"detailedInfo": [
|
||||
{
|
||||
"source": "VirtualSwitch",
|
||||
"message": "Failed to configure the policies on the Virtual Filtering Platform.",
|
||||
"code": "PolicyConfigurationFailureOnVfp"
|
||||
}
|
||||
],
|
||||
"lastUpdatedTime": "2016-06-10T17:03:37.8104684-07:00",
|
||||
"id": "ff62cf92-b5bb-4bf2-9259-0704e41a9243"
|
||||
},
|
||||
"isMultitenantStack": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/c295951a-a495-41f0-b8ef-84d3317150a3",
|
||||
"resourceId": "c295951a-a495-41f0-b8ef-84d3317150a3",
|
||||
"etag": "W/\"592569bf-fdfa-4004-b465-5ec46fcdf27b\"",
|
||||
"instanceId": "a362889f-e715-4f71-b798-d9530ec27306",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"ipConfigurations": [
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/c295951a-a495-41f0-b8ef-84d3317150a3/ipConfigurations/e3d8fbc1-a0c2-4583-a3bc-96f59e1a31a3",
|
||||
"resourceId": "e3d8fbc1-a0c2-4583-a3bc-96f59e1a31a3",
|
||||
"etag": "W/\"592569bf-fdfa-4004-b465-5ec46fcdf27b\"",
|
||||
"instanceId": "41b6f512-0224-4953-a7af-09757e1fe94d",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"privateIPAddress": "10.11.20.24",
|
||||
"privateIPAllocationMethod": "Static",
|
||||
"subnet": {
|
||||
"resourceRef": "/logicalnetworks/47931036-2874-4d45-b1f1-b69666088968/subnets/d977fe45-c5d0-43b6-8420-acc441cd15ec"
|
||||
},
|
||||
"accessControlList": {
|
||||
"resourceRef": "/accessControlLists/R2H06D4-WDS01"
|
||||
},
|
||||
"loadBalancerBackendAddressPools": [],
|
||||
"loadBalancerInboundNatRules": []
|
||||
}
|
||||
}
|
||||
],
|
||||
"dnsSettings": {},
|
||||
"privateMacAddress": "00FFFF00DD4F",
|
||||
"privateMacAllocationMethod": "Static",
|
||||
"serviceInsertionElements": [],
|
||||
"portSettings": {
|
||||
"macSpoofingEnabled": "Disabled",
|
||||
"arpGuardEnabled": "Disabled",
|
||||
"dhcpGuardEnabled": "Disabled",
|
||||
"stormLimit": 0,
|
||||
"portFlowLimit": 0,
|
||||
"iovWeight": 0,
|
||||
"iovInterruptModeration": "Off",
|
||||
"iovQueuePairsRequested": 0,
|
||||
"vmqWeight": 100
|
||||
},
|
||||
"isHostVirtualNetworkInterface": false,
|
||||
"configurationState": {
|
||||
"status": "Failure",
|
||||
"detailedInfo": [
|
||||
{
|
||||
"source": "VirtualSwitch",
|
||||
"message": "Failed to configure the policies on the Virtual Filtering Platform.",
|
||||
"code": "PolicyConfigurationFailureOnVfp"
|
||||
}
|
||||
],
|
||||
"lastUpdatedTime": "2016-06-10T17:03:37.8787124-07:00",
|
||||
"id": "a362889f-e715-4f71-b798-d9530ec27306"
|
||||
},
|
||||
"isMultitenantStack": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/cb30d461-1921-42b3-b8f1-042c02271aa1",
|
||||
"resourceId": "cb30d461-1921-42b3-b8f1-042c02271aa1",
|
||||
"etag": "W/\"c53edc8f-e195-4dd8-85e2-134c79e3a763\"",
|
||||
"instanceId": "1dbd4c42-d37b-472c-a4dc-f3f983078515",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"ipConfigurations": [
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/cb30d461-1921-42b3-b8f1-042c02271aa1/ipConfigurations/0d1e86b9-2442-43fc-8fdf-7d12f1f152ca",
|
||||
"resourceId": "0d1e86b9-2442-43fc-8fdf-7d12f1f152ca",
|
||||
"etag": "W/\"c53edc8f-e195-4dd8-85e2-134c79e3a763\"",
|
||||
"instanceId": "09f3330e-2fec-41cc-a0f7-47598bbee61a",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"privateIPAddress": "10.11.20.21",
|
||||
"privateIPAllocationMethod": "Static",
|
||||
"subnet": {
|
||||
"resourceRef": "/logicalnetworks/47931036-2874-4d45-b1f1-b69666088968/subnets/d977fe45-c5d0-43b6-8420-acc441cd15ec"
|
||||
},
|
||||
"accessControlList": {
|
||||
"resourceRef": "/accessControlLists/R2H06D4-ASql01"
|
||||
},
|
||||
"loadBalancerBackendAddressPools": [],
|
||||
"loadBalancerInboundNatRules": []
|
||||
}
|
||||
}
|
||||
],
|
||||
"dnsSettings": {},
|
||||
"privateMacAddress": "00FFFF00DDC1",
|
||||
"privateMacAllocationMethod": "Static",
|
||||
"serviceInsertionElements": [],
|
||||
"portSettings": {
|
||||
"macSpoofingEnabled": "Disabled",
|
||||
"arpGuardEnabled": "Disabled",
|
||||
"dhcpGuardEnabled": "Disabled",
|
||||
"stormLimit": 0,
|
||||
"portFlowLimit": 0,
|
||||
"iovWeight": 0,
|
||||
"iovInterruptModeration": "Off",
|
||||
"iovQueuePairsRequested": 0,
|
||||
"vmqWeight": 100
|
||||
},
|
||||
"isHostVirtualNetworkInterface": false,
|
||||
"configurationState": {
|
||||
"status": "Failure",
|
||||
"detailedInfo": [
|
||||
{
|
||||
"source": "VirtualSwitch",
|
||||
"message": "Failed to configure the policies on the Virtual Filtering Platform.",
|
||||
"code": "PolicyConfigurationFailureOnVfp"
|
||||
}
|
||||
],
|
||||
"lastUpdatedTime": "2016-06-10T17:03:37.8359266-07:00",
|
||||
"id": "1dbd4c42-d37b-472c-a4dc-f3f983078515"
|
||||
},
|
||||
"isMultitenantStack": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/e40e3b34-13fd-42fc-a74e-26fe68999b73",
|
||||
"resourceId": "e40e3b34-13fd-42fc-a74e-26fe68999b73",
|
||||
"etag": "W/\"7481d801-d103-4c30-a6d2-013df0790946\"",
|
||||
"instanceId": "cf89bc5d-32d6-4f35-9cbf-66ae94e5c004",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"ipConfigurations": [
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/e40e3b34-13fd-42fc-a74e-26fe68999b73/ipConfigurations/424fb61c-3b12-4c02-82d3-4a36d66d1617",
|
||||
"resourceId": "424fb61c-3b12-4c02-82d3-4a36d66d1617",
|
||||
"etag": "W/\"7481d801-d103-4c30-a6d2-013df0790946\"",
|
||||
"instanceId": "b53ecbbf-b21c-43f1-a606-36b9fe111e80",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"privateIPAddress": "10.11.20.26",
|
||||
"privateIPAllocationMethod": "Static",
|
||||
"subnet": {
|
||||
"resourceRef": "/logicalnetworks/47931036-2874-4d45-b1f1-b69666088968/subnets/d977fe45-c5d0-43b6-8420-acc441cd15ec"
|
||||
},
|
||||
"accessControlList": {
|
||||
"resourceRef": "/accessControlLists/R2H06D4-ACS01"
|
||||
},
|
||||
"loadBalancerBackendAddressPools": [
|
||||
{
|
||||
"resourceRef": "/loadBalancers/539bd9de-9506-4423-9047-6eb9364c2a84/backendAddressPools/b6fbd9dd-1611-4ab0-ab3a-37176707bb9b"
|
||||
}
|
||||
],
|
||||
"loadBalancerInboundNatRules": []
|
||||
}
|
||||
}
|
||||
],
|
||||
"dnsSettings": {},
|
||||
"privateMacAddress": "00FFFF008A58",
|
||||
"privateMacAllocationMethod": "Static",
|
||||
"serviceInsertionElements": [],
|
||||
"portSettings": {
|
||||
"macSpoofingEnabled": "Disabled",
|
||||
"arpGuardEnabled": "Disabled",
|
||||
"dhcpGuardEnabled": "Disabled",
|
||||
"stormLimit": 0,
|
||||
"portFlowLimit": 0,
|
||||
"iovWeight": 0,
|
||||
"iovInterruptModeration": "Off",
|
||||
"iovQueuePairsRequested": 0,
|
||||
"vmqWeight": 100
|
||||
},
|
||||
"isHostVirtualNetworkInterface": false,
|
||||
"configurationState": {
|
||||
"status": "Failure",
|
||||
"detailedInfo": [
|
||||
{
|
||||
"source": "VirtualSwitch",
|
||||
"message": "Failed to configure the policies on the Virtual Filtering Platform.",
|
||||
"code": "PolicyConfigurationFailureOnVfp"
|
||||
}
|
||||
],
|
||||
"lastUpdatedTime": "2016-06-10T17:03:37.9412444-07:00",
|
||||
"id": "cf89bc5d-32d6-4f35-9cbf-66ae94e5c004"
|
||||
},
|
||||
"isMultitenantStack": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/e9e900f3-8285-4fef-b336-65b4896e09a8",
|
||||
"resourceId": "e9e900f3-8285-4fef-b336-65b4896e09a8",
|
||||
"etag": "W/\"e248b728-51a2-4be7-91cf-8d894a33dbaf\"",
|
||||
"instanceId": "dbd62461-2f1b-434a-aa54-d7fab820cd57",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"ipConfigurations": [
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/e9e900f3-8285-4fef-b336-65b4896e09a8/ipConfigurations/007efd64-1e3e-4104-97c7-039cc1bd3ec3",
|
||||
"resourceId": "007efd64-1e3e-4104-97c7-039cc1bd3ec3",
|
||||
"etag": "W/\"e248b728-51a2-4be7-91cf-8d894a33dbaf\"",
|
||||
"instanceId": "7f9593e7-c92b-4e63-b1d8-c0bfa3119e2e",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"privateIPAddress": "10.11.20.23",
|
||||
"privateIPAllocationMethod": "Static",
|
||||
"subnet": {
|
||||
"resourceRef": "/logicalnetworks/47931036-2874-4d45-b1f1-b69666088968/subnets/d977fe45-c5d0-43b6-8420-acc441cd15ec"
|
||||
},
|
||||
"accessControlList": {
|
||||
"resourceRef": "/accessControlLists/R2H06D4-SUS01"
|
||||
},
|
||||
"loadBalancerBackendAddressPools": [],
|
||||
"loadBalancerInboundNatRules": []
|
||||
}
|
||||
}
|
||||
],
|
||||
"dnsSettings": {},
|
||||
"privateMacAddress": "00FFFF0089CA",
|
||||
"privateMacAllocationMethod": "Static",
|
||||
"serviceInsertionElements": [],
|
||||
"portSettings": {
|
||||
"macSpoofingEnabled": "Disabled",
|
||||
"arpGuardEnabled": "Disabled",
|
||||
"dhcpGuardEnabled": "Disabled",
|
||||
"stormLimit": 0,
|
||||
"portFlowLimit": 0,
|
||||
"iovWeight": 0,
|
||||
"iovInterruptModeration": "Off",
|
||||
"iovQueuePairsRequested": 0,
|
||||
"vmqWeight": 100
|
||||
},
|
||||
"isHostVirtualNetworkInterface": false,
|
||||
"configurationState": {
|
||||
"status": "Failure",
|
||||
"detailedInfo": [
|
||||
{
|
||||
"source": "VirtualSwitch",
|
||||
"message": "Failed to configure the policies on the Virtual Filtering Platform.",
|
||||
"code": "PolicyConfigurationFailureOnVfp"
|
||||
}
|
||||
],
|
||||
"lastUpdatedTime": "2016-06-10T17:03:37.8630807-07:00",
|
||||
"id": "dbd62461-2f1b-434a-aa54-d7fab820cd57"
|
||||
},
|
||||
"isMultitenantStack": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/f5730847-0879-4eab-89de-ce54b217630c",
|
||||
"resourceId": "f5730847-0879-4eab-89de-ce54b217630c",
|
||||
"etag": "W/\"0d7aa01f-dd17-48ad-ba7b-cf20de59563b\"",
|
||||
"instanceId": "d0842ac6-36aa-4fae-93ce-98beedaca3ee",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"ipConfigurations": [
|
||||
{
|
||||
"resourceRef": "/networkInterfaces/f5730847-0879-4eab-89de-ce54b217630c/ipConfigurations/cf2a6356-c9de-4e63-9abe-d4b7759a7181",
|
||||
"resourceId": "cf2a6356-c9de-4e63-9abe-d4b7759a7181",
|
||||
"etag": "W/\"0d7aa01f-dd17-48ad-ba7b-cf20de59563b\"",
|
||||
"instanceId": "efce1627-227b-44a7-8bee-83cb578472a8",
|
||||
"properties": {
|
||||
"provisioningState": "Succeeded",
|
||||
"privateIPAddress": "10.11.20.27",
|
||||
"privateIPAllocationMethod": "Static",
|
||||
"subnet": {
|
||||
"resourceRef": "/logicalnetworks/47931036-2874-4d45-b1f1-b69666088968/subnets/d977fe45-c5d0-43b6-8420-acc441cd15ec"
|
||||
},
|
||||
"accessControlList": {
|
||||
"resourceRef": "/accessControlLists/R2H06D4-ACS02"
|
||||
},
|
||||
"loadBalancerBackendAddressPools": [
|
||||
{
|
||||
"resourceRef": "/loadBalancers/539bd9de-9506-4423-9047-6eb9364c2a84/backendAddressPools/b6fbd9dd-1611-4ab0-ab3a-37176707bb9b"
|
||||
}
|
||||
],
|
||||
"loadBalancerInboundNatRules": []
|
||||
}
|
||||
}
|
||||
],
|
||||
"dnsSettings": {},
|
||||
"privateMacAddress": "00FFFF00DFDC",
|
||||
"privateMacAllocationMethod": "Static",
|
||||
"serviceInsertionElements": [],
|
||||
"portSettings": {
|
||||
"macSpoofingEnabled": "Disabled",
|
||||
"arpGuardEnabled": "Disabled",
|
||||
"dhcpGuardEnabled": "Disabled",
|
||||
"stormLimit": 0,
|
||||
"portFlowLimit": 0,
|
||||
"iovWeight": 0,
|
||||
"iovInterruptModeration": "Off",
|
||||
"iovQueuePairsRequested": 0,
|
||||
"vmqWeight": 100
|
||||
},
|
||||
"isHostVirtualNetworkInterface": false,
|
||||
"configurationState": {
|
||||
"status": "Failure",
|
||||
"detailedInfo": [
|
||||
{
|
||||
"source": "VirtualSwitch",
|
||||
"message": "Failed to configure the policies on the Virtual Filtering Platform.",
|
||||
"code": "PolicyConfigurationFailureOnVfp"
|
||||
}
|
||||
],
|
||||
"lastUpdatedTime": "2016-06-10T17:03:37.972492-07:00",
|
||||
"id": "d0842ac6-36aa-4fae-93ce-98beedaca3ee"
|
||||
},
|
||||
"isMultitenantStack": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"nextLink": ""
|
||||
}
|
@ -174,7 +174,7 @@ class TestClient(unittest.TestCase):
|
||||
self._response = fake_response.FakeResponse()
|
||||
|
||||
def _test_get_resource(self, model, raw_data):
|
||||
with test_utils.LogSnatcher("hnv_client.client") as logging:
|
||||
with test_utils.LogSnatcher("hnv_client.common.model") as logging:
|
||||
model.from_raw_data(raw_data)
|
||||
self.assertEqual(logging.output, [])
|
||||
|
||||
@ -215,3 +215,27 @@ class TestClient(unittest.TestCase):
|
||||
raw_data["grandParentResourceID"] = "{uniqueString}"
|
||||
self._test_get_resource(model=client.IPPools,
|
||||
raw_data=raw_data)
|
||||
|
||||
def test_network_interfaces(self):
|
||||
resources = self._response.network_interfaces()
|
||||
for raw_data in resources.get("value", []):
|
||||
self._test_get_resource(model=client.NetworkInterfaces,
|
||||
raw_data=raw_data)
|
||||
|
||||
def test_network_interfaces_structure(self):
|
||||
raw_data = self._response.network_interfaces()["value"][0]
|
||||
network_interface = client.NetworkInterfaces.from_raw_data(raw_data)
|
||||
|
||||
for configuration in network_interface.ip_configurations:
|
||||
self.assertIsInstance(configuration, client.IPConfiguration)
|
||||
|
||||
self.assertIsInstance(network_interface.dns_settings,
|
||||
client.DNSSettings)
|
||||
self.assertIsInstance(network_interface.port_settings,
|
||||
client.PortSettings)
|
||||
|
||||
def test_ip_configurations(self):
|
||||
resources = self._response.ip_configurations()
|
||||
for raw_data in resources.get("value", []):
|
||||
self._test_get_resource(model=client.IPConfiguration,
|
||||
raw_data=raw_data)
|
||||
|
Loading…
x
Reference in New Issue
Block a user