Merge "change get_service_tenant_id function"

This commit is contained in:
Jenkins 2016-04-12 13:18:42 +00:00 committed by Gerrit Code Review
commit 3c710fc182
2 changed files with 66 additions and 4 deletions

View File

@ -134,3 +134,51 @@ def test_copy_vips(mock_subprocess):
mock_subprocess.assert_called_once_with(
['fuel2', 'env', 'copy', 'vips', str(env_id)]
)
@pytest.mark.parametrize("data, exception", [
(
'[{"ID": "2aed71d8816f4e5f8d4ad06836521d49", "Name": "admin"}, '
'{"ID": "09f1c11740ba4bc399387f3995d5160e", "Name": "services"}]',
False
),
(
'[{"id": "2aed71d8816f4e5f8d4ad06836521d49", "name": "admin"}, '
'{"id": "09f1c11740ba4bc399387f3995d5160e", "name": "services"}]',
False,
),
(
'[{"ID": "2aed71d8816f4e5f8d4ad06836521d49", "NAME": "admin"}, '
'{"ID": "09f1c11740ba4bc399387f3995d5160e", "NAME": "services"}]',
False
),
(
'[{"ID": "2aed71d8816f4e5f8d4ad06836521d49", "NAME": "admin"}]',
True
),
])
@pytest.mark.parametrize("key,value", [
("services", "09f1c11740ba4bc399387f3995d5160e"),
("Services", "09f1c11740ba4bc399387f3995d5160e"),
("SERVICES", "09f1c11740ba4bc399387f3995d5160e"),
])
def test_openstack_project_value(mocker, data, key, value, exception):
env = mock.Mock()
node = mock.Mock()
mocker.patch("octane.util.env.get_admin_password", return_value="pswd")
mocker.patch("octane.util.ssh.call_output", return_value=data)
if exception:
with pytest.raises(Exception) as exc_info:
env_util.get_openstack_project_value(env, node, key)
assert "Field {0} not found in openstack project list".format(key) == \
exc_info.value.message
else:
assert value == env_util.get_openstack_project_value(env, node, key)
@pytest.mark.parametrize("node", [mock.Mock(), None])
def test_get_service_tenant_id(mocker, node):
mock_obj = mocker.patch("octane.util.env.get_openstack_project_value")
env = mock.Mock()
env_util.get_service_tenant_id(env, node)
mock_obj.assert_called_once_with(env, node, "services")

View File

@ -126,7 +126,7 @@ def parse_tenant_get(output, field):
"Field {0} not found in output:\n{1}".format(field, output))
def get_service_tenant_id(env, node=None):
def get_openstack_project_dict(env, node=None):
if node is None:
node = get_one_controller(env)
@ -134,13 +134,27 @@ def get_service_tenant_id(env, node=None):
tenant_out = ssh.call_output(
[
'sh', '-c',
'. /root/openrc; keystone --os-password={0} tenant-get services'
'. /root/openrc; openstack --os-password {0} project list -f json'
.format(password),
],
node=node,
)
tenant_id = parse_tenant_get(tenant_out, 'id')
return tenant_id
data = [{k.lower(): v for k, v in d.items()}
for d in json.loads(tenant_out)]
return {i["name"]: i["id"] for i in data}
def get_openstack_project_value(env, node, key):
data = get_openstack_project_dict(env, node)
try:
return data[key.lower()]
except KeyError:
raise Exception(
"Field {0} not found in openstack project list".format(key))
def get_service_tenant_id(env, node=None):
return get_openstack_project_value(env, node, "services")
def cache_service_tenant_id(env, node=None):