Fix keystone v2 support for multisite

Placement attr regions returned empty along with vim_project when
user provides keystone v2 in auth url

This fixes the vim-register for VIM with keystone v2 version

Closes-Bug: #1563661
Closes-Bug: #1563189
Change-Id: I439a21da6909ca6587dbb3d9de3dc478d02f7158
This commit is contained in:
Sripriya 2016-03-29 20:29:01 -07:00
parent d96033b8af
commit 75c4c518d2
4 changed files with 56 additions and 27 deletions

View File

@ -79,8 +79,8 @@ class OpenStack_Driver(abstract_vim_driver.VimAbstractDriver):
'user_domain_id'
] = CONF.keystone_authtoken.user_domain_id
else:
auth_cred['tenant_id'] = vim_project.pop('id', None)
auth_cred['tenant_name'] = vim_project.pop('name', None)
auth_cred['tenant_id'] = vim_project.get('id', None)
auth_cred['tenant_name'] = vim_project.get('name', None)
# user_id is not supported in keystone v2
auth_cred.pop('user_id', None)
auth_cred['auth_url'] = vim_obj['auth_url']
@ -106,8 +106,10 @@ class OpenStack_Driver(abstract_vim_driver.VimAbstractDriver):
def _find_regions(self, ks_client):
if ks_client.version == 'v2.0':
service_list = ks_client.services.list()
heat_service_id = (service.id for service in
service_list if service.type == 'orchestration')
heat_service_id = None
for service in service_list:
if service.type == 'orchestration':
heat_service_id = service.id
endpoints_list = ks_client.endpoints.list()
region_list = [endpoint.region for endpoint in endpoints_list if
endpoint.service_id == heat_service_id]

View File

@ -0,0 +1,4 @@
auth_url: http://127.0.0.1:5000/v2.0
username: nfv_user
password: devstack
project_name: nfv

View File

@ -119,17 +119,6 @@ class BaseTackerTest(base.TestCase):
self.assertEqual(vnf_current_status, 'ACTIVE')
self.validate_vnf_instance(vnfd_instance, vnf_instance)
def verify_vim(self, vim_instance, config_data, name, description):
self.assertIsNotNone(vim_instance)
self.assertEqual(vim_instance['vim']['description'], description)
self.assertEqual(vim_instance['vim']['name'], name)
self.assertIsNotNone(vim_instance['vim']['tenant_id'])
self.assertIsNotNone(vim_instance['vim']['id'])
self.assertEqual(vim_instance['vim']['auth_cred']['username'],
config_data['username'])
self.assertEqual(vim_instance['vim']['auth_cred']['project_name'],
config_data['project_name'])
def get_vim(self, vim_list, vim_name):
if len(vim_list.values()) == 0:
assert False, "vim_list is Empty: Default VIM is missing"

View File

@ -12,6 +12,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from tacker.tests.functional import base
from tacker.tests.utils import read_file
@ -19,15 +20,15 @@ import yaml
class VimTestCreate(base.BaseTackerTest):
def _test_create_delete_vim(self, vim_file, name,
description, vim_type):
data = dict()
def _test_create_delete_vim(self, vim_file, name, description, vim_type,
version=None):
data = yaml.load(read_file(vim_file))
password = data['password']
username = data['username']
project_name = data['project_name']
auth_url = data['auth_url']
vim_arg = {'vim': {'name': name, 'description': description,
'type': vim_type,
'auth_url': auth_url,
@ -36,24 +37,57 @@ class VimTestCreate(base.BaseTackerTest):
'vim_project': {'name': project_name}}}
# Register vim
vim_instance = self.client.create_vim(vim_arg)
vim_id = vim_instance['vim']['id']
self.verify_vim(vim_instance, data, name, description)
vim_res = self.client.create_vim(vim_arg)
vim_obj = vim_res['vim']
vim_id = vim_obj['id']
self.verify_vim(vim_obj, data, name, description, version)
# Read vim
vim_instance_show = self.client.show_vim(vim_id)
self.verify_vim(vim_instance_show, data, name, description)
vim_show_res = self.client.show_vim(vim_id)
self.verify_vim(vim_show_res['vim'], data, name, description, version)
# Delete vim
try:
self.client.delete_vim(vim_id)
except Exception:
assert False, ("Failed to delete vim %s" %
vim_id)
self.assertFalse(True, "Failed to delete vim %s" % vim_id)
def verify_vim(self, vim_instance, config_data, name, description,
version):
expected_regions = ['RegionOne']
self.assertIsNotNone(vim_instance)
self.assertEqual(vim_instance['description'], description)
self.assertEqual(vim_instance['name'], name)
self.assertIsNotNone(vim_instance['tenant_id'])
self.assertIsNotNone(vim_instance['id'])
self.assertEqual(vim_instance['auth_cred']['username'],
config_data['username'])
self.assertEqual(vim_instance['placement_attr']['regions'],
expected_regions)
if version:
method_name = 'verify_vim_' + version
getattr(self, method_name)(vim_instance, config_data)
def verify_vim_v2(self, vim_instance, config_data):
self.assertEqual(vim_instance['auth_cred']['tenant_name'],
config_data['project_name'])
def verify_vim_v3(self, vim_instance, config_data):
self.assertEqual(vim_instance['auth_cred']['project_name'],
config_data['project_name'])
def test_create_delete_local_vim(self):
name = 'Default vim'
description = 'Local vim description'
vim_type = 'openstack'
self._test_create_delete_vim(
'local-vim.yaml', name, description, vim_type)
ks_version = 'v3'
self._test_create_delete_vim('local-vim.yaml', name, description,
vim_type, ks_version)
def test_create_delete_local_vim_keystone_v2(self):
name = 'Openstack'
description = 'OpenStack VIM with keystone v2'
vim_type = 'openstack'
ks_version = 'v2'
self._test_create_delete_vim('vim-config-ks-v2.yaml', name,
description, vim_type, ks_version)