Merge "Add network resource properties"

This commit is contained in:
Jenkins 2016-04-12 15:23:13 +00:00 committed by Gerrit Code Review
commit 8c3e9cd760
24 changed files with 153 additions and 2 deletions

View File

@ -30,6 +30,8 @@ class FloatingIP(resource.Resource):
allow_list = True
# Properties
#: The floating IP description.
description = resource.prop('description')
#: The fixed IP address associated with the floating IP. If you
#: intend to associate the floating IP with a fixed IP at creation
#: time, then you must indicate the identifier of the internal port.
@ -47,6 +49,8 @@ class FloatingIP(resource.Resource):
project_id = resource.prop('tenant_id')
#: The ID of an associated router.
router_id = resource.prop('router_id')
#: The floating IP status. Value is ``ACTIVE`` or ``DOWN``.
status = resource.prop('status')
@classmethod
def find_available(cls, session):

View File

@ -39,6 +39,8 @@ class HealthMonitor(resource.Resource):
is_admin_state_up = resource.prop('admin_state_up', type=bool)
#: Maximum consecutive health probe tries.
max_retries = resource.prop('max_retries')
#: Name of the health monitor.
name = resource.prop('name')
#: List of pools associated with this health monitor
#: *Type: list of dicts which contain the pool IDs*
pool_ids = resource.prop('pools', type=list)

View File

@ -40,6 +40,9 @@ class LoadBalancer(resource.Resource):
name = resource.prop('name')
#: Status of load_balancer operating, e.g. ONLINE, OFFLINE.
operating_status = resource.prop('operating_status')
#: List of pools associated with this load balancer.
#: *Type: list of dicts which contain the pool IDs*
pool_ids = resource.prop('pools', type=list)
#: The ID of the project this load balancer is associated with.
project_id = resource.prop('tenant_id')
#: The name of the provider.

View File

