Added method to OpenStackHeatStack to return OpenStackRouter objects.
[snaps.git] / snaps / domain / network.py
index 2c71db8..448ee89 100644 (file)
@@ -25,11 +25,16 @@ class Network:
         """
         self.name = kwargs.get('name')
         self.id = kwargs.get('id')
-        self.type = kwargs.get('provider:network_type')
+        self.admin_state_up = kwargs.get('admin_state_up')
+        self.shared = kwargs.get('shared')
+        self.external = kwargs.get('router:external', kwargs.get('external'))
+        self.type = kwargs.get('provider:network_type', kwargs.get('type'))
 
     def __eq__(self, other):
         return (self.name == other.name and self.id == other.id and
-                self.type == other.type)
+                self.admin_state_up == other.admin_state_up and
+                self.shared == other.shared and
+                self.external == other.external and self.type == other.type)
 
 
 class Subnet:
@@ -43,11 +48,40 @@ class Subnet:
         """
         self.name = kwargs.get('name')
         self.id = kwargs.get('id')
+        self.network_id = kwargs.get('network_id')
         self.cidr = kwargs.get('cidr')
+        self.ip_version = kwargs.get('ip_version')
+        self.gateway_ip = kwargs.get('gateway_ip')
+        self.enable_dhcp = kwargs.get('enable_dhcp')
+        self.dns_nameservers = kwargs.get('dns_nameservers')
+        self.host_routes = kwargs.get('host_routes')
+        self.ipv6_ra_mode = kwargs.get('ipv6_ra_mode')
+        self.ipv6_address_mode = kwargs.get('ipv6_address_mode')
+
+        self.start = None
+        self.end = None
+        if ('allocation_pools' in kwargs and
+                len(kwargs['allocation_pools']) > 0):
+            # Will need to ultimately support a list of pools
+            pools = kwargs['allocation_pools'][0]
+            if 'start' in pools:
+                self.start = pools['start']
+            if 'end' in pools:
+                self.end = pools['end']
 
     def __eq__(self, other):
-        return (self.name == other.name and self.id == other.id and
-                self.cidr == other.cidr)
+        return (self.name == other.name and
+                self.id == other.id and
+                self.network_id == other.network_id and
+                self.cidr == other.cidr and
+                self.ip_version == other.ip_version and
+                self.gateway_ip == other.gateway_ip and
+                self.enable_dhcp == other.enable_dhcp and
+                self.dns_nameservers == other.dns_nameservers and
+                self.host_routes == other.host_routes and
+                self.ipv6_ra_mode == other.ipv6_ra_mode and
+                self.ipv6_address_mode == other.ipv6_address_mode and
+                self.start == other.start and self.end == other.end)
 
 
 class Port:
@@ -60,13 +94,32 @@ class Port:
         Constructor
         :param name: the security group's name
         :param id: the security group's id
-        :param ips: a list of IP addresses
+        :param description: description
+        :param ips|fixed_ips: a list of IP addresses
+        :param mac_address: the port's MAC addresses
+        :param allowed_address_pairs: the port's allowed_address_pairs value
+        :param admin_state_up: T|F whether or not the port is up
+        :param device_id: device's ID
+        :param device_owner: device's owner
+        :param network_id: associated network ID
+        :param port_security_enabled: T|F whether or not the port security is
+                                      enabled
+        :param security_groups: the security group IDs associated with port
+        :param project_id: the associated project/tenant ID
         """
         self.name = kwargs.get('name')
         self.id = kwargs.get('id')
-        self.ips = kwargs.get('ips')
+        self.description = kwargs.get('description')
+        self.ips = kwargs.get('ips', kwargs.get('fixed_ips'))
         self.mac_address = kwargs.get('mac_address')
         self.allowed_address_pairs = kwargs.get('allowed_address_pairs')
+        self.admin_state_up = kwargs.get('admin_state_up')
+        self.device_id = kwargs.get('device_id')
+        self.device_owner = kwargs.get('device_owner')
+        self.network_id = kwargs.get('network_id')
+        self.port_security_enabled = kwargs.get('port_security_enabled')
+        self.security_groups = kwargs.get('security_groups')
+        self.project_id = kwargs.get('tenant_id', kwargs.get('project_id'))
 
     def __eq__(self, other):
         return (self.name == other.name and self.id == other.id and
@@ -83,20 +136,46 @@ class Router:
         Constructor
         :param name: the router's name
         :param id: the router's id
+        :param status: the router's status
+        :param tenant_id: the router's project/tenant ID
+        :param admin_state_up: Router is up when True
+        :param external_gateway_info: dict() for populating external_network_id
+                                      and external_fixed_ips
+                   external_network_id: ID of the external network to route
+                                        in dict under key 'external_fixed_ips'
+                   external_fixed_ips: List IP addresses associated with the
+                                       external_network_id found in dict under
+                                       key 'network_id'
+        :param port_subnets: list of tuples where #1 is the Port domain object
+                             and #2 is a list of associated Subnet domain
+                             objects
         """
         self.name = kwargs.get('name')
         self.id = kwargs.get('id')
         self.status = kwargs.get('status')
         self.tenant_id = kwargs.get('tenant_id')
         self.admin_state_up = kwargs.get('admin_state_up')
-        self.external_gateway_info = kwargs.get('external_gateway_info')
+        self.port_subnets = kwargs.get('port_subnets')
+
+        if (kwargs.get('external_gateway_info') and
+                isinstance(kwargs.get('external_gateway_info'), dict) and
+                kwargs.get('external_gateway_info').get('external_fixed_ips')):
+            gateway_info = kwargs.get('external_gateway_info')
+
+            self.external_network_id = gateway_info.get('network_id')
+            self.external_fixed_ips = gateway_info.get('external_fixed_ips')
+        else:
+            self.external_fixed_ips = kwargs.get('external_fixed_ips', None)
+            self.external_network_id = kwargs.get('external_network_id', None)
 
     def __eq__(self, other):
         return (self.name == other.name and self.id == other.id and
                 self.status == other.status and
                 self.tenant_id == other.tenant_id and
                 self.admin_state_up == other.admin_state_up and
-                self.external_gateway_info == other.external_gateway_info)
+                self.external_network_id == other.external_network_id and
+                self.external_fixed_ips == other.external_fixed_ips and
+                self.port_subnets == other.port_subnets)
 
 
 class InterfaceRouter: