diff --git a/novaclient/client.py b/novaclient/client.py index 2a07e2c4a..8fe21dd56 100644 --- a/novaclient/client.py +++ b/novaclient/client.py @@ -38,7 +38,8 @@ class HTTPClient(httplib2.Http): USER_AGENT = 'python-novaclient' def __init__(self, user, apikey, projectid, auth_url, insecure=False, - timeout=None, token=None, region_name=None): + timeout=None, token=None, region_name=None, + endpoint_name='publicURL'): super(HTTPClient, self).__init__(timeout=timeout) self.user = user self.apikey = apikey @@ -46,6 +47,7 @@ class HTTPClient(httplib2.Http): self.auth_url = auth_url self.version = 'v1.0' self.region_name = region_name + self.endpoint_name = endpoint_name self.management_url = None self.auth_token = None @@ -155,7 +157,8 @@ class HTTPClient(httplib2.Http): self.auth_token = self.service_catalog.get_token() self.management_url = self.service_catalog.url_for( attr='region', - filter_value=self.region_name) + filter_value=self.region_name, + endpoint_type=self.endpoint_name) return None except KeyError: raise exceptions.AuthorizationFailure() diff --git a/novaclient/shell.py b/novaclient/shell.py index 5a7bb43cf..f8688051d 100644 --- a/novaclient/shell.py +++ b/novaclient/shell.py @@ -78,6 +78,10 @@ class OpenStackComputeShell(object): default=env('NOVA_REGION_NAME'), help='Defaults to env[NOVA_REGION_NAME].') + parser.add_argument('--endpoint_name', + default=env('NOVA_ENDPOINT_NAME'), + help='Defaults to env[NOVA_ENDPOINT_NAME] or "publicURL.') + parser.add_argument('--version', default=env('NOVA_VERSION'), help='Accepts 1.0 or 1.1, defaults to env[NOVA_VERSION].') @@ -153,9 +157,12 @@ class OpenStackComputeShell(object): self.do_help(args) return 0 - user, apikey, projectid, url, region_name, insecure = \ + user, apikey, projectid, url, region_name, endpoint_name, insecure = \ args.username, args.apikey, args.projectid, args.url, \ - args.region_name, args.insecure + args.region_name, args.endpoint_name, args.insecure + + if not endpoint_name: + endpoint_name = 'publicURL' #FIXME(usrleon): Here should be restrict for project id same as # for username or apikey but for compatibility it is not. @@ -180,7 +187,8 @@ class OpenStackComputeShell(object): "env[NOVA_URL") self.cs = self.get_api_class(options.version)(user, apikey, projectid, - url, insecure, region_name=region_name) + url, insecure, region_name=region_name, + endpoint_name=endpoint_name) try: self.cs.authenticate() diff --git a/novaclient/v1_0/client.py b/novaclient/v1_0/client.py index 4f5a532da..e6f665e5d 100644 --- a/novaclient/v1_0/client.py +++ b/novaclient/v1_0/client.py @@ -26,7 +26,8 @@ class Client(object): """ def __init__(self, username, api_key, project_id, auth_url=None, - insecure=False, timeout=None, token=None, region_name=None): + insecure=False, timeout=None, token=None, region_name=None, + endpoint_name='publicURL'): self.accounts = accounts.AccountManager(self) self.backup_schedules = backup_schedules.BackupScheduleManager(self) @@ -45,7 +46,8 @@ class Client(object): insecure=insecure, timeout=timeout, token=token, - region_name=region_name) + region_name=region_name, + endpoint_name=endpoint_name) def authenticate(self): """ diff --git a/novaclient/v1_1/client.py b/novaclient/v1_1/client.py index 31e49fefb..413ed16fd 100644 --- a/novaclient/v1_1/client.py +++ b/novaclient/v1_1/client.py @@ -28,9 +28,10 @@ class Client(object): """ - # FIXME(jesse): project_id isn't required to autenticate + # FIXME(jesse): project_id isn't required to authenticate def __init__(self, username, api_key, project_id, auth_url, - insecure=False, timeout=None, token=None, region_name=None): + insecure=False, timeout=None, token=None, region_name=None, + endpoint_name='publicURL'): self.flavors = flavors.FlavorManager(self) self.floating_ips = floating_ips.FloatingIPManager(self) self.images = images.ImageManager(self) @@ -52,7 +53,8 @@ class Client(object): insecure=insecure, timeout=timeout, token=token, - region_name=region_name) + region_name=region_name, + endpoint_name=endpoint_name) def authenticate(self): """