@ -10,6 +10,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack.network import network_service
from openstack import resource
@ -34,6 +35,11 @@ class Network(resource.Resource):
#: Availability zones for the network.
#: *Type: list of availability zone names*
availability_zones = resource.prop('availability_zones')
#: Timestamp when the network was created.
#: *Type: datetime object parsed from ISO 8601 formatted string*
created_at = resource.prop('created_at', type=format.ISO8601)
#: The network description.
description = resource.prop('description')
#: The ID of the IPv4 address scope for the network.
ipv4_address_scope_id = resource.prop('ipv4_address_scope')
#: The ID of the IPv6 address scope for the network.
@ -41,6 +47,9 @@ class Network(resource.Resource):
#: The administrative state of the network, which is up ``True`` or
#: down ``False``. *Type: bool*
is_admin_state_up = resource.prop('admin_state_up', type=bool)
#: Whether or not this is the default external network.
#: *Type: bool*
is_default = resource.prop('is_default', type=bool)
#: The port security status, which is enabled ``True`` or disabled
#: ``False``. *Type: bool* *Default: False*
is_port_security_enabled = resource.prop('port_security_enabled',
@ -75,3 +84,6 @@ class Network(resource.Resource):
#: The associated subnet IDs.
#: *Type: list of strs of the subnet IDs*
subnet_ids = resource.prop('subnets', type=list)
#: Timestamp when the network was last updated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated_at', type=format.ISO8601)

View File

@ -42,6 +42,9 @@ class Pool(resource.Resource):
#: List of associated listeners.
#: *Type: list of dicts which contain the listener IDs*
listener_ids = resource.prop('listeners', type=list)
#: List of associated load balancers.
#: *Type: list of dicts which contain the load balancer IDs*
load_balancer_ids = resource.prop('loadbalancers', type=list)
#: List of members that belong to the pool.
#: *Type: list of dicts which contain the member IDs*
member_ids = resource.prop('members', type=list)

View File

@ -33,6 +33,8 @@ class PoolMember(resource.Resource):
#: The administrative state of the pool member, which is up ``True`` or
#: down ``False``. *Type: bool*
is_admin_state_up = resource.prop('admin_state_up', type=bool)
#: Name of the pool member.
name = resource.prop('name')
#: The ID of the project this pool member is associated with.
project_id = resource.prop('tenant_id')
#: The port on which the application is hosted.

View File

@ -10,6 +10,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack.network import network_service
from openstack import resource
@ -56,6 +57,11 @@ class Port(resource.Resource):
#: In GET operations, the binding:vnic_type extended attribute is
#: visible to only port owners and administrative users.
binding_vnic_type = resource.prop('binding:vnic_type')
#: Timestamp when the port was created.
#: *Type: datetime object parsed from ISO 8601 formatted string*
created_at = resource.prop('created_at', type=format.ISO8601)
#: The port description.
description = resource.prop('description')
#: Device ID of this port.
device_id = resource.prop('device_id')
#: Device owner of this port (e.g. ``network:dhcp``).
@ -90,3 +96,6 @@ class Port(resource.Resource):
security_group_ids = resource.prop('security_groups', type=list)
#: The port status. Value is ``ACTIVE`` or ``DOWN``.
status = resource.prop('status')
#: Timestamp when the port was last updated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated_at', type=format.ISO8601)

View File

@ -29,12 +29,24 @@ class Quota(resource.Resource):
# Properties
#: The maximum amount of floating IPs you can have. *Type: int*
floating_ips = resource.prop('floatingip', type=int)
#: The maximum amount of health monitors you can create. *Type: int*
health_monitors = resource.prop('healthmonitor', type=int)
#: The maximum amount of listeners you can create. *Type: int*
listeners = resource.prop('listener', type=int)
#: The maximum amount of load balancers you can create. *Type: int*
load_balancers = resource.prop('loadbalancer', type=int)
#: The maximum amount of L7 policies you can create. *Type: int*
l7_policies = resource.prop('l7policy', type=int)
#: The maximum amount of networks you can create. *Type: int*
networks = resource.prop('network', type=int)
#: The maximum amount of pools you can create. *Type: int*
pools = resource.prop('pool', type=int)
#: The maximum amount of ports you can create. *Type: int*
ports = resource.prop('port', type=int)
#: The ID of the project these quota values are for.
project_id = resource.prop('tenant_id')
#: The maximum amount of RBAC policies you can create. *Type: int*
rbac_policies = resource.prop('rbac_policy', type=int)
#: The maximum amount of routers you can create. *Type: int*
routers = resource.prop('router', type=int)
#: The maximum amount of subnets you can create. *Type: int*
@ -45,5 +57,3 @@ class Quota(resource.Resource):
security_group_rules = resource.prop('security_group_rule', type=int)
#: The maximum amount of security groups you can create. *Type: int*
security_groups = resource.prop('security_group', type=int)
#: The maximum amount of RBAC policies you can create. *Type: int*
rbac_policies = resource.prop('rbac_policy', type=int)

View File

@ -35,6 +35,8 @@ class Router(resource.Resource):
#: Availability zones for the router.
#: *Type: list of availability zone names*
availability_zones = resource.prop('availability_zones')
#: The router description.
description = resource.prop('description')
#: The ``network_id``, for the external gateway. *Type: dict*
external_gateway_info = resource.prop('external_gateway_info', type=dict)
#: The administrative state of the router, which is up ``True``

View File

@ -33,6 +33,8 @@ class SecurityGroupRule(resource.Resource):
#: rule is applied to incoming ingress traffic for that instance.
#: An egress rule is applied to traffic leaving the instance.
direction = resource.prop('direction')
#: The security group rule description.
description = resource.prop('description')
#: Must be IPv4 or IPv6, and addresses represented in CIDR must match
#: the ingress or egress rules.
ethertype = resource.prop('ethertype')

View File

@ -10,6 +10,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack.network import network_service
from openstack import resource
@ -32,6 +33,11 @@ class Subnet(resource.Resource):
allocation_pools = resource.prop('allocation_pools')
#: The CIDR.
cidr = resource.prop('cidr')
#: Timestamp when the subnet was created.
#: *Type: datetime object parsed from ISO 8601 formatted string*
created_at = resource.prop('created_at', type=format.ISO8601)
#: The subnet description.
description = resource.prop('description')
#: A list of DNS nameservers.
dns_nameservers = resource.prop('dns_nameservers')
#: The gateway IP address.
@ -56,3 +62,6 @@ class Subnet(resource.Resource):
project_id = resource.prop('tenant_id')
#: The subnet pool ID from which to obtain a CIDR.
subnet_pool_id = resource.prop('subnetpool_id')
#: Timestamp when the subnet was last updated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated_at', type=format.ISO8601)

View File

@ -10,6 +10,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack.network import network_service
from openstack import resource
@ -30,6 +31,9 @@ class SubnetPool(resource.Resource):
# Properties
#: The ID of the address scope associated with the subnet pool.
address_scope_id = resource.prop('address_scope_id')
#: Timestamp when the subnet pool was created.
#: *Type: datetime object parsed from ISO 8601 formatted string*
created_at = resource.prop('created_at', type=format.ISO8601)
#: The length of the prefix to allocate when the cidr or prefixlen
#: attributes are omitted when creating a subnet. *Type: int*
default_prefix_length = resource.prop('default_prefixlen', type=int)
@ -39,9 +43,14 @@ class SubnetPool(resource.Resource):
#: default_quota is measured units of /64. All projects that use the
#: subnet pool have the same prefix quota applied. *Type: int*
default_quota = resource.prop('default_quota', type=int)
#: The subnet pool description.
description = resource.prop('description')
#: Read-only. The IP address family of the list of prefixes.
#: *Type: int*
ip_version = resource.prop('ip_version', type=int)
#: Whether or not this is the default subnet pool.
#: *Type: bool*
is_default = resource.prop('is_default', type=bool)
#: Indicates whether this subnet pool is shared across all projects.
#: *Type: bool*
is_shared = resource.prop('shared', type=bool)
@ -59,3 +68,6 @@ class SubnetPool(resource.Resource):
#: The adjacent prefixes are merged and treated as a single prefix.
#: *Type: list*
prefixes = resource.prop('prefixes', type=list)
#: Timestamp when the subnet pool was last updated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated_at', type=format.ISO8601)

View File

@ -24,6 +24,8 @@ EXAMPLE = {
'port_id': '5',
'tenant_id': '6',
'router_id': '7',
'description': '8',
'status': 'ACTIVE',
}
@ -52,6 +54,8 @@ class TestFloatingIP(testtools.TestCase):
self.assertEqual(EXAMPLE['port_id'], sot.port_id)
self.assertEqual(EXAMPLE['tenant_id'], sot.project_id)
self.assertEqual(EXAMPLE['router_id'], sot.router_id)
self.assertEqual(EXAMPLE['description'], sot.description)
self.assertEqual(EXAMPLE['status'], sot.status)
def test_find_available(self):
mock_session = mock.Mock()

View File

@ -27,6 +27,7 @@ EXAMPLE = {
'timeout': '9',
'type': '10',
'url_path': '11',
'name': '12',
}
@ -57,3 +58,4 @@ class TestHealthMonitor(testtools.TestCase):
self.assertEqual(EXAMPLE['timeout'], sot.timeout)
self.assertEqual(EXAMPLE['type'], sot.type)
self.assertEqual(EXAMPLE['url_path'], sot.url_path)
self.assertEqual(EXAMPLE['name'], sot.name)

View File

@ -28,6 +28,7 @@ EXAMPLE = {
'vip_subnet_id': '10',
'vip_port_id': '11',
'provider': '12',
'pools': [{'id', '13'}],
}
@ -60,3 +61,4 @@ class TestLoadBalancer(testtools.TestCase):
self.assertEqual(EXAMPLE['vip_subnet_id'], sot.vip_subnet_id)
self.assertEqual(EXAMPLE['vip_port_id'], sot.vip_port_id)
self.assertEqual(EXAMPLE['provider'], sot.provider)
self.assertEqual(EXAMPLE['pools'], sot.pool_ids)

View File

@ -10,6 +10,8 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
from openstack.network.v2 import network
@ -34,6 +36,10 @@ EXAMPLE = {
'availability_zones': ['16'],
'ipv4_address_scope': '17',
'ipv6_address_scope': '18',
'description': '19',
'created_at': '2016-03-09T12:14:57.233772',
'updated_at': '2016-07-09T12:14:57.233772',
'is_default': False,
}
@ -78,3 +84,11 @@ class TestNetwork(testtools.TestCase):
sot.ipv4_address_scope_id)
self.assertEqual(EXAMPLE['ipv6_address_scope'],
sot.ipv6_address_scope_id)
self.assertEqual(EXAMPLE['description'], sot.description)
dt = datetime.datetime(2016, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.created_at.replace(tzinfo=None))
dt = datetime.datetime(2016, 7, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertFalse(sot.is_default)

View File

@ -27,6 +27,7 @@ EXAMPLE = {
'tenant_id': '9',
'protocol': '10',
'session_persistence': '11',
'loadbalancers': [{'id': '12'}],
}
@ -58,3 +59,4 @@ class TestPool(testtools.TestCase):
self.assertEqual(EXAMPLE['protocol'], sot.protocol)
self.assertEqual(EXAMPLE['session_persistence'],
sot.session_persistence)
self.assertEqual(EXAMPLE['loadbalancers'], sot.load_balancer_ids)

View File

@ -25,6 +25,7 @@ EXAMPLE = {
'protocol_port': 5,
'subnet_id': '6',
'weight': 7,
'name': '8',
}
@ -51,6 +52,7 @@ class TestPoolMember(testtools.TestCase):
self.assertEqual(EXAMPLE['protocol_port'], sot.protocol_port)
self.assertEqual(EXAMPLE['subnet_id'], sot.subnet_id)
self.assertEqual(EXAMPLE['weight'], sot.weight)
self.assertEqual(EXAMPLE['name'], sot.name)
def test_create_body(self):
params = copy.deepcopy(EXAMPLE)

View File

@ -10,6 +10,8 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
from openstack.network.v2 import port
@ -37,6 +39,9 @@ EXAMPLE = {
'port_security_enabled': True,
'dns_assignment': [{'19': 19}],
'dns_name': '20',
'description': '21',
'created_at': '2016-03-09T12:14:57.233772',
'updated_at': '2016-07-09T12:14:57.233772',
}
@ -79,3 +84,10 @@ class TestPort(testtools.TestCase):
self.assertTrue(sot.is_port_security_enabled)
self.assertEqual(EXAMPLE['dns_assignment'], sot.dns_assignment)
self.assertEqual(EXAMPLE['dns_name'], sot.dns_name)
self.assertEqual(EXAMPLE['description'], sot.description)
dt = datetime.datetime(2016, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.created_at.replace(tzinfo=None))
dt = datetime.datetime(2016, 7, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))

