Add support for public IP addresses

This commit is contained in:
Alexandru Coman 2017-02-08 11:27:11 +02:00
parent ac78a59069
commit e1d00b9ed7
No known key found for this signature in database
GPG Key ID: A7B6A9021F704507
4 changed files with 122 additions and 1 deletions

View File

@ -276,11 +276,16 @@ class ResourceMetadata(model.Model):
Network Controller and the group that the tenant belongs to in the
client network."""
resource_name = model.Field(name="resource_name", key="name",
resource_name = model.Field(name="resource_name", key="resourceName",
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."""
name = model.Field(name="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
@ -1667,3 +1672,62 @@ class NetworkConnections(_BaseHNVModel):
properties["gateway"] = gateway
return super(NetworkConnections, cls).from_raw_data(raw_data)
class PublicIPAddresses(_BaseHNVModel):
"""Model for public IP addresses.
The PublicIPAddresses resource specifies an IP address which is publically
available. This PublicIPAddresses resource is used by the VirtualGateways
resource and the loadBalancers resource to indicate the IP address that
can be used to communicate with the virtual network from outside it.
"""
_endpoint = "/networking/v1/publicIpAddresses/{resource_i}"
ip_address = model.Field(name="ip_address", key="ipAddress",
is_required=False, is_read_only=False)
"""IP address which is allocated.
The caller can pass in a specific public IP address to be allocated or
leave it empty.
"""
allocation_method = model.Field(name="allocation_method",
key="publicIPAllocationMethod",
is_required=False, is_read_only=False)
"""`Dynamic` or `Static`
In case of static publicIpAllocationMethod, ipAddress property
needs to be passed indicating the specific public IP address which
needs to be allocated.
In case of Dynamic publicIpAllocationMethod, the ipAddress
property is not meaningful in a PUT (allocation request). In case
of Dynamic, any free public IP address will be allocated to the
caller.
"""
dns_record = model.Field(name="dns_record", key="dnsRecord",
is_required=False, is_read_only=False)
"""Properties of a DNS record associated with this public IP address."""
idle_timeout = model.Field(name="idle_timeout",
key="idleTimeoutInMinutes",
is_required=False, is_read_only=False)
"""Specifies the timeout for the TCP idle connection.
The value can be set between 4 and 30 minutes. The default is 4
minutes. If public IP is used as a frontend IP of a Load Balancer
this value is ignored.
"""
ip_configuration = model.Field(name="ip_configuration",
key="ipConfiguration",
is_required=False, is_read_only=True)
"""Reference to an ipConfigurations resource.
Relative URI of the private IP address with which this public IP is
associated. Private ip can be defined on NIC, loadBalancers, or
gateways.
"""

View File

@ -85,3 +85,7 @@ class FakeResponse(object):
def network_connections(self):
"""Fake GET(all) response for network connections."""
return self._load_resource("network_connections.json")
def public_ip_addresses(self):
"""Fake GET(all) response for public IP addresses."""
return self._load_resource("public_ip_addresses.json")

View File

@ -0,0 +1,47 @@
{
"value": [
{
"resourceRef": "/publicIPAddresses/pip1",
"resourceId": "pip1",
"etag": "W/\"2b2feb9e-9830-42ed-9923-01d6693fb240\"",
"instanceId": "b34f7a07-4637-40f2-abc5-075ddfc9b785",
"properties": {
"provisioningState": "Succeeded",
"ipAddress": "12.21.4.5",
"publicIPAllocationMethod": "Dynamic",
"idleTimeoutInMinutes": 4
}
},
{
"resourceRef": "/publicIPAddresses/pip2",
"resourceId": "pip2",
"etag": "W/\"c7a95773-8ad3-44a6-b89c-f4a305569e1d\"",
"instanceId": "018a7e31-cf8e-4292-899d-2f3f4b9b96c5",
"properties": {
"provisioningState": "Succeeded",
"ipAddress": "12.21.4.51",
"publicIPAllocationMethod": "Static",
"idleTimeoutInMinutes": 4
},
"tags": {
"a": "b"
}
},
{
"resourceRef": "/publicIPAddresses/pip2",
"resourceId": "pip2",
"resourceMetadata": {
"resourceName": "outbound1"
},
"etag": "W/\"90a799f7-549d-44ac-baa9-f7ccf69b1dda\"",
"instanceId": "018a7e31-cf8e-4292-899d-2f3f4b9b96c5",
"properties": {
"provisioningState": "Updating",
"ipAddress": "12.21.4.51",
"publicIPAllocationMethod": "Static",
"idleTimeoutInMinutes": 1
}
}
],
"nextLink": ""
}

View File

@ -294,3 +294,9 @@ class TestClient(unittest.TestCase):
for raw_data in resources.get("value", []):
self._test_get_resource(model=client.NetworkConnections,
raw_data=raw_data)
def test_public_ip_addresses(self):
resources = self._response.public_ip_addresses()
for raw_data in resources.get("value", []):
self._test_get_resource(model=client.PublicIPAddresses,
raw_data=raw_data)