diff --git a/doc/source/conf.py b/doc/source/conf.py
index dbfa8de20..0b0bcbffa 100644
--- a/doc/source/conf.py
+++ b/doc/source/conf.py
@@ -1,243 +1,151 @@
# -*- coding: utf-8 -*-
+# 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
#
-# Nodepool documentation build configuration file, created by
-# sphinx-quickstart on Fri Jun 8 14:44:26 2012.
+# http://www.apache.org/licenses/LICENSE-2.0
#
-# This file is execfile()d with the current directory set to its containing dir.
-#
-# Note that not all possible configuration values are present in this
-# autogenerated file.
-#
-# All configuration values have a default; values that are commented out
-# serve to show the default.
+# 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 sys, os, datetime
+import subprocess
+import re
+from nodepool import version
+
+# The minimum version to link to
+min_version = (3, 2, 0)
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
sys.path.insert(0, os.path.abspath('../..'))
+# -- General configuration ----------------------------------------------------
-# -- General configuration -----------------------------------------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-#needs_sphinx = '1.0'
-
-# Add any Sphinx extension module names here, as strings. They can be extensions
-# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = [
'sphinx.ext.autodoc',
'sphinxcontrib.programoutput',
'sphinxcontrib.httpdomain',
'zuul_sphinx',
- 'reno.sphinxext']
-#extensions = ['sphinx.ext.intersphinx']
-#intersphinx_mapping = {'python': ('http://docs.python.org/2.7', None)}
+ 'reno.sphinxext',
+ 'sphinx_rtd_theme',
+]
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
+# autodoc generation is a bit aggressive and a nuisance when doing heavy
+# text edit cycles.
+# execute "export SPHINX_DEBUG=1" in your terminal to disable
+
+primary_domain = 'zuul'
# The suffix of source filenames.
source_suffix = '.rst'
-# The encoding of source files.
-#source_encoding = 'utf-8-sig'
-
# The master toctree document.
master_doc = 'index'
# General information about the project.
project = u'Nodepool'
-copyright = u'%s, OpenStack' % datetime.date.today().year
+copyright = u'2012-%s, Zuul project contributors' % datetime.date.today().year
-# 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
+doc_root = os.environ.get('ZUUL_DOC_ROOT', '/docs/%s' % (project.lower()))
# If true, '()' will be appended to :func: etc. cross-reference text.
-#add_function_parentheses = True
+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
+add_module_names = True
# 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 = []
+# -- Options for HTML output --------------------------------------------------
+# The theme to use for HTML and HTML Help pages. Major themes that come with
+# Sphinx are currently 'default' and 'sphinxdoc'.
+html_theme = "sphinx_rtd_theme"
-# -- Options for HTML output ---------------------------------------------------
+if version.is_release:
+ version = version.release_string
+ current_version = version.release_string
+ versions = [('latest', f'{doc_root}/')]
+else:
+ # Uncomment this if we want to use the in-development version
+ # number (eg 4.10.5.dev4 887cf31e4 )
+ # version = version.get_version_string()
+ version = 'latest'
+ current_version = 'latest'
+ versions = [('latest', f'{doc_root}/')]
-# The theme to use for HTML and HTML Help pages. See the documentation for
-# a list of builtin themes.
-#html_theme = 'alabaster'
+try:
+ output = subprocess.check_output(['git', 'tag']).decode('utf8')
+except subprocess.CalledProcessError:
+ output = ''
+
+interesting_tags = []
+for tag in output.splitlines():
+ if re.match('^\d+\.\d+\.\d+$', tag):
+ parts = tuple(map(int, tag.split('.')))
+ if parts < min_version:
+ continue
+ interesting_tags.append((parts, tag))
+for parts, tag in reversed(sorted(interesting_tags, key=lambda x: x[0])):
+ versions.append((tag, f'{doc_root}/{tag}/'))
# 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 = {
- 'show_related': True,
- 'logo': 'logo.svg',
+ 'collapse_navigation': False,
+ 'navigation_depth': -1,
+ 'logo_only': True,
}
-# Add any paths that contain custom themes here, relative to this directory.
-#html_theme_path = []
-
-# The name for this set of Sphinx documents. If None, it defaults to
-# " v documentation".
-#html_title = None
-
-# A shorter title for the navigation bar. Default is the same as html_title.
-#html_short_title = None
-
-# The name of an image file (relative to this directory) to place at the top
-# of the sidebar.
-#html_logo = '_static/logo.svg'
-
-# 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
+html_context = {
+ # This controls what is displayed at the top of the navbar.
+ 'version': version,
+ # This controls what the caret selection displays at the bottom of
+ # the navbar.
+ 'current_version': current_version,
+ # A tuple of (slug, url)
+ 'versions': versions,
+}
# 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 = ['_static']
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-#html_last_updated_fmt = '%b %d, %Y'
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
-# 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 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
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+html_logo = '_static/logo.svg'
# Output file base name for HTML help builder.
-htmlhelp_basename = 'Nodepooldoc'
-
-
-# -- 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': '',
-}
+htmlhelp_basename = '%sdoc' % project
# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title, author, documentclass [howto/manual]).
+# (source start file, target name, title, author, documentclass
+# [howto/manual]).
latex_documents = [
- ('index', 'Nodepool.tex', u'Nodepool Documentation',
- u'OpenStack', 'manual'),
+ ('index',
+ '%s.tex' % project,
+ u'%s Documentation' % project,
+ u'Zuul contributors', 'manual'),
]
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-#latex_logo = None
+# Example configuration for intersphinx: refer to the Python standard library.
+#intersphinx_mapping = {'http://docs.python.org/': None}
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-#latex_use_parts = False
+# 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
-# 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', 'nodepool', u'Nodepool Documentation',
- [u'OpenStack'], 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', 'Nodepool', u'Nodepool Documentation',
- u'OpenStack', 'Nodepool', 'One line description of project.',
- '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'
+# Additional Zuul role paths
+zuul_role_paths = []
diff --git a/doc/source/operation.rst b/doc/source/operation.rst
index ccd7d53fc..fa79e419f 100644
--- a/doc/source/operation.rst
+++ b/doc/source/operation.rst
@@ -368,7 +368,7 @@ configuration file entirely, if you wish to do so.
Web interface
-------------
-If configured (see :attr:`webapp-conf`), a ``nodepool-launcher``
+If configured (see :attr:`webapp`), a ``nodepool-launcher``
instance can provide a range of end-points that can provide
information in text and ``json`` format. Note if there are multiple
launchers, all will provide the same information.
diff --git a/nodepool/driver/__init__.py b/nodepool/driver/__init__.py
index b80b45efd..473a0df67 100644
--- a/nodepool/driver/__init__.py
+++ b/nodepool/driver/__init__.py
@@ -131,7 +131,7 @@ class Driver(object, metaclass=abc.ABCMeta):
class ProviderNotifications(object):
"""
- Notification interface for :class:`.Provider` objects.
+ Notification interface for :py:class:`.Provider` objects.
This groups all notification messages bound for the Provider. The
Provider class inherits from this by default. A Provider overrides the
@@ -326,7 +326,7 @@ class LabelRecorder(object):
class NodeRequestHandlerNotifications(object):
"""
- Notification interface for :class:`.NodeRequestHandler` objects.
+ Notification interface for :py:class:`.NodeRequestHandler` objects.
This groups all notification messages bound for the NodeRequestHandler.
The NodeRequestHandler class inherits from this by default. A request
diff --git a/nodepool/version.py b/nodepool/version.py
index 4ac2dadfb..144413696 100644
--- a/nodepool/version.py
+++ b/nodepool/version.py
@@ -1,17 +1,32 @@
-# Copyright 2014 Hewlett-Packard Development Company, L.P.
+# Copyright 2020 Red Hat, inc
#
-# 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
+# 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
+# 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.
+# 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 json
import pbr.version
+import pkg_resources
version_info = pbr.version.VersionInfo('nodepool')
+release_string = version_info.release_string()
+
+is_release = None
+git_version = None
+try:
+ _metadata = json.loads(
+ pkg_resources.get_distribution('nodepool').get_metadata('pbr.json'))
+ if _metadata:
+ is_release = _metadata['is_release']
+ git_version = _metadata['git_version']
+except Exception:
+ pass