summaryrefslogtreecommitdiffstats
path: root/snaps/openstack/create_project.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_project.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_project.py')
-rw-r--r--snaps/openstack/create_project.py65
1 files changed, 35 insertions, 30 deletions
diff --git a/snaps/openstack/create_project.py b/snaps/openstack/create_project.py
index 38505ad..0cf6d4a 100644
--- a/snaps/openstack/create_project.py
+++ b/snaps/openstack/create_project.py
@@ -16,6 +16,7 @@ import logging
from keystoneclient.exceptions import NotFound, Conflict
+from snaps.openstack.openstack_creator import OpenStackIdentityObject
from snaps.openstack.utils import keystone_utils, neutron_utils, nova_utils
__author__ = 'spisarski'
@@ -23,9 +24,9 @@ __author__ = 'spisarski'
logger = logging.getLogger('create_image')
-class OpenStackProject:
+class OpenStackProject(OpenStackIdentityObject):
"""
- Class responsible for creating a project/project in OpenStack
+ Class responsible for managing a project/project in OpenStack
"""
def __init__(self, os_creds, project_settings):
@@ -35,38 +36,42 @@ class OpenStackProject:
:param project_settings: The project's settings
:return:
"""
- self.__os_creds = os_creds
+ super(self.__class__, self).__init__(os_creds)
+
self.project_settings = project_settings
self.__project = None
self.__role = None
- self.__keystone = None
self.__role_name = self.project_settings.name + '-role'
- def create(self, cleanup=False):
+ def initialize(self):
"""
- Creates the image in OpenStack if it does not already exist
- :param cleanup: Denotes whether or not this is being called for cleanup
- :return: The OpenStack Image object
+ Loads the existing Project object if it exists
+ :return: The Project domain object
"""
- self.__keystone = keystone_utils.keystone_client(self.__os_creds)
+ super(self.__class__, self).initialize()
+
self.__project = keystone_utils.get_project(
- keystone=self.__keystone, project_settings=self.project_settings)
- if self.__project:
- logger.info(
- 'Found project with name - ' + self.project_settings.name)
- elif not cleanup:
+ keystone=self._keystone, project_settings=self.project_settings)
+ return self.__project
+
+ def create(self):
+ """
+ Creates a Project/Tenant in OpenStack if it does not already exist
+ :return: The Project domain object
+ """
+ self.initialize()
+
+ if not self.__project:
self.__project = keystone_utils.create_project(
- self.__keystone, self.project_settings)
+ self._keystone, self.project_settings)
for username in self.project_settings.users:
- user = keystone_utils.get_user(self.__keystone, username)
+ user = keystone_utils.get_user(self._keystone, username)
if user:
try:
self.assoc_user(user)
except Conflict as e:
logger.warn('Unable to associate user %s due to %s',
user.name, e)
- else:
- logger.info('Did not create image due to cleanup mode')
return self.__project
@@ -77,7 +82,7 @@ class OpenStackProject:
"""
if self.__project:
# Delete security group 'default' if exists
- neutron = neutron_utils.neutron_client(self.__os_creds)
+ neutron = neutron_utils.neutron_client(self._os_creds)
default_sec_grp = neutron_utils.get_security_group(
neutron, sec_grp_name='default',
project_id=self.__project.id)
@@ -90,23 +95,23 @@ class OpenStackProject:
# Delete Project
try:
- keystone_utils.delete_project(self.__keystone, self.__project)
+ keystone_utils.delete_project(self._keystone, self.__project)
except NotFound:
pass
self.__project = None
if self.__role:
try:
- keystone_utils.delete_role(self.__keystone, self.__role)
+ keystone_utils.delete_role(self._keystone, self.__role)
except NotFound:
pass
self.__project = None
# Final role check in case init was done from an existing instance
role = keystone_utils.get_role_by_name(
- self.__keystone, self.__role_name)
+ self._keystone, self.__role_name)
if role:
- keystone_utils.delete_role(self.__keystone, role)
+ keystone_utils.delete_role(self._keystone, role)
def get_project(self):
"""
@@ -123,12 +128,12 @@ class OpenStackProject:
"""
if not self.__role:
self.__role = keystone_utils.get_role_by_name(
- self.__keystone, self.__role_name)
+ self._keystone, self.__role_name)
if not self.__role:
self.__role = keystone_utils.create_role(
- self.__keystone, self.__role_name)
+ self._keystone, self.__role_name)
- keystone_utils.grant_user_role_to_project(self.__keystone, self.__role,
+ keystone_utils.grant_user_role_to_project(self._keystone, self.__role,
user, self.__project)
def get_compute_quotas(self):
@@ -136,7 +141,7 @@ class OpenStackProject:
Returns the compute quotas as an instance of the ComputeQuotas class
:return:
"""
- nova = nova_utils.nova_client(self.__os_creds)
+ nova = nova_utils.nova_client(self._os_creds)
return nova_utils.get_compute_quotas(nova, self.__project.id)
def get_network_quotas(self):
@@ -144,7 +149,7 @@ class OpenStackProject:
Returns the network quotas as an instance of the NetworkQuotas class
:return:
"""
- neutron = neutron_utils.neutron_client(self.__os_creds)
+ neutron = neutron_utils.neutron_client(self._os_creds)
return neutron_utils.get_network_quotas(neutron, self.__project.id)
def update_compute_quotas(self, compute_quotas):
@@ -152,7 +157,7 @@ class OpenStackProject:
Updates the compute quotas for this project
:param compute_quotas: a ComputeQuotas object.
"""
- nova = nova_utils.nova_client(self.__os_creds)
+ nova = nova_utils.nova_client(self._os_creds)
nova_utils.update_quotas(nova, self.__project.id, compute_quotas)
def update_network_quotas(self, network_quotas):
@@ -160,7 +165,7 @@ class OpenStackProject:
Updates the network quotas for this project
:param network_quotas: a NetworkQuotas object.
"""
- neutron = neutron_utils.neutron_client(self.__os_creds)
+ neutron = neutron_utils.neutron_client(self._os_creds)
neutron_utils.update_quotas(neutron, self.__project.id, network_quotas)