add option to connect without authentication
user can provide the user name , project id and endpoint and connect directly to vitrage without connecting to keystone the user should use the no-auth plugin for this Change-Id: Id672ab974fb383c03ef8360b54a385b2f6aeae86
This commit is contained in:
parent
471cc55dcd
commit
6327e9ee52
@ -32,6 +32,9 @@ setup-hooks =
|
||||
console_scripts =
|
||||
vitrage = vitrageclient.shell:main
|
||||
|
||||
keystoneauth1.plugin =
|
||||
vitrage-noauth = vitrageclient.auth:VitrageNoAuthLoader
|
||||
|
||||
openstack.cli.extension =
|
||||
rca = vitrageclient.osc
|
||||
|
||||
|
77
vitrageclient/auth.py
Normal file
77
vitrageclient/auth.py
Normal file
@ -0,0 +1,77 @@
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import os
|
||||
|
||||
from keystoneauth1 import loading
|
||||
from keystoneauth1 import plugin
|
||||
|
||||
|
||||
class VitrageNoAuthPlugin(plugin.BaseAuthPlugin):
|
||||
"""No authentication plugin for Vitrage
|
||||
|
||||
This is a keystoneauth plugin that instead of
|
||||
doing authentication, it just fill the 'x-user-id'
|
||||
and 'x-project-id' headers with the user provided one.
|
||||
"""
|
||||
def __init__(self, user_id, project_id, roles, endpoint):
|
||||
self._user_id = user_id
|
||||
self._project_id = project_id
|
||||
self._endpoint = endpoint
|
||||
self._roles = roles
|
||||
|
||||
def get_token(self, session, **kwargs):
|
||||
return '<no-token-needed>'
|
||||
|
||||
def get_headers(self, session, **kwargs):
|
||||
return {'x-user-id': self._user_id,
|
||||
'x-project-id': self._project_id,
|
||||
'x-roles': self._roles}
|
||||
|
||||
def get_user_id(self, session, **kwargs):
|
||||
return self._user_id
|
||||
|
||||
def get_project_id(self, session, **kwargs):
|
||||
return self._project_id
|
||||
|
||||
def get_endpoint(self, session, **kwargs):
|
||||
return self._endpoint
|
||||
|
||||
|
||||
class VitrageOpt(loading.Opt):
|
||||
@property
|
||||
def argparse_args(self):
|
||||
return ['--%s' % o.name for o in self._all_opts]
|
||||
|
||||
@property
|
||||
def argparse_default(self):
|
||||
# select the first ENV that is not false-y or return None
|
||||
for o in self._all_opts:
|
||||
v = os.environ.get('VITRAGE_%s' % o.name.replace('-', '_').upper())
|
||||
if v:
|
||||
return v
|
||||
return self.default
|
||||
|
||||
|
||||
class VitrageNoAuthLoader(loading.BaseLoader):
|
||||
plugin_class = VitrageNoAuthPlugin
|
||||
|
||||
def get_options(self):
|
||||
options = super(VitrageNoAuthLoader, self).get_options()
|
||||
return options
|
||||
options.extend([
|
||||
VitrageOpt('user-id', help='User ID', required=True),
|
||||
VitrageOpt('project-id', help='Project ID', required=True),
|
||||
VitrageOpt('roles', help='Roles', default="admin"),
|
||||
VitrageOpt('endpoint', help='Vitrage endpoint', required=True),
|
||||
])
|
@ -24,6 +24,7 @@ import os
|
||||
import sys
|
||||
import warnings
|
||||
|
||||
import auth
|
||||
from cliff import app
|
||||
from cliff import commandmanager
|
||||
from keystoneauth1 import loading
|
||||
@ -85,15 +86,17 @@ class VitrageShell(app.App):
|
||||
parser = super(VitrageShell, self).build_option_parser(
|
||||
description, version, argparse_kwargs={'allow_abbrev': False})
|
||||
|
||||
self.register_keyauth_argparse_arguments(parser)
|
||||
|
||||
parser.add_argument('--vitrage-api-version',
|
||||
default=os.environ.get('VITRAGE_API_VERSION', '1'),
|
||||
help='Defaults to env[VITRAGE_API_VERSION] or 1.')
|
||||
|
||||
parser.add_argument('--endpoint',
|
||||
default=os.environ.get('VITRAGE_ENDPOINT'),
|
||||
help='Vitrage endpoint (Env: VITRAGE_ENDPOINT)')
|
||||
plugin = self.register_keyauth_argparse_arguments(parser)
|
||||
|
||||
if not isinstance(plugin, auth.VitrageNoAuthLoader):
|
||||
parser.add_argument('--endpoint',
|
||||
default=os.environ.get('VITRAGE_ENDPOINT'),
|
||||
help='Vitrage endpoint (Env: VITRAGE_ENDPOINT)'
|
||||
)
|
||||
|
||||
return parser
|
||||
|
||||
@ -117,8 +120,9 @@ class VitrageShell(app.App):
|
||||
|
||||
loading.register_session_argparse_arguments(parser=parser)
|
||||
|
||||
loading.register_auth_argparse_arguments(parser=parser, argv=sys.argv,
|
||||
default='password')
|
||||
return loading.register_auth_argparse_arguments(parser=parser,
|
||||
argv=sys.argv,
|
||||
default='password')
|
||||
|
||||
@property
|
||||
def client(self):
|
||||
|
Loading…
Reference in New Issue
Block a user