From 788fddade6fc8375cffde4b500a33bdc94c74854 Mon Sep 17 00:00:00 2001 From: spisarski Date: Wed, 8 Nov 2017 12:53:14 -0700 Subject: Initial patch to begin adding support for Magnum. JIRA: SNAPS-212 Change-Id: I5f72fe9c28fe5cdd61546eee828becd034f8aff9 Signed-off-by: spisarski --- requirements.txt | 1 + snaps/openstack/os_credentials.py | 10 ++++- snaps/openstack/tests/conf/os_credentials_tests.py | 19 ++++++++ snaps/openstack/utils/magnum_utils.py | 33 ++++++++++++++ snaps/openstack/utils/tests/magnum_utils_tests.py | 50 ++++++++++++++++++++++ snaps/test_suite_builder.py | 5 +++ 6 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 snaps/openstack/utils/magnum_utils.py create mode 100644 snaps/openstack/utils/tests/magnum_utils_tests.py diff --git a/requirements.txt b/requirements.txt index c4c6db1..7ab76f3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,6 +4,7 @@ python-keystoneclient>=3.8.0 # Apache-2.0 python-glanceclient>=2.8.0 # Apache-2.0 python-heatclient>=1.6.1 # Apache-2.0 python-cinderclient>=3.1.0 # Apache-2.0 +python-magnumclient ansible<2.4,>=2.1.0 wrapt>=1.7.0 # BSD License scp diff --git a/snaps/openstack/os_credentials.py b/snaps/openstack/os_credentials.py index 84ed838..2553410 100644 --- a/snaps/openstack/os_credentials.py +++ b/snaps/openstack/os_credentials.py @@ -44,6 +44,8 @@ class OSCreds: clients :param volume_api_version: The OpenStack's API version to use for Cinder clients + :param magnum_api_version: The OpenStack's API version to use + for magnum clients :param user_domain_id: Used for v3 APIs (default='default') :param user_domain_name: Used for v3 APIs (default='Default') :param project_domain_id: Used for v3 APIs (default='default') @@ -88,8 +90,12 @@ class OSCreds: if kwargs.get('volume_api_version') is None: self.volume_api_version = cinder_utils.VERSION_2 else: - self.volume_api_version = float( - kwargs['volume_api_version']) + self.volume_api_version = float(kwargs['volume_api_version']) + + if kwargs.get('magnum_api_version') is None: + self.magnum_api_version = 1 + else: + self.magnum_api_version = float(kwargs['magnum_api_version']) self.user_domain_id = kwargs.get('user_domain_id', 'default') diff --git a/snaps/openstack/tests/conf/os_credentials_tests.py b/snaps/openstack/tests/conf/os_credentials_tests.py index 5efb32c..192be86 100644 --- a/snaps/openstack/tests/conf/os_credentials_tests.py +++ b/snaps/openstack/tests/conf/os_credentials_tests.py @@ -18,6 +18,7 @@ import unittest from snaps.openstack.os_credentials import ( OSCredsError, OSCreds, ProxySettings, ProxySettingsError) +from snaps.openstack.utils import cinder_utils __author__ = 'spisarski' @@ -147,6 +148,8 @@ class OSCredsUnitTests(unittest.TestCase): self.assertEqual(2, os_creds.image_api_version) self.assertEqual(2, os_creds.compute_api_version) self.assertEqual(1, os_creds.heat_api_version) + self.assertEqual(cinder_utils.VERSION_2, os_creds.volume_api_version) + self.assertEqual(1, os_creds.magnum_api_version) self.assertEqual('default', os_creds.user_domain_id) self.assertEqual('Default', os_creds.user_domain_name) self.assertEqual('default', os_creds.project_domain_id) @@ -168,6 +171,8 @@ class OSCredsUnitTests(unittest.TestCase): self.assertEqual(2, os_creds.image_api_version) self.assertEqual(2, os_creds.compute_api_version) self.assertEqual(1, os_creds.heat_api_version) + self.assertEqual(cinder_utils.VERSION_2, os_creds.volume_api_version) + self.assertEqual(1, os_creds.magnum_api_version) self.assertEqual('default', os_creds.user_domain_id) self.assertEqual('Default', os_creds.user_domain_name) self.assertEqual('default', os_creds.project_domain_id) @@ -183,6 +188,7 @@ class OSCredsUnitTests(unittest.TestCase): 'auth_url': 'http://foo.bar:5000/v2', 'project_name': 'hello', 'identity_api_version': '5', 'image_api_version': '6', 'compute_api_version': '7', 'heat_api_version': '8.0', + 'volume_api_version': '9.5', 'magnum_api_version': '10.6', 'cacert': 'true', 'region_name': 'test_region'}) self.assertEqual('foo', os_creds.username) self.assertEqual('bar', os_creds.password) @@ -192,6 +198,8 @@ class OSCredsUnitTests(unittest.TestCase): self.assertEqual(6, os_creds.image_api_version) self.assertEqual(7, os_creds.compute_api_version) self.assertEqual(8.0, os_creds.heat_api_version) + self.assertEqual(9.5, os_creds.volume_api_version) + self.assertEqual(10.6, os_creds.magnum_api_version) self.assertEqual('default', os_creds.user_domain_id) self.assertEqual('Default', os_creds.user_domain_name) self.assertEqual('default', os_creds.project_domain_id) @@ -207,6 +215,7 @@ class OSCredsUnitTests(unittest.TestCase): 'auth_url': 'http://foo.bar:5000/v2', 'project_name': 'hello', 'identity_api_version': 5, 'image_api_version': 6, 'compute_api_version': 7, 'heat_api_version': 8.0, + 'volume_api_version': 9.5, 'magnum_api_version': 10.6, 'cacert': True, 'region_name': 'test_region'}) self.assertEqual('foo', os_creds.username) self.assertEqual('bar', os_creds.password) @@ -216,6 +225,8 @@ class OSCredsUnitTests(unittest.TestCase): self.assertEqual(6, os_creds.image_api_version) self.assertEqual(7, os_creds.compute_api_version) self.assertEqual(8.0, os_creds.heat_api_version) + self.assertEqual(9.5, os_creds.volume_api_version) + self.assertEqual(10.6, os_creds.magnum_api_version) self.assertEqual('default', os_creds.user_domain_id) self.assertEqual('Default', os_creds.user_domain_name) self.assertEqual('default', os_creds.project_domain_id) @@ -238,6 +249,8 @@ class OSCredsUnitTests(unittest.TestCase): self.assertEqual(2, os_creds.image_api_version) self.assertEqual(2, os_creds.compute_api_version) self.assertEqual(1, os_creds.heat_api_version) + self.assertEqual(cinder_utils.VERSION_2, os_creds.volume_api_version) + self.assertEqual(1, os_creds.magnum_api_version) self.assertEqual('default', os_creds.user_domain_id) self.assertEqual('Default', os_creds.user_domain_name) self.assertEqual('default', os_creds.project_domain_id) @@ -266,6 +279,8 @@ class OSCredsUnitTests(unittest.TestCase): self.assertEqual(2, os_creds.image_api_version) self.assertEqual(2, os_creds.compute_api_version) self.assertEqual(1, os_creds.heat_api_version) + self.assertEqual(cinder_utils.VERSION_2, os_creds.volume_api_version) + self.assertEqual(1, os_creds.magnum_api_version) self.assertEqual('domain1', os_creds.user_domain_id) self.assertEqual('domain2', os_creds.user_domain_name) self.assertEqual('domain3', os_creds.project_domain_id) @@ -291,6 +306,8 @@ class OSCredsUnitTests(unittest.TestCase): self.assertEqual(2, os_creds.image_api_version) self.assertEqual(2, os_creds.compute_api_version) self.assertEqual(1, os_creds.heat_api_version) + self.assertEqual(cinder_utils.VERSION_2, os_creds.volume_api_version) + self.assertEqual(1, os_creds.magnum_api_version) self.assertEqual('domain1', os_creds.user_domain_id) self.assertEqual('domain2', os_creds.user_domain_name) self.assertEqual('domain3', os_creds.project_domain_id) @@ -315,6 +332,8 @@ class OSCredsUnitTests(unittest.TestCase): self.assertEqual(2, os_creds.image_api_version) self.assertEqual(2, os_creds.compute_api_version) self.assertEqual(1, os_creds.heat_api_version) + self.assertEqual(cinder_utils.VERSION_2, os_creds.volume_api_version) + self.assertEqual(1, os_creds.magnum_api_version) self.assertEqual('default', os_creds.user_domain_id) self.assertEqual('Default', os_creds.user_domain_name) self.assertEqual('default', os_creds.project_domain_id) diff --git a/snaps/openstack/utils/magnum_utils.py b/snaps/openstack/utils/magnum_utils.py new file mode 100644 index 0000000..abc771a --- /dev/null +++ b/snaps/openstack/utils/magnum_utils.py @@ -0,0 +1,33 @@ +# Copyright (c) 2017 Cable Television Laboratories, Inc. ("CableLabs") +# and others. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import logging + +from magnumclient.client import Client + +from snaps.openstack.utils import keystone_utils + +__author__ = 'spisarski' + +logger = logging.getLogger('heat_utils') + + +def magnum_client(os_creds): + """ + Retrieves the Heat client + :param os_creds: the OpenStack credentials + :return: the client + """ + logger.debug('Retrieving Nova Client') + return Client(session=keystone_utils.keystone_session(os_creds)) diff --git a/snaps/openstack/utils/tests/magnum_utils_tests.py b/snaps/openstack/utils/tests/magnum_utils_tests.py new file mode 100644 index 0000000..f4abc89 --- /dev/null +++ b/snaps/openstack/utils/tests/magnum_utils_tests.py @@ -0,0 +1,50 @@ +# Copyright (c) 2017 Cable Television Laboratories, Inc. ("CableLabs") +# and others. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import logging + +from snaps.openstack.os_credentials import OSCreds +from snaps.openstack.tests.os_source_file_test import OSComponentTestCase +from snaps.openstack.utils import magnum_utils + +__author__ = 'spisarski' + +logger = logging.getLogger('nova_utils_tests') + + +class MagnumSmokeTests(OSComponentTestCase): + """ + Tests to ensure that the magnum client can communicate with the cloud + """ + + def test_connect_success(self): + """ + Tests to ensure that the proper credentials can connect. + """ + magnum = magnum_utils.magnum_client(self.os_creds) + + # This should not throw an exception + magnum.clusters.list() + + def test_nova_connect_fail(self): + """ + Tests to ensure that the improper credentials cannot connect. + """ + + with self.assertRaises(RuntimeError): + magnum_utils.magnum_client( + OSCreds(username='user', password='pass', + auth_url=self.os_creds.auth_url, + project_name=self.os_creds.project_name, + proxy_settings=self.os_creds.proxy_settings)) diff --git a/snaps/test_suite_builder.py b/snaps/test_suite_builder.py index 40dfad8..6ee9099 100644 --- a/snaps/test_suite_builder.py +++ b/snaps/test_suite_builder.py @@ -103,6 +103,8 @@ from snaps.openstack.utils.tests.nova_utils_tests import ( NovaUtilsInstanceTests, NovaUtilsInstanceVolumeTests) from snaps.openstack.utils.tests.settings_utils_tests import ( SettingsUtilsUnitTests) +from snaps.openstack.utils.tests.magnum_utils_tests import ( + MagnumSmokeTests) from snaps.provisioning.tests.ansible_utils_tests import ( AnsibleProvisioningTests) from snaps.tests.file_utils_tests import FileUtilsTests @@ -660,3 +662,6 @@ def add_openstack_staging_tests(suite, os_creds, ext_net_name, suite.addTest(OSComponentTestCase.parameterize( HeatUtilsVolumeTests, os_creds=os_creds, ext_net_name=ext_net_name, log_level=log_level)) + suite.addTest(OSComponentTestCase.parameterize( + MagnumSmokeTests, os_creds=os_creds, + ext_net_name=ext_net_name, log_level=log_level)) -- cgit 1.2.3-korg