Allow --token and --endpoint to bypass catalog
* allows skipping of service catalog * removes odd logic about password equivalence * also removes extra call to authenticate Change-Id: I5c0979107da99593b4ce8eb16c9695ba530da095
This commit is contained in:
@@ -139,7 +139,7 @@ class HTTPClient(httplib2.Http):
|
||||
self.authenticate()
|
||||
|
||||
kwargs.setdefault('headers', {})
|
||||
if self.auth_token and self.auth_token != self.password:
|
||||
if self.auth_token:
|
||||
kwargs['headers']['X-Auth-Token'] = self.auth_token
|
||||
|
||||
# Perform the request once. If we get a 401 back then it
|
||||
|
@@ -56,6 +56,14 @@ class OpenStackIdentityShell(object):
|
||||
action='store_true',
|
||||
help=argparse.SUPPRESS)
|
||||
|
||||
parser.add_argument('--token',
|
||||
default=env('SERVICE_TOKEN'),
|
||||
help='Defaults to env[SERVICE_TOKEN].')
|
||||
|
||||
parser.add_argument('--endpoint',
|
||||
default=env('SERVICE_ENDPOINT'),
|
||||
help='Defaults to env[SERVICE_ENDPOINT].')
|
||||
|
||||
parser.add_argument('--username',
|
||||
default=env('OS_USERNAME'),
|
||||
help='Defaults to env[OS_USERNAME].')
|
||||
@@ -154,39 +162,44 @@ class OpenStackIdentityShell(object):
|
||||
# for username or apikey but for compatibility it is not.
|
||||
|
||||
if not utils.isunauthenticated(args.func):
|
||||
if not args.username:
|
||||
raise exc.CommandError("You must provide a username "
|
||||
"via either --username or env[OS_USERNAME]")
|
||||
if not (args.token and args.endpoint):
|
||||
if not args.username:
|
||||
raise exc.CommandError("You must provide a username "
|
||||
"via either --username or env[OS_USERNAME]")
|
||||
|
||||
if not args.password:
|
||||
raise exc.CommandError("You must provide a password "
|
||||
"via either --password or env[OS_PASSWORD]")
|
||||
if not args.password:
|
||||
raise exc.CommandError("You must provide a password "
|
||||
"via either --password or env[OS_PASSWORD]")
|
||||
|
||||
if not args.auth_url:
|
||||
raise exc.CommandError("You must provide an auth url "
|
||||
"via either --auth_url or via env[OS_AUTH_URL]")
|
||||
if not args.auth_url:
|
||||
raise exc.CommandError("You must provide an auth url "
|
||||
"via either --auth_url or via env[OS_AUTH_URL]")
|
||||
|
||||
if utils.isunauthenticated(args.func):
|
||||
self.cs = shell_generic.CLIENT_CLASS(endpoint=args.auth_url)
|
||||
else:
|
||||
token = None
|
||||
endpoint = None
|
||||
if args.token and args.endpoint:
|
||||
token = args.token
|
||||
endpoint = args.endpoint
|
||||
self.cs = self.get_api_class(options.version)(
|
||||
username=args.username,
|
||||
tenant_name=args.tenant_name,
|
||||
tenant_id=args.tenant_id,
|
||||
token=token,
|
||||
endpoint=endpoint,
|
||||
password=args.password,
|
||||
auth_url=args.auth_url,
|
||||
region_name=args.region_name)
|
||||
|
||||
try:
|
||||
if not utils.isunauthenticated(args.func):
|
||||
self.cs.authenticate()
|
||||
args.func(self.cs, args)
|
||||
except exc.Unauthorized:
|
||||
raise exc.CommandError("Invalid OpenStack Keystone credentials.")
|
||||
except exc.AuthorizationFailure:
|
||||
raise exc.CommandError("Unable to authorize user")
|
||||
|
||||
args.func(self.cs, args)
|
||||
|
||||
def get_api_class(self, version):
|
||||
try:
|
||||
return {
|
||||
|
@@ -23,7 +23,7 @@ class TokenManager(base.ManagerWithFind):
|
||||
|
||||
def authenticate(self, username=None, tenant_id=None, tenant_name=None,
|
||||
password=None, token=None, return_raw=False):
|
||||
if token and token != password:
|
||||
if token:
|
||||
params = {"auth": {"token": {"id": token}}}
|
||||
elif username and password:
|
||||
params = {"auth": {"passwordCredentials": {"username": username,
|
||||
|
Reference in New Issue
Block a user