Add support for network interfaces

This commit is contained in:
Alexandru Coman 2017-01-30 22:10:47 +02:00
parent 741a99e458
commit 580801c900
No known key found for this signature in database
GPG Key ID: A7B6A9021F704507
7 changed files with 1273 additions and 54 deletions

View File

@ -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)

View File

@ -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")

View 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": ""
}

View File

@ -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": ""
}

View File

@ -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
}
}
],

View 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": ""
}

View File

@ -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)