Provide oslo.policies
Add policies to the api based on oslo.policies. Small changes in documentation. Provide generator for sample policies file. Add policies for agent and admin. Story: 200112 Task: 4807 Depends-On: I76d737bf9d1216b041bc1a518cc2098f28e7da7b Change-Id: Idf5c4ec1b663ad9ed3ab25744bdf0b7f28cdb1a2
This commit is contained in:
parent
5321635049
commit
32c4560c3b
1
.gitignore
vendored
1
.gitignore
vendored
@ -32,3 +32,4 @@ log/
|
||||
*config*.yml
|
||||
db/config.yml
|
||||
.coverage.*
|
||||
*.sample
|
||||
|
@ -2,8 +2,8 @@
|
||||
test_command=OS_STDOUT_CAPTURE=${OS_STDOUT_CAPTURE:-1} \
|
||||
OS_STDERR_CAPTURE=${OS_STDERR_CAPTURE:-1} \
|
||||
OS_TEST_TIMEOUT=${OS_TEST_TIMEOUT:-60} \
|
||||
${PYTHON:-python} -m subunit.run discover monasca $LISTOPT $IDOPTION
|
||||
${PYTHON:-python} -m subunit.run discover $PWD $LISTOPT $IDOPTION
|
||||
|
||||
test_id_option=--load-list $IDFILE
|
||||
test_list_option=--list
|
||||
group_regex=monasca_events_api\.tests(?:\.|_)([^_]+)
|
||||
group_regex=monasca_events_api\.tests\.unit(?:\.|_)([^_]+)
|
||||
|
@ -1,259 +0,0 @@
|
||||
# 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.
|
||||
#
|
||||
# Key Manager API documentation build configuration file
|
||||
#
|
||||
# All configuration values have a default; values that are commented out
|
||||
# serve to show the default.
|
||||
|
||||
# -- General configuration ------------------------------------------------
|
||||
|
||||
# If your documentation needs a minimal Sphinx version, state it here.
|
||||
needs_sphinx = '1.6'
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||
# ones.
|
||||
extensions = [
|
||||
'openstackdocstheme'
|
||||
]
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
# The suffix of source filenames.
|
||||
source_suffix = '.rst'
|
||||
|
||||
# The encoding of source files.
|
||||
source_encoding = 'utf-8'
|
||||
|
||||
# The master toctree document.
|
||||
master_doc = 'index'
|
||||
|
||||
# General details about project
|
||||
repository_name = u'openstack/monasca-events-api'
|
||||
project = u'Monasca Events API Guide'
|
||||
bug_project = u'monasca-events-api'
|
||||
bug_tag = u'api-guide'
|
||||
copyright = u'2014, OpenStack Foundation'
|
||||
|
||||
from monasca_events_api.version import version_info
|
||||
version = version_info.version_string()
|
||||
release = version_info.release_string()
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
# language = None
|
||||
|
||||
# There are two options for replacing |today|: either, you set today to some
|
||||
# non-false value, then it is used:
|
||||
# today = ''
|
||||
# Else, today_fmt is used as the format for a strftime call.
|
||||
# today_fmt = '%B %d, %Y'
|
||||
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
exclude_patterns = []
|
||||
|
||||
# The reST default role (used for this markup: `text`) to use for all
|
||||
# documents.
|
||||
# default_role = None
|
||||
|
||||
# If true, '()' will be appended to :func: etc. cross-reference text.
|
||||
# add_function_parentheses = True
|
||||
|
||||
# If true, the current module name will be prepended to all description
|
||||
# unit titles (such as .. function::).
|
||||
# add_module_names = True
|
||||
|
||||
# If true, sectionauthor and moduleauthor directives will be shown in the
|
||||
# output. They are ignored by default.
|
||||
# show_authors = False
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = 'sphinx'
|
||||
|
||||
# A list of ignored prefixes for module index sorting.
|
||||
# modindex_common_prefix = []
|
||||
|
||||
# If true, keep warnings as "system message" paragraphs in the built documents.
|
||||
# keep_warnings = False
|
||||
|
||||
|
||||
# -- Options for HTML output ----------------------------------------------
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
html_theme = 'openstackdocs'
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
# html_theme_options = {}
|
||||
|
||||
# A shorter title for the navigation bar. Default is the same as html_title.
|
||||
html_short_title = 'API Guide'
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top
|
||||
# of the sidebar.
|
||||
# html_logo = None
|
||||
|
||||
# The name of an image file (within the static path) to use as favicon of the
|
||||
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||
# pixels large.
|
||||
# html_favicon = None
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||
# html_static_path = []
|
||||
|
||||
# Add any extra paths that contain custom files (such as robots.txt or
|
||||
# .htaccess) here, relative to this directory. These files are copied
|
||||
# directly to the root of the documentation.
|
||||
# html_extra_path = []
|
||||
|
||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||
# using the given strftime format.
|
||||
html_last_updated_fmt = '%Y-%m-%d %H:%M'
|
||||
|
||||
# If true, SmartyPants will be used to convert quotes and dashes to
|
||||
# typographically correct entities.
|
||||
# html_use_smartypants = True
|
||||
|
||||
# Custom sidebar templates, maps document names to template names.
|
||||
# html_sidebars = {}
|
||||
|
||||
# Additional templates that should be rendered to pages, maps page names to
|
||||
# template names.
|
||||
# html_additional_pages = {}
|
||||
|
||||
# If false, no module index is generated.
|
||||
# html_domain_indices = True
|
||||
|
||||
# If false, no index is generated.
|
||||
html_use_index = True
|
||||
|
||||
# If true, the index is split into individual pages for each letter.
|
||||
# html_split_index = False
|
||||
|
||||
# If true, links to the reST sources are added to the pages.
|
||||
# html_show_sourcelink = True
|
||||
|
||||
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
||||
# html_show_sphinx = True
|
||||
|
||||
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
||||
# html_show_copyright = True
|
||||
|
||||
# If true, an OpenSearch description file will be output, and all pages will
|
||||
# contain a <link> tag referring to it. The value of this option must be the
|
||||
# base URL from which the finished HTML is served.
|
||||
# html_use_opensearch = ''
|
||||
|
||||
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
||||
# html_file_suffix = None
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = 'monascaeventsapi-api-guide'
|
||||
|
||||
|
||||
# -- Options for LaTeX output ---------------------------------------------
|
||||
|
||||
latex_elements = {
|
||||
# The paper size ('letterpaper' or 'a4paper').
|
||||
# 'papersize': 'letterpaper',
|
||||
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
# 'pointsize': '10pt',
|
||||
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
# 'preamble': '',
|
||||
}
|
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title,
|
||||
# author, documentclass [howto, manual, or own class]).
|
||||
latex_documents = [
|
||||
('index', 'MonascaEventsApiAPI.tex', u'Key Manager API Documentation',
|
||||
u'OpenStack Foundation', 'manual'),
|
||||
]
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top of
|
||||
# the title page.
|
||||
# latex_logo = None
|
||||
|
||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||
# not chapters.
|
||||
# latex_use_parts = False
|
||||
|
||||
# If true, show page references after internal links.
|
||||
# latex_show_pagerefs = False
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
# latex_show_urls = False
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
# latex_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
# latex_domain_indices = True
|
||||
|
||||
|
||||
# -- Options for manual page output ---------------------------------------
|
||||
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
('index', 'monascaeventsapiapi', u'Monasca Events API Documentation',
|
||||
[u'OpenStack Foundation'], 1)
|
||||
]
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
# man_show_urls = False
|
||||
|
||||
|
||||
# -- Options for Texinfo output -------------------------------------------
|
||||
|
||||
# Grouping the document tree into Texinfo files. List of tuples
|
||||
# (source start file, target name, title, author,
|
||||
# dir menu entry, description, category)
|
||||
texinfo_documents = [
|
||||
('index', 'MonascaEventsApiAPIGuide', u'Monasca Events API Guide',
|
||||
u'OpenStack Foundation', 'APIGuide',
|
||||
'This guide teaches OpenStack Monasca Events service users concepts about '
|
||||
'managing keys in an OpenStack cloud with the Monasca Events API.',
|
||||
'Miscellaneous'),
|
||||
]
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
# texinfo_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
# texinfo_domain_indices = True
|
||||
|
||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||
# texinfo_show_urls = 'footnote'
|
||||
|
||||
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
||||
# texinfo_no_detailmenu = False
|
||||
|
||||
# -- Options for Internationalization output ------------------------------
|
||||
locale_dirs = ['locale/']
|
||||
|
||||
# -- Options for PDF output --------------------------------------------------
|
||||
|
||||
pdf_documents = [
|
||||
('index', u'MonascaEventsApiAPIGuide', u'Key Manager API Guide', u'OpenStack '
|
||||
'contributors')
|
||||
]
|
@ -1,35 +0,0 @@
|
||||
..
|
||||
Copyright 2017 Fujitsu LIMITED
|
||||
|
||||
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.
|
||||
|
||||
==================
|
||||
Monasca Events API
|
||||
==================
|
||||
|
||||
The monasca-events-api project has a RESTful HTTP service called the
|
||||
Monasca Events API. To this API , services (agents) can send events collected
|
||||
from OpenStack message bus.
|
||||
|
||||
This guide covers the concepts in the Monasca Events API.
|
||||
For a full reference listing, please see:
|
||||
`Monasca Events API Reference <http://developer.openstack.org/api-ref/monasca/#monasca-events-api>`__.
|
||||
|
||||
We welcome feedback, comments and bug reports at
|
||||
`storyboard/monasca <https://storyboard.openstack.org/#!/project_group/866>`__.
|
||||
|
||||
|
||||
Contents
|
||||
========
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
@ -16,6 +16,8 @@
|
||||
# All configuration values have a default; values that are commented out
|
||||
# serve to show the default.
|
||||
|
||||
from monasca_events_api.version import version_info
|
||||
|
||||
# -- General configuration ------------------------------------------------
|
||||
|
||||
# If your documentation needs a minimal Sphinx version, state it here.
|
||||
@ -43,18 +45,13 @@ master_doc = 'index'
|
||||
|
||||
# General details about project
|
||||
repository_name = u'openstack/monasca-events-api'
|
||||
project = u'Monasca Events Ref Guide'
|
||||
bug_project = u'monasca-events-api'
|
||||
bug_tag = u'api-ref'
|
||||
copyright = u'2014, OpenStack Foundation'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
from monasca_events_api.version import version_info
|
||||
version = version_info.version_string()
|
||||
release = version_info.release_string()
|
||||
project = u'Monitoring Events API Reference'
|
||||
version = version_info.canonical_version_string()
|
||||
release = version_info.version_string_with_vcs()
|
||||
bug_project = u'866'
|
||||
bug_tag = u''
|
||||
copyright = u'2014-present, OpenStack Foundation'
|
||||
author = u'OpenStack Foundation'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
@ -173,8 +170,7 @@ html_use_index = True
|
||||
# html_file_suffix = None
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = 'monascaeventsapi-api-ref'
|
||||
|
||||
htmlhelp_basename = 'MonitoringEventsApiRefDoc'
|
||||
|
||||
# -- Options for LaTeX output ---------------------------------------------
|
||||
|
||||
@ -193,8 +189,8 @@ latex_elements = {
|
||||
# (source start file, target name, title,
|
||||
# author, documentclass [howto, manual, or own class]).
|
||||
latex_documents = [
|
||||
(master_doc, 'MonascaEventsApi.tex', u'Monasca Events API Documentation',
|
||||
u'OpenStack Foundation', 'manual'),
|
||||
(master_doc, 'MonitoringEventsApiRef.tex', u'Monitoring Events API Reference',
|
||||
[author], 'manual'),
|
||||
]
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top of
|
||||
@ -217,42 +213,5 @@ latex_documents = [
|
||||
# If false, no module index is generated.
|
||||
# latex_domain_indices = True
|
||||
|
||||
|
||||
# -- Options for manual page output ---------------------------------------
|
||||
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
(master_doc, 'monascaeventsapi', u'Monasca Events API Documentation',
|
||||
[u'OpenStack Foundation'], 1)
|
||||
]
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
# man_show_urls = False
|
||||
|
||||
|
||||
# -- Options for Texinfo output -------------------------------------------
|
||||
|
||||
# Grouping the document tree into Texinfo files. List of tuples
|
||||
# (source start file, target name, title, author,
|
||||
# dir menu entry, description, category)
|
||||
texinfo_documents = [
|
||||
(master_doc, 'MonascaEventsAPI', u'Monasca Events API Documentation',
|
||||
u'OpenStack Foundation', 'MonascaEventsAPI', 'Monasca Events API',
|
||||
'Miscellaneous'),
|
||||
]
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
# texinfo_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
# texinfo_domain_indices = True
|
||||
|
||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||
# texinfo_show_urls = 'footnote'
|
||||
|
||||
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
||||
# texinfo_no_detailmenu = False
|
||||
|
||||
# -- Options for Internationalization output ------------------------------
|
||||
locale_dirs = ['locale/']
|
||||
|
@ -1,7 +1,7 @@
|
||||
:tocdepth: 2
|
||||
|
||||
..
|
||||
Copyright 2014-2017 Fujitsu LIMITED
|
||||
Copyright 2017 Fujitsu LIMITED
|
||||
|
||||
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
|
||||
|
@ -1,7 +0,0 @@
|
||||
# config-generator
|
||||
|
||||
To generate sample configuration execute
|
||||
|
||||
```bash
|
||||
tox -e genconfig
|
||||
```
|
11
config-generator/README.rst
Normal file
11
config-generator/README.rst
Normal file
@ -0,0 +1,11 @@
|
||||
================
|
||||
config-generator
|
||||
================
|
||||
|
||||
To generate sample configuration execute::
|
||||
|
||||
tox -e genconfig
|
||||
|
||||
To generate the sample policies execute::
|
||||
|
||||
tox -e genpolicy
|
@ -4,3 +4,4 @@ width = 80
|
||||
format = ini
|
||||
namespace = events.api
|
||||
namespace = oslo.log
|
||||
namespace = oslo.policy
|
3
config-generator/policy.conf
Normal file
3
config-generator/policy.conf
Normal file
@ -0,0 +1,3 @@
|
||||
[DEFAULT]
|
||||
output_file = etc/monasca/events-policy.yaml.sample
|
||||
namespace = events.api
|
0
doc/api-samples/.gitkeep
Normal file
0
doc/api-samples/.gitkeep
Normal file
1
doc/source/.gitignore
vendored
Normal file
1
doc/source/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
_static/
|
0
doc/source/.gitkeep
Normal file
0
doc/source/.gitkeep
Normal file
@ -1,114 +0,0 @@
|
||||
[DEFAULT]
|
||||
|
||||
#
|
||||
# From oslo.log
|
||||
#
|
||||
|
||||
# If set to true, the logging level will be set to DEBUG instead of
|
||||
# the default INFO level. (boolean value)
|
||||
# Note: This option can be changed without restarting.
|
||||
#debug = false
|
||||
|
||||
# The name of a logging configuration file. This file is appended to
|
||||
# any existing logging configuration files. For details about logging
|
||||
# configuration files, see the Python logging module documentation.
|
||||
# Note that when logging configuration files are used then all logging
|
||||
# configuration is set in the configuration file and other logging
|
||||
# configuration options are ignored (for example,
|
||||
# logging_context_format_string). (string value)
|
||||
# Note: This option can be changed without restarting.
|
||||
# Deprecated group/name - [DEFAULT]/log_config
|
||||
#log_config_append = <None>
|
||||
|
||||
# Defines the format string for %%(asctime)s in log records. Default:
|
||||
# %(default)s . This option is ignored if log_config_append is set.
|
||||
# (string value)
|
||||
#log_date_format = %Y-%m-%d %H:%M:%S
|
||||
|
||||
# (Optional) Name of log file to send logging output to. If no default
|
||||
# is set, logging will go to stderr as defined by use_stderr. This
|
||||
# option is ignored if log_config_append is set. (string value)
|
||||
# Deprecated group/name - [DEFAULT]/logfile
|
||||
#log_file = <None>
|
||||
|
||||
# (Optional) The base directory used for relative log_file paths.
|
||||
# This option is ignored if log_config_append is set. (string value)
|
||||
# Deprecated group/name - [DEFAULT]/logdir
|
||||
#log_dir = <None>
|
||||
|
||||
# Uses logging handler designed to watch file system. When log file is
|
||||
# moved or removed this handler will open a new log file with
|
||||
# specified path instantaneously. It makes sense only if log_file
|
||||
# option is specified and Linux platform is used. This option is
|
||||
# ignored if log_config_append is set. (boolean value)
|
||||
#watch_log_file = false
|
||||
|
||||
# Use syslog for logging. Existing syslog format is DEPRECATED and
|
||||
# will be changed later to honor RFC5424. This option is ignored if
|
||||
# log_config_append is set. (boolean value)
|
||||
#use_syslog = false
|
||||
|
||||
# Enable journald for logging. If running in a systemd environment you
|
||||
# may wish to enable journal support. Doing so will use the journal
|
||||
# native protocol which includes structured metadata in addition to
|
||||
# log messages.This option is ignored if log_config_append is set.
|
||||
# (boolean value)
|
||||
#use_journal = false
|
||||
|
||||
# Syslog facility to receive log lines. This option is ignored if
|
||||
# log_config_append is set. (string value)
|
||||
#syslog_log_facility = LOG_USER
|
||||
|
||||
# Log output to standard error. This option is ignored if
|
||||
# log_config_append is set. (boolean value)
|
||||
#use_stderr = false
|
||||
|
||||
# Format string to use for log messages with context. (string value)
|
||||
#logging_context_format_string = %(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s
|
||||
|
||||
# Format string to use for log messages when context is undefined.
|
||||
# (string value)
|
||||
#logging_default_format_string = %(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s
|
||||
|
||||
# Additional data to append to log message when logging level for the
|
||||
# message is DEBUG. (string value)
|
||||
#logging_debug_format_suffix = %(funcName)s %(pathname)s:%(lineno)d
|
||||
|
||||
# Prefix each line of exception output with this format. (string
|
||||
# value)
|
||||
#logging_exception_prefix = %(asctime)s.%(msecs)03d %(process)d ERROR %(name)s %(instance)s
|
||||
|
||||
# Defines the format string for %(user_identity)s that is used in
|
||||
# logging_context_format_string. (string value)
|
||||
#logging_user_identity_format = %(user)s %(tenant)s %(domain)s %(user_domain)s %(project_domain)s
|
||||
|
||||
# List of package logging levels in logger=LEVEL pairs. This option is
|
||||
# ignored if log_config_append is set. (list value)
|
||||
#default_log_levels = amqp=WARN,amqplib=WARN,boto=WARN,qpid=WARN,sqlalchemy=WARN,suds=INFO,oslo.messaging=INFO,oslo_messaging=INFO,iso8601=WARN,requests.packages.urllib3.connectionpool=WARN,urllib3.connectionpool=WARN,websocket=WARN,requests.packages.urllib3.util.retry=WARN,urllib3.util.retry=WARN,keystonemiddleware=WARN,routes.middleware=WARN,stevedore=WARN,taskflow=WARN,keystoneauth=WARN,oslo.cache=INFO,dogpile.core.dogpile=INFO
|
||||
|
||||
# Enables or disables publication of error events. (boolean value)
|
||||
#publish_errors = false
|
||||
|
||||
# The format for an instance that is passed with the log message.
|
||||
# (string value)
|
||||
#instance_format = "[instance: %(uuid)s] "
|
||||
|
||||
# The format for an instance UUID that is passed with the log message.
|
||||
# (string value)
|
||||
#instance_uuid_format = "[instance: %(uuid)s] "
|
||||
|
||||
# Interval, number of seconds, of log rate limiting. (integer value)
|
||||
#rate_limit_interval = 0
|
||||
|
||||
# Maximum number of logged messages per rate_limit_interval. (integer
|
||||
# value)
|
||||
#rate_limit_burst = 0
|
||||
|
||||
# Log level name used by rate limiting: CRITICAL, ERROR, INFO,
|
||||
# WARNING, DEBUG or empty string. Logs with level greater or equal to
|
||||
# rate_limit_except_level are not filtered. An empty string means that
|
||||
# all levels are filtered. (string value)
|
||||
#rate_limit_except_level = CRITICAL
|
||||
|
||||
# Enables or disables fatal status of deprecations. (boolean value)
|
||||
#fatal_deprecations = false
|
6
doc/source/admin/index.rst
Normal file
6
doc/source/admin/index.rst
Normal file
@ -0,0 +1,6 @@
|
||||
====================
|
||||
Administration guide
|
||||
====================
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
3
doc/source/cli/index.rst
Normal file
3
doc/source/cli/index.rst
Normal file
@ -0,0 +1,3 @@
|
||||
======================
|
||||
Command Line Interface
|
||||
======================
|
@ -1,7 +0,0 @@
|
||||
monasca_events_api
|
||||
==================
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 4
|
||||
|
||||
monasca_events_api
|
@ -1,8 +0,0 @@
|
||||
monasca\_events\_api\.conf package
|
||||
==================================
|
||||
|
||||
.. automodule:: monasca_events_api.conf
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
@ -1,35 +0,0 @@
|
||||
monasca\_events\_api package
|
||||
============================
|
||||
|
||||
.. automodule:: monasca_events_api
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
Subpackages
|
||||
-----------
|
||||
|
||||
.. toctree::
|
||||
|
||||
monasca_events_api.conf
|
||||
|
||||
Submodules
|
||||
----------
|
||||
|
||||
monasca\_events\_api\.config module
|
||||
-----------------------------------
|
||||
|
||||
.. automodule:: monasca_events_api.config
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
monasca\_events\_api\.version module
|
||||
------------------------------------
|
||||
|
||||
.. automodule:: monasca_events_api.version
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# monasca-events-api documentation build configuration file, created by
|
||||
# monasca-events-app documentation build configuration file, created by
|
||||
# sphinx-quickstart on Wed Nov 18 12:02:03 2015.
|
||||
#
|
||||
# This file is execfile()d with the current directory set to its
|
||||
@ -19,7 +19,9 @@ from monasca_events_api.version import version_info
|
||||
|
||||
sys.path = [
|
||||
os.path.abspath('../..'),
|
||||
os.path.abspath('../../bin')
|
||||
os.path.abspath('../../bin'),
|
||||
os.path.abspath('./'),
|
||||
os.path.abspath('../')
|
||||
] + sys.path
|
||||
|
||||
# -- General configuration ------------------------------------------------
|
||||
@ -37,25 +39,30 @@ extensions = [
|
||||
'sphinx.ext.autodoc',
|
||||
'sphinx.ext.viewcode',
|
||||
'oslo_config.sphinxconfiggen',
|
||||
'oslo_policy.sphinxpolicygen',
|
||||
'oslo_config.sphinxext',
|
||||
'openstackdocstheme',
|
||||
]
|
||||
|
||||
# geeneral information about project
|
||||
repository_name = u'openstack/monasca-events-api'
|
||||
project = u'Monasca Events Dev Docs'
|
||||
version = version_info.version_string()
|
||||
release = version_info.release_string()
|
||||
bug_project = u'monasca-events-api'
|
||||
bug_tag = u'doc'
|
||||
project = u'monasca'
|
||||
version = version_info.canonical_version_string()
|
||||
release = version_info.version_string_with_vcs()
|
||||
bug_project = u'866'
|
||||
bug_tag = u''
|
||||
copyright = u'2017-present, OpenStack Foundation'
|
||||
author = u'OpenStack Foundation'
|
||||
|
||||
# sample config
|
||||
config_generator_config_file = [
|
||||
('config-generator/monasca-events-api.conf', '_static/events-api')
|
||||
('config-generator/config.conf', '_static/events-api')
|
||||
]
|
||||
|
||||
# sample policy file
|
||||
policy_generator_config_file = 'config-generator/policy.conf'
|
||||
sample_policy_basename = '_static/events-api'
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
@ -194,7 +201,7 @@ html_use_modindex = True
|
||||
#html_search_scorer = 'scorer.js'
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = 'monasca-events-apidoc'
|
||||
htmlhelp_basename = 'MonitoringEventsApiDoc'
|
||||
|
||||
# -- Options for LaTeX output ---------------------------------------------
|
||||
|
||||
@ -216,8 +223,8 @@ latex_elements = {
|
||||
# (source start file, target name, title,
|
||||
# author, documentclass [howto, manual, or own class]).
|
||||
latex_documents = [
|
||||
(master_doc, 'monasca-events-api.tex', u'monasca-events-api Documentation',
|
||||
u'Openstack Foundation \\textless{}monasca@lists.launchpad.net\\textgreater{}', 'manual'),
|
||||
(master_doc, 'MonitoringEventsApi.tex', u'Monasca Events Documentation',
|
||||
[author], 'manual'),
|
||||
]
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top of
|
||||
@ -246,37 +253,12 @@ latex_documents = [
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
(master_doc, 'monasca-events-api', u'monasca-events-api Documentation',
|
||||
(master_doc, 'monitoringeventsapi', u'Monasca Events Documentation',
|
||||
[author], 1)
|
||||
]
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
#man_show_urls = False
|
||||
|
||||
|
||||
# -- Options for Texinfo output -------------------------------------------
|
||||
|
||||
# Grouping the document tree into Texinfo files. List of tuples
|
||||
# (source start file, target name, title, author,
|
||||
# dir menu entry, description, category)
|
||||
texinfo_documents = [
|
||||
(master_doc, 'monasca-events-api', u'monasca-events-api Documentation',
|
||||
author, 'monasca-events-api', 'Rest-API to collect events from your cloud.',
|
||||
'Miscellaneous'),
|
||||
]
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
#texinfo_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
#texinfo_domain_indices = True
|
||||
|
||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||
#texinfo_show_urls = 'footnote'
|
||||
|
||||
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
||||
#texinfo_no_detailmenu = False
|
||||
|
||||
|
||||
# Example configuration for intersphinx: refer to the Python standard library.
|
||||
intersphinx_mapping = {'https://doc.python.org/': None}
|
||||
intersphinx_mapping = {'https://doc.python.org/': None}
|
3
doc/source/configuration/index.rst
Normal file
3
doc/source/configuration/index.rst
Normal file
@ -0,0 +1,3 @@
|
||||
=============
|
||||
Configuration
|
||||
=============
|
3
doc/source/contributor/.gitignore
vendored
Normal file
3
doc/source/contributor/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
# codebase documentation is autogenerated
|
||||
# do not track it
|
||||
api/
|
19
doc/source/contributor/code.rst
Normal file
19
doc/source/contributor/code.rst
Normal file
@ -0,0 +1,19 @@
|
||||
.. _codedocs:
|
||||
|
||||
======================
|
||||
Codebase documentation
|
||||
======================
|
||||
|
||||
Following section contains codebase documentation generated with, a little
|
||||
bit of assistance, `sphinx.ext.autodoc`_.
|
||||
|
||||
.. _`sphinx.ext.autodoc`: http://www.sphinx-doc.org/en/stable/ext/autodoc.html
|
||||
|
||||
Modules
|
||||
=======
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
api/autoindex.rst
|
||||
|
1
doc/source/contributor/history.rst
Normal file
1
doc/source/contributor/history.rst
Normal file
@ -0,0 +1 @@
|
||||
.. include:: ../../../ChangeLog
|
37
doc/source/contributor/index.rst
Normal file
37
doc/source/contributor/index.rst
Normal file
@ -0,0 +1,37 @@
|
||||
=======================
|
||||
Contribution Guidelines
|
||||
=======================
|
||||
|
||||
In the Contributions Guide, you will find documented policies for
|
||||
developing with monasca-events-api. This includes the processes we use for
|
||||
blueprints and specs, bugs, contributor on boarding, core reviewer
|
||||
memberships, and other procedural items.
|
||||
|
||||
monasca-events-api, as with all OpenStack projects, is written with the
|
||||
following design guidelines in mind:
|
||||
|
||||
* **Component based architecture**: Quickly add new behaviors
|
||||
* **Highly available**: Scale to very serious workloads
|
||||
* **Fault tolerant**: Isolated processes avoid cascading failures
|
||||
* **Recoverable**: Failures should be easy to diagnose, debug, and rectify
|
||||
* **Open standards**: Be a reference implementation for a community-driven api
|
||||
|
||||
This documentation is generated by the Sphinx toolkit and lives in the source
|
||||
tree. Additional documentation on monasca-events-api and other components of
|
||||
OpenStack can be found on the `OpenStack wiki <http://wiki.openstack.org>`_.
|
||||
|
||||
Developer reference
|
||||
-------------------
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
code
|
||||
|
||||
Changelog
|
||||
---------
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
history
|
3
doc/source/glossary.rst
Normal file
3
doc/source/glossary.rst
Normal file
@ -0,0 +1,3 @@
|
||||
========
|
||||
Glossary
|
||||
========
|
@ -45,4 +45,3 @@ any specific prior release.
|
||||
:maxdepth: 1
|
||||
|
||||
glossary
|
||||
|
||||
|
6
doc/source/install/index.rst
Normal file
6
doc/source/install/index.rst
Normal file
@ -0,0 +1,6 @@
|
||||
============
|
||||
Installation
|
||||
============
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
6
doc/source/user/index.rst
Normal file
6
doc/source/user/index.rst
Normal file
@ -0,0 +1,6 @@
|
||||
==========
|
||||
User guide
|
||||
==========
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
@ -0,0 +1,31 @@
|
||||
# Copyright 2017 FUJITSU LIMITED
|
||||
#
|
||||
# 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.
|
||||
|
||||
[DEFAULT]
|
||||
name = main
|
||||
|
||||
[composite:main]
|
||||
use = egg:Paste#urlmap
|
||||
/: ea_version
|
||||
/v1.0: ea_version_v1
|
||||
|
||||
[pipeline:ea_version_v1]
|
||||
pipeline = request_id auth
|
||||
|
||||
|
||||
[filter:request_id]
|
||||
paste.filter_factory = oslo_middleware.request_id:RequestId.factory
|
||||
|
||||
[filter:auth]
|
||||
paste.filter_factory = keystonemiddleware.auth_token:filter_factory
|
0
monasca_events_api/app/__init__.py
Normal file
0
monasca_events_api/app/__init__.py
Normal file
0
monasca_events_api/app/core/__init__.py
Normal file
0
monasca_events_api/app/core/__init__.py
Normal file
41
monasca_events_api/app/core/request.py
Normal file
41
monasca_events_api/app/core/request.py
Normal file
@ -0,0 +1,41 @@
|
||||
# Copyright 2017 FUJITSU LIMITED
|
||||
#
|
||||
# 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 falcon
|
||||
|
||||
from oslo_context import context
|
||||
|
||||
from monasca_events_api import policy
|
||||
|
||||
|
||||
class Request(falcon.Request):
|
||||
"""Variation of falcon. Request with context.
|
||||
|
||||
Following class enhances :py:class:`falcon.Request` with
|
||||
:py:class:`context.RequestContext`
|
||||
"""
|
||||
|
||||
def __init__(self, env, options=None):
|
||||
"""Init an Request class."""
|
||||
super(Request, self).__init__(env, options)
|
||||
self.is_admin = None
|
||||
self.context = context.RequestContext.from_environ(self.env)
|
||||
|
||||
if self.is_admin is None:
|
||||
self.is_admin = policy.check_is_admin(self)
|
||||
|
||||
def to_policy_values(self):
|
||||
policy = self.context.to_policy_values()
|
||||
policy['is_admin'] = self.is_admin
|
||||
return policy
|
@ -15,18 +15,16 @@
|
||||
import os
|
||||
import pkgutil
|
||||
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log
|
||||
from oslo_utils import importutils
|
||||
|
||||
CONF = cfg.CONF
|
||||
LOG = log.getLogger(__name__)
|
||||
|
||||
|
||||
def load_conf_modules():
|
||||
"""Load all modules that contain configuration.
|
||||
|
||||
Method iterates over modules of :py:module:`monasca_log_api.conf`
|
||||
Method iterates over modules of :py:mod:`monasca_events_api.conf`
|
||||
and imports only those that contain following methods:
|
||||
|
||||
- list_opts (required by oslo_config.genconfig)
|
||||
@ -62,7 +60,7 @@ def _list_module_names():
|
||||
return module_names
|
||||
|
||||
|
||||
def register_opts():
|
||||
def register_opts(conf):
|
||||
"""Register all conf modules opts.
|
||||
|
||||
This method allows different modules to register
|
||||
@ -70,7 +68,7 @@ def register_opts():
|
||||
|
||||
"""
|
||||
for mod in load_conf_modules():
|
||||
mod.register_opts(CONF)
|
||||
mod.register_opts(conf)
|
||||
|
||||
|
||||
def list_opts():
|
||||
|
@ -12,12 +12,14 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log
|
||||
from oslo_policy import opts as policy_opts
|
||||
|
||||
from monasca_events_api import conf
|
||||
from monasca_events_api import version
|
||||
|
||||
CONF = conf.CONF
|
||||
CONF = cfg.CONF
|
||||
LOG = log.getLogger(__name__)
|
||||
|
||||
_CONF_LOADED = False
|
||||
@ -39,15 +41,17 @@ def parse_args():
|
||||
log.set_defaults()
|
||||
log.register_options(CONF)
|
||||
|
||||
CONF(prog='events-api',
|
||||
CONF(args=[],
|
||||
prog='events-app',
|
||||
project='monasca',
|
||||
version=version.version_str,
|
||||
description='RESTful API to collect events from cloud')
|
||||
|
||||
log.setup(CONF,
|
||||
product_name='monasca-events-api',
|
||||
product_name='monasca-events-app',
|
||||
version=version.version_str)
|
||||
|
||||
conf.register_opts()
|
||||
conf.register_opts(CONF)
|
||||
policy_opts.set_defaults(CONF)
|
||||
|
||||
_CONF_LOADED = True
|
||||
|
58
monasca_events_api/policies/__init__.py
Normal file
58
monasca_events_api/policies/__init__.py
Normal file
@ -0,0 +1,58 @@
|
||||
# Copyright 2017 FUJITSU LIMITED
|
||||
#
|
||||
# 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
|
||||
import pkgutil
|
||||
|
||||
from oslo_log import log
|
||||
from oslo_utils import importutils
|
||||
|
||||
LOG = log.getLogger(__name__)
|
||||
_BASE_MOD_PATH = 'monasca_events_api.policies.'
|
||||
|
||||
|
||||
def load_policy_modules():
|
||||
"""Load all modules that contain policies.
|
||||
|
||||
Method iterates over modules of :py:mod:`monasca_events_api.policies`
|
||||
and imports only those that contain following methods:
|
||||
|
||||
- list_opts (required by oslo_config.genconfig)
|
||||
- register_opts (required by :py:currentmodule:)
|
||||
|
||||
"""
|
||||
for modname in _list_module_names():
|
||||
mod = importutils.import_module(_BASE_MOD_PATH + modname)
|
||||
if hasattr(mod, 'list_rules'):
|
||||
yield mod
|
||||
|
||||
|
||||
def _list_module_names():
|
||||
package_path = os.path.dirname(os.path.abspath(__file__))
|
||||
for _, modname, ispkg in pkgutil.iter_modules(path=[package_path]):
|
||||
if not (modname == "opts" and ispkg):
|
||||
yield modname
|
||||
|
||||
|
||||
def list_rules():
|
||||
"""List all policy modules rules.
|
||||
|
||||
Goes through all policy modules and yields their rules
|
||||
|
||||
"""
|
||||
all_rules = []
|
||||
for mod in load_policy_modules():
|
||||
rules = mod.list_rules()
|
||||
all_rules.extend(rules)
|
||||
return all_rules
|
30
monasca_events_api/policies/admin.py
Normal file
30
monasca_events_api/policies/admin.py
Normal file
@ -0,0 +1,30 @@
|
||||
# Copyright 2017 FUJITSU LIMITED
|
||||
#
|
||||
# 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.
|
||||
|
||||
from oslo_policy import policy
|
||||
|
||||
|
||||
admin_rules = [
|
||||
policy.DocumentedRuleDefault(
|
||||
name='admin_required',
|
||||
check_str='role:admin or is_admin:1',
|
||||
description='Admin role',
|
||||
operations=[{'path': '/', 'method': 'POST'}]
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
def list_rules():
|
||||
"""List policy rules for admin access."""
|
||||
return admin_rules
|
30
monasca_events_api/policies/agent.py
Normal file
30
monasca_events_api/policies/agent.py
Normal file
@ -0,0 +1,30 @@
|
||||
# Copyright 2017 FUJITSU LIMITED
|
||||
#
|
||||
# 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.
|
||||
|
||||
from oslo_policy import policy
|
||||
|
||||
|
||||
agent_policies = [
|
||||
policy.DocumentedRuleDefault(
|
||||
name='events_api:agent_required',
|
||||
check_str='role:monasca_events_agent',
|
||||
description='Send events to api',
|
||||
operations=[{'path': '/v1.0/events', 'method': 'POST'}]
|
||||
)
|
||||
]
|
||||
|
||||
|
||||
def list_rules():
|
||||
"""List policies rules for agent access."""
|
||||
return agent_policies
|
148
monasca_events_api/policy.py
Normal file
148
monasca_events_api/policy.py
Normal file
@ -0,0 +1,148 @@
|
||||
# Copyright 2017 FUJITSU LIMITED
|
||||
#
|
||||
# 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 copy
|
||||
|
||||
from oslo_config import cfg
|
||||
from oslo_log import log
|
||||
from oslo_policy import policy
|
||||
|
||||
from monasca_events_api import policies
|
||||
|
||||
CONF = cfg.CONF
|
||||
LOG = log.getLogger(__name__)
|
||||
|
||||
_ENFORCER = None
|
||||
# oslo_policy will read the policy configuration file again when the file
|
||||
# is changed in runtime so the old policy rules will be saved to
|
||||
# saved_file_rules and used to compare with new rules to determine the
|
||||
# rules whether were updated.
|
||||
saved_file_rules = []
|
||||
|
||||
|
||||
def reset():
|
||||
"""Reset Enforcer class."""
|
||||
global _ENFORCER
|
||||
if _ENFORCER:
|
||||
_ENFORCER.clear()
|
||||
_ENFORCER = None
|
||||
|
||||
|
||||
def init(policy_file=None, rules=None, default_rule=None, use_conf=True):
|
||||
"""Init an Enforcer class."""
|
||||
global _ENFORCER
|
||||
global saved_file_rules
|
||||
|
||||
if not _ENFORCER:
|
||||
_ENFORCER = policy.Enforcer(CONF,
|
||||
policy_file=policy_file,
|
||||
rules=rules,
|
||||
default_rule=default_rule,
|
||||
use_conf=use_conf
|
||||
)
|
||||
register_rules(_ENFORCER)
|
||||
_ENFORCER.load_rules()
|
||||
# Only the rules which are loaded from file may be changed
|
||||
current_file_rules = _ENFORCER.file_rules
|
||||
current_file_rules = _serialize_rules(current_file_rules)
|
||||
|
||||
if saved_file_rules != current_file_rules:
|
||||
saved_file_rules = copy.deepcopy(current_file_rules)
|
||||
|
||||
|
||||
def _serialize_rules(rules):
|
||||
"""Serialize all the Rule object as string.
|
||||
|
||||
New string is used to compare the rules list.
|
||||
"""
|
||||
result = [(rule_name, str(rule)) for rule_name, rule in rules.items()]
|
||||
return sorted(result, key=lambda rule: rule[0])
|
||||
|
||||
|
||||
def register_rules(enforcer):
|
||||
"""Register default policy rules."""
|
||||
rules = policies.list_rules()
|
||||
enforcer.register_defaults(rules)
|
||||
|
||||
|
||||
def authorize(context, action, target, do_raise=True):
|
||||
"""Verify that the action is valid on the target in this context.
|
||||
|
||||
:param context: monasca-events-api context
|
||||
:param action: String representing the action to be checked. This
|
||||
should be colon separated for clarity.
|
||||
:param target: Dictionary representing the object of the action for
|
||||
object creation. This should be a dictionary representing
|
||||
the location of the object e.g.
|
||||
``{'project_id': 'context.project_id'}``
|
||||
:param do_raise: if True (the default), raises PolicyNotAuthorized,
|
||||
if False returns False
|
||||
:type context: object
|
||||
:type action: str
|
||||
:type target: dict
|
||||
:type do_raise: bool
|
||||
:return: returns a non-False value (not necessarily True) if authorized,
|
||||
and the False if not authorized and do_raise if False
|
||||
|
||||
:raises oslo_policy.policy.PolicyNotAuthorized: if verification fails
|
||||
"""
|
||||
init()
|
||||
credentials = context.to_policy_values()
|
||||
|
||||
try:
|
||||
result = _ENFORCER.authorize(action, target, credentials,
|
||||
do_raise=do_raise, action=action)
|
||||
return result
|
||||
except policy.PolicyNotRegistered:
|
||||
LOG.exception('Policy not registered')
|
||||
raise
|
||||
except Exception:
|
||||
LOG.debug('Policy check for %(action)s failed with credentials '
|
||||
'%(credentials)s',
|
||||
{'action': action, 'credentials': credentials})
|
||||
raise
|
||||
|
||||
|
||||
def check_is_admin(context):
|
||||
"""Check if roles contains 'admin' role according to policy settings."""
|
||||
init()
|
||||
credentials = context.to_policy_values()
|
||||
target = credentials
|
||||
return _ENFORCER.authorize('admin_required', target, credentials)
|
||||
|
||||
|
||||
def set_rules(rules, overwrite=True, use_conf=False): # pragma: no cover
|
||||
"""Set rules based on the provided dict of rules.
|
||||
|
||||
Note:
|
||||
Used in tests only.
|
||||
|
||||
:param rules: New rules to use. It should be an instance of dict
|
||||
:param overwrite: Whether to overwrite current rules or update them
|
||||
with the new rules.
|
||||
:param use_conf: Whether to reload rules from config file.
|
||||
"""
|
||||
init(use_conf=False)
|
||||
_ENFORCER.set_rules(rules, overwrite, use_conf)
|
||||
|
||||
|
||||
def get_rules(): # pragma: no cover
|
||||
"""Get policy rules.
|
||||
|
||||
Note:
|
||||
Used in tests only.
|
||||
|
||||
"""
|
||||
if _ENFORCER:
|
||||
return _ENFORCER.rules
|
0
monasca_events_api/tests/__init__.py
Normal file
0
monasca_events_api/tests/__init__.py
Normal file
0
monasca_events_api/tests/functional/__init__.py
Normal file
0
monasca_events_api/tests/functional/__init__.py
Normal file
0
monasca_events_api/tests/unit/__init__.py
Normal file
0
monasca_events_api/tests/unit/__init__.py
Normal file
95
monasca_events_api/tests/unit/base.py
Normal file
95
monasca_events_api/tests/unit/base.py
Normal file
@ -0,0 +1,95 @@
|
||||
# Copyright 2017 FUJITSU LIMITED
|
||||
#
|
||||
# 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
|
||||
|
||||
import fixtures
|
||||
from oslo_config import cfg
|
||||
from oslo_config import fixture as config_fixture
|
||||
from oslo_context import fixture as oc_fixture
|
||||
from oslo_log.fixture import logging_error as log_fixture
|
||||
from oslo_serialization import jsonutils
|
||||
from oslotest import base
|
||||
|
||||
from monasca_events_api import config
|
||||
from monasca_events_api import policies
|
||||
from monasca_events_api import policy
|
||||
|
||||
CONF = cfg.CONF
|
||||
|
||||
|
||||
class ConfigFixture(config_fixture.Config):
|
||||
|
||||
def setUp(self):
|
||||
super(ConfigFixture, self).setUp()
|
||||
self.addCleanup(self._clean_config_loaded_flag)
|
||||
config.parse_args()
|
||||
|
||||
@staticmethod
|
||||
def _clean_config_loaded_flag():
|
||||
config._CONF_LOADED = False
|
||||
|
||||
|
||||
class BaseTestCase(base.BaseTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(BaseTestCase, self).setUp()
|
||||
self.useFixture(fixtures.NestedTempfile())
|
||||
self.useFixture(fixtures.TempHomeDir())
|
||||
self.useFixture(log_fixture.get_logging_handle_error_fixture())
|
||||
self.useFixture(ConfigFixture(CONF))
|
||||
self.useFixture(oc_fixture.ClearRequestContext())
|
||||
self.useFixture(PolicyFixture())
|
||||
|
||||
@staticmethod
|
||||
def conf_override(**kw):
|
||||
"""Override flag variables for a test."""
|
||||
group = kw.pop('group', None)
|
||||
for k, v in kw.items():
|
||||
CONF.set_override(k, v, group)
|
||||
|
||||
|
||||
class PolicyFixture(fixtures.Fixture):
|
||||
"""Override the policy with a completely new policy file.
|
||||
|
||||
This overrides the policy with a completely fake and synthetic
|
||||
policy file.
|
||||
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
super(PolicyFixture, self).setUp()
|
||||
self._prepare_policy()
|
||||
policy.reset()
|
||||
policy.init()
|
||||
self.addCleanup(policy.reset)
|
||||
|
||||
def _prepare_policy(self):
|
||||
policy_dir = self.useFixture(fixtures.TempDir())
|
||||
policy_file = os.path.join(policy_dir.path, 'policy.yaml')
|
||||
|
||||
# load the fake_policy data and add the missing default rules.
|
||||
policy_rules = jsonutils.loads('{}')
|
||||
self.add_missing_default_rules(policy_rules)
|
||||
with open(policy_file, 'w') as f:
|
||||
jsonutils.dump(policy_rules, f)
|
||||
|
||||
BaseTestCase.conf_override(policy_file=policy_file,
|
||||
group='oslo_policy')
|
||||
BaseTestCase.conf_override(policy_dirs=[], group='oslo_policy')
|
||||
|
||||
def add_missing_default_rules(self, rules):
|
||||
for rule in policies.list_rules():
|
||||
if rule.name not in rules:
|
||||
rules[rule.name] = rule.check_str
|
149
monasca_events_api/tests/unit/test_policy.py
Normal file
149
monasca_events_api/tests/unit/test_policy.py
Normal file
@ -0,0 +1,149 @@
|
||||
# Copyright 2017 FUJITSU LIMITED
|
||||
#
|
||||
# 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.
|
||||
from falcon import testing
|
||||
|
||||
from oslo_context import context
|
||||
from oslo_policy import policy as os_policy
|
||||
|
||||
from monasca_events_api.app.core import request
|
||||
from monasca_events_api import policy
|
||||
from monasca_events_api.tests.unit import base
|
||||
|
||||
|
||||
class TestPolicyFileCase(base.BaseTestCase):
|
||||
def setUp(self):
|
||||
super(TestPolicyFileCase, self).setUp()
|
||||
self.context = context.RequestContext(user='fake',
|
||||
tenant='fake',
|
||||
is_admin=False)
|
||||
self.target = {'tenant_id': 'fake'}
|
||||
|
||||
def test_modified_policy_reloads(self):
|
||||
tmp_file = \
|
||||
self.create_tempfiles(files=[('policies', '{}')], ext='.yaml')[0]
|
||||
base.BaseTestCase.conf_override(policy_file=tmp_file,
|
||||
group='oslo_policy')
|
||||
|
||||
policy.reset()
|
||||
policy.init()
|
||||
|
||||
action = 'example:test'
|
||||
rule = os_policy.RuleDefault(action, '')
|
||||
policy._ENFORCER.register_defaults([rule])
|
||||
|
||||
with open(tmp_file, 'w') as policy_file:
|
||||
policy_file.write('{"example:test": ""}')
|
||||
policy.authorize(self.context, action, self.target)
|
||||
|
||||
with open(tmp_file, 'w') as policy_file:
|
||||
policy_file.write('{"example:test": "!"}')
|
||||
policy._ENFORCER.load_rules(True)
|
||||
self.assertRaises(os_policy.PolicyNotAuthorized, policy.authorize,
|
||||
self.context, action, self.target)
|
||||
|
||||
|
||||
class TestPolicyCase(base.BaseTestCase):
|
||||
def setUp(self):
|
||||
super(TestPolicyCase, self).setUp()
|
||||
rules = [
|
||||
os_policy.RuleDefault("true", "@"),
|
||||
os_policy.RuleDefault("example:allowed", "@"),
|
||||
os_policy.RuleDefault("example:denied", "!"),
|
||||
os_policy.RuleDefault("example:lowercase_admin",
|
||||
"role:admin or role:sysadmin"),
|
||||
os_policy.RuleDefault("example:uppercase_admin",
|
||||
"role:ADMIN or role:sysadmin"),
|
||||
]
|
||||
policy.reset()
|
||||
policy.init()
|
||||
policy._ENFORCER.register_defaults(rules)
|
||||
|
||||
def test_authorize_nonexist_action_throws(self):
|
||||
action = "example:noexist"
|
||||
ctx = request.Request(
|
||||
testing.create_environ(
|
||||
path="/",
|
||||
headers={
|
||||
"X_USER_ID": "fake",
|
||||
"X_PROJECT_ID": "fake",
|
||||
"X_ROLES": "member"
|
||||
}
|
||||
)
|
||||
)
|
||||
self.assertRaises(os_policy.PolicyNotRegistered, policy.authorize,
|
||||
ctx, action, {})
|
||||
|
||||
def test_authorize_bad_action_throws(self):
|
||||
action = "example:denied"
|
||||
ctx = request.Request(
|
||||
testing.create_environ(
|
||||
path="/",
|
||||
headers={
|
||||
"X_USER_ID": "fake",
|
||||
"X_PROJECT_ID": "fake",
|
||||
"X_ROLES": "member"
|
||||
}
|
||||
)
|
||||
)
|
||||
self.assertRaises(os_policy.PolicyNotAuthorized, policy.authorize,
|
||||
ctx, action, {})
|
||||
|
||||
def test_authorize_bad_action_no_exception(self):
|
||||
action = "example:denied"
|
||||
ctx = request.Request(
|
||||
testing.create_environ(
|
||||
path="/",
|
||||
headers={
|
||||
"X_USER_ID": "fake",
|
||||
"X_PROJECT_ID": "fake",
|
||||
"X_ROLES": "member"
|
||||
}
|
||||
)
|
||||
)
|
||||
result = policy.authorize(ctx, action, {}, False)
|
||||
self.assertFalse(result)
|
||||
|
||||
def test_authorize_good_action(self):
|
||||
action = "example:allowed"
|
||||
ctx = request.Request(
|
||||
testing.create_environ(
|
||||
path="/",
|
||||
headers={
|
||||
"X_USER_ID": "fake",
|
||||
"X_PROJECT_ID": "fake",
|
||||
"X_ROLES": "member"
|
||||
}
|
||||
)
|
||||
)
|
||||
result = policy.authorize(ctx, action, False)
|
||||
self.assertTrue(result)
|
||||
|
||||
def test_ignore_case_role_check(self):
|
||||
lowercase_action = "example:lowercase_admin"
|
||||
uppercase_action = "example:uppercase_admin"
|
||||
|
||||
admin_context = request.Request(
|
||||
testing.create_environ(
|
||||
path="/",
|
||||
headers={
|
||||
"X_USER_ID": "admin",
|
||||
"X_PROJECT_ID": "fake",
|
||||
"X_ROLES": "AdMiN"
|
||||
}
|
||||
)
|
||||
)
|
||||
self.assertTrue(policy.authorize(admin_context, lowercase_action,
|
||||
{}))
|
||||
self.assertTrue(policy.authorize(admin_context, uppercase_action,
|
||||
{}))
|
68
monasca_events_api/tests/unit/test_request.py
Normal file
68
monasca_events_api/tests/unit/test_request.py
Normal file
@ -0,0 +1,68 @@
|
||||
# Copyright 2017 FUJITSU LIMITED
|
||||
#
|
||||
# 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.
|
||||
|
||||
from falcon import testing
|
||||
|
||||
from monasca_events_api.app.core import request
|
||||
from monasca_events_api.tests.unit import base
|
||||
|
||||
|
||||
class TestRequest(base.BaseTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestRequest, self).setUp()
|
||||
|
||||
def test_use_context_from_request(self):
|
||||
req = request.Request(
|
||||
testing.create_environ(
|
||||
path='/',
|
||||
headers={
|
||||
'X_AUTH_TOKEN': '1111',
|
||||
'X_USER_ID': '2222',
|
||||
'X_PROJECT_ID': '3333',
|
||||
'X_ROLES': 'goku,vegeta'
|
||||
}
|
||||
)
|
||||
)
|
||||
self.assertEqual('1111', req.context.auth_token)
|
||||
self.assertEqual('2222', req.context.user_id)
|
||||
self.assertEqual('3333', req.context.project_id)
|
||||
self.assertItemsEqual(['goku', 'vegeta'], req.context.roles)
|
||||
|
||||
def test_check_is_admin_from_request(self):
|
||||
req = request.Request(
|
||||
testing.create_environ(
|
||||
path='/',
|
||||
headers={
|
||||
'X_USER_ID': '2222',
|
||||
'X_PROJECT_ID': '3333',
|
||||
'X_ROLES': 'admin,burger'
|
||||
}
|
||||
),
|
||||
|
||||
)
|
||||
self.assertTrue(req.is_admin)
|
||||
|
||||
def test_request_context_admin_uppercase(self):
|
||||
req = request.Request(
|
||||
testing.create_environ(
|
||||
path='/',
|
||||
headers={
|
||||
'X_USER_ID': '1111',
|
||||
'X_PROJECT_ID': '2222',
|
||||
'X_ROLES': 'Admin,bob'
|
||||
}
|
||||
)
|
||||
)
|
||||
self.assertTrue(req.is_admin)
|
@ -14,5 +14,5 @@
|
||||
|
||||
import pbr.version
|
||||
|
||||
version_info = pbr.version.VersionInfo('monasca-events-api')
|
||||
version_info = pbr.version.VersionInfo('monasca-events-app')
|
||||
version_str = version_info.version_string()
|
||||
|
9
releasenotes/notes/add_policies-24ddd2a505f3de6c.yaml
Normal file
9
releasenotes/notes/add_policies-24ddd2a505f3de6c.yaml
Normal file
@ -0,0 +1,9 @@
|
||||
---
|
||||
|
||||
features:
|
||||
- |
|
||||
Initial implementation of oslo.policies.
|
||||
|
||||
other:
|
||||
- |
|
||||
Add posibility to generate documentation with oslo-config-generator.
|
@ -11,6 +11,8 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from monasca_events_api.version import version_info
|
||||
|
||||
# -- General configuration ------------------------------------------------
|
||||
|
||||
# If your documentation needs a minimal Sphinx version, state it here.
|
||||
@ -38,18 +40,13 @@ master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
repository_name = u'openstack/monasca-events-api'
|
||||
project = u'Monasca Events Release Notes'
|
||||
bug_project = u'monasca-events-api'
|
||||
bug_tag = u'releasenotes'
|
||||
copyright = u'2014, OpenStack Foundation'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
from monasca_events_api.version import version_info
|
||||
project = u'Openstack Monitoring Release Notes'
|
||||
version = version_info.canonical_version_string()
|
||||
release = version_info.version_string_with_vcs()
|
||||
bug_project = u'866'
|
||||
bug_tag = u''
|
||||
copyright = u'2014-present, OpenStack Foundation'
|
||||
author = u'OpenStack Foundation'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
@ -172,8 +169,7 @@ html_last_updated_fmt = '%Y-%m-%d %H:%M'
|
||||
# html_file_suffix = None
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = 'MonascaEventsApiReleaseNotesdoc'
|
||||
|
||||
htmlhelp_basename = 'MonitoringEventsApiReleaseNotesDoc'
|
||||
|
||||
# -- Options for LaTeX output ---------------------------------------------
|
||||
|
||||
@ -191,11 +187,11 @@ latex_elements = {
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title,
|
||||
# author, documentclass [howto, manual, or own class]).
|
||||
latex_documents = [
|
||||
('index', 'MonascaEventsApiReleaseNotes.tex',
|
||||
u'MonascaEventsApi Release Notes Documentation', u'OpenStack Foundation',
|
||||
'manual'),
|
||||
]
|
||||
latex_documents = [(
|
||||
master_doc, 'MonitoringEventsApiReleaseNotes.tex',
|
||||
u'Openstack Monitoring Events API Release Notes Documentation', [author],
|
||||
'manual'
|
||||
)]
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top of
|
||||
# the title page.
|
||||
@ -223,36 +219,10 @@ latex_documents = [
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
('index', 'barbicanreleasenotes', u'MonascaEventsApi Release Notes Documentation',
|
||||
[u'OpenStack Foundation'], 1)
|
||||
(master_doc, 'monitoringeventsapireleasenotes',
|
||||
u'Openstack Monitoring Events API Release Notes', [author],
|
||||
1)
|
||||
]
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
# man_show_urls = False
|
||||
|
||||
|
||||
# -- Options for Texinfo output -------------------------------------------
|
||||
|
||||
# Grouping the document tree into Texinfo files. List of tuples
|
||||
# (source start file, target name, title, author,
|
||||
# dir menu entry, description, category)
|
||||
texinfo_documents = [
|
||||
('index', 'MonascaEventsApiReleaseNotes', u'MonascaEventsApi Release Notes Documentation',
|
||||
u'OpenStack Foundation', 'MonascaEventsApiReleaseNotes',
|
||||
'MonascaEventsApi Release Notes Documentation.', 'Miscellaneous'),
|
||||
]
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
# texinfo_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
# texinfo_domain_indices = True
|
||||
|
||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||
# texinfo_show_urls = 'footnote'
|
||||
|
||||
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
||||
# texinfo_no_detailmenu = False
|
||||
|
||||
# -- Options for Internationalization output ------------------------------
|
||||
locale_dirs = ['locale/']
|
||||
|
@ -10,7 +10,8 @@ oslo.config!=4.3.0,!=4.4.0,>=4.0.0 # Apache-2.0
|
||||
oslo.context>=2.14.0 # Apache-2.0
|
||||
oslo.middleware>=3.27.0 # Apache-2.0
|
||||
oslo.log>=3.22.0 # Apache-2.0
|
||||
oslo.serialization>=1.10.0 # Apache-2.0
|
||||
oslo.policy>=1.23.0 # Apache-2.0
|
||||
oslo.serialization>=1.10.0,!=2.19.1 # Apache-2.0
|
||||
oslo.utils>=3.20.0 # Apache-2.0
|
||||
PasteDeploy>=1.5.0 # MIT
|
||||
eventlet!=0.18.3,!=0.20.1,<0.21.0,>=0.18.2 # MIT
|
||||
|
19
setup.cfg
19
setup.cfg
@ -36,21 +36,25 @@ data_files =
|
||||
oslo.config.opts =
|
||||
events.api = monasca_events_api.conf:list_opts
|
||||
|
||||
oslo.policy.policies =
|
||||
events.api = monasca_events_api.policies:list_rules
|
||||
|
||||
[build_sphinx]
|
||||
all_files = 1
|
||||
build-dir = doc/build
|
||||
source-dir = doc/source
|
||||
|
||||
[build_apiguide]
|
||||
all_files = 1
|
||||
build-dir = api-guide/build
|
||||
source-dir = api-guide/source
|
||||
warning-is-error = 1
|
||||
|
||||
[build_apiref]
|
||||
all_files = 1
|
||||
build-dir = api-ref/build
|
||||
source-dir = api-ref/source
|
||||
|
||||
[build_releasenotes]
|
||||
all_files = 1
|
||||
build-dir = releasenotes/build
|
||||
source-dir = releasenotes/source
|
||||
|
||||
[egg_info]
|
||||
tag_build =
|
||||
tag_date = 0
|
||||
@ -60,4 +64,7 @@ tag_svn_revision = 0
|
||||
universal = 1
|
||||
|
||||
[pbr]
|
||||
warnerrors = True
|
||||
autodoc_index_modules = True
|
||||
autodoc_exclude_modules =
|
||||
monasca_events_api.tests.*
|
||||
api_doc_dir = contributor/api
|
@ -4,7 +4,6 @@
|
||||
|
||||
# Install bounded pep8/pyflakes first, then let flake8 install
|
||||
hacking!=0.13.0,<0.14,>=0.12.0 # Apache-2.0
|
||||
flake8-docstrings==0.2.1.post1 # MIT
|
||||
flake8-import-order==0.12 # LGPLv3
|
||||
bandit>=1.1.0 # Apache-2.0
|
||||
bashate>=0.2 # Apache-2.0
|
||||
@ -21,4 +20,4 @@ doc8 # Apache-2.0
|
||||
sphinx>=1.6.2 # BSD
|
||||
os-api-ref>=1.0.0 # Apache-2.0
|
||||
reno!=2.3.1,>=1.8.0 # Apache-2.0
|
||||
openstackdocstheme>=1.11.0 # Apache-2.0
|
||||
openstackdocstheme>=1.16.0 # Apache-2.0
|
||||
|
33
tox.ini
33
tox.ini
@ -6,14 +6,14 @@ skipsdist = True
|
||||
[testenv]
|
||||
usedevelop = True
|
||||
setenv = VIRTUAL_ENV={envdir}
|
||||
OS_TEST_PATH=monasca_events_api/tests
|
||||
OS_TEST_PATH=monasca_events_api/tests/unit
|
||||
CLIENT_NAME=monasca-events-api
|
||||
passenv = *_proxy
|
||||
*_PROXY
|
||||
whitelist_externals = bash
|
||||
find
|
||||
rm
|
||||
install_command = {toxinidir}/tools/tox_install.sh {env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} {opts} {packages}
|
||||
install_command = {toxinidir}/tools/tox_install.sh {env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt?master} {opts} {packages}
|
||||
deps = -r{toxinidir}/test-requirements.txt
|
||||
commands =
|
||||
find ./ -type f -name '*.pyc' -delete
|
||||
@ -46,7 +46,7 @@ commands =
|
||||
description = Allows to run unit-test with debug mode enabled
|
||||
commands =
|
||||
{[testenv]commands}
|
||||
oslo_debug_helper -t {toxinidir}/monasca_events_api/tests {posargs}
|
||||
oslo_debug_helper -t {env:OS_TEST_PATH} {posargs}
|
||||
|
||||
[testenv:bashate]
|
||||
description = Validates (pep8-like) devstack plugins
|
||||
@ -76,20 +76,12 @@ commands =
|
||||
{[testenv:checkniceness]commands}
|
||||
|
||||
[testenv:docs]
|
||||
description = Builds api-ref, api-guide, releasenotes and devdocs
|
||||
description = Builds api-ref, releasenotes and devdocs
|
||||
commands =
|
||||
{[testenv:devdocs]commands}
|
||||
{[testenv:api-guide]commands}
|
||||
{[testenv:api-ref]commands}
|
||||
{[testenv:releasenotes]commands}
|
||||
|
||||
[testenv:api-guide]
|
||||
description = Called from CI scripts to test and publish the API Guide
|
||||
commands =
|
||||
rm -rf api-guide/build
|
||||
{[testenv:checkjson]commands}
|
||||
sphinx-build -W -b html -d api-guide/build/doctrees api-guide/source api-guide/build/html
|
||||
|
||||
[testenv:api-ref]
|
||||
description = Called from CI scripts to test and publish the API Ref
|
||||
commands =
|
||||
@ -107,16 +99,9 @@ commands =
|
||||
description = Builds developer documentation
|
||||
commands =
|
||||
rm -rf doc/build
|
||||
{[testenv:codedocs]commands}
|
||||
{[testenv:checkjson]commands}
|
||||
python setup.py build_sphinx
|
||||
|
||||
[testenv:codedocs]
|
||||
description = Generates codebase documentation
|
||||
commands =
|
||||
rm -rf doc/source/code
|
||||
sphinx-apidoc -o doc/source/code -fPM {toxinidir}/monasca_events_api --ext-todo
|
||||
|
||||
[testenv:checkniceness]
|
||||
description = Validates (pep-like) documentation
|
||||
skip_install = True
|
||||
@ -124,7 +109,6 @@ usedevelop = False
|
||||
commands =
|
||||
doc8 --file-encoding utf-8 {toxinidir}/doc
|
||||
doc8 --file-encoding utf-8 {toxinidir}/api-ref
|
||||
doc8 --file-encoding utf-8 {toxinidir}/api-guide
|
||||
doc8 --file-encoding utf-8 {toxinidir}/releasenotes
|
||||
|
||||
[testenv:checkjson]
|
||||
@ -139,13 +123,18 @@ commands =
|
||||
|
||||
[testenv:genconfig]
|
||||
description = Generates sample documentation file for monasca-events-api
|
||||
commands = oslo-config-generator --config-file=config-generator/monasca-events-api.conf
|
||||
commands = oslo-config-generator --config-file=config-generator/config.conf
|
||||
|
||||
[testenv:genpolicy]
|
||||
description = Generates sample policy.yaml file for monasca-events-api
|
||||
commands = oslopolicy-sample-generator --config-file=config-generator/policy.conf
|
||||
|
||||
[testenv:venv]
|
||||
commands = {posargs}
|
||||
|
||||
[flake8]
|
||||
exclude = .git,.gitignore,.tox,dist,doc,api-ref,api-guide,releasenotes,documentation,*.egg,build
|
||||
exclude = .git,.gitignore,.tox,dist,doc,api-ref,releasenotes,*.egg,build,
|
||||
__pycache__
|
||||
show-source = True
|
||||
enable-extensions = H203,H106
|
||||
ignore = D100,D104
|
||||
|
Loading…
Reference in New Issue
Block a user