View File

@ -26,6 +26,11 @@ EXAMPLE = {
'security_group_rule': 8,
'security_group': 9,
'rbac_policy': -1,
'healthmonitor': 11,
'listener': 12,
'loadbalancer': 13,
'l7policy': 14,
'pool': 15,
}
@ -56,3 +61,8 @@ class TestQuota(testtools.TestCase):
sot.security_group_rules)
self.assertEqual(EXAMPLE['security_group'], sot.security_groups)
self.assertEqual(EXAMPLE['rbac_policy'], sot.rbac_policies)
self.assertEqual(EXAMPLE['healthmonitor'], sot.health_monitors)
self.assertEqual(EXAMPLE['listener'], sot.listeners)
self.assertEqual(EXAMPLE['loadbalancer'], sot.load_balancers)
self.assertEqual(EXAMPLE['l7policy'], sot.l7_policies)
self.assertEqual(EXAMPLE['pool'], sot.pools)

View File

@ -26,6 +26,7 @@ EXAMPLE = {
'routes': [],
'availability_zone_hints': [],
'availability_zones': [],
'description': '10',
}
EXAMPLE_WITH_OPTIONAL = {
@ -42,6 +43,7 @@ EXAMPLE_WITH_OPTIONAL = {
'distributed': True,
'availability_zone_hints': ['zone-1', 'zone-2'],
'availability_zones': ['zone-2'],
'description': 'description',
}
@ -75,6 +77,7 @@ class TestRouter(testtools.TestCase):
sot.availability_zone_hints)
self.assertEqual(EXAMPLE['availability_zones'],
sot.availability_zones)
self.assertEqual(EXAMPLE['description'], sot.description)
def test_make_it_with_optional(self):
sot = router.Router(EXAMPLE_WITH_OPTIONAL)
@ -92,6 +95,8 @@ class TestRouter(testtools.TestCase):
sot.availability_zone_hints)
self.assertEqual(EXAMPLE_WITH_OPTIONAL['availability_zones'],
sot.availability_zones)
self.assertEqual(EXAMPLE_WITH_OPTIONAL['description'],
sot.description)
def test_add_interface_subnet(self):
# Add subnet to a router

View File

@ -26,6 +26,7 @@ EXAMPLE = {
'remote_group_id': '8',
'remote_ip_prefix': '9',
'security_group_id': '10',
'description': '11',
}
@ -55,3 +56,4 @@ class TestSecurityGroupRule(testtools.TestCase):
self.assertEqual(EXAMPLE['remote_group_id'], sot.remote_group_id)
self.assertEqual(EXAMPLE['remote_ip_prefix'], sot.remote_ip_prefix)
self.assertEqual(EXAMPLE['security_group_id'], sot.security_group_id)
self.assertEqual(EXAMPLE['description'], sot.description)

View File

@ -10,6 +10,8 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
from openstack.network.v2 import subnet
@ -30,6 +32,9 @@ EXAMPLE = {
'network_id': '10',
'tenant_id': '11',
'subnetpool_id': '12',
'description': '13',
'created_at': '2016-03-09T12:14:57.233772',
'updated_at': '2016-07-09T12:14:57.233772',
}
@ -63,3 +68,10 @@ class TestSubnet(testtools.TestCase):
self.assertEqual(EXAMPLE['network_id'], sot.network_id)
self.assertEqual(EXAMPLE['tenant_id'], sot.project_id)
self.assertEqual(EXAMPLE['subnetpool_id'], sot.subnet_pool_id)
self.assertEqual(EXAMPLE['description'], sot.description)
dt = datetime.datetime(2016, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.created_at.replace(tzinfo=None))
dt = datetime.datetime(2016, 7, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))

View File

@ -10,6 +10,8 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
from openstack.network.v2 import subnet_pool
@ -27,6 +29,10 @@ EXAMPLE = {
'ip_version': 4,
'shared': True,
'address_scope_id': '11',
'description': '12',
'created_at': '2016-03-09T12:14:57.233772',
'updated_at': '2016-07-09T12:14:57.233772',
'is_default': True,
}
@ -60,3 +66,11 @@ class TestSubnetpool(testtools.TestCase):
self.assertEqual(EXAMPLE['ip_version'], sot.ip_version)
self.assertTrue(sot.is_shared)
self.assertEqual(EXAMPLE['address_scope_id'], sot.address_scope_id)
self.assertEqual(EXAMPLE['description'], sot.description)
dt = datetime.datetime(2016, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.created_at.replace(tzinfo=None))
dt = datetime.datetime(2016, 7, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertTrue(sot.is_default)