Merge "Support keystone region"

This commit is contained in:
Jenkins 2015-03-27 02:51:28 +00:00 committed by Gerrit Code Review
commit c5729c1f58
3 changed files with 38 additions and 3 deletions

View File

@ -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)

View File

@ -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))

View File

@ -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():