summaryrefslogtreecommitdiffstats
path: root/snaps/openstack/create_network.py
diff options
context:
space:
mode:
authorspisarski <s.pisarski@cablelabs.com>2017-10-12 14:17:59 -0600
committerspisarski <s.pisarski@cablelabs.com>2017-10-12 14:17:59 -0600
commit92d57dd388e5ad292d476298ad79d8a566780e2a (patch)
treedeaa2c6854aa53a6e71cc15c06c9d5d1e57beab2 /snaps/openstack/create_network.py
parentcef5b452099579a3f69a5c233b7ba25bd0d80f5c (diff)
Improved creator/state machine classes class hierarchy.
Created abstract superclasses for all classes responsible for deploying and maintaining the state of objects deployed to OpenStack which should help developers better understand the library. JIRA: SNAPS-183 Change-Id: I7651bd338f0d4e4086abbc11755e6be4f19058bd Signed-off-by: spisarski <s.pisarski@cablelabs.com>
Diffstat (limited to 'snaps/openstack/create_network.py')
-rw-r--r--snaps/openstack/create_network.py81
1 files changed, 44 insertions, 37 deletions
diff --git a/snaps/openstack/create_network.py b/snaps/openstack/create_network.py
index 166a682..437f294 100644
--- a/snaps/openstack/create_network.py
+++ b/snaps/openstack/create_network.py
@@ -15,6 +15,8 @@
import logging
from neutronclient.common.exceptions import NotFound
+
+from snaps.openstack.openstack_creator import OpenStackNetworkObject
from snaps.openstack.utils import keystone_utils, neutron_utils
__author__ = 'spisarski'
@@ -22,9 +24,9 @@ __author__ = 'spisarski'
logger = logging.getLogger('OpenStackNetwork')
-class OpenStackNetwork:
+class OpenStackNetwork(OpenStackNetworkObject):
"""
- Class responsible for creating a network in OpenStack
+ Class responsible for managing a network in OpenStack
"""
def __init__(self, os_creds, network_settings):
@@ -33,56 +35,61 @@ class OpenStackNetwork:
:param os_creds: The credentials to connect with OpenStack
:param network_settings: The settings used to create a network
"""
- self.__os_creds = os_creds
+ super(self.__class__, self).__init__(os_creds)
+
self.network_settings = network_settings
- self.__neutron = None
# Attributes instantiated on create()
self.__network = None
self.__subnets = list()
- def create(self, cleanup=False):
+ def initialize(self):
+ """
+ Loads the existing OpenStack network/subnet
+ :return: The Network domain object or None
+ """
+ super(self.__class__, self).initialize()
+
+ self.__network = neutron_utils.get_network(
+ 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):
"""
Responsible for creating not only the network but then a private
subnet, router, and an interface to the router.
- :param cleanup: When true, only perform lookups for OpenStack objects.
- :return: the created network object or None
+ :return: the Network domain object
"""
- self.__neutron = neutron_utils.neutron_client(self.__os_creds)
-
- logger.info(
- 'Creating neutron network %s...' % self.network_settings.name)
- net_inst = neutron_utils.get_network(
- self.__neutron, network_settings=self.network_settings,
- project_id=self.network_settings.get_project_id(self.__os_creds))
- if net_inst:
- self.__network = net_inst
- else:
- if not cleanup:
- self.__network = neutron_utils.create_network(
- self.__neutron, self.__os_creds, self.network_settings)
- else:
- logger.info(
- 'Network does not exist and will not create as in cleanup'
- ' mode')
- return
- logger.debug(
- "Network '%s' created successfully" % self.__network.id)
+ self.initialize()
+
+ if not self.__network:
+ self.__network = neutron_utils.create_network(
+ self._neutron, self._os_creds, self.network_settings)
+ logger.debug(
+ "Network '%s' created successfully" % self.__network.id)
- logger.debug('Creating Subnets....')
for subnet_setting in self.network_settings.subnet_settings:
sub_inst = neutron_utils.get_subnet(
- self.__neutron, subnet_settings=subnet_setting)
+ 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)
- else:
- if not cleanup:
- self.__subnets.append(
- neutron_utils.create_subnet(
- self.__neutron, subnet_setting, self.__os_creds,
- self.__network))
return self.__network
@@ -94,7 +101,7 @@ class OpenStackNetwork:
try:
logger.info(
'Deleting subnet with name ' + subnet.name)
- neutron_utils.delete_subnet(self.__neutron, subnet)
+ neutron_utils.delete_subnet(self._neutron, subnet)
except NotFound as e:
logger.warning(
'Error deleting subnet with message - ' + str(e))
@@ -103,7 +110,7 @@ class OpenStackNetwork:
if self.__network:
try:
- neutron_utils.delete_network(self.__neutron, self.__network)
+ neutron_utils.delete_network(self._neutron, self.__network)
except NotFound:
pass