Add a full listing of all auth plugins and there options
A commonly requested document is what auth plugins are available and what parameters do they accept. Create an extension that can iterate through the stevedore namespace and render all its available options. Change-Id: Id0d0983c9803ce4e0ce201310a1603bc0ff30ca0changes/47/418347/3
parent
9d3ae3ef94
commit
c21ef89a88
@ -0,0 +1,93 @@
|
||||
# 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 inspect
|
||||
|
||||
from docutils import nodes
|
||||
from docutils.parsers import rst
|
||||
from docutils.parsers.rst import directives
|
||||
from docutils.statemachine import ViewList
|
||||
from sphinx.util.nodes import nested_parse_with_titles
|
||||
|
||||
from stevedore import extension
|
||||
|
||||
|
||||
class ListAuthPluginsDirective(rst.Directive):
|
||||
"""Present a simple list of the plugins in a namespace."""
|
||||
|
||||
option_spec = {
|
||||
'class': directives.class_option,
|
||||
'overline-style': directives.single_char_or_unicode,
|
||||
'underline-style': directives.single_char_or_unicode,
|
||||
}
|
||||
|
||||
has_content = True
|
||||
|
||||
@property
|
||||
def app(self):
|
||||
return self.state.document.settings.env.app
|
||||
|
||||
def report_load_failure(mgr, ep, err):
|
||||
self.app.warn(u'Failed to load %s: %s' % (ep.module_name, err))
|
||||
|
||||
def display_plugin(self, ext):
|
||||
overline_style = self.options.get('overline-style', '')
|
||||
underline_style = self.options.get('underline-style', '=')
|
||||
|
||||
if overline_style:
|
||||
yield overline_style * len(ext.name)
|
||||
|
||||
yield ext.name
|
||||
|
||||
if underline_style:
|
||||
yield underline_style * len(ext.name)
|
||||
|
||||
yield "\n"
|
||||
|
||||
doc = inspect.getdoc(ext.obj)
|
||||
if doc:
|
||||
yield doc
|
||||
yield "\n"
|
||||
yield "------"
|
||||
|
||||
yield "\n"
|
||||
|
||||
for opt in ext.obj.get_options():
|
||||
yield ":%s: %s" % (opt.name, opt.help)
|
||||
|
||||
yield "\n"
|
||||
|
||||
def run(self):
|
||||
mgr = extension.ExtensionManager(
|
||||
'keystoneauth1.plugin',
|
||||
on_load_failure_callback=self.report_load_failure,
|
||||
invoke_on_load=True,
|
||||
)
|
||||
|
||||
result = ViewList()
|
||||
|
||||
for name in sorted(mgr.names()):
|
||||
for line in self.display_plugin(mgr[name]):
|
||||
for l in line.splitlines():
|
||||
result.append(l, mgr[name].entry_point.module_name)
|
||||
|
||||
# Parse what we have into a new section.
|
||||
node = nodes.section()
|
||||
node.document = self.state.document
|
||||
nested_parse_with_titles(self.state, result, node)
|
||||
|
||||
return node.children
|
||||
|
||||
|
||||
def setup(app):
|
||||
app.info('loading keystoneauth1 plugins')
|
||||
app.add_directive('list-auth-plugins', ListAuthPluginsDirective)
|
@ -0,0 +1,92 @@
|
||||
==============
|
||||
Plugin Options
|
||||
==============
|
||||
|
||||
Using plugins via config file
|
||||
-----------------------------
|
||||
|
||||
When using the plugins via config file you define the plugin name as
|
||||
``auth_type``. The options of the plugin are then specified while replacing
|
||||
``-`` with ``_`` to be valid in configuration.
|
||||
|
||||
For example to use the password_ plugin in a config file you would specify:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[section]
|
||||
auth_url = http://keystone.example.com:5000/
|
||||
auth_type = password
|
||||
username = myuser
|
||||
password = mypassword
|
||||
project_name = myproject
|
||||
default_domain_name = mydomain
|
||||
|
||||
|
||||
Using plugins via CLI
|
||||
---------------------
|
||||
|
||||
When using auth plugins via CLI via ``os-client-config`` or ``shade`` you can
|
||||
specify parameters via environment configuration by using the pattern ``OS_``
|
||||
followed by the uppercase parameter name replacing ``-`` with ``_``.
|
||||
|
||||
For example to use the password_ plugin via environment variable you specify:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
export OS_AUTH_TYPE=password
|
||||
export OS_AUTH_URL=http://keystone.example.com:5000/
|
||||
export OS_USERNAME=myuser
|
||||
export OS_PASSWORD=mypassword
|
||||
export OS_PROJECT_NAME=myproject
|
||||
export OS_DEFAULT_DOMAIN_NAME=mydomain
|
||||
|
||||
Specifying operations via CLI parameter will override the environment
|
||||
parameter. These are specified with the pattern ``--os-`` and the parameter
|
||||
name. Using the password_ example again:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
openstack --os-auth-type password \
|
||||
--os-auth-url http://keystone.example.com:5000/ \
|
||||
--os-username myuser \
|
||||
--os-password mypassword \
|
||||
--os-project-name myproject \
|
||||
--os-default-domain-name mydomain \
|
||||
operation
|
||||
|
||||
Additional loaders
|
||||
------------------
|
||||
|
||||
The configuration and CLI loaders are quite commonly used however similar
|
||||
concepts are found in other situations such as ``os-client-config`` in which
|
||||
you specify authentication and other cloud parameters in a ``clouds.yaml``
|
||||
file.
|
||||
|
||||
Loaders such as these use the same plugin options listed below, but via their
|
||||
own mechanism. In ``os-client-config`` the password_ plugin looks like:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
clouds:
|
||||
mycloud:
|
||||
auth_type: password
|
||||
auth:
|
||||
auth_url: http://keystone.example.com:5000/
|
||||
auth_type: password
|
||||
username: myuser
|
||||
password: mypassword
|
||||
project_name: myproject
|
||||
default_domain_name: mydomain
|
||||
|
||||
However different services may implement loaders in their own way and you
|
||||
should consult their relevant documentation. The same auth options will be
|
||||
available.
|
||||
|
||||
|
||||
Available Plugins
|
||||
-----------------
|
||||
|
||||
This is a listing of all included plugins and the options that they accept.
|
||||
Plugins are listed alphabetically and not in any order of priority.
|
||||
|
||||
.. list-auth-plugins::
|
Loading…
Reference in New Issue