summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorspisarski <s.pisarski@cablelabs.com>2018-06-04 09:29:39 -0600
committerspisarski <s.pisarski@cablelabs.com>2018-06-04 09:29:39 -0600
commit82305fb92b6ee5607a9e3beb58be3c6c56413584 (patch)
treee3bdd32b68604bffc07875a5d558583c2999d64e
parentf17b5d4631682b4807dc1c4267da65258413ef73 (diff)
Added support for OSCreds output to SNAPS-OO orchestrator app.
Change-Id: Ic690ebff47d137fdd172f5dd5f263cd7f4a6ae04 Signed-off-by: spisarski <s.pisarski@cablelabs.com>
-rw-r--r--snaps/openstack/openstack_creator.py3
-rw-r--r--snaps/openstack/os_credentials.py41
-rw-r--r--snaps/openstack/tests/conf/os_credentials_tests.py29
-rw-r--r--snaps/openstack/utils/keystone_utils.py3
-rw-r--r--snaps/openstack/utils/launch_utils.py66
5 files changed, 106 insertions, 36 deletions
diff --git a/snaps/openstack/openstack_creator.py b/snaps/openstack/openstack_creator.py
index 9bd099b..6eeac37 100644
--- a/snaps/openstack/openstack_creator.py
+++ b/snaps/openstack/openstack_creator.py
@@ -38,6 +38,9 @@ class OpenStackCloudObject(CloudObject):
self._keystone = keystone_utils.keystone_client(
self._os_creds, session=self._os_session)
+ def get_os_creds(self):
+ return self._os_creds
+
def create(self):
raise NotImplementedError('Do not override abstract method')
diff --git a/snaps/openstack/os_credentials.py b/snaps/openstack/os_credentials.py
index 7cb5650..11ef8ff 100644
--- a/snaps/openstack/os_credentials.py
+++ b/snaps/openstack/os_credentials.py
@@ -63,7 +63,7 @@ class OSCreds:
self.project_name = kwargs.get('project_name')
if kwargs.get('identity_api_version') is None:
- self.identity_api_version = keystone_utils.V2_VERSION_NUM
+ self.identity_api_version = keystone_utils.V3_VERSION_NUM
else:
self.identity_api_version = float(kwargs['identity_api_version'])
@@ -171,6 +171,45 @@ class OSCreds:
return new_url
+ def to_dict(self):
+ """Converts object to a dict that can be used to construct another"""
+ return {'username': self.username,
+ 'password': self.password,
+ 'auth_url': self.auth_url,
+ 'project_name': self.project_name,
+ 'identity_api_version': self.identity_api_version,
+ 'image_api_version': self.image_api_version,
+ 'network_api_version': self.network_api_version,
+ 'compute_api_version': self.compute_api_version,
+ 'heat_api_version': self.heat_api_version,
+ 'user_domain_id': self.user_domain_id,
+ 'user_domain_name': self.user_domain_name,
+ 'project_domain_id': self.project_domain_id,
+ 'project_domain_name': self.project_domain_name,
+ 'interface': self.interface,
+ 'region_name': self.region_name,
+ 'proxy_settings': self.proxy_settings,
+ 'cacert': self.cacert}
+
+ def __eq__(self, other):
+ return (self.username == other.username and
+ self.password == other.password and
+ self.auth_url == other.auth_url and
+ self.project_name == other.project_name and
+ float(self.identity_api_version) == float(other.identity_api_version) and
+ float(self.image_api_version) == float(other.image_api_version) and
+ float(self.network_api_version) == float(other.network_api_version) and
+ float(self.compute_api_version) == float(other.compute_api_version) and
+ float(self.heat_api_version) == float(other.heat_api_version) and
+ self.user_domain_id == other.user_domain_id and
+ self.user_domain_name == other.user_domain_name and
+ self.project_domain_id == other.project_domain_id and
+ self.project_domain_name == other.project_domain_name and
+ self.interface == other.interface and
+ self.region_name == other.region_name and
+ self.proxy_settings == other.proxy_settings and
+ self.cacert == other.cacert)
+
def __str__(self):
"""Converts object to a string"""
return ('OSCreds - username=' + str(self.username) +
diff --git a/snaps/openstack/tests/conf/os_credentials_tests.py b/snaps/openstack/tests/conf/os_credentials_tests.py
index 192be86..696ca2d 100644
--- a/snaps/openstack/tests/conf/os_credentials_tests.py
+++ b/snaps/openstack/tests/conf/os_credentials_tests.py
@@ -142,9 +142,9 @@ class OSCredsUnitTests(unittest.TestCase):
project_name='hello')
self.assertEqual('foo', os_creds.username)
self.assertEqual('bar', os_creds.password)
- self.assertEqual('http://foo.bar:5000/v2.0', os_creds.auth_url)
+ self.assertEqual('http://foo.bar:5000/v3', os_creds.auth_url)
self.assertEqual('hello', os_creds.project_name)
- self.assertEqual(2, os_creds.identity_api_version)
+ self.assertEqual(3, os_creds.identity_api_version)
self.assertEqual(2, os_creds.image_api_version)
self.assertEqual(2, os_creds.compute_api_version)
self.assertEqual(1, os_creds.heat_api_version)
@@ -165,9 +165,9 @@ class OSCredsUnitTests(unittest.TestCase):
'project_name': 'hello'})
self.assertEqual('foo', os_creds.username)
self.assertEqual('bar', os_creds.password)
- self.assertEqual('http://foo.bar:5000/v2.0', os_creds.auth_url)
+ self.assertEqual('http://foo.bar:5000/v3', os_creds.auth_url)
self.assertEqual('hello', os_creds.project_name)
- self.assertEqual(2, os_creds.identity_api_version)
+ self.assertEqual(3, os_creds.identity_api_version)
self.assertEqual(2, os_creds.image_api_version)
self.assertEqual(2, os_creds.compute_api_version)
self.assertEqual(1, os_creds.heat_api_version)
@@ -243,9 +243,9 @@ class OSCredsUnitTests(unittest.TestCase):
project_name='hello', proxy_settings=proxy_settings)
self.assertEqual('foo', os_creds.username)
self.assertEqual('bar', os_creds.password)
- self.assertEqual('http://foo.bar:5000/v2.0', os_creds.auth_url)
+ self.assertEqual('http://foo.bar:5000/v3', os_creds.auth_url)
self.assertEqual('hello', os_creds.project_name)
- self.assertEqual(2, os_creds.identity_api_version)
+ self.assertEqual(3, os_creds.identity_api_version)
self.assertEqual(2, os_creds.image_api_version)
self.assertEqual(2, os_creds.compute_api_version)
self.assertEqual(1, os_creds.heat_api_version)
@@ -262,6 +262,11 @@ class OSCredsUnitTests(unittest.TestCase):
self.assertIsNone(os_creds.proxy_settings.ssh_proxy_cmd)
self.assertIsNone(os_creds.region_name)
+ creds_dict = os_creds.to_dict()
+ creds_from_dict = OSCreds(**creds_dict)
+
+ self.assertEqual(os_creds, creds_from_dict)
+
def test_proxy_settings_obj_kwargs(self):
proxy_settings = ProxySettings(host='foo', port=1234)
os_creds = OSCreds(
@@ -273,9 +278,9 @@ class OSCredsUnitTests(unittest.TestCase):
'project_domain_name': 'domain4'})
self.assertEqual('foo', os_creds.username)
self.assertEqual('bar', os_creds.password)
- self.assertEqual('http://foo.bar:5000/v2.0', os_creds.auth_url)
+ self.assertEqual('http://foo.bar:5000/v3', os_creds.auth_url)
self.assertEqual('hello', os_creds.project_name)
- self.assertEqual(2, os_creds.identity_api_version)
+ self.assertEqual(3, os_creds.identity_api_version)
self.assertEqual(2, os_creds.image_api_version)
self.assertEqual(2, os_creds.compute_api_version)
self.assertEqual(1, os_creds.heat_api_version)
@@ -300,9 +305,9 @@ class OSCredsUnitTests(unittest.TestCase):
project_domain_id='domain3', project_domain_name='domain4')
self.assertEqual('foo', os_creds.username)
self.assertEqual('bar', os_creds.password)
- self.assertEqual('http://foo.bar:5000/v2.0', os_creds.auth_url)
+ self.assertEqual('http://foo.bar:5000/v3', os_creds.auth_url)
self.assertEqual('hello', os_creds.project_name)
- self.assertEqual(2, os_creds.identity_api_version)
+ self.assertEqual(3, os_creds.identity_api_version)
self.assertEqual(2, os_creds.image_api_version)
self.assertEqual(2, os_creds.compute_api_version)
self.assertEqual(1, os_creds.heat_api_version)
@@ -326,9 +331,9 @@ class OSCredsUnitTests(unittest.TestCase):
'region_name': 'test_region'})
self.assertEqual('foo', os_creds.username)
self.assertEqual('bar', os_creds.password)
- self.assertEqual('http://foo.bar:5000/v2.0', os_creds.auth_url)
+ self.assertEqual('http://foo.bar:5000/v3', os_creds.auth_url)
self.assertEqual('hello', os_creds.project_name)
- self.assertEqual(2, os_creds.identity_api_version)
+ self.assertEqual(3, os_creds.identity_api_version)
self.assertEqual(2, os_creds.image_api_version)
self.assertEqual(2, os_creds.compute_api_version)
self.assertEqual(1, os_creds.heat_api_version)
diff --git a/snaps/openstack/utils/keystone_utils.py b/snaps/openstack/utils/keystone_utils.py
index 52c86d8..4d3c0d3 100644
--- a/snaps/openstack/utils/keystone_utils.py
+++ b/snaps/openstack/utils/keystone_utils.py
@@ -28,6 +28,7 @@ from snaps.domain.user import User
logger = logging.getLogger('keystone_utils')
V2_VERSION_NUM = 2.0
+V3_VERSION_NUM = 3
V2_VERSION_STR = 'v' + str(V2_VERSION_NUM)
@@ -210,7 +211,7 @@ def create_project(keystone, project_settings):
def delete_project(keystone, project):
"""
Deletes a project
- :param keystone: the Keystone clien
+ :param keystone: the Keystone client
:param project: the SNAPS-OO Project domain object
"""
logger.info('Deleting project with name - %s', project.name)
diff --git a/snaps/openstack/utils/launch_utils.py b/snaps/openstack/utils/launch_utils.py
index 6e8b94e..00ea822 100644
--- a/snaps/openstack/utils/launch_utils.py
+++ b/snaps/openstack/utils/launch_utils.py
@@ -530,8 +530,8 @@ def __get_connection_info(ansible_config, vm_dict):
return None
-def __get_variables(var_config, os_creds_dict, vm_dict, image_dict, flavor_dict,
- networks_dict, routers_dict):
+def __get_variables(var_config, os_creds_dict, vm_dict, image_dict,
+ flavor_dict, networks_dict, routers_dict):
"""
Returns a dictionary of substitution variables to be used for Ansible
templates
@@ -587,18 +587,19 @@ def __get_variable_value(var_config_values, os_creds_dict, vm_dict, image_dict,
the name is the key
:return:
"""
- admin_creds = os_creds_dict.get('admin-creds')
if var_config_values['type'] == 'string':
return __get_string_variable_value(var_config_values)
if var_config_values['type'] == 'vm-attr':
return __get_vm_attr_variable_value(var_config_values, vm_dict)
if var_config_values['type'] == 'os_creds':
- return __get_os_creds_variable_value(var_config_values, admin_creds)
+ return __get_os_creds_variable_value(var_config_values, os_creds_dict)
+ if var_config_values['type'] == 'os_creds_dict':
+ return str(__get_os_creds_dict(var_config_values, os_creds_dict))
if var_config_values['type'] == 'network':
return __get_network_variable_value(var_config_values, networks_dict)
if var_config_values['type'] == 'router':
return __get_router_variable_value(var_config_values, routers_dict,
- admin_creds)
+ os_creds_dict)
if var_config_values['type'] == 'port':
return __get_vm_port_variable_value(var_config_values, vm_dict)
if var_config_values['type'] == 'floating_ip':
@@ -607,8 +608,8 @@ def __get_variable_value(var_config_values, os_creds_dict, vm_dict, image_dict,
return __get_image_variable_value(var_config_values, image_dict)
if var_config_values['type'] == 'flavor':
return __get_flavor_variable_value(var_config_values, flavor_dict)
- if var_config_values['type'] == 'snaps-env-yaml':
- return __create_snaps_env_yaml(var_config_values, vm_dict)
+ if var_config_values['type'] == 'vm-yaml':
+ return __create_yaml(var_config_values, vm_dict)
return None
@@ -637,13 +638,19 @@ def __get_vm_attr_variable_value(var_config_values, vm_dict):
return vm.get_image_user()
-def __get_os_creds_variable_value(var_config_values, os_creds):
+def __get_os_creds_variable_value(var_config_values, os_creds_dict):
"""
Returns the associated OS credentials value
:param var_config_values: the configuration dictionary
- :param os_creds: the admin OpenStack OSCreds object
+ :param os_creds_dict: dict of OpenStack credentials where the key is the
+ name
:return: the value
"""
+ if 'creds_name' in var_config_values:
+ os_creds = os_creds_dict.get[var_config_values['creds_name']]
+ else:
+ os_creds = os_creds_dict.get('admin-creds')
+
if os_creds:
if var_config_values['value'] == 'username':
logger.info("Returning OS username")
@@ -659,6 +666,21 @@ def __get_os_creds_variable_value(var_config_values, os_creds):
return os_creds.project_name
+def __get_os_creds_dict(var_config_values, os_creds_dict):
+ """
+ Returns the associated OS credentials as a dict
+ :param var_config_values: the configuration dictionary
+ :param os_creds_dict: dict of creds where the key is the username
+ :return: the value dict
+ """
+ if 'creds_name' in var_config_values:
+ os_creds = os_creds_dict.get[var_config_values['creds_name']]
+ else:
+ os_creds = os_creds_dict.get('admin-creds')
+ if os_creds:
+ return os_creds.to_dict()
+
+
def __get_network_variable_value(var_config_values, networks_dict):
"""
Returns the associated network value
@@ -706,15 +728,22 @@ def __get_network_variable_value(var_config_values, networks_dict):
return broadcast_ip
-def __get_router_variable_value(var_config_values, routers_dict, os_creds):
+def __get_router_variable_value(var_config_values, routers_dict,
+ os_creds_dict):
"""
Returns the associated network value
:param var_config_values: the configuration dictionary
:param routers_dict: the dictionary containing all networks where the key
is the network name
- :param os_creds: the admin OpenStack credentials
+ :param os_creds_dict: dict of OpenStack credentials where the key is the
+ name
:return: the value
"""
+ if 'creds_name' in var_config_values:
+ os_creds = os_creds_dict.get[var_config_values['creds_name']]
+ else:
+ os_creds = os_creds_dict.get('admin-creds')
+
router_name = var_config_values.get('router_name')
router_creator = routers_dict[router_name]
@@ -818,34 +847,27 @@ def __get_flavor_variable_value(var_config_values, flavor_dict):
return flavor_creator.get_flavor().id
-def __create_snaps_env_yaml(var_config_values, vm_dict):
+def __create_yaml(var_config_values, vm_dict):
"""
Creates a yaml file containing an OpenStack pod's credentials with a list
of server IDs that can be used for obtaining SNAPS-OO instances for
manipulation such as rebooting
:param var_config_values: the configuration dictionary
- :param os_creds: the admin credentials for accessing OpenStack
:param vm_dict: the dictionary containing all vm creators where the
key is the name
:return: the name of the generated file
"""
out_dict = dict()
out_dict['vms'] = list()
+ req_vm_names = var_config_values.get('vms')
for name, vm_creator in vm_dict.items():
vm_inst = vm_creator.get_vm_inst()
- inst_creds = vm_creator._os_creds
- if vm_inst:
+ if vm_inst and vm_inst.name in req_vm_names:
out_dict['vms'].append({
'name': str(vm_inst.name),
'id': str(vm_inst.id),
- 'os_creds': {
- 'username': inst_creds.username,
- 'password': inst_creds.password,
- 'auth_url': inst_creds.auth_url,
- 'project_name': inst_creds.project_name,
- 'identity_api_version': inst_creds.identity_api_version,
- }
+ 'os_creds': vm_creator.get_os_creds().to_dict()
})
out_file = file_utils.persist_dict_to_yaml(