Merge "Support keystone region"
This commit is contained in:
commit
c5729c1f58
@ -26,6 +26,7 @@ from __future__ import print_function
|
||||
import argparse
|
||||
import getpass
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
|
||||
from oslo.utils import encodeutils
|
||||
@ -251,6 +252,12 @@ class OpenStackMagnumShell(object):
|
||||
help="Use the auth token cache. Defaults to False "
|
||||
"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
|
||||
# parser.add_argument('--timings',
|
||||
# default=False,
|
||||
@ -506,6 +513,7 @@ class OpenStackMagnumShell(object):
|
||||
project_name=os_tenant_name,
|
||||
auth_url=os_auth_url,
|
||||
service_type=service_type,
|
||||
region_name=args.os_region_name,
|
||||
magnum_url=bypass_url)
|
||||
|
||||
args.func(self.cs, args)
|
||||
|
@ -63,6 +63,7 @@ class ParserTest(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"
|
||||
" 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',
|
||||
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):
|
||||
AUTH_URL = 'http://no.where/v3'
|
||||
|
||||
def make_env(self, exclude=None, fake_env=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)
|
||||
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,
|
||||
project_name=None, auth_url=None, magnum_url=None,
|
||||
endpoint_type='publicURL', service_type='container',
|
||||
input_auth_token=None):
|
||||
region_name=None, input_auth_token=None):
|
||||
|
||||
if not input_auth_token:
|
||||
keystone = self.get_keystone_client(username=username,
|
||||
@ -50,7 +50,8 @@ class Client(object):
|
||||
token=input_auth_token,
|
||||
project_id=project_id,
|
||||
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:
|
||||
for e_type, endpoint in catalog.get(service_type)[0].items():
|
||||
if str(e_type).lower() == str(endpoint_type).lower():
|
||||
|
Loading…
Reference in New Issue
Block a user