Merge "Support keystone region"
This commit is contained in:
commit
c5729c1f58
|
@ -26,6 +26,7 @@ from __future__ import print_function
|
||||||
import argparse
|
import argparse
|
||||||
import getpass
|
import getpass
|
||||||
import logging
|
import logging
|
||||||
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from oslo.utils import encodeutils
|
from oslo.utils import encodeutils
|
||||||
|
@ -251,6 +252,12 @@ class OpenStackMagnumShell(object):
|
||||||
help="Use the auth token cache. Defaults to False "
|
help="Use the auth token cache. Defaults to False "
|
||||||
"if env[OS_CACHE] is not set.")
|
"if env[OS_CACHE] is not set.")
|
||||||
|
|
||||||
|
parser.add_argument('--os-region-name',
|
||||||
|
metavar='<region-name>',
|
||||||
|
default=os.environ.get('OS_REGION_NAME'),
|
||||||
|
help='Region name. Default=env[OS_REGION_NAME].')
|
||||||
|
|
||||||
|
|
||||||
# TODO(mattf) - add get_timings support to Client
|
# TODO(mattf) - add get_timings support to Client
|
||||||
# parser.add_argument('--timings',
|
# parser.add_argument('--timings',
|
||||||
# default=False,
|
# default=False,
|
||||||
|
@ -506,6 +513,7 @@ class OpenStackMagnumShell(object):
|
||||||
project_name=os_tenant_name,
|
project_name=os_tenant_name,
|
||||||
auth_url=os_auth_url,
|
auth_url=os_auth_url,
|
||||||
service_type=service_type,
|
service_type=service_type,
|
||||||
|
region_name=args.os_region_name,
|
||||||
magnum_url=bypass_url)
|
magnum_url=bypass_url)
|
||||||
|
|
||||||
args.func(self.cs, args)
|
args.func(self.cs, args)
|
||||||
|
|
|
@ -63,6 +63,7 @@ class ParserTest(utils.TestCase):
|
||||||
|
|
||||||
|
|
||||||
class ShellTest(utils.TestCase):
|
class ShellTest(utils.TestCase):
|
||||||
|
AUTH_URL = utils.FAKE_ENV['OS_AUTH_URL']
|
||||||
|
|
||||||
_msg_no_tenant_project = ("You must provide a tenant name or tenant id"
|
_msg_no_tenant_project = ("You must provide a tenant name or tenant id"
|
||||||
" via --os-tenant-name, --os-tenant-id,"
|
" via --os-tenant-name, --os-tenant-id,"
|
||||||
|
@ -216,11 +217,36 @@ class ShellTest(utils.TestCase):
|
||||||
self.assertIn('Command-line interface to the OpenStack Magnum API',
|
self.assertIn('Command-line interface to the OpenStack Magnum API',
|
||||||
sys.stdout.getvalue())
|
sys.stdout.getvalue())
|
||||||
|
|
||||||
|
@mock.patch('magnumclient.v1.client.Client')
|
||||||
|
def _test_main_region(self, command, expected_region_name, mock_client):
|
||||||
|
self.shell(command)
|
||||||
|
mock_client.assert_called_once_with(
|
||||||
|
username='username', api_key='password',
|
||||||
|
project_id='', project_name='tenant_name',
|
||||||
|
auth_url=self.AUTH_URL, service_type='container',
|
||||||
|
region_name=expected_region_name, magnum_url=None)
|
||||||
|
|
||||||
|
def test_main_option_region(self):
|
||||||
|
self.make_env()
|
||||||
|
self._test_main_region('--os-region-name=myregion bay-list',
|
||||||
|
'myregion')
|
||||||
|
|
||||||
|
def test_main_env_region(self):
|
||||||
|
fake_env = dict(utils.FAKE_ENV, OS_REGION_NAME='myregion')
|
||||||
|
self.make_env(fake_env=fake_env)
|
||||||
|
self._test_main_region('bay-list', 'myregion')
|
||||||
|
|
||||||
|
def test_main_no_region(self):
|
||||||
|
self.make_env()
|
||||||
|
self._test_main_region('bay-list', None)
|
||||||
|
|
||||||
|
|
||||||
class ShellTestKeystoneV3(ShellTest):
|
class ShellTestKeystoneV3(ShellTest):
|
||||||
|
AUTH_URL = 'http://no.where/v3'
|
||||||
|
|
||||||
def make_env(self, exclude=None, fake_env=FAKE_ENV):
|
def make_env(self, exclude=None, fake_env=FAKE_ENV):
|
||||||
if 'OS_AUTH_URL' in fake_env:
|
if 'OS_AUTH_URL' in fake_env:
|
||||||
fake_env.update({'OS_AUTH_URL': 'http://no.where/v3'})
|
fake_env.update({'OS_AUTH_URL': self.AUTH_URL})
|
||||||
env = dict((k, v) for k, v in fake_env.items() if k != exclude)
|
env = dict((k, v) for k, v in fake_env.items() if k != exclude)
|
||||||
self.useFixture(fixtures.MonkeyPatch('os.environ', env))
|
self.useFixture(fixtures.MonkeyPatch('os.environ', env))
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ class Client(object):
|
||||||
def __init__(self, username=None, api_key=None, project_id=None,
|
def __init__(self, username=None, api_key=None, project_id=None,
|
||||||
project_name=None, auth_url=None, magnum_url=None,
|
project_name=None, auth_url=None, magnum_url=None,
|
||||||
endpoint_type='publicURL', service_type='container',
|
endpoint_type='publicURL', service_type='container',
|
||||||
input_auth_token=None):
|
region_name=None, input_auth_token=None):
|
||||||
|
|
||||||
if not input_auth_token:
|
if not input_auth_token:
|
||||||
keystone = self.get_keystone_client(username=username,
|
keystone = self.get_keystone_client(username=username,
|
||||||
|
@ -50,7 +50,8 @@ class Client(object):
|
||||||
token=input_auth_token,
|
token=input_auth_token,
|
||||||
project_id=project_id,
|
project_id=project_id,
|
||||||
project_name=project_name)
|
project_name=project_name)
|
||||||
catalog = keystone.service_catalog.get_endpoints(service_type)
|
catalog = keystone.service_catalog.get_endpoints(
|
||||||
|
service_type, region_name=region_name)
|
||||||
if service_type in catalog:
|
if service_type in catalog:
|
||||||
for e_type, endpoint in catalog.get(service_type)[0].items():
|
for e_type, endpoint in catalog.get(service_type)[0].items():
|
||||||
if str(e_type).lower() == str(endpoint_type).lower():
|
if str(e_type).lower() == str(endpoint_type).lower():
|
||||||
|
|
Loading…
Reference in New Issue