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')
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'])
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) +
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)
'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)
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)
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(
'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)
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)
'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)
logger = logging.getLogger('keystone_utils')
V2_VERSION_NUM = 2.0
+V3_VERSION_NUM = 3
V2_VERSION_STR = 'v' + str(V2_VERSION_NUM)
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)
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
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':
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
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")
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
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]
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(