summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorspisarski <s.pisarski@cablelabs.com>2017-11-08 12:53:14 -0700
committerspisarski <s.pisarski@cablelabs.com>2017-11-09 09:43:00 -0700
commit788fddade6fc8375cffde4b500a33bdc94c74854 (patch)
treecacaa8ce2f50026a87e0ba452ad28bbb044dfe20
parentc0f1fc7d39c550f6825b4e323358d44e876c1fa5 (diff)
Initial patch to begin adding support for Magnum.
JIRA: SNAPS-212 Change-Id: I5f72fe9c28fe5cdd61546eee828becd034f8aff9 Signed-off-by: spisarski <s.pisarski@cablelabs.com>
-rw-r--r--requirements.txt1
-rw-r--r--snaps/openstack/os_credentials.py10
-rw-r--r--snaps/openstack/tests/conf/os_credentials_tests.py19
-rw-r--r--snaps/openstack/utils/magnum_utils.py33
-rw-r--r--snaps/openstack/utils/tests/magnum_utils_tests.py50
-rw-r--r--snaps/test_suite_builder.py5
6 files changed, 116 insertions, 2 deletions
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))