summaryrefslogtreecommitdiffstats
path: root/snaps/openstack/create_network.py
diff options
context:
space:
mode:
Diffstat (limited to 'snaps/openstack/create_network.py')
-rw-r--r--snaps/openstack/create_network.py110
1 files changed, 55 insertions, 55 deletions
diff --git a/snaps/openstack/create_network.py b/snaps/openstack/create_network.py
index bf873f2..d639c2b 100644
--- a/snaps/openstack/create_network.py
+++ b/snaps/openstack/create_network.py
@@ -14,7 +14,8 @@
# limitations under the License.
import logging
-from neutronclient.common.exceptions import NotFound
+import enum
+from neutronclient.common.exceptions import NetworkNotFoundClient
from snaps.openstack.openstack_creator import OpenStackNetworkObject
from snaps.openstack.utils import keystone_utils, neutron_utils
@@ -41,7 +42,6 @@ class OpenStackNetwork(OpenStackNetworkObject):
# Attributes instantiated on create()
self.__network = None
- self.__subnets = list()
def initialize(self):
"""
@@ -54,15 +54,6 @@ class OpenStackNetwork(OpenStackNetworkObject):
self._neutron, network_settings=self.network_settings,
project_id=self.network_settings.get_project_id(self._os_creds))
- if self.__network:
- for subnet_setting in self.network_settings.subnet_settings:
- sub_inst = neutron_utils.get_subnet(
- self._neutron, subnet_settings=subnet_setting)
- if sub_inst:
- self.__subnets.append(sub_inst)
- logger.debug(
- "Subnet '%s' created successfully" % sub_inst.id)
-
return self.__network
def create(self):
@@ -77,19 +68,7 @@ class OpenStackNetwork(OpenStackNetworkObject):
self.__network = neutron_utils.create_network(
self._neutron, self._os_creds, self.network_settings)
logger.debug(
- "Network '%s' created successfully" % self.__network.id)
-
- for subnet_setting in self.network_settings.subnet_settings:
- sub_inst = neutron_utils.get_subnet(
- self._neutron, subnet_settings=subnet_setting)
- if not sub_inst:
- sub_inst = neutron_utils.create_subnet(
- self._neutron, subnet_setting, self._os_creds,
- self.__network)
- if sub_inst:
- self.__subnets.append(sub_inst)
- logger.debug(
- "Subnet '%s' created successfully" % sub_inst.id)
+ 'Network [%s] created successfully' % self.__network.id)
return self.__network
@@ -97,23 +76,11 @@ class OpenStackNetwork(OpenStackNetworkObject):
"""
Removes and deletes all items created in reverse order.
"""
- for subnet in self.__subnets:
- try:
- logger.info(
- 'Deleting subnet with name ' + subnet.name)
- neutron_utils.delete_subnet(self._neutron, subnet)
- except NotFound as e:
- logger.warning(
- 'Error deleting subnet with message - ' + str(e))
- pass
- self.__subnets = list()
-
if self.__network:
try:
neutron_utils.delete_network(self._neutron, self.__network)
- except NotFound:
+ except NetworkNotFoundClient:
pass
-
self.__network = None
def get_network(self):
@@ -123,13 +90,6 @@ class OpenStackNetwork(OpenStackNetworkObject):
"""
return self.__network
- def get_subnets(self):
- """
- Returns the OpenStack subnet objects
- :return:
- """
- return self.__subnets
-
class NetworkSettings:
"""
@@ -189,7 +149,7 @@ class NetworkSettings:
self.subnet_settings = list()
subnet_settings = kwargs.get('subnets')
if not subnet_settings:
- subnet_settings = kwargs.get('subnet_settings')
+ subnet_settings = kwargs.get('subnet_settings', list())
if subnet_settings:
for subnet_config in subnet_settings:
if isinstance(subnet_config, SubnetSettings):
@@ -262,6 +222,15 @@ class NetworkSettingsError(Exception):
"""
+class IPv6Mode(enum.Enum):
+ """
+ A rule's direction
+ """
+ slaac = 'slaac'
+ stateful = 'dhcpv6-stateful'
+ stateless = 'dhcpv6-stateless'
+
+
class SubnetSettings:
"""
Class representing a subnet configuration
@@ -301,10 +270,10 @@ class SubnetSettings:
]
:param destination: The destination for static route (optional)
:param nexthop: The next hop for the destination (optional)
- :param ipv6_ra_mode: A valid value is dhcpv6-stateful,
- dhcpv6-stateless, or slaac (optional)
- :param ipv6_address_mode: A valid value is dhcpv6-stateful,
- dhcpv6-stateless, or slaac (optional)
+ :param ipv6_ra_mode: an instance of the IPv6Mode enum
+ (optional when enable_dhcp is True)
+ :param ipv6_address_mode: an instance of the IPv6Mode enum
+ (optional when enable_dhcp is True)
:raise: SubnetSettingsError when config does not have or cidr values
are None
"""
@@ -322,16 +291,19 @@ class SubnetSettings:
self.gateway_ip = kwargs.get('gateway_ip')
self.enable_dhcp = kwargs.get('enable_dhcp')
- if kwargs.get('dns_nameservers'):
+ if 'dns_nameservers' in kwargs:
self.dns_nameservers = kwargs.get('dns_nameservers')
else:
- self.dns_nameservers = ['8.8.8.8']
+ if self.ip_version == 4:
+ self.dns_nameservers = ['8.8.8.8']
+ else:
+ self.dns_nameservers = list()
self.host_routes = kwargs.get('host_routes')
self.destination = kwargs.get('destination')
self.nexthop = kwargs.get('nexthop')
- self.ipv6_ra_mode = kwargs.get('ipv6_ra_mode')
- self.ipv6_address_mode = kwargs.get('ipv6_address_mode')
+ self.ipv6_ra_mode = map_mode(kwargs.get('ipv6_ra_mode'))
+ self.ipv6_address_mode = map_mode(kwargs.get('ipv6_address_mode'))
if not self.name or not self.cidr:
raise SubnetSettingsError('Name and cidr required for subnets')
@@ -383,12 +355,40 @@ class SubnetSettings:
if self.nexthop:
out['nexthop'] = self.nexthop
if self.ipv6_ra_mode:
- out['ipv6_ra_mode'] = self.ipv6_ra_mode
+ out['ipv6_ra_mode'] = self.ipv6_ra_mode.value
if self.ipv6_address_mode:
- out['ipv6_address_mode'] = self.ipv6_address_mode
+ out['ipv6_address_mode'] = self.ipv6_address_mode.value
return out
+def map_mode(mode):
+ """
+ Takes a the direction value maps it to the Direction enum. When None return
+ None
+ :param mode: the mode value
+ :return: the IPv6Mode enum object
+ :raise: SubnetSettingsError if value is invalid
+ """
+ if not mode:
+ return None
+ if isinstance(mode, IPv6Mode):
+ return mode
+ else:
+ mode_str = str(mode)
+ if mode_str == 'slaac':
+ return IPv6Mode.slaac
+ elif mode_str == 'dhcpv6-stateful':
+ return IPv6Mode.stateful
+ elif mode_str == 'stateful':
+ return IPv6Mode.stateful
+ elif mode_str == 'dhcpv6-stateless':
+ return IPv6Mode.stateless
+ elif mode_str == 'stateless':
+ return IPv6Mode.stateless
+ else:
+ raise SubnetSettingsError('Invalid mode - ' + mode_str)
+
+
class SubnetSettingsError(Exception):
"""
Exception to be thrown when subnet settings attributes are incorrect