summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorspisarski <s.pisarski@cablelabs.com>2018-03-19 11:54:34 -0600
committerspisarski <s.pisarski@cablelabs.com>2018-03-19 11:54:34 -0600
commitcbd9af45e80c9e1922cb2046bd9b5737d4d51abb (patch)
tree92f6c7555ebc435f5b19059000b229d69782a26f
parent9d5a173d158af529169f948b06dd80cd62a99d3e (diff)
Added ability to set several quota settings upon project creation.
JIRA: SNAPS-275 Change-Id: Ibab81e835dddcb666fb3c829857b1c4676b57ed1 Signed-off-by: spisarski <s.pisarski@cablelabs.com>
-rw-r--r--docs/how-to-use/APITests.rst3
-rw-r--r--snaps/config/project.py3
-rw-r--r--snaps/config/tests/project_tests.py32
-rw-r--r--snaps/openstack/create_project.py23
-rw-r--r--snaps/openstack/tests/create_project_tests.py32
5 files changed, 91 insertions, 2 deletions
diff --git a/docs/how-to-use/APITests.rst b/docs/how-to-use/APITests.rst
index 6239a08..9f46839 100644
--- a/docs/how-to-use/APITests.rst
+++ b/docs/how-to-use/APITests.rst
@@ -104,6 +104,9 @@ create_project_tests.py - CreateProjectSuccessTests
| test_create_project | 2 & 3 | Tests the creation of a project via the OpenStackProject |
| | | class |
+----------------------------------+---------------+-----------------------------------------------------------+
+| test_create_project_quota | 2 & 3 | Tests the creation of a project via the OpenStackProject |
+| _override | | class with overriding the default quota values |
++----------------------------------+---------------+-----------------------------------------------------------+
| test_create_project_2x | 2 & 3 | Tests the creation of a project a second time via the |
| | | OpenStackProject class to ensure it is only created once |
+----------------------------------+---------------+-----------------------------------------------------------+
diff --git a/snaps/config/project.py b/snaps/config/project.py
index 6790609..79c316b 100644
--- a/snaps/config/project.py
+++ b/snaps/config/project.py
@@ -32,6 +32,7 @@ class ProjectConfig(object):
:param users: list of users to associate project to (optional)
:param enabled: denotes whether or not the project is enabled
(default True)
+ :param quotas: quota values to override (optional)
"""
self.name = kwargs.get('name')
@@ -46,6 +47,8 @@ class ProjectConfig(object):
self.users = kwargs.get('users', list())
+ self.quotas = kwargs.get('quotas')
+
if not self.name:
raise ProjectConfigError(
"The attribute name is required for ProjectConfig")
diff --git a/snaps/config/tests/project_tests.py b/snaps/config/tests/project_tests.py
index 0470d83..99de4a9 100644
--- a/snaps/config/tests/project_tests.py
+++ b/snaps/config/tests/project_tests.py
@@ -37,6 +37,7 @@ class ProjectConfigUnitTests(unittest.TestCase):
self.assertIsNone(settings.description)
self.assertTrue(settings.enabled)
self.assertEqual(list(), settings.users)
+ self.assertIsNone(settings.quotas)
def test_config_with_name_only(self):
settings = ProjectConfig(**{'name': 'foo'})
@@ -45,25 +46,52 @@ class ProjectConfigUnitTests(unittest.TestCase):
self.assertIsNone(settings.description)
self.assertTrue(settings.enabled)
self.assertEqual(list(), settings.users)
+ self.assertIsNone(settings.quotas)
def test_all(self):
users = ['test1', 'test2']
+ quotas = {
+ 'cores': 4, 'instances': 5, 'injected_files': 6,
+ 'injected_file_content_bytes': 60000, 'ram': 70000, 'fixed_ips': 7,
+ 'key_pairs': 8}
settings = ProjectConfig(
name='foo', domain='bar', description='foobar', enabled=False,
- users=users)
+ users=users, quotas=quotas)
self.assertEqual('foo', settings.name)
self.assertEqual('bar', settings.domain_name)
self.assertEqual('foobar', settings.description)
self.assertFalse(settings.enabled)
self.assertEqual(users, settings.users)
+ self.assertIsNotNone(settings.quotas)
+ self.assertEquals(4, settings.quotas.get('cores'))
+ self.assertEquals(5, settings.quotas.get('instances'))
+ self.assertEquals(6, settings.quotas.get('injected_files'))
+ self.assertEquals(
+ 60000, settings.quotas.get('injected_file_content_bytes'))
+ self.assertEquals(70000, settings.quotas.get('ram'))
+ self.assertEquals(7, settings.quotas.get('fixed_ips'))
+ self.assertEquals(8, settings.quotas.get('key_pairs'))
def test_config_all(self):
users = ['test1', 'test2']
settings = ProjectConfig(
**{'name': 'foo', 'domain': 'bar', 'description': 'foobar',
- 'enabled': False, 'users': users})
+ 'enabled': False, 'users': users,
+ 'quotas': {
+ 'cores': 4, 'instances': 5, 'injected_files': 6,
+ 'injected_file_content_bytes': 60000, 'ram': 70000,
+ 'fixed_ips': 7, 'key_pairs': 8}})
self.assertEqual('foo', settings.name)
self.assertEqual('bar', settings.domain_name)
self.assertEqual('foobar', settings.description)
self.assertFalse(settings.enabled)
self.assertEqual(users, settings.users)
+ self.assertIsNotNone(settings.quotas)
+ self.assertEquals(4, settings.quotas.get('cores'))
+ self.assertEquals(5, settings.quotas.get('instances'))
+ self.assertEquals(6, settings.quotas.get('injected_files'))
+ self.assertEquals(
+ 60000, settings.quotas.get('injected_file_content_bytes'))
+ self.assertEquals(70000, settings.quotas.get('ram'))
+ self.assertEquals(7, settings.quotas.get('fixed_ips'))
+ self.assertEquals(8, settings.quotas.get('key_pairs'))
diff --git a/snaps/openstack/create_project.py b/snaps/openstack/create_project.py
index c20fe5e..ed7e9cd 100644
--- a/snaps/openstack/create_project.py
+++ b/snaps/openstack/create_project.py
@@ -74,6 +74,29 @@ class OpenStackProject(OpenStackIdentityObject):
logger.warn('Unable to associate user %s due to %s',
user.name, e)
+ if self.project_settings.quotas:
+ quota_dict = self.project_settings.quotas
+ nova = nova_utils.nova_client(self._os_creds, self._os_session)
+ quotas = nova_utils.get_compute_quotas(nova, self.__project.id)
+ if quotas:
+ if 'cores' in quota_dict:
+ quotas.cores = quota_dict['cores']
+ if 'instances' in quota_dict:
+ quotas.instances = quota_dict['instances']
+ if 'injected_files' in quota_dict:
+ quotas.injected_files = quota_dict['injected_files']
+ if 'injected_file_content_bytes' in quota_dict:
+ quotas.injected_file_content_bytes = \
+ quota_dict['injected_file_content_bytes']
+ if 'ram' in quota_dict:
+ quotas.ram = quota_dict['ram']
+ if 'fixed_ips' in quota_dict:
+ quotas.fixed_ips = quota_dict['fixed_ips']
+ if 'key_pairs' in quota_dict:
+ quotas.key_pairs = quota_dict['key_pairs']
+
+ nova_utils.update_quotas(nova, self.__project.id, quotas)
+
return self.__project
def clean(self):
diff --git a/snaps/openstack/tests/create_project_tests.py b/snaps/openstack/tests/create_project_tests.py
index 41e58fc..1e3a972 100644
--- a/snaps/openstack/tests/create_project_tests.py
+++ b/snaps/openstack/tests/create_project_tests.py
@@ -143,6 +143,38 @@ class CreateProjectSuccessTests(OSComponentTestCase):
self.assertTrue(validate_project(self.keystone, self.project_settings,
created_project))
+ def test_create_project_quota_override(self):
+ """
+ Tests the creation of an OpenStack project with new quotas.
+ """
+ quotas = {
+ 'cores': 4, 'instances': 5, 'injected_files': 6,
+ 'injected_file_content_bytes': 60000, 'ram': 70000, 'fixed_ips': 7,
+ 'key_pairs': 8}
+ self.project_settings.quotas = quotas
+ self.project_creator = OpenStackProject(self.os_creds,
+ self.project_settings)
+ created_project = self.project_creator.create()
+ self.assertIsNotNone(created_project)
+
+ retrieved_project = keystone_utils.get_project(
+ keystone=self.keystone, project_settings=self.project_settings)
+ self.assertIsNotNone(retrieved_project)
+ self.assertEqual(created_project, retrieved_project)
+ self.assertTrue(validate_project(self.keystone, self.project_settings,
+ created_project))
+
+ nova = nova_utils.nova_client(self.os_creds, self.os_session)
+ new_quotas = nova_utils.get_compute_quotas(nova, created_project.id)
+
+ self.assertEqual(4, new_quotas.cores)
+ self.assertEqual(5, new_quotas.instances)
+ self.assertEqual(6, new_quotas.injected_files)
+ self.assertEqual(60000, new_quotas.injected_file_content_bytes)
+ self.assertEqual(70000, new_quotas.ram)
+ self.assertEqual(7, new_quotas.fixed_ips)
+ self.assertEqual(8, new_quotas.key_pairs)
+
def test_create_project_2x(self):
"""
Tests the creation of an OpenStack project twice to ensure it only