Sorry, but the documentation page that you are looking for was not found.
\n\n
Documentation changes over time, and pages are moved around. We try to redirect you to the updated content where possible, but unfortunately, that didn\'t work this time (maybe because the content you were looking for does not exist in this version of the documentation).
\n
You can try to use the navigation to locate the content you\'re looking for, or search for a similar page.
\n',
-}
-
-# Default image for OGP (to prevent font errors, see
-# https://github.com/canonical/sphinx-docs-starter-pack/pull/54 )
-if not 'ogp_image' in locals():
- ogp_image = 'https://assets.ubuntu.com/v1/253da317-image-document-ubuntudocs.svg'
-
-############################################################
-### General configuration
-############################################################
-
-exclude_patterns = [
- '_build',
- 'Thumbs.db',
- '.DS_Store',
- '.sphinx',
-]
-exclude_patterns.extend(custom_excludes)
-
-rst_epilog = '''
-.. include:: /reuse/links.txt
-'''
-if 'custom_rst_epilog' in locals():
- rst_epilog = custom_rst_epilog
-
-source_suffix = {
- '.rst': 'restructuredtext',
- '.md': 'markdown',
-}
-
-if not 'conf_py_path' in html_context and 'github_folder' in html_context:
- html_context['conf_py_path'] = html_context['github_folder']
-
-# For ignoring specific links
-linkcheck_anchors_ignore_for_url = [
- r'https://github\.com/.*'
-]
-linkcheck_anchors_ignore_for_url.extend(custom_linkcheck_anchors_ignore_for_url)
-
-# Tags cannot be added directly in custom_conf.py, so add them here
-for tag in custom_tags:
- tags.add(tag)
-
-# html_context['get_contribs'] is a function and cannot be
-# cached (see https://github.com/sphinx-doc/sphinx/issues/12300)
-suppress_warnings = ["config.cache"]
-
-############################################################
-### Styling
-############################################################
-
-# Find the current builder
-builder = 'dirhtml'
-if '-b' in sys.argv:
- builder = sys.argv[sys.argv.index('-b')+1]
-
-# Setting templates_path for epub makes the build fail
-if builder == 'dirhtml' or builder == 'html':
- templates_path = ['.sphinx/_templates']
- notfound_template = '404.html'
-
-# Theme configuration
-html_theme = 'furo'
-html_last_updated_fmt = ''
-html_permalinks_icon = '¶'
-
-if html_title == '':
- html_theme_options = {
- 'sidebar_hide_name': True
- }
-
-############################################################
-### Additional files
-############################################################
-
-html_static_path = ['.sphinx/_static']
-
-html_css_files = [
- 'custom.css',
- 'header.css',
- 'github_issue_links.css',
- 'furo_colors.css',
- 'footer.css'
-]
-html_css_files.extend(custom_html_css_files)
-
-html_js_files = ['header-nav.js', 'footer.js']
-if 'github_issues' in html_context and html_context['github_issues'] and not disable_feedback_button:
- html_js_files.append('github_issue_links.js')
-html_js_files.extend(custom_html_js_files)
-
-#############################################################
-# Display the contributors
-
-def get_contributors_for_file(github_url, github_folder, pagename, page_source_suffix, display_contributors_since=None):
- filename = f"{pagename}{page_source_suffix}"
- paths=html_context['github_folder'][1:] + filename
-
- try:
- repo = Repo(".")
- except InvalidGitRepositoryError:
- cwd = os.getcwd()
- ghfolder = html_context['github_folder'][:-1]
- if ghfolder and cwd.endswith(ghfolder):
- repo = Repo(cwd.rpartition(ghfolder)[0])
- else:
- print("The local Git repository could not be found.")
- return
-
- since = display_contributors_since if display_contributors_since and display_contributors_since.strip() else None
-
- commits = repo.iter_commits(paths=paths, since=since)
-
- contributors_dict = {}
- for commit in commits:
- contributor = commit.author.name
- if contributor not in contributors_dict or commit.committed_date > contributors_dict[contributor]['date']:
- contributors_dict[contributor] = {
- 'date': commit.committed_date,
- 'sha': commit.hexsha
- }
- # The github_page contains the link to the contributor's latest commit.
- contributors_list = [{'name': name, 'github_page': f"{github_url}/commit/{data['sha']}"} for name, data in contributors_dict.items()]
- sorted_contributors_list = sorted(contributors_list, key=lambda x: x['name'])
- return sorted_contributors_list
-
-html_context['get_contribs'] = get_contributors_for_file
-
-############################################################
-### PDF configuration
-############################################################
-
-latex_additional_files = [
- "./.sphinx/fonts/Ubuntu-B.ttf",
- "./.sphinx/fonts/Ubuntu-R.ttf",
- "./.sphinx/fonts/Ubuntu-RI.ttf",
- "./.sphinx/fonts/UbuntuMono-R.ttf",
- "./.sphinx/fonts/UbuntuMono-RI.ttf",
- "./.sphinx/fonts/UbuntuMono-B.ttf",
- "./.sphinx/images/Canonical-logo-4x.png",
- "./.sphinx/images/front-page-light.pdf",
- "./.sphinx/images/normal-page-footer.pdf",
-]
-
-latex_engine = 'xelatex'
-latex_show_pagerefs = True
-latex_show_urls = 'footnote'
-
-with open(".sphinx/latex_elements_template.txt", "rt") as file:
- latex_config = file.read()
-
-latex_elements = ast.literal_eval(latex_config.replace("$PROJECT", project))
\ No newline at end of file
diff --git a/custom_conf.py b/custom_conf.py
deleted file mode 100644
index c786757..0000000
--- a/custom_conf.py
+++ /dev/null
@@ -1,248 +0,0 @@
-import datetime
-
-# Custom configuration for the Sphinx documentation builder.
-# All configuration specific to your project should be done in this file.
-#
-# The file is included in the common conf.py configuration file.
-# You can modify any of the settings below or add any configuration that
-# is not covered by the common conf.py file.
-#
-# For the full list of built-in configuration values, see the documentation:
-# https://www.sphinx-doc.org/en/master/usage/configuration.html
-#
-# If you're not familiar with Sphinx and don't want to use advanced
-# features, it is sufficient to update the settings in the "Project
-# information" section.
-
-############################################################
-### Project information
-############################################################
-
-# Product name
-project = 'Canonical OpenStack'
-author = 'Canonical Ltd.'
-
-# The title you want to display for the documentation in the sidebar.
-# You might want to include a version number here.
-# To not display any title, set this option to an empty string.
-html_title = project + ' documentation'
-
-# The default value uses CC-BY-SA as the license and the current year
-# as the copyright year.
-#
-# If your documentation needs a different copyright license, use that
-# instead of 'CC-BY-SA'. Also, if your documentation is included as
-# part of the code repository of your project, it'll inherit the license
-# of the code. So you'll need to specify that license here (instead of
-# 'CC-BY-SA').
-#
-# For static works, it is common to provide the year of first publication.
-# Another option is to give the first year and the current year
-# for documentation that is often changed, e.g. 2022–2023 (note the en-dash).
-#
-# A way to check a GitHub repo's creation date is to obtain a classic GitHub
-# token with 'repo' permissions here: https://github.com/settings/tokens
-# Next, use 'curl' and 'jq' to extract the date from the GitHub API's output:
-#
-# curl -H 'Authorization: token ' \
-# -H 'Accept: application/vnd.github.v3.raw' \
-# https://api.github.com/repos/canonical/ | jq '.created_at'
-
-copyright = '%s CC-BY-SA, %s' % (datetime.date.today().year, author)
-
-## Open Graph configuration - defines what is displayed as a link preview
-## when linking to the documentation from another website (see https://ogp.me/)
-# The URL where the documentation will be hosted (leave empty if you
-# don't know yet)
-# NOTE: If no ogp_* variable is defined (e.g. if you remove this section) the
-# sphinxext.opengraph extension will be disabled.
-ogp_site_url = 'https://canonical-openstack.readthedocs-hosted.com/'
-# The documentation website name (usually the same as the product name)
-ogp_site_name = project
-# The URL of an image or logo that is used in the preview
-ogp_image = 'https://assets.ubuntu.com/v1/253da317-image-document-ubuntudocs.svg'
-
-# Update with the local path to the favicon for your product
-# (default is the circle of friends)
-html_favicon = '.sphinx/_static/favicon.png'
-
-# (Some settings must be part of the html_context dictionary, while others
-# are on root level. Don't move the settings.)
-html_context = {
-
- # Change to the link to the website of your product (without "https://")
- # For example: "ubuntu.com/lxd" or "microcloud.is"
- # If there is no product website, edit the header template to remove the
- # link (see the readme for instructions).
- 'product_page': 'canonical.com/openstack',
-
- # Add your product tag (the orange part of your logo, will be used in the
- # header) to ".sphinx/_static" and change the path here (start with "_static")
- # (default is the circle of friends)
- 'product_tag': '_static/tag.png',
-
- # Change to the discourse instance you want to be able to link to
- # using the :discourse: metadata at the top of a file
- # (use an empty value if you don't want to link)
- 'discourse': 'https://discourse.ubuntu.com',
-
- # Change to the Mattermost channel you want to link to
- # (use an empty value if you don't want to link)
- 'mattermost': '',
-
- # Change to the Matrix channel you want to link to
- # (use an empty value if you don't want to link)
- 'matrix': 'https://matrix.to/#/#openstack-sunbeam:ubuntu.comm',
-
- # Change to the GitHub URL for your project
- # This is used, for example, to link to the source files and allow creating GitHub issues directly from the documentation.
- 'github_url': 'https://github.com/canonical/canonical-openstack-docs',
-
- # Change to the branch for this version of the documentation
- 'github_version': 'main',
-
- # Change to the folder that contains the documentation
- # (usually "/" or "/docs/")
- 'github_folder': '/',
-
- # Change to an empty value if your GitHub repo doesn't have issues enabled.
- # This will disable the feedback button and the issue link in the footer.
- 'github_issues': 'enabled',
-
- # Controls the existence of Previous / Next buttons at the bottom of pages
- # Valid options: none, prev, next, both
- 'sequential_nav': "none",
-
- # Controls if to display the contributors of a file or not
- "display_contributors": True,
-
- # Controls time frame for showing the contributors
- "display_contributors_since": ""
-}
-
-# If your project is on documentation.ubuntu.com, specify the project
-# slug (for example, "lxd") here.
-slug = ""
-
-############################################################
-### Redirects
-############################################################
-
-# Set up redirects (https://documatt.gitlab.io/sphinx-reredirects/usage.html)
-# For example: 'explanation/old-name.html': '../how-to/prettify.html',
-# You can also configure redirects in the Read the Docs project dashboard
-# (see https://docs.readthedocs.io/en/stable/guides/redirects.html).
-# NOTE: If this variable is not defined, set to None, or the dictionary is empty,
-# the sphinx_reredirects extension will be disabled.
-redirects = {}
-
-############################################################
-### Link checker exceptions
-############################################################
-
-# Links to ignore when checking links
-linkcheck_ignore = [
- 'http://127.0.0.1:8000',
- 'http://10.121.193.112:3128',
- # TODO(wolsen) remove when this site is active
- 'https://canonical.com/openstack',
- 'https://matrix.to/#/#openstack-sunbeam:ubuntu.com',
- # Extremely slow to load, times out even after 30s
- 'https://bugs.launchpad.net/sunbeam-charms',
-]
-
-linkcheck_retries = 10
-linkcheck_timeout = 30
-
-# Pages on which to ignore anchors
-# (This list will be appended to linkcheck_anchors_ignore_for_url)
-custom_linkcheck_anchors_ignore_for_url = [
- '^https://ubuntu.com/server/docs/.*$',
- '^https://juju.is/docs/juju/.*$',
-]
-
-############################################################
-### Additions to default configuration
-############################################################
-
-## The following settings are appended to the default configuration.
-## Use them to extend the default functionality.
-
-# Remove this variable to disable the MyST parser extensions.
-custom_myst_extensions = []
-
-# Add custom Sphinx extensions as needed.
-# This array contains recommended extensions that should be used.
-# NOTE: The following extensions are handled automatically and do
-# not need to be added here: myst_parser, sphinx_copybutton, sphinx_design,
-# sphinx_reredirects, sphinxcontrib.jquery, sphinxext.opengraph
-custom_extensions = [
- 'sphinx_tabs.tabs',
- 'sphinx.ext.todo',
- 'canonical.youtube-links',
- 'canonical.related-links',
- 'canonical.custom-rst-roles',
- 'canonical.terminal-output',
- 'notfound.extension',
- 'sphinxcontrib.cairosvgconverter',
- ]
-
-# Add custom required Python modules that must be added to the
-# .sphinx/requirements.txt file.
-# NOTE: The following modules are handled automatically and do not need to be
-# added here: canonical-sphinx-extensions, furo, linkify-it-py, myst-parser,
-# pyspelling, sphinx, sphinx-autobuild, sphinx-copybutton, sphinx-design,
-# sphinx-notfound-page, sphinx-reredirects, sphinx-tabs, sphinxcontrib-jquery,
-# sphinxext-opengraph
-custom_required_modules = [
- 'sphinxcontrib-svg2pdfconverter[CairoSVG]',
- 'sphinxcontrib-spelling',
-]
-
-# Add files or directories that should be excluded from processing.
-custom_excludes = [
- 'doc-cheat-sheet*',
- '/reuse/**',
- '**/_include/*'
- ]
-
-# Add CSS files (located in .sphinx/_static/)
-custom_html_css_files = []
-
-# Add JavaScript files (located in .sphinx/_static/)
-custom_html_js_files = []
-
-## The following settings override the default configuration.
-
-# Specify a reST string that is included at the end of each file.
-# If commented out, use the default (which pulls the reuse/links.txt
-# file into each reST file).
-custom_rst_epilog = """
-.. include:: /reuse/links.txt
-"""
-
-# By default, the documentation includes a feedback button at the top.
-# You can disable it by setting the following configuration to True.
-disable_feedback_button = False
-
-# Add tags that you want to use for conditional inclusion of text
-# (https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html#tags)
-custom_tags = []
-
-# If you are using the :manpage: role, set this variable to the URL for the version
-# that you want to link to:
-# manpages_url = "https://manpages.ubuntu.com/manpages/noble/en/man{section}/{page}.{section}.html"
-
-############################################################
-### Additional configuration
-############################################################
-
-## Add any configuration that is not covered by the common conf.py file.
-
-# Define a :center: role that can be used to center the content of table cells.
-rst_prolog = '''
-.. role:: center
- :class: align-center
-.. role:: h2
- :class: hclass2
-'''
diff --git a/doc-cheat-sheet-myst.md b/doc-cheat-sheet-myst.md
deleted file mode 100644
index 6257c9d..0000000
--- a/doc-cheat-sheet-myst.md
+++ /dev/null
@@ -1,261 +0,0 @@
----
-orphan: true
-myst:
- substitutions:
- reuse_key: "This is **included** text."
- advanced_reuse_key: "This is a substitution that includes a code block:
- ```
- code block
- ```"
----
-
-
-
-(cheat-sheet-myst)=
-# Markdown/MyST cheat sheet
-
-
-
-This file contains the syntax for commonly used Markdown and MyST markup.
-Open it in your text editor to quickly copy and paste the markup you need.
-
-See the [MyST style guide](https://canonical-documentation-with-sphinx-and-readthedocscom.readthedocs-hosted.com/style-guide-myst/) for detailed information and conventions.
-
-Also see the [MyST documentation](https://myst-parser.readthedocs.io/en/latest/index.html) for detailed information on MyST, and the [Canonical Documentation Style Guide](https://docs.ubuntu.com/styleguide/en) for general style conventions.
-
-## H2 heading
-
-### H3 heading
-
-#### H4 heading
-
-##### H5 heading
-
-## Inline formatting
-
-- {guilabel}`UI element`
-- `code`
-- {command}`command`
-- {kbd}`Key`
-- *Italic*
-- **Bold**
-
-## Code blocks
-
-Start a code block:
-
- code:
- - example: true
-
-```
-# Demonstrate a code block
-code:
- - example: true
-```
-
-```yaml
-# Demonstrate a code block
-code:
- - example: true
-```
-
-(a_section_target_myst)=
-## Links
-
-- [Canonical website](https://canonical.com/)
-- {ref}`a_section_target_myst`
-- {ref}`Link text `
-- {doc}`index`
-- {doc}`Link text `
-
-## Navigation
-
-Use the following syntax::
-
- ```{toctree}
- :hidden:
-
- sub-page1
- sub-page2
- ```
-
-## Lists
-
-1. Step 1
- - Item 1
- * Sub-item
- - Item 2
- 1. Sub-step 1
- 1. Sub-step 2
-1. Step 2
- 1. Sub-step 1
- - Item
- 1. Sub-step 2
-
-Term 1
-: Definition
-
-Term 2
-: Definition
-
-## Tables
-
-## Markdown tables
-
-| Header 1 | Header 2 |
-|------------------------------------|----------|
-| Cell 1 Second paragraph | Cell 2 |
-| Cell 3 | Cell 4 |
-
-Centred:
-
-| Header 1 | Header 2 |
-|:----------------------------------:|:--------:|
-| Cell 1 Second paragraph | Cell 2 |
-| Cell 3 | Cell 4 |
-
-## List tables
-
-```{list-table}
- :header-rows: 1
-
-* - Header 1
- - Header 2
-* - Cell 1
-
- Second paragraph
- - Cell 2
-* - Cell 3
- - Cell 4
-```
-
-Centred:
-
-```{list-table}
- :header-rows: 1
- :align: center
-
-* - Header 1
- - Header 2
-* - Cell 1
-
- Second paragraph
- - Cell 2
-* - Cell 3
- - Cell 4
-```
-
-## Notes
-
-```{note}
-A note.
-```
-
-```{tip}
-A tip.
-```
-
-```{important}
-Important information
-```
-
-```{caution}
-This might damage your hardware!
-```
-
-## Images
-
-
-
-```{figure} https://assets.ubuntu.com/v1/b3b72cb2-canonical-logo-166.png
- :width: 100px
- :alt: Alt text
-
- Figure caption
-```
-
-## Reuse
-
-### Keys
-
-Keys can be defined at the top of a file, or in a `myst_substitutions` option in `conf.py`.
-
-{{reuse_key}}
-
-{{advanced_reuse_key}}
-
-### File inclusion
-
-```{include} index.md
- :start-after: include_start
- :end-before: include_end
-```
-
-## Tabs
-
-````{tabs}
-```{group-tab} Tab 1
-
-Content Tab 1
-```
-
-```{group-tab} Tab 2
-Content Tab 2
-```
-````
-
-## Glossary
-
-```{glossary}
-
-some term
- Definition of the example term.
-```
-
-{term}`some term`
-
-## More useful markup
-
-- ```{versionadded} X.Y
-- {abbr}`API (Application Programming Interface)`
-
-----
-
-## Custom extensions
-
-Related links at the top of the page (surrounded by `---`):
-
- relatedlinks: https://github.com/canonical/lxd-sphinx-extensions, [RTFM](https://www.google.com)
- discourse: 12345
-
-Terms that should not be checked by the spelling checker: {spellexception}`PurposelyWrong`
-
-A single-line terminal view that separates input from output:
-
-```{terminal}
- :input: command
- :user: root
- :host: vampyr
- :dir: /home/user/directory/
-
-the output
-```
-
-A multi-line version of the same:
-
-```{terminal}
- :user: root
- :host: vampyr
- :dir: /home/user/directory/
-
-:input: command 1
-output 1
-:input: command 2
-output 2
-```
-
-A link to a YouTube video:
-
-```{youtube} https://www.youtube.com/watch?v=iMLiK1fX4I0
- :title: Demo
-```
diff --git a/doc-cheat-sheet.rst b/doc-cheat-sheet.rst
deleted file mode 100644
index 7481bd3..0000000
--- a/doc-cheat-sheet.rst
+++ /dev/null
@@ -1,317 +0,0 @@
-:orphan:
-
-.. vale off
-
-.. _cheat-sheet:
-
-ReStructuredText cheat sheet
-============================
-
-.. vale on
-
-This file contains the syntax for commonly used reST markup.
-Open it in your text editor to quickly copy and paste the markup you need.
-
-See the `reStructuredText style guide `_ for detailed information and conventions.
-
-Also see the `Sphinx reStructuredText Primer `_ for more details on reST, and the `Canonical Documentation Style Guide `_ for general style conventions.
-
-H2 heading
-----------
-
-.. rubric:: :h2:`H2 heading without TOC entry`
-
-H3 heading
-~~~~~~~~~~
-
-H4 heading
-^^^^^^^^^^
-
-H5 heading
-..........
-
-Inline formatting
------------------
-
-- :guilabel:`UI element`
-- ``code``
-- :file:`file path`
-- :command:`command`
-- :kbd:`Key`
-- *Italic*
-- **Bold**
-
-Code blocks
------------
-
-Start a code block::
-
- code:
- - example: true
-
-.. code::
-
- # Demonstrate a code block
- code:
- - example: true
-
-.. code:: yaml
-
- # Demonstrate a code block
- code:
- - example: true
-
-.. _a_section_target:
-
-Links
------
-
-- `Canonical website `_
-- `Canonical website`_ (defined in ``reuse/links.txt`` or at the bottom of the page)
-- https:\ //canonical.com/
-- :ref:`a_section_target`
-- :ref:`Link text `
-- :doc:`index`
-- :doc:`Link text `
-
-
-Navigation
-----------
-
-Use the following syntax::
-
- .. toctree::
- :hidden:
-
- sub-page1
- sub-page2
-
-
-Lists
------
-
-1. Step 1
-
- - Item 1
-
- * Sub-item
- - Item 2
-
- i. Sub-step 1
- #. Sub-step 2
-#. Step 2
-
- a. Sub-step 1
-
- - Item
- #. Sub-step 2
-
-Term 1:
- Definition
-Term 2:
- Definition
-
-Tables
-------
-
-+----------------------+------------+
-| Header 1 | Header 2 |
-+======================+============+
-| Cell 1 | Cell 2 |
-| | |
-| Second paragraph | |
-+----------------------+------------+
-| Cell 3 | Cell 4 |
-+----------------------+------------+
-
-+----------------------+------------------+
-| :center:`Header 1` | Header 2 |
-+======================+==================+
-| Cell 1 | Cell 2 |
-| | |
-| Second paragraph | |
-+----------------------+------------------+
-| Cell 3 | :center:`Cell 4` |
-+----------------------+------------------+
-
-.. list-table::
- :header-rows: 1
-
- * - Header 1
- - Header 2
- * - Cell 1
-
- Second paragraph
- - Cell 2
- * - Cell 3
- - Cell 4
-
-.. rst-class:: align-center
-
- +----------------------+------------+
- | Header 1 | Header 2 |
- +======================+============+
- | Cell 1 | Cell 2 |
- | | |
- | Second paragraph | |
- +----------------------+------------+
- | Cell 3 | Cell 4 |
- +----------------------+------------+
-
-.. list-table::
- :header-rows: 1
- :align: center
-
- * - Header 1
- - Header 2
- * - Cell 1
-
- Second paragraph
- - Cell 2
- * - Cell 3
- - Cell 4
-
-Notes
------
-
-.. note::
- A note.
-
-.. tip::
- A tip.
-
-.. important::
- Important information
-
-.. caution::
- This might damage your hardware!
-
-Images
-------
-
-.. image:: https://assets.ubuntu.com/v1/b3b72cb2-canonical-logo-166.png
-
-.. figure:: https://assets.ubuntu.com/v1/b3b72cb2-canonical-logo-166.png
- :width: 100px
- :alt: Alt text
-
- Figure caption
-
-Reuse
------
-
-.. |reuse_key| replace:: This is **included** text.
-
-|reuse_key|
-
-.. include:: index.rst
- :start-after: include_start
- :end-before: include_end
-
-Include code fragments from a file
-----------------------------------
-
-Minimal syntax:
-
-.. literalinclude:: /explanation/_include/deployment-manifest.yaml
- :language: yaml
-
-This syntax includes the whole file.
-Empty lines at the beginning and at the end of the document are trimmed.
-
-You can optionally define lines to start at/after and end at/before:
-
-.. literalinclude:: /explanation/_include/deployment-manifest.yaml
- :language: yaml
- :start-at: software:
- :end-before: storage:
-
-This syntax is checked on builds, including CI builds.
-Sphinx-build throws an error if search pattern wasn't found in the included file.
-
-Indentation is preserved.
-When including an indented fragment, you can dedent it:
-
-.. literalinclude:: /explanation/_include/deployment-manifest.yaml
- :language: yaml
- :start-at: juju:
- :end-before: charms:
- :dedent:
-
-Tabs
-----
-
-.. tabs::
-
- .. group-tab:: Tab 1
-
- Content Tab 1
-
- .. group-tab:: Tab 2
-
- Content Tab 2
-
-
-Glossary
---------
-
-.. glossary::
-
- example term
- Definition of the example term.
-
-:term:`example term`
-
-More useful markup
-------------------
-
-- .. versionadded:: X.Y
-- | Line 1
- | Line 2
- | Line 3
-- .. This is a comment
-- :abbr:`API (Application Programming Interface)`
-
-----
-
-Custom extensions
------------------
-
-Related links at the top of the page::
-
- :relatedlinks: https://github.com/canonical/lxd-sphinx-extensions, [RTFM](https://www.google.com)
- :discourse: 12345
-
-Terms that should not be checked by the spelling checker: :spellexception:`PurposelyWrong`
-
-A single-line terminal view that separates input from output:
-
-.. terminal::
- :input: command
- :user: root
- :host: vampyr
- :dir: /home/user/directory/
-
- the output
-
-A multi-line version of the same:
-
-.. terminal::
- :user: root
- :host: vampyr
- :dir: /home/user/directory/
-
- :input: command 1
- output 1
- :input: command 2
- output 2
-
-A link to a YouTube video:
-
-.. youtube:: https://www.youtube.com/watch?v=iMLiK1fX4I0
- :title: Demo
-
-
-
-.. LINKS
-.. _Canonical website: https://canonical.com/
diff --git a/.custom_wordlist.txt b/docs/.custom_wordlist.txt
similarity index 96%
rename from .custom_wordlist.txt
rename to docs/.custom_wordlist.txt
index 961c934..7ccff1b 100644
--- a/.custom_wordlist.txt
+++ b/docs/.custom_wordlist.txt
@@ -6,6 +6,8 @@ Ansible
ACL
ACLs
APIs
+AZ
+AZs
Aodh
Autoscaling
Barbican
@@ -31,6 +33,7 @@ CTRL
DHCP
DNS
DPDK
+Enablement
Entra
Failover
Flavors
@@ -111,6 +114,7 @@ RTO
SAML
SEV
SHUTOFF
+SLAs
SSD
SimpleStreams
StatefulSet
@@ -121,6 +125,7 @@ TPM
Traefik
ULA
Uncordon
+Ussuri
VF
VFs
VMs
@@ -128,18 +133,20 @@ VMDK
VMware
VXLAN
VLAN
+VLANs
amd
apache
api
args
auth
aws
-balancers
-balancer's
backend
backends
backport
backported
+balancers
+balancer's
+baremetal
br
ceph
cirros
@@ -160,6 +167,7 @@ distro
dom
dpdk
dqlite
+enablement
eno
entityID
entra
@@ -219,6 +227,7 @@ mysubnet
myuser
nameserver
nameservers
+netconf
noout
ok
okta
@@ -257,6 +266,7 @@ scalability
schedulable
sdb
sev
+sharding
snapd
subnet
subnets
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 0000000..3006f13
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1,26 @@
+# Environment
+*env*/
+.venv/
+
+# Sphinx
+_dev/warnings.txt
+_dev/.wordlist.dic
+_dev/.doctrees/
+_dev/update/
+_dev/node_modules/
+
+# Vale
+_dev/styles/*
+_dev/vale.ini
+
+# Build outputs
+_build
+
+# Node.js
+package*.json
+
+# Unrelated cache and config files
+.DS_Store
+__pycache__
+.idea/
+.vscode/
diff --git a/.wokeignore b/docs/.wokeignore
similarity index 73%
rename from .wokeignore
rename to docs/.wokeignore
index ca5de25..5f4fff4 100644
--- a/.wokeignore
+++ b/docs/.wokeignore
@@ -5,3 +5,6 @@ doc-cheat-sheet*
# the baremetal-nodes document contains links containing blocked words.
explanation/baremetal-nodes.rst
+
+# The configuring sriov pages reference command options we cannot ignore
+how-to/misc/configuring-sriov.rst
diff --git a/.wordlist.txt b/docs/.wordlist.txt
similarity index 100%
rename from .wordlist.txt
rename to docs/.wordlist.txt
diff --git a/docs/Makefile b/docs/Makefile
new file mode 100644
index 0000000..d207fb9
--- /dev/null
+++ b/docs/Makefile
@@ -0,0 +1,192 @@
+# Minimal makefile for Sphinx documentation
+#
+# Add your customisation to `Makefile` instead.
+
+# You can set these variables from the command line, and also
+# from the environment for the first two.
+
+DEV_DIR ?= _dev
+SPHINX_OPTS ?= -c . -d $(DEV_DIR)/.doctrees -j auto
+SPHINX_BUILD ?= $(DOCS_VENVDIR)/bin/sphinx-build
+SPHINX_HOST ?= 127.0.0.1
+SPHINX_PORT ?= 8000
+SPHINX_AUTOBUILD_OPTS ?= -D llms_txt_enabled=0
+DOCS_VENVDIR ?= .venv
+DOCS_VENV ?= $(DOCS_VENVDIR)/bin/activate
+DOCS_SOURCEDIR ?= .
+DOCS_BUILDDIR ?= _build
+DOCS_PDFPACKAGES ?= latexmk fonts-freefont-otf texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended texlive-font-utils texlive-lang-cjk texlive-xetex plantuml xindy tex-gyre dvipng
+DOCS_VOCAB ?= $(DEV_DIR)/styles/config/vocabularies/Canonical
+VALE_DIR ?= $(DOCS_VENVDIR)/lib/python*/site-packages/vale
+VALE_CONFIG ?= $(DEV_DIR)/vale.ini
+PA11Y_CMD ?= $(DEV_DIR)/node_modules/pa11y/bin/pa11y.js --config $(DEV_DIR)/pa11y.json
+CONFIRM_SUDO ?= N
+CHECK_PATH ?= $(filter-out $(DOCS_VENVDIR) $(DOCS_BUILDDIR) $(DEV_DIR),$(wildcard *))
+
+# Put it first so that "make" without argument is like "make help".
+help:
+ @echo
+ @echo "-------------------------------------------------------------"
+ @echo "* watch, build and serve the documentation: make run"
+ @echo "* only build: make html"
+ @echo "* only serve: make serve"
+ @echo "* clean built doc files: make clean-doc"
+ @echo "* clean full environment: make clean"
+ @echo "* check links: make linkcheck"
+ @echo "* check markdown: make lint-md"
+ @echo "* check spelling: make spelling"
+ @echo "* check spelling (without building again): make spellcheck"
+ @echo "* check inclusive language: make woke"
+ @echo "* check accessibility: make pa11y"
+ @echo "* check style guide compliance: make vale"
+ @echo "* check style guide compliance on target: make vale CHECK_PATH=*"
+ @echo "* other possible targets: make "
+ @echo "-------------------------------------------------------------"
+ @echo
+
+.PHONY: help full-help html epub pdf linkcheck spelling spellcheck woke \
+ vale pa11y run serve install pa11y-install \
+ vale-install pdf-prep pdf-prep-force clean clean-doc \
+ update lint-md
+
+full-help: $(DOCS_VENVDIR)
+ @. $(DOCS_VENV); $(SPHINX_BUILD) -M help "$(DOCS_SOURCEDIR)" "$(DOCS_BUILDDIR)" $(SPHINX_OPTS) $(O)
+ @echo "\n\033[1;31mNOTE: This help texts shows unsupported targets!\033[0m"
+ @echo "Run 'make help' to see supported targets."
+
+# If requirements are updated, venv should be rebuilt and timestamped.
+$(DOCS_VENVDIR):
+ @echo "... setting up virtualenv"
+ python3 -m venv $(DOCS_VENVDIR) || { echo "You must install python3-venv before you can build the documentation."; exit 1; }
+ . $(DOCS_VENV); pip install $(PIPOPTS) --require-virtualenv \
+ --upgrade -r requirements.txt \
+ --log $(DOCS_VENVDIR)/pip_install.log
+ @test ! -f $(DOCS_VENVDIR)/pip_list.txt || \
+ mv $(DOCS_VENVDIR)/pip_list.txt $(DOCS_VENVDIR)/pip_list.txt.bak
+ @. $(DOCS_VENV); pip list --local --format=freeze > $(DOCS_VENVDIR)/pip_list.txt
+ @touch $(DOCS_VENVDIR)
+
+pa11y-install:
+ @command -v $(PA11Y_CMD) >/dev/null || { \
+ echo "Installing \"pa11y\" from npm..."; echo; \
+ mkdir -p $(DEV_DIR)/node_modules/ ; \
+ npm install --prefix $(DEV_DIR) pa11y; \
+ }
+
+pymarkdownlnt-install: install
+ @. $(DOCS_VENV); test -d $(DOCS_VENVDIR)/lib/python*/site-packages/pymarkdown || pip install pymarkdownlnt==0.9.35
+
+install: $(DOCS_VENVDIR)
+
+run: install
+ . $(DOCS_VENV); $(DOCS_VENVDIR)/bin/sphinx-autobuild -b dirhtml --host $(SPHINX_HOST) --port $(SPHINX_PORT) "$(DOCS_SOURCEDIR)" "$(DOCS_BUILDDIR)" $(SPHINX_OPTS) $(SPHINX_AUTOBUILD_OPTS)
+
+# Does not depend on $(DOCS_BUILDDIR) to rebuild properly at every run.
+html: install
+ . $(DOCS_VENV); $(SPHINX_BUILD) --fail-on-warning --keep-going -b dirhtml "$(DOCS_SOURCEDIR)" "$(DOCS_BUILDDIR)" -w $(DEV_DIR)/warnings.txt $(SPHINX_OPTS)
+
+epub: install
+ . $(DOCS_VENV); $(SPHINX_BUILD) -b epub "$(DOCS_SOURCEDIR)" "$(DOCS_BUILDDIR)" -w $(DEV_DIR)/warnings.txt $(SPHINX_OPTS)
+
+serve: html
+ cd "$(DOCS_BUILDDIR)"; python3 -m http.server --bind $(SPHINX_HOST) $(SPHINX_PORT)
+
+clean: clean-doc
+ @test ! -e "$(DOCS_VENVDIR)" -o -d "$(DOCS_VENVDIR)" -a "$(abspath $(DOCS_VENVDIR))" != "$(DOCS_VENVDIR)"
+ rm -rf $(DOCS_VENVDIR)
+ rm -rf $(DEV_DIR)/node_modules/
+ rm -rf $(DEV_DIR)/styles
+ rm -rf $(VALE_CONFIG)
+
+clean-doc:
+ git clean -fx "$(DOCS_BUILDDIR)"
+ rm -rf $(DEV_DIR)/.doctrees
+
+linkcheck: install
+ . $(DOCS_VENV) ; $(SPHINX_BUILD) -b linkcheck -q "$(DOCS_SOURCEDIR)" "$(DOCS_BUILDDIR)" $(SPHINX_OPTS) || { grep --color -F "[broken]" "$(DOCS_BUILDDIR)/output.txt"; exit 1; }
+ exit 0
+
+pa11y: pa11y-install html
+ find $(DOCS_BUILDDIR) -name *.html -print0 | xargs -n 1 -0 $(PA11Y_CMD)
+
+# Without --return-code-scheme explicit, pymarkdownlnt returns 1 for multiple scenarios
+# By using the explicit scheme, it only returns 1 when no files are found,
+# which should not result in failure
+lint-md: pymarkdownlnt-install
+ @. $(DOCS_VENV); pymarkdownlnt \
+ --config $(DEV_DIR)/.pymarkdown.json \
+ --return-code-scheme explicit \
+ scan \
+ --recurse \
+ --exclude=$(DEV_DIR)/** \
+ --exclude=$(DOCS_VENVDIR)/** \
+ $(DOCS_SOURCEDIR); \
+ status=$$?; \
+ if [ $$status -eq 1 ]; then \
+ echo "No Markdown files selected for linting"; \
+ exit 0; \
+ fi; \
+ echo "pymarkdownlnt exited with code $$status"; \
+ exit $$status;
+
+vale-install: install
+ @. $(DOCS_VENV); test -f $(VALE_CONFIG) || python3 $(DEV_DIR)/get_vale_conf.py
+ @echo '.Name=="Canonical.400-Enforce-inclusive-terms"' > $(DEV_DIR)/styles/woke.filter
+ @echo '.Level=="error" and .Name!="Canonical.500-Repeated-words" and .Name!="Canonical.000-US-spellcheck"' > $(DEV_DIR)/styles/error.filter
+ @echo '.Name=="Canonical.000-US-spellcheck"' > $(DEV_DIR)/styles/spelling.filter
+ @. $(DOCS_VENV); find $(VALE_DIR)/vale_bin -size 195c -exec vale --version \;
+
+woke: vale-install
+ @cat $(DOCS_VOCAB)/accept.txt > $(DOCS_VOCAB)/accept_backup.txt
+ @cat $(DOCS_SOURCEDIR)/.custom_wordlist.txt >> $(DOCS_VOCAB)/accept.txt
+ @echo "Running Vale acceptable term check against $(CHECK_PATH). To change target set CHECK_PATH= with make command"
+ @. $(DOCS_VENV); vale --config="$(VALE_CONFIG)" --filter='$(DEV_DIR)/styles/woke.filter' --glob='*.{md,rst}' $(CHECK_PATH)
+ @cat $(DOCS_VOCAB)/accept_backup.txt > $(DOCS_VOCAB)/accept.txt && rm $(DOCS_VOCAB)/accept_backup.txt
+
+vale: vale-install
+ @cat $(DOCS_VOCAB)/accept.txt > $(DOCS_VOCAB)/accept_backup.txt
+ @cat $(DOCS_SOURCEDIR)/.custom_wordlist.txt >> $(DOCS_VOCAB)/accept.txt
+ @echo "Running Vale against $(CHECK_PATH). To change target set CHECK_PATH= with make command"
+ @. $(DOCS_VENV); vale --config="$(VALE_CONFIG)" --filter='$(DEV_DIR)/styles/error.filter' --glob='*.{md,rst}' $(CHECK_PATH)
+ @cat $(DOCS_VOCAB)/accept_backup.txt > $(DOCS_VOCAB)/accept.txt && rm $(DOCS_VOCAB)/accept_backup.txt
+
+spelling: vale-install
+ @cat $(DOCS_VOCAB)/accept.txt > $(DOCS_VOCAB)/accept_backup.txt
+ @cat $(DOCS_SOURCEDIR)/.custom_wordlist.txt >> $(DOCS_VOCAB)/accept.txt
+ @echo "Running Vale against $(CHECK_PATH). To change target set CHECK_PATH= with make command"
+ @. $(DOCS_VENV); vale --config="$(VALE_CONFIG)" --filter='$(DEV_DIR)/styles/spelling.filter' --glob='*.{md,rst}' $(CHECK_PATH)
+ @cat $(DOCS_VOCAB)/accept_backup.txt > $(DOCS_VOCAB)/accept.txt && rm $(DOCS_VOCAB)/accept_backup.txt
+
+spellcheck: spelling
+ @echo "Please note that the \`make spellcheck\` command is being deprecated in favor of \`make spelling\`"
+
+pdf-prep: install
+ @for packageName in $(DOCS_PDFPACKAGES); do (dpkg-query -W -f='$${Status}' $$packageName 2>/dev/null | \
+ grep -c "ok installed" >/dev/null && echo "Package $$packageName is installed") && continue || \
+ (echo; echo "PDF generation requires the installation of the following packages: $(DOCS_PDFPACKAGES)" && \
+ echo "" && echo "Run 'sudo make pdf-prep-force' to install these packages" && echo "" && echo \
+ "Please be aware these packages will be installed to your system") && exit 1 ; done
+
+pdf-prep-force:
+ apt-get update
+ apt-get upgrade -y
+ apt-get install --no-install-recommends -y $(DOCS_PDFPACKAGES) \
+
+pdf: pdf-prep
+ @. $(DOCS_VENV); $(SPHINX_BUILD) -M latexpdf "$(DOCS_SOURCEDIR)" "$(DOCS_BUILDDIR)" $(SPHINX_OPTS)
+ @rm ./$(DOCS_BUILDDIR)/latex/front-page-light.pdf || true
+ @rm ./$(DOCS_BUILDDIR)/latex/normal-page-footer.pdf || true
+ @find ./$(DOCS_BUILDDIR)/latex -name "*.pdf" -exec mv -t ./$(DOCS_BUILDDIR) {} +
+ @rm -r $(DOCS_BUILDDIR)/latex
+ @echo
+ @echo "Output can be found in ./$(DOCS_BUILDDIR)"
+ @echo
+
+update: install
+ @. $(DOCS_VENV); _dev/update_sp.py
+
+# Catch-all target: route all unknown targets to Sphinx using the new
+# "make mode" option. $(O) is meant as a shortcut for $(SPHINX_OPTS).
+%:
+ $(MAKE) --no-print-directory install
+ . $(DOCS_VENV); $(SPHINX_BUILD) -M $@ "$(DOCS_SOURCEDIR)" "$(DOCS_BUILDDIR)" $(SPHINX_OPTS) $(O)
diff --git a/docs/_dev/.pre-commit-config.yaml b/docs/_dev/.pre-commit-config.yaml
new file mode 100644
index 0000000..07e0b48
--- /dev/null
+++ b/docs/_dev/.pre-commit-config.yaml
@@ -0,0 +1,23 @@
+repos:
+ - repo: local
+ hooks:
+ - id: make-spelling
+ name: Run make spelling
+ entry: make -C docs spelling
+ language: system
+ pass_filenames: false
+ files: ^docs/.*\.(rst|md|txt)$
+
+ - id: make-linkcheck
+ name: Run make linkcheck
+ entry: make -C docs linkcheck
+ language: system
+ pass_filenames: false
+ files: ^docs/.*\.(rst|md|txt)$
+
+ - id: make-woke
+ name: Run make woke
+ entry: make -C docs woke
+ language: system
+ pass_filenames: false
+ files: ^docs/.*\.(rst|md|txt)$
diff --git a/docs/_dev/.pymarkdown.json b/docs/_dev/.pymarkdown.json
new file mode 100644
index 0000000..2c4c669
--- /dev/null
+++ b/docs/_dev/.pymarkdown.json
@@ -0,0 +1,46 @@
+{
+ "plugins": {
+ "selectively_enable_rules": true,
+ "heading-style": {
+ "enabled": true,
+ "style": "atx"
+ },
+ "commands-show-output": {
+ "enabled": true
+ },
+ "no-missing-space-atx": {
+ "enabled": true
+ },
+ "blanks-around-headings": {
+ "enabled": true
+ },
+ "heading-start-left": {
+ "enabled": true
+ },
+ "no-trailing-punctuation": {
+ "enabled": true,
+ "punctuation": ".,;。,;"
+ },
+ "blanks-around-fences": {
+ "enabled": true,
+ "list_items": false
+ },
+ "blanks-around-lists": {
+ "enabled": true
+ },
+ "hr-style": {
+ "enabled": true
+ },
+ "no-empty-links": {
+ "enabled": true
+ },
+ "no-alt-text": {
+ "enabled": true
+ }
+ },
+ "extensions": {
+ "front-matter" : {
+ "enabled" : true
+ }
+ }
+}
diff --git a/docs/_dev/get_vale_conf.py b/docs/_dev/get_vale_conf.py
new file mode 100755
index 0000000..b09404a
--- /dev/null
+++ b/docs/_dev/get_vale_conf.py
@@ -0,0 +1,151 @@
+#! /usr/bin/env python
+
+import os
+import shutil
+import subprocess
+import tempfile
+import sys
+import logging
+import argparse
+
+# Configure logging
+logging.basicConfig(
+ level=logging.INFO,
+ format='%(asctime)s - %(levelname)s - %(message)s',
+ datefmt='%Y-%m-%d %H:%M:%S'
+)
+
+DEV_DIR = os.path.join(os.getcwd(), "_dev")
+
+GITHUB_REPO = "canonical/documentation-style-guide"
+GITHUB_CLONE_URL = f"https://github.com/{GITHUB_REPO}.git"
+
+# Source paths to copy from repo
+VALE_FILE_LIST = [
+ "styles/Canonical",
+ "styles/config/vocabularies/Canonical",
+ "styles/config/dictionaries",
+ "vale.ini"
+]
+
+def clone_repo_and_copy_paths(file_source_dest, overwrite=False):
+ """
+ Clone the repository to a temporary directory and copy required files
+
+ Args:
+ file_source_dest: dictionary of file paths to copy from the repository,
+ and their destination paths
+ overwrite: boolean flag to overwrite existing files in the destination
+
+ Returns:
+ bool: True if all files were copied successfully, False otherwise
+ """
+
+ if not file_source_dest:
+ logging.error("No files to copy")
+ return False
+
+ # Create temporary directory on disk for cloning
+ temp_dir = tempfile.mkdtemp()
+ logging.info("Cloning repository <%s> to temporary directory: %s", GITHUB_REPO, temp_dir)
+ clone_cmd = ["git", "clone", "--depth", "1", GITHUB_CLONE_URL, temp_dir]
+
+ try:
+ result = subprocess.run(
+ clone_cmd,
+ capture_output=True,
+ text=True,
+ check=True
+ )
+ logging.debug("Git clone output: %s", result.stdout)
+ except subprocess.CalledProcessError as e:
+ logging.error("Git clone failed: %s", e.stderr)
+ return False
+
+ # Copy files from the cloned repository to the destination paths
+ is_copy_success = True
+ for source, dest in file_source_dest.items():
+ source_path = os.path.join(temp_dir, source)
+
+ if not os.path.exists(source_path):
+ is_copy_success = False
+ logging.error("Source path not found: %s", source_path)
+ continue
+
+ if not copy_files_to_path(source_path, dest, overwrite):
+ is_copy_success = False
+ logging.error("Failed to copy %s to %s", source_path, dest)
+
+ # Clean up temporary directory
+ logging.info("Cleaning up temporary directory: %s", temp_dir)
+ shutil.rmtree(temp_dir)
+
+ return is_copy_success
+
+def copy_files_to_path(source_path, dest_path, overwrite=False):
+ """
+ Copy a file or directory from source to destination
+
+ Args:
+ source_path: Path to the source file or directory
+ dest_path: Path to the destination
+ overwrite: Boolean flag to overwrite existing files in the destination
+
+ Returns:
+ bool: True if copy was successful, False otherwise
+ """
+ # Skip if source file doesn't exist
+ if not os.path.exists(source_path):
+ logging.warning("Source path not found: %s", source_path)
+ return False
+
+ logging.info("Copying %s to %s", source_path, dest_path)
+ # Handle existing files
+ if os.path.exists(dest_path):
+ if overwrite:
+ logging.info(" Destination exists, overwriting: %s", dest_path)
+ if os.path.isdir(dest_path):
+ shutil.rmtree(dest_path)
+ else:
+ os.remove(dest_path)
+ else:
+ logging.info(" Destination exists, skip copying (use overwrite=True to replace): %s",
+ dest_path)
+ return True # Skip copying
+
+ # Copy the source to destination
+ try:
+ if os.path.isdir(source_path):
+ # entire directory
+ shutil.copytree(source_path, dest_path)
+ else:
+ # individual files
+ shutil.copy2(source_path, dest_path)
+ return True
+ except (shutil.Error, OSError) as e:
+ logging.error("Copy failed: %s", e)
+ return False
+
+def parse_arguments():
+ parser = argparse.ArgumentParser(description="Download Vale configuration files")
+ parser.add_argument("--no-overwrite", action="store_true", help="Don't overwrite existing files")
+ return parser.parse_args()
+
+def main():
+ # Define local directory paths
+ vale_files_dict = {file: os.path.join(DEV_DIR, file) for file in VALE_FILE_LIST}
+
+ # Parse command line arguments, default to overwrite_enabled = True
+ overwrite_enabled = not parse_arguments().no_overwrite
+
+ # Download into /tmp through git clone
+ if not clone_repo_and_copy_paths(vale_files_dict, overwrite=overwrite_enabled):
+ logging.error("Failed to download files from repository")
+ return 1
+
+ logging.info("Download complete")
+ return 0
+
+
+if __name__ == "__main__":
+ sys.exit(main()) # Keep return code
diff --git a/.sphinx/pa11y.json b/docs/_dev/pa11y.json
similarity index 98%
rename from .sphinx/pa11y.json
rename to docs/_dev/pa11y.json
index 8df0cb9..04dc1e1 100644
--- a/.sphinx/pa11y.json
+++ b/docs/_dev/pa11y.json
@@ -6,4 +6,4 @@
},
"reporter": "cli",
"standard": "WCAG2AA"
-}
\ No newline at end of file
+}
diff --git a/docs/_dev/update_sp.py b/docs/_dev/update_sp.py
new file mode 100755
index 0000000..3014a84
--- /dev/null
+++ b/docs/_dev/update_sp.py
@@ -0,0 +1,270 @@
+#! /usr/bin/env python
+
+# Initial update script for the Sphinx Stack.
+#
+# Requires some manual intervention, but makes identifying updates and differences easier.
+#
+# For debugging, please run this script with DEBUGGING=1
+# e.g. user@device:~/git/Canonical/sphinx-stack/docs$ DEBUGGING=1 python _dev/update_sp.py
+
+
+import glob
+import logging
+import os
+import re
+import subprocess
+import sys
+
+import requests
+from packaging.version import parse as parse_version
+from requests.exceptions import RequestException
+
+SPHINX_DIR = os.path.abspath(os.path.dirname(__file__))
+DOCS_DIR = os.path.abspath(os.path.join(SPHINX_DIR, ".."))
+REQUIREMENTS = os.path.join(DOCS_DIR, "requirements.txt")
+SPHINX_UPDATE_DIR = os.path.join(SPHINX_DIR, "update")
+GITHUB_REPO = "canonical/sphinx-stack"
+GITHUB_API_BASE = f"https://api.github.com/repos/{GITHUB_REPO}"
+GITHUB_API_DEV_DIR = f"{GITHUB_API_BASE}/contents/docs/_dev"
+GITHUB_RAW_BASE = f"https://raw.githubusercontent.com/{GITHUB_REPO}/main"
+
+TIMEOUT = 10 # seconds
+
+# Check if debugging
+if os.getenv("DEBUGGING"):
+ logging.basicConfig(level=logging.DEBUG)
+
+
+def main():
+ # Check local version
+ logging.debug("Checking local version")
+ try:
+ with open(os.path.join(SPHINX_DIR, "version")) as f:
+ local_version = f.read().strip()
+ except FileNotFoundError:
+ print("WARNING\nWARNING\nWARNING")
+ print(
+ "You need to update to at least version 1.0.0 of the Sphinx Stack to start using the update function."
+ )
+ print("You may experience issues using this functionality.")
+ logging.debug("No local version found. Setting version to None")
+ local_version = "None"
+ except Exception as e:
+ logging.debug(e)
+ raise Exception("ERROR executing check local version")
+ logging.debug(f"Local version = {local_version}")
+
+ # Check release version
+ latest_release = query_api(GITHUB_API_BASE + "/releases/latest").json()["tag_name"]
+ logging.debug(f"Latest release = {latest_release}")
+
+ # Perform actions only if local version is older than release version
+ logging.debug("Comparing versions")
+ if parse_version(local_version) < parse_version(latest_release):
+ logging.debug("Local version is older than the release version.")
+ print("Sphinx Stack is out of date.\n")
+
+ # Identify and download '_dev' dir files to '_dev/update'
+ files_updated, new_files = update_static_files()
+
+ # Write new version to file to '_dev/update'
+
+ download_file(
+ GITHUB_RAW_BASE + "/docs/_dev/version",
+ os.path.join(SPHINX_UPDATE_DIR, "version"),
+ )
+
+ # Provide changelog to identify other significant changes
+ changelog = query_api(GITHUB_RAW_BASE + "/CHANGELOG.md")
+ logging.debug("Changelog obtained")
+ version_regex = re.compile(r"#+ +" + re.escape(local_version) + r" *\n")
+ print("SEE CURRENT CHANGELOG:")
+ print(re.split(version_regex, changelog.text)[0])
+
+ # Provide information on any files identified for updates
+ if files_updated:
+ logging.debug("Updated files found and downloaded")
+ print("Differences have been identified in static files.")
+ print("Updated files have been downloaded to '_dev/update'.")
+ print("Validate and move these files into your '_dev/' directory.")
+ else:
+ logging.debug("No files found to update")
+ # Provide information on NEW files
+ if new_files:
+ logging.debug("New files found and downloaded")
+ print(
+ "NOTE: New files have been downloaded\n",
+ "See 'NEWFILES.txt' for all downloaded files\n",
+ "Validate and merge these files into your '_dev/' directory",
+ )
+ else:
+ logging.debug("No new files found to download")
+ else:
+ logging.debug("Local version and release version are the same")
+ print("This version is up to date.")
+
+ # Check requirements are the same
+ new_requirements = []
+ try:
+ with open(REQUIREMENTS, "r") as file:
+ logging.debug("Checking requirements")
+
+ local_reqs = set(file.read().splitlines()) - {""}
+ requirements = set(
+ query_api(GITHUB_RAW_BASE + "/docs/requirements.txt").text.splitlines()
+ )
+
+ new_requirements = requirements - local_reqs
+
+ for req in new_requirements:
+ logging.debug(f"{req} not found in local requirements.txt")
+
+ for req in requirements & local_reqs:
+ logging.debug(f"{req} already exists in local requirements.txt")
+
+ if new_requirements != set():
+ print(
+ "You may need to add the following packages to your requirements.txt file:"
+ )
+ for r in new_requirements:
+ print(f"{r}\n")
+ except FileNotFoundError:
+ print("requirements.txt not found")
+ print(
+ "The updated Sphinx Stack has moved requirements.txt out of the '_dev' dir"
+ )
+ print("requirements.txt not checked, please update your requirements manually")
+
+
+def update_static_files():
+ """Checks local files against remote for new and different files, downloads to '_dev/updates'"""
+ files, paths = get_local_files_and_paths()
+ new_file_list = []
+
+ for item in query_api(GITHUB_API_DEV_DIR).json():
+ logging.debug(f"Checking {item['name']}")
+ # Checks existing files in '_dev' Sphinx Stack static root for changed SHA
+ if item["name"] in files and item["type"] == "file":
+ index = files.index(item["name"])
+ if item["sha"] != get_git_revision_hash(paths[index]):
+ logging.debug(f"Local {item['name']} is different to remote")
+ download_file(
+ item["download_url"], os.path.join(SPHINX_UPDATE_DIR, item["name"])
+ )
+ if item["name"] == "update_sp.py":
+ # Indicate update script needs to be updated and re-run
+ print("WARNING")
+ print(
+ "THIS UPDATE SCRIPT IS OUT OF DATE. YOU MAY NEED TO RUN ANOTHER UPDATE AFTER UPDATING TO THE FILE IN '_dev/updates'."
+ )
+ print("WARNING\n")
+ else:
+ logging.debug("File hashes are equal")
+ # Checks nested files '_dev/**/**.*' for changed SHA (single level of depth)
+ elif item["type"] == "dir":
+ logging.debug(item["name"] + " is a directory")
+ for nested_item in query_api(f"{GITHUB_API_DEV_DIR}/{item['name']}").json():
+ logging.debug(f"Checking {nested_item['name']}")
+ if nested_item["name"] in files:
+ index = files.index(nested_item["name"])
+ if nested_item["sha"] != get_git_revision_hash(paths[index]):
+ logging.debug(
+ f"Local {nested_item['name']} is different to remote"
+ )
+ download_file(
+ nested_item["download_url"],
+ os.path.join(
+ SPHINX_UPDATE_DIR, item["name"], nested_item["name"]
+ ),
+ )
+ # Downloads NEW nested files
+ else:
+ logging.debug(f"No local version found of {nested_item['name']}")
+ if nested_item["type"] == "file":
+ new_file_list.append(nested_item["name"])
+ download_file(
+ nested_item["download_url"],
+ os.path.join(
+ SPHINX_UPDATE_DIR, item["name"], nested_item["name"]
+ ),
+ )
+ # Downloads NEW files in '_dev' Sphinx Stack static root
+ else:
+ if item["type"] == "file":
+ logging.debug(f"No local version found of {item['name']}")
+ download_file(
+ item["download_url"], os.path.join(SPHINX_UPDATE_DIR, item["name"])
+ )
+ if item["name"] != "version":
+ new_file_list.append(item["name"])
+ # Writes return value for parent function
+ if os.path.exists(os.path.join(SPHINX_UPDATE_DIR)):
+ logging.debug("Files have been downloaded")
+ files_updated = True
+ else:
+ logging.debug("No downloads found")
+ files_updated = False
+ # Writes return value for parent function
+ if new_file_list != []:
+ # Provides more information on new files
+ with open(f"{SPHINX_DIR}/NEWFILES.txt", "w") as f:
+ for entry in new_file_list:
+ f.write(f"{entry}\n")
+ logging.debug("Some downloaded files are new")
+ return files_updated, True
+ return files_updated, False
+
+
+# Checks git hash of a file
+def get_git_revision_hash(file) -> str:
+ """Get SHA of local files"""
+ logging.debug(f"Getting hash of {os.path.basename(file)}")
+ return subprocess.check_output(["git", "hash-object", file]).decode("ascii").strip()
+
+
+# Examines local files
+def get_local_files_and_paths():
+ """Identify '_dev' local files and paths"""
+ logging.debug("Checking local files and paths")
+ try:
+ files = []
+ paths = []
+ patterns = [".*", "**.*"]
+ files, paths = [], []
+
+ for pattern in patterns:
+ for file in glob.iglob(os.path.join(SPHINX_DIR, pattern), recursive=True):
+ files.append(os.path.basename(file))
+ paths.append(file)
+ return files, paths
+ except Exception as e:
+ logging.debug(e)
+ raise RuntimeError("get_local_files_and_paths()") from e
+
+
+# General API query with timeout and RequestException
+def query_api(url):
+ """Query an API with a globally set timeout"""
+ logging.debug(f"Querying {url}")
+ try:
+ r = requests.get(url, timeout=TIMEOUT)
+ return r
+ except RequestException as e:
+ raise RuntimeError(f"Failed query_api(): {url}") from e
+
+
+# General file download function
+def download_file(url, output_path):
+ """Download a file to a specified path"""
+ logging.debug(f"Downloading {os.path.basename(output_path)}")
+ try:
+ os.makedirs(os.path.dirname(output_path), exist_ok=True)
+ with open(output_path, "wb") as file:
+ file.write(query_api(url).content)
+ except Exception as e:
+ logging.debug(e)
+ raise RuntimeError(f"Failed download_file(): {url}") from e
+
+
+if __name__ == "__main__":
+ sys.exit(main()) # Keep return code
diff --git a/docs/_dev/version b/docs/_dev/version
new file mode 100644
index 0000000..cd5ac03
--- /dev/null
+++ b/docs/_dev/version
@@ -0,0 +1 @@
+2.0
diff --git a/docs/_dev/warnings.txt b/docs/_dev/warnings.txt
new file mode 100644
index 0000000..e69de29
diff --git a/.sphinx/_templates/footer.html b/docs/_templates/footer.html
similarity index 59%
rename from .sphinx/_templates/footer.html
rename to docs/_templates/footer.html
index 6839f01..e1d1088 100644
--- a/.sphinx/_templates/footer.html
+++ b/docs/_templates/footer.html
@@ -1,11 +1,9 @@
-{# ru-fu: copied from Furo, with modifications as stated below. Modifications are marked 'mod:'. #}
-
{# mod: Per-page navigation #}
{% if meta %}
{% if 'sequential_nav' in meta %}
{% set sequential_nav = meta.sequential_nav %}
- {% endif %}
+ {% endif %}
{% endif %}
{# mod: Conditional wrappers to control page navigation buttons #}
{% if sequential_nav != "none" -%}
@@ -43,15 +41,26 @@
- {% if github_url and github_folder and pagename and page_source_suffix and display_contributors %}
- {% set contributors = get_contribs(github_url, github_folder, pagename, page_source_suffix, display_contributors_since) %}
- {% if contributors %}
+ {% if has_contributor_listing and display_contributors and pagename and page_source_suffix %}
+ {% set contributors = get_contributors_for_file(pagename, page_source_suffix) %}
+ {% if contributors %}
{% if contributors | length > 1 %}
Thanks to the {{ contributors |length }} contributors!
{% else %}
@@ -83,49 +92,12 @@
+
\ No newline at end of file
diff --git a/docs/conf.py b/docs/conf.py
new file mode 100644
index 0000000..424d774
--- /dev/null
+++ b/docs/conf.py
@@ -0,0 +1,281 @@
+import datetime
+import os
+import textwrap
+
+# Configuration for the Sphinx documentation builder.
+# All configuration specific to your project should be done in this file.
+#
+# If you're new to Sphinx and don't want any advanced or custom features,
+# just go through the items marked 'TODO'.
+#
+# A complete list of built-in Sphinx configuration values:
+# https://www.sphinx-doc.org/en/master/usage/configuration.html
+#
+# The Sphinx Stack uses the Canonical Sphinx theme to keep all documentation consistent
+# and on brand:
+# https://github.com/canonical/canonical-sphinx
+
+#######################
+# Project information #
+#######################
+
+# Project name
+project = "Canonical OpenStack"
+
+# Author name; used in the default copyright statement in the page footer
+author = "Canonical Ltd."
+
+# The year in the copyright statement
+copyright = f"{datetime.date.today().year}"
+
+# Sidebar documentation title
+# To disable the title, set it to an empty string.
+html_title = project + " documentation"
+
+# Documentation website URL
+ogp_site_url = os.environ.get("READTHEDOCS_CANONICAL_URL", "/")
+
+# Preview name of the documentation website
+ogp_site_name = project
+
+# Preview image URL
+# TODO: To customise the preview image, update the next line.
+ogp_image = "https://assets.ubuntu.com/v1/cc828679-docs_illustration.svg"
+
+# Product favicon; shown in bookmarks, browser tabs, etc.
+# TODO: To customise the favicon, uncomment and update the next line.
+# html_favicon = "_static/favicon.png"
+
+# Dictionary of values to pass into the Sphinx context for all pages:
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-html_context
+html_context = {
+ # Product page URL; can be different from product docs URL
+ "product_page": "canonical.com/openstack",
+ # Product tag image; the orange part of your logo, shown in the page header
+ # TODO: To add a tag image, uncomment and update as needed.
+ # 'product_tag': '_static/tag.png',
+ # Your Discourse instance URL
+ # TODO: Change to your Discourse instance URL or leave empty.
+ "discourse": "https://discourse.ubuntu.com",
+ # Your Mattermost channel URL
+ "mattermost": "",
+ # Your Matrix channel URL
+ "matrix": "https://matrix.to/#/#openstack-sunbeam:ubuntu.com",
+ # Your documentation GitHub repository URL If set, links for viewing the
+ # documentation source files and creating GitHub issues are added at the bottom of
+ # each page.
+ "github_url": "https://github.com/canonical/canonical-openstack-docs",
+ # Docs branch in the repo; used in links for viewing the source files
+ "repo_default_branch": "main",
+ # Docs location in the repo; used in links for viewing the source files
+ "repo_folder": "/docs/",
+ # Valid options: none, prev, next, both
+ # "sequential_nav": "",
+ "display_contributors": False,
+ # Required for feedback button
+ "github_issues": "enabled",
+ # Passes the top-level 'author' value to the theme
+ "author": author,
+ # Documentation license information
+ "license": {
+ "name": "Apache-2.0",
+ "url": "https://github.com/canonical/snap-openstack/blob/main/LICENSE",
+ },
+}
+
+# TODO: To enable the edit button on pages, uncomment and change the link to a
+# public repository on GitHub or Launchpad. Any of the following link domains
+# are accepted:
+# - https://github.com/example-org/example"
+# - https://launchpad.net/example
+# - https://git.launchpad.net/example
+#
+# html_theme_options = {
+# 'source_edit_link': 'https://github.com/canonical/sphinx-stack',
+# }
+
+# Project slug
+# TODO: If your documentation is hosted on https://documentation.ubuntu.com/,
+# uncomment and set to the RTD slug.
+# slug = ''
+
+#######################
+# Sitemap configuration: https://sphinx-sitemap.readthedocs.io/
+#######################
+
+# Use RTD canonical URL to ensure duplicate pages have a specific canonical URL
+html_baseurl = os.environ.get("READTHEDOCS_CANONICAL_URL", "/")
+
+# sphinx-sitemap uses html_baseurl to generate the full URL for each page:
+sitemap_url_scheme = "{link}"
+
+# Include `lastmod` dates in the sitemap:
+sitemap_show_lastmod = True
+
+# TODO: Exclude pages that aren't user-facing from the sitemap (e.g., module pages
+# generated by autodoc).
+# Pages excluded from the sitemap:
+sitemap_excludes = [
+ "404/",
+ "genindex/",
+ "search/",
+]
+
+################################
+# Template and asset locations #
+################################
+
+# html_static_path = ["_static"]
+# templates_path = ["_templates"]
+
+#############
+# Redirects #
+#############
+
+# Add redirects to the 'redirects.txt' file
+# https://sphinxext-rediraffe.readthedocs.io/en/latest/
+
+# To set up redirects in the Read the Docs project dashboard:
+# https://docs.readthedocs.io/en/stable/guides/redirects.html
+
+rediraffe_redirects = "redirects.txt"
+
+# Strips '/index.html' from destination URLs when building with 'dirhtml'
+rediraffe_dir_only = True
+
+
+############################
+# sphinx-llm configuration #
+############################
+
+# This description is included in llms.txt to provide some initial context for your
+# product docs.
+# TODO: Add a description in the form "This is the documentation for ,
+# ".
+llms_txt_description = textwrap.dedent(
+ """\
+ This is the documentation for Canonical OpenStack, an enterprise-grade cloud
+ platform that delivers distilled upstream OpenStack excellence in the form of
+ a human-friendly product.
+ """
+)
+
+# The base URL for references built by sphinx-markdown-builder.
+if os.environ.get("READTHEDOCS"):
+ markdown_http_base = html_baseurl
+
+###########################
+# Link checker exceptions #
+###########################
+
+# A regex list of URLs that are ignored by 'make linkcheck'
+linkcheck_ignore = [
+ "https://github.com",
+ r"https://matrix\.to/.*",
+ "https://example.com",
+ # SourceForge domains often block linkcheck
+ r"https://.*\.sourceforge\.(net|io)/.*",
+ # DMTF appears to block linkchecks
+ "https://www.dmtf.org/standards/cadf",
+ # Exclude RFC1918 URLs as they are used for examples in the documentation
+ r'^https?://127\.',
+ r'^https?://192\.',
+ r'^https?://10\.',
+ r'^https?://172\.(1[6-9]|2[0-9]|3[0-1])\.',
+ r'^https?://192\.168\.',
+]
+
+# A regex list of URLs where anchors are ignored by 'make linkcheck'
+linkcheck_anchors_ignore_for_url = [
+ r"https://github\.com/.*",
+ '^https://ubuntu.com/server/docs/.*$',
+ '^https://juju.is/docs/juju/.*$',
+ '^https://canonical.com/openstack.*$',
+]
+
+# How long the link checker will wait for a response for each request
+# TODO: Decrease to improve run time or increase if links frequently time out.
+# linkcheck_timeout = 30
+
+# Give linkcheck multiple tries on failure
+linkcheck_retries = 3
+
+########################
+# Configuration extras #
+########################
+
+# Custom MyST syntax extensions; see
+# https://myst-parser.readthedocs.io/en/latest/syntax/optional.html
+# NOTE: By default, the following MyST extensions are enabled:
+# - substitution
+# - deflist
+# - linkify
+# myst_enable_extensions = set()
+
+# Custom Sphinx extensions; see
+# https://www.sphinx-doc.org/en/master/usage/extensions/index.html
+extensions = [
+ "canonical_sphinx",
+ "notfound.extension",
+ "sphinx_design",
+ "sphinx_rerediraffe",
+ "sphinx_reredirects",
+ "sphinx_tabs.tabs",
+ "sphinxcontrib.jquery",
+ "sphinxext.opengraph",
+ "sphinx_config_options",
+ "sphinx_contributor_listing",
+ "sphinx_filtered_toctree",
+ "sphinx_llm.txt",
+ "sphinx_related_links",
+ "sphinx_roles",
+ "sphinx_terminal",
+ "sphinx_ubuntu_images",
+ "sphinx_youtube_links",
+ "sphinxcontrib.cairosvgconverter",
+ "sphinx_last_updated_by_git",
+ "sphinx.ext.intersphinx",
+ "sphinx_sitemap",
+]
+
+# Excludes files or directories from processing
+exclude_patterns = [
+ "doc-cheat-sheet*",
+ ".venv*",
+ "_dev",
+]
+
+# Adds custom CSS files, located remotely or in 'html_static_path'.
+# html_css_files = [
+# "https://assets.ubuntu.com/v1/d86746ef-cookie_banner.css",
+# ]
+
+# Adds custom JavaScript files, located remotely or in 'html_static_path'.
+# html_js_files = [
+# "https://assets.ubuntu.com/v1/287a5e8f-bundle.js",
+# ]
+
+# Appends extra markup to the end of every document written in reST
+rst_epilog = """
+.. include:: /reuse/links.txt
+"""
+
+# Specifies a reST snippet to be prepended to each .rst file
+# This defines a :center: role that centers table cell content.
+# This defines a :h2: role that styles content for use with PDF generation.
+rst_prolog = """
+.. role:: center
+ :class: align-center
+.. role:: h2
+ :class: hclass2
+.. role:: woke-ignore
+ :class: woke-ignore
+.. role:: vale-ignore
+ :class: vale-ignore
+"""
+
+# Configuration for Intersphinx projects
+#
+# intersphinx_mapping = {
+# "snap": ("https://snapcraft.io/docs/", None),
+# }
diff --git a/contributor/index.rst b/docs/contributor/index.rst
similarity index 100%
rename from contributor/index.rst
rename to docs/contributor/index.rst
diff --git a/contributor/reference/index.rst b/docs/contributor/reference/index.rst
similarity index 100%
rename from contributor/reference/index.rst
rename to docs/contributor/reference/index.rst
diff --git a/contributor/reference/stable-release.rst b/docs/contributor/reference/stable-release.rst
similarity index 100%
rename from contributor/reference/stable-release.rst
rename to docs/contributor/reference/stable-release.rst
diff --git a/explanation/_include/deployment-manifest.yaml b/docs/explanation/_include/deployment-manifest.yaml
similarity index 100%
rename from explanation/_include/deployment-manifest.yaml
rename to docs/explanation/_include/deployment-manifest.yaml
diff --git a/explanation/architecture.rst b/docs/explanation/architecture.rst
similarity index 100%
rename from explanation/architecture.rst
rename to docs/explanation/architecture.rst
diff --git a/explanation/baremetal-nodes.rst b/docs/explanation/baremetal-nodes.rst
similarity index 100%
rename from explanation/baremetal-nodes.rst
rename to docs/explanation/baremetal-nodes.rst
diff --git a/explanation/deployment-manifest.rst b/docs/explanation/deployment-manifest.rst
similarity index 100%
rename from explanation/deployment-manifest.rst
rename to docs/explanation/deployment-manifest.rst
diff --git a/explanation/design-considerations.rst b/docs/explanation/design-considerations.rst
similarity index 100%
rename from explanation/design-considerations.rst
rename to docs/explanation/design-considerations.rst
diff --git a/explanation/epa-orchestrator.rst b/docs/explanation/epa-orchestrator.rst
similarity index 100%
rename from explanation/epa-orchestrator.rst
rename to docs/explanation/epa-orchestrator.rst
diff --git a/explanation/images/canonical-openstack-software-architecture.png b/docs/explanation/images/canonical-openstack-software-architecture.png
similarity index 100%
rename from explanation/images/canonical-openstack-software-architecture.png
rename to docs/explanation/images/canonical-openstack-software-architecture.png
diff --git a/explanation/images/multi-node-topology.png b/docs/explanation/images/multi-node-topology.png
similarity index 100%
rename from explanation/images/multi-node-topology.png
rename to docs/explanation/images/multi-node-topology.png
diff --git a/explanation/images/single-node-topology.png b/docs/explanation/images/single-node-topology.png
similarity index 100%
rename from explanation/images/single-node-topology.png
rename to docs/explanation/images/single-node-topology.png
diff --git a/explanation/index.rst b/docs/explanation/index.rst
similarity index 94%
rename from explanation/index.rst
rename to docs/explanation/index.rst
index 9f29b3a..553c8e5 100644
--- a/explanation/index.rst
+++ b/docs/explanation/index.rst
@@ -1,3 +1,5 @@
+.. _explanation:
+
Explanation
===========
diff --git a/explanation/instance-recovery.rst b/docs/explanation/instance-recovery.rst
similarity index 100%
rename from explanation/instance-recovery.rst
rename to docs/explanation/instance-recovery.rst
diff --git a/explanation/maintenance-mode.rst b/docs/explanation/maintenance-mode.rst
similarity index 100%
rename from explanation/maintenance-mode.rst
rename to docs/explanation/maintenance-mode.rst
diff --git a/explanation/network-traffic-isolation-with-maas.rst b/docs/explanation/network-traffic-isolation-with-maas.rst
similarity index 100%
rename from explanation/network-traffic-isolation-with-maas.rst
rename to docs/explanation/network-traffic-isolation-with-maas.rst
diff --git a/explanation/service-endpoint-encryption.rst b/docs/explanation/service-endpoint-encryption.rst
similarity index 100%
rename from explanation/service-endpoint-encryption.rst
rename to docs/explanation/service-endpoint-encryption.rst
diff --git a/explanation/technical-motives.rst b/docs/explanation/technical-motives.rst
similarity index 100%
rename from explanation/technical-motives.rst
rename to docs/explanation/technical-motives.rst
diff --git a/how-to/features/baremetal.rst b/docs/how-to/features/baremetal.rst
similarity index 100%
rename from how-to/features/baremetal.rst
rename to docs/how-to/features/baremetal.rst
diff --git a/how-to/features/caas.rst b/docs/how-to/features/caas.rst
similarity index 99%
rename from how-to/features/caas.rst
rename to docs/how-to/features/caas.rst
index 8515547..84a0e7a 100644
--- a/how-to/features/caas.rst
+++ b/docs/how-to/features/caas.rst
@@ -77,7 +77,8 @@ Sample output:
:user: ubuntu
:host: sunbeam01
:dir: ~
- :input: openstack coe cluster template
+
+ openstack coe cluster template
create ck8s-cluster-template-ovn \
--image ubuntu \
--external-network external-network \
@@ -297,7 +298,8 @@ Existing cluster can be upgraded to enable keystone auth by running the followin
:user: ubuntu
:host: sunbeam01
:dir: ~
- :input: openstack coe cluster upgrade CLUSTER_UUID NEW_CLUSTER_TEMPLATE_UUID
+
+ openstack coe cluster upgrade CLUSTER_UUID NEW_CLUSTER_TEMPLATE_UUID
Request to upgrade cluster fc5724ae-aef8-4c89-aef8-78bc41f54325 has been accepted.
diff --git a/how-to/features/dns.rst b/docs/how-to/features/dns.rst
similarity index 100%
rename from how-to/features/dns.rst
rename to docs/how-to/features/dns.rst
diff --git a/how-to/features/grafana-capacity-overview.png b/docs/how-to/features/grafana-capacity-overview.png
similarity index 100%
rename from how-to/features/grafana-capacity-overview.png
rename to docs/how-to/features/grafana-capacity-overview.png
diff --git a/how-to/features/grafana-compute-overview.png b/docs/how-to/features/grafana-compute-overview.png
similarity index 100%
rename from how-to/features/grafana-compute-overview.png
rename to docs/how-to/features/grafana-compute-overview.png
diff --git a/how-to/features/grafana-dashboards.png b/docs/how-to/features/grafana-dashboards.png
similarity index 100%
rename from how-to/features/grafana-dashboards.png
rename to docs/how-to/features/grafana-dashboards.png
diff --git a/how-to/features/grafana-days-until-threshold.png b/docs/how-to/features/grafana-days-until-threshold.png
similarity index 100%
rename from how-to/features/grafana-days-until-threshold.png
rename to docs/how-to/features/grafana-days-until-threshold.png
diff --git a/how-to/features/grafana-landing.png b/docs/how-to/features/grafana-landing.png
similarity index 100%
rename from how-to/features/grafana-landing.png
rename to docs/how-to/features/grafana-landing.png
diff --git a/how-to/features/grafana-login.png b/docs/how-to/features/grafana-login.png
similarity index 100%
rename from how-to/features/grafana-login.png
rename to docs/how-to/features/grafana-login.png
diff --git a/how-to/features/grafana-openstack-cloud-usage.png b/docs/how-to/features/grafana-openstack-cloud-usage.png
similarity index 100%
rename from how-to/features/grafana-openstack-cloud-usage.png
rename to docs/how-to/features/grafana-openstack-cloud-usage.png
diff --git a/how-to/features/grafana-openstack-dashboard-overview.jpeg b/docs/how-to/features/grafana-openstack-dashboard-overview.jpeg
similarity index 100%
rename from how-to/features/grafana-openstack-dashboard-overview.jpeg
rename to docs/how-to/features/grafana-openstack-dashboard-overview.jpeg
diff --git a/how-to/features/grafana-openstack-http-status-codes-dashboard.png b/docs/how-to/features/grafana-openstack-http-status-codes-dashboard.png
similarity index 100%
rename from how-to/features/grafana-openstack-http-status-codes-dashboard.png
rename to docs/how-to/features/grafana-openstack-http-status-codes-dashboard.png
diff --git a/how-to/features/grafana-openstack-service-logs.png b/docs/how-to/features/grafana-openstack-service-logs.png
similarity index 100%
rename from how-to/features/grafana-openstack-service-logs.png
rename to docs/how-to/features/grafana-openstack-service-logs.png
diff --git a/how-to/features/grafana-project-overview.png b/docs/how-to/features/grafana-project-overview.png
similarity index 100%
rename from how-to/features/grafana-project-overview.png
rename to docs/how-to/features/grafana-project-overview.png
diff --git a/how-to/features/images-sync.rst b/docs/how-to/features/images-sync.rst
similarity index 100%
rename from how-to/features/images-sync.rst
rename to docs/how-to/features/images-sync.rst
diff --git a/how-to/features/index.rst b/docs/how-to/features/index.rst
similarity index 100%
rename from how-to/features/index.rst
rename to docs/how-to/features/index.rst
diff --git a/how-to/features/instance-recovery.rst b/docs/how-to/features/instance-recovery.rst
similarity index 100%
rename from how-to/features/instance-recovery.rst
rename to docs/how-to/features/instance-recovery.rst
diff --git a/how-to/features/ldap.rst b/docs/how-to/features/ldap.rst
similarity index 100%
rename from how-to/features/ldap.rst
rename to docs/how-to/features/ldap.rst
diff --git a/how-to/features/load-balancer.rst b/docs/how-to/features/load-balancer.rst
similarity index 100%
rename from how-to/features/load-balancer.rst
rename to docs/how-to/features/load-balancer.rst
diff --git a/how-to/features/managing-tls/implement-tls-using-a-third-party-ca.rst b/docs/how-to/features/managing-tls/implement-tls-using-a-third-party-ca.rst
similarity index 100%
rename from how-to/features/managing-tls/implement-tls-using-a-third-party-ca.rst
rename to docs/how-to/features/managing-tls/implement-tls-using-a-third-party-ca.rst
diff --git a/how-to/features/managing-tls/index.rst b/docs/how-to/features/managing-tls/index.rst
similarity index 100%
rename from how-to/features/managing-tls/index.rst
rename to docs/how-to/features/managing-tls/index.rst
diff --git a/how-to/features/managing-tls/tls-ca.rst b/docs/how-to/features/managing-tls/tls-ca.rst
similarity index 100%
rename from how-to/features/managing-tls/tls-ca.rst
rename to docs/how-to/features/managing-tls/tls-ca.rst
diff --git a/how-to/features/managing-tls/tls-vault.rst b/docs/how-to/features/managing-tls/tls-vault.rst
similarity index 100%
rename from how-to/features/managing-tls/tls-vault.rst
rename to docs/how-to/features/managing-tls/tls-vault.rst
diff --git a/how-to/features/object-storage.rst b/docs/how-to/features/object-storage.rst
similarity index 100%
rename from how-to/features/object-storage.rst
rename to docs/how-to/features/object-storage.rst
diff --git a/how-to/features/observability.rst b/docs/how-to/features/observability.rst
similarity index 100%
rename from how-to/features/observability.rst
rename to docs/how-to/features/observability.rst
diff --git a/how-to/features/orchestration.rst b/docs/how-to/features/orchestration.rst
similarity index 100%
rename from how-to/features/orchestration.rst
rename to docs/how-to/features/orchestration.rst
diff --git a/how-to/features/resource-optimization.rst b/docs/how-to/features/resource-optimization.rst
similarity index 100%
rename from how-to/features/resource-optimization.rst
rename to docs/how-to/features/resource-optimization.rst
diff --git a/how-to/features/secrets.rst b/docs/how-to/features/secrets.rst
similarity index 100%
rename from how-to/features/secrets.rst
rename to docs/how-to/features/secrets.rst
diff --git a/how-to/features/shared-filesystem.rst b/docs/how-to/features/shared-filesystem.rst
similarity index 100%
rename from how-to/features/shared-filesystem.rst
rename to docs/how-to/features/shared-filesystem.rst
diff --git a/how-to/features/telemetry.rst b/docs/how-to/features/telemetry.rst
similarity index 100%
rename from how-to/features/telemetry.rst
rename to docs/how-to/features/telemetry.rst
diff --git a/how-to/features/ubuntu-pro.rst b/docs/how-to/features/ubuntu-pro.rst
similarity index 100%
rename from how-to/features/ubuntu-pro.rst
rename to docs/how-to/features/ubuntu-pro.rst
diff --git a/how-to/features/validation.rst b/docs/how-to/features/validation.rst
similarity index 100%
rename from how-to/features/validation.rst
rename to docs/how-to/features/validation.rst
diff --git a/how-to/features/validation_800x533.png b/docs/how-to/features/validation_800x533.png
similarity index 100%
rename from how-to/features/validation_800x533.png
rename to docs/how-to/features/validation_800x533.png
diff --git a/how-to/features/vault.rst b/docs/how-to/features/vault.rst
similarity index 100%
rename from how-to/features/vault.rst
rename to docs/how-to/features/vault.rst
diff --git a/how-to/index.rst b/docs/how-to/index.rst
similarity index 97%
rename from how-to/index.rst
rename to docs/how-to/index.rst
index ac28f42..6f6f5fb 100644
--- a/how-to/index.rst
+++ b/docs/how-to/index.rst
@@ -1,3 +1,5 @@
+.. _howto:
+
How-to Guides
=============
diff --git a/how-to/install/images/install-canonical-openstack-using-canonical-maas-01.png b/docs/how-to/install/images/install-canonical-openstack-using-canonical-maas-01.png
similarity index 100%
rename from how-to/install/images/install-canonical-openstack-using-canonical-maas-01.png
rename to docs/how-to/install/images/install-canonical-openstack-using-canonical-maas-01.png
diff --git a/how-to/install/images/install-canonical-openstack-using-canonical-maas-02.png b/docs/how-to/install/images/install-canonical-openstack-using-canonical-maas-02.png
similarity index 100%
rename from how-to/install/images/install-canonical-openstack-using-canonical-maas-02.png
rename to docs/how-to/install/images/install-canonical-openstack-using-canonical-maas-02.png
diff --git a/how-to/install/images/install-canonical-openstack-using-canonical-maas-03.png b/docs/how-to/install/images/install-canonical-openstack-using-canonical-maas-03.png
similarity index 100%
rename from how-to/install/images/install-canonical-openstack-using-canonical-maas-03.png
rename to docs/how-to/install/images/install-canonical-openstack-using-canonical-maas-03.png
diff --git a/how-to/install/images/install-canonical-openstack-using-canonical-maas-04.png b/docs/how-to/install/images/install-canonical-openstack-using-canonical-maas-04.png
similarity index 100%
rename from how-to/install/images/install-canonical-openstack-using-canonical-maas-04.png
rename to docs/how-to/install/images/install-canonical-openstack-using-canonical-maas-04.png
diff --git a/how-to/install/index.rst b/docs/how-to/install/index.rst
similarity index 100%
rename from how-to/install/index.rst
rename to docs/how-to/install/index.rst
diff --git a/how-to/install/install-canonical-openstack-using-canonical-maas.rst b/docs/how-to/install/install-canonical-openstack-using-canonical-maas.rst
similarity index 100%
rename from how-to/install/install-canonical-openstack-using-canonical-maas.rst
rename to docs/how-to/install/install-canonical-openstack-using-canonical-maas.rst
diff --git a/how-to/install/install-canonical-openstack-using-the-manual-bare-metal-provider.rst b/docs/how-to/install/install-canonical-openstack-using-the-manual-bare-metal-provider.rst
similarity index 100%
rename from how-to/install/install-canonical-openstack-using-the-manual-bare-metal-provider.rst
rename to docs/how-to/install/install-canonical-openstack-using-the-manual-bare-metal-provider.rst
diff --git a/how-to/misc/adding-amd-sev-enabled-compute-node.rst b/docs/how-to/misc/adding-amd-sev-enabled-compute-node.rst
similarity index 100%
rename from how-to/misc/adding-amd-sev-enabled-compute-node.rst
rename to docs/how-to/misc/adding-amd-sev-enabled-compute-node.rst
diff --git a/how-to/misc/backup-and-restore-maas-deployment.rst b/docs/how-to/misc/backup-and-restore-maas-deployment.rst
similarity index 100%
rename from how-to/misc/backup-and-restore-maas-deployment.rst
rename to docs/how-to/misc/backup-and-restore-maas-deployment.rst
diff --git a/how-to/misc/bootstrap-highly-available-juju-controller-on-top-of-a-lxd-cluster.rst b/docs/how-to/misc/bootstrap-highly-available-juju-controller-on-top-of-a-lxd-cluster.rst
similarity index 100%
rename from how-to/misc/bootstrap-highly-available-juju-controller-on-top-of-a-lxd-cluster.rst
rename to docs/how-to/misc/bootstrap-highly-available-juju-controller-on-top-of-a-lxd-cluster.rst
diff --git a/how-to/misc/configuring-dpdk.rst b/docs/how-to/misc/configuring-dpdk.rst
similarity index 100%
rename from how-to/misc/configuring-dpdk.rst
rename to docs/how-to/misc/configuring-dpdk.rst
diff --git a/how-to/misc/configuring-gpu-passthrough.rst b/docs/how-to/misc/configuring-gpu-passthrough.rst
similarity index 89%
rename from how-to/misc/configuring-gpu-passthrough.rst
rename to docs/how-to/misc/configuring-gpu-passthrough.rst
index 4d1d8b0..363a9a7 100644
--- a/how-to/misc/configuring-gpu-passthrough.rst
+++ b/docs/how-to/misc/configuring-gpu-passthrough.rst
@@ -26,21 +26,21 @@ Manual mode
Canonical Openstack will determine if there are any GPU devices. `PCI device
classes`_ of type Display Controller (0x03) and Processing Accelerators (0x1200)
-are filtered as GPU devices. The devices are automatically added to `Nova PCI
-whitelist`_ and no user intervention is required.
+are filtered as GPU devices. The devices are automatically added to
+`Nova PCI passthrough list`_ and no user intervention is required.
Maas mode
---------
Maas mode works similar to Manual mode and the detected GPU devices are added
-to `Nova PCI whitelist`_ with no user intervention.
+to `Nova PCI passthrough list`_ with no user intervention.
Ensure that MAAS is configured to apply the necessary kernel parameters.
Manifest configuration
----------------------
-Arbitrary PCI devices may be whitelisted through the Canonical Openstack manifest.
+Arbitrary PCI devices may be allowed through the Canonical Openstack manifest.
Example:
@@ -66,7 +66,7 @@ Example:
The device spec filters are highly flexible and can contain PCI address wildcards
or PCI vendor/product IDs. See the `Nova device spec reference`_ for more details.
-The device whitelist will be applied to all the compute nodes. If needed, use
+The device list will be applied to all the compute nodes. If needed, use
the exclusion list to define per-node lists of devices that should not be
exposed to Openstack instances.
@@ -119,7 +119,7 @@ Above example shows the passthrough device Nvidia 3D controller in the guest.
.. Links
-.. _Nova PCI whitelist: https://docs.openstack.org/nova/latest/admin/pci-passthrough.html
+.. _Nova PCI passthrough list: https://docs.openstack.org/nova/latest/admin/pci-passthrough.html
.. _Nova device spec reference: https://docs.openstack.org/nova/latest/configuration/config.html#pci.device_spec
.. _PCI device aliases: https://docs.openstack.org/nova/latest/configuration/config.html#pci.alias
.. _PCI device classes: https://admin.pci-ids.ucw.cz/read/PD/
diff --git a/how-to/misc/configuring-sriov.rst b/docs/how-to/misc/configuring-sriov.rst
similarity index 97%
rename from how-to/misc/configuring-sriov.rst
rename to docs/how-to/misc/configuring-sriov.rst
index 9e9438b..0a12297 100644
--- a/how-to/misc/configuring-sriov.rst
+++ b/docs/how-to/misc/configuring-sriov.rst
@@ -145,7 +145,7 @@ Example:
Add network adapter to PCI whitelist? Intel Corporation Ethernet 10G 2P X520 Adapter (enp130s0f1) [y/n] (n):
All the VFs that belong to the specified SR-IOV PFs will be added to the
-`Nova PCI whitelist`_, in addition to the devices that may have been specified
+`Nova PCI device list`_, in addition to the devices that may have been specified
in the :ref:`manifest file`.
The ``openstack-hypervisor`` snap determines if the specified adapters support
@@ -185,7 +185,7 @@ following command:
Manifest configuration
----------------------
-Arbitrary PCI devices may be whitelisted through the Canonical Openstack manifest.
+Arbitrary PCI devices may be specified through the Canonical Openstack manifest.
Apart from SR-IOV network adapters, this can also include vGPUs or FPGAs.
Example:
@@ -213,7 +213,7 @@ Example:
The device spec filters are highly flexible and can contain PCI address wildcards
or PCI vendor/product IDs. See the `Nova device spec reference`_ for more details.
-The device whitelist will be applied to all the compute nodes. If needed, use
+The PCI device specs will be applied to all the compute nodes. If needed, use
the exclusion list to define per-node lists of devices that should not be
exposed to Openstack instances.
@@ -365,7 +365,7 @@ manually to avoid subsequent port binding failures.
.. Links
.. _representor functions: https://docs.kernel.org/networking/representors.html
-.. _Nova PCI whitelist: https://docs.openstack.org/nova/latest/admin/pci-passthrough.html
+.. _Nova PCI device list: https://docs.openstack.org/nova/latest/admin/pci-passthrough.html
.. _Neutron SR-IOV agent: https://docs.openstack.org/neutron/latest/admin/config-sriov.html#enable-neutron-sriov-nic-agent-compute
.. _Nova device spec reference: https://docs.openstack.org/nova/latest/configuration/config.html#pci.device_spec
-.. _PCI device aliases: https://docs.openstack.org/nova/latest/configuration/config.html#pci.alias
\ No newline at end of file
+.. _PCI device aliases: https://docs.openstack.org/nova/latest/configuration/config.html#pci.alias
diff --git a/how-to/misc/configuring-the-openstack-dashboard-theme.rst b/docs/how-to/misc/configuring-the-openstack-dashboard-theme.rst
similarity index 100%
rename from how-to/misc/configuring-the-openstack-dashboard-theme.rst
rename to docs/how-to/misc/configuring-the-openstack-dashboard-theme.rst
diff --git a/how-to/misc/configuring-vtpm.rst b/docs/how-to/misc/configuring-vtpm.rst
similarity index 100%
rename from how-to/misc/configuring-vtpm.rst
rename to docs/how-to/misc/configuring-vtpm.rst
diff --git a/how-to/misc/horizon-login.png b/docs/how-to/misc/horizon-login.png
similarity index 100%
rename from how-to/misc/horizon-login.png
rename to docs/how-to/misc/horizon-login.png
diff --git a/how-to/misc/horizon-overview.png b/docs/how-to/misc/horizon-overview.png
similarity index 100%
rename from how-to/misc/horizon-overview.png
rename to docs/how-to/misc/horizon-overview.png
diff --git a/how-to/misc/identity-provider-enablement.rst b/docs/how-to/misc/identity-provider-enablement.rst
similarity index 100%
rename from how-to/misc/identity-provider-enablement.rst
rename to docs/how-to/misc/identity-provider-enablement.rst
diff --git a/how-to/misc/index.rst b/docs/how-to/misc/index.rst
similarity index 100%
rename from how-to/misc/index.rst
rename to docs/how-to/misc/index.rst
diff --git a/how-to/misc/manage-a-proxied-environment.rst b/docs/how-to/misc/manage-a-proxied-environment.rst
similarity index 100%
rename from how-to/misc/manage-a-proxied-environment.rst
rename to docs/how-to/misc/manage-a-proxied-environment.rst
diff --git a/how-to/misc/manage-external-juju-controllers.rst b/docs/how-to/misc/manage-external-juju-controllers.rst
similarity index 100%
rename from how-to/misc/manage-external-juju-controllers.rst
rename to docs/how-to/misc/manage-external-juju-controllers.rst
diff --git a/how-to/misc/manage-workloads-with-juju.rst b/docs/how-to/misc/manage-workloads-with-juju.rst
similarity index 100%
rename from how-to/misc/manage-workloads-with-juju.rst
rename to docs/how-to/misc/manage-workloads-with-juju.rst
diff --git a/how-to/misc/managing-deployment-manifests.rst b/docs/how-to/misc/managing-deployment-manifests.rst
similarity index 100%
rename from how-to/misc/managing-deployment-manifests.rst
rename to docs/how-to/misc/managing-deployment-manifests.rst
diff --git a/how-to/misc/multiregion-deployments.rst b/docs/how-to/misc/multiregion-deployments.rst
similarity index 100%
rename from how-to/misc/multiregion-deployments.rst
rename to docs/how-to/misc/multiregion-deployments.rst
diff --git a/how-to/misc/reconfigure-k8s-api-endpoint-juju.rst b/docs/how-to/misc/reconfigure-k8s-api-endpoint-juju.rst
similarity index 100%
rename from how-to/misc/reconfigure-k8s-api-endpoint-juju.rst
rename to docs/how-to/misc/reconfigure-k8s-api-endpoint-juju.rst
diff --git a/how-to/misc/using-an-existing-juju-controller.rst b/docs/how-to/misc/using-an-existing-juju-controller.rst
similarity index 100%
rename from how-to/misc/using-an-existing-juju-controller.rst
rename to docs/how-to/misc/using-an-existing-juju-controller.rst
diff --git a/how-to/misc/using-the-epa-orchestrator.rst b/docs/how-to/misc/using-the-epa-orchestrator.rst
similarity index 89%
rename from how-to/misc/using-the-epa-orchestrator.rst
rename to docs/how-to/misc/using-the-epa-orchestrator.rst
index 5d14d98..2bf1f0f 100644
--- a/how-to/misc/using-the-epa-orchestrator.rst
+++ b/docs/how-to/misc/using-the-epa-orchestrator.rst
@@ -13,6 +13,6 @@ To use the EPA orchestrator, the host system must be preconfigured with the foll
For MAAS deployments, configure these via the MAAS UI/CLI for each node.
For detailed instructions on setting kernel boot parameters via the CLI, refer to the
-`MAAS documentation on machine customization `_.
+`MAAS documentation on machine customization `_.
-For **single-node deployments**, configure these parameters manually on the node and reboot the machine.
\ No newline at end of file
+For **single-node deployments**, configure these parameters manually on the node and reboot the machine.
diff --git a/how-to/misc/using-the-openstack-cli.rst b/docs/how-to/misc/using-the-openstack-cli.rst
similarity index 96%
rename from how-to/misc/using-the-openstack-cli.rst
rename to docs/how-to/misc/using-the-openstack-cli.rst
index 9fb0ee0..9d81d9c 100644
--- a/how-to/misc/using-the-openstack-cli.rst
+++ b/docs/how-to/misc/using-the-openstack-cli.rst
@@ -32,6 +32,3 @@ command. Here, the file ``admin-openrc`` is chosen as init file:
sunbeam openrc > admin-openrc
-.. raw:: html
-
-
diff --git a/how-to/misc/using-the-openstack-dashboard.rst b/docs/how-to/misc/using-the-openstack-dashboard.rst
similarity index 100%
rename from how-to/misc/using-the-openstack-dashboard.rst
rename to docs/how-to/misc/using-the-openstack-dashboard.rst
diff --git a/how-to/operations/backup-and-restore.rst b/docs/how-to/operations/backup-and-restore.rst
similarity index 100%
rename from how-to/operations/backup-and-restore.rst
rename to docs/how-to/operations/backup-and-restore.rst
diff --git a/how-to/operations/cluster-upgrades.rst b/docs/how-to/operations/cluster-upgrades.rst
similarity index 100%
rename from how-to/operations/cluster-upgrades.rst
rename to docs/how-to/operations/cluster-upgrades.rst
diff --git a/how-to/operations/deploy-pure-storage-backend.rst b/docs/how-to/operations/deploy-pure-storage-backend.rst
similarity index 100%
rename from how-to/operations/deploy-pure-storage-backend.rst
rename to docs/how-to/operations/deploy-pure-storage-backend.rst
diff --git a/how-to/operations/enable-a-gated-storage-backend.rst b/docs/how-to/operations/enable-a-gated-storage-backend.rst
similarity index 100%
rename from how-to/operations/enable-a-gated-storage-backend.rst
rename to docs/how-to/operations/enable-a-gated-storage-backend.rst
diff --git a/how-to/operations/index.rst b/docs/how-to/operations/index.rst
similarity index 100%
rename from how-to/operations/index.rst
rename to docs/how-to/operations/index.rst
diff --git a/how-to/operations/live-migration.rst b/docs/how-to/operations/live-migration.rst
similarity index 100%
rename from how-to/operations/live-migration.rst
rename to docs/how-to/operations/live-migration.rst
diff --git a/how-to/operations/maintenance-mode.rst b/docs/how-to/operations/maintenance-mode.rst
similarity index 100%
rename from how-to/operations/maintenance-mode.rst
rename to docs/how-to/operations/maintenance-mode.rst
diff --git a/how-to/operations/manage-experimental-features.rst b/docs/how-to/operations/manage-experimental-features.rst
similarity index 100%
rename from how-to/operations/manage-experimental-features.rst
rename to docs/how-to/operations/manage-experimental-features.rst
diff --git a/how-to/operations/removing-the-primary-node.rst b/docs/how-to/operations/removing-the-primary-node.rst
similarity index 100%
rename from how-to/operations/removing-the-primary-node.rst
rename to docs/how-to/operations/removing-the-primary-node.rst
diff --git a/how-to/operations/scaling-the-cluster-in.rst b/docs/how-to/operations/scaling-the-cluster-in.rst
similarity index 100%
rename from how-to/operations/scaling-the-cluster-in.rst
rename to docs/how-to/operations/scaling-the-cluster-in.rst
diff --git a/how-to/operations/scaling-the-cluster-out.rst b/docs/how-to/operations/scaling-the-cluster-out.rst
similarity index 100%
rename from how-to/operations/scaling-the-cluster-out.rst
rename to docs/how-to/operations/scaling-the-cluster-out.rst
diff --git a/how-to/troubleshooting/index.rst b/docs/how-to/troubleshooting/index.rst
similarity index 100%
rename from how-to/troubleshooting/index.rst
rename to docs/how-to/troubleshooting/index.rst
diff --git a/how-to/troubleshooting/inspecting-the-cluster.rst b/docs/how-to/troubleshooting/inspecting-the-cluster.rst
similarity index 100%
rename from how-to/troubleshooting/inspecting-the-cluster.rst
rename to docs/how-to/troubleshooting/inspecting-the-cluster.rst
diff --git a/index.rst b/docs/index.rst
similarity index 74%
rename from index.rst
rename to docs/index.rst
index 65035a1..552052e 100644
--- a/index.rst
+++ b/docs/index.rst
@@ -26,32 +26,41 @@ experience.
---------
-.. rubric:: :h2:`In this documentation`
+In this documentation
+---------------------
-.. grid:: 1 1 2 2
+.. grid:: 1 1 2 2
- .. grid-item:: :doc:`Tutorials `
+ .. grid-item-card:: Get started
+ :link: /tutorial/index
+ :link-type: doc
- **Start here**: a hands-on introduction to Canonical OpenStack for new users
+ A hands-on introduction to Canonical OpenStack for new users.
- .. grid-item:: :doc:`How-to guides `
+ .. grid-item-card:: How-to guides
+ :link: /how-to/index
+ :link-type: doc
- **Step-by-step guides** covering key operations and common tasks
+ **Step-by-step guides** - learn key operations and customization.
.. grid:: 1 1 2 2
- :reverse:
- .. grid-item:: :doc:`Reference `
+ .. grid-item-card:: Reference
+ :link: /reference/index
+ :link-type: doc
- **Technical information** - specifications, APIs, architecture
+ **Technical information** - review the specifications, architecture and more.
- .. grid-item:: :doc:`Explanation `
+ .. grid-item-card:: Explanation
+ :link: /explanation/index
+ :link-type: doc
- **Discussion and clarification** of key topics
+ **Concepts** - understand the key topics and design of Canonical OpenStack.
---------
-.. rubric:: :h2:`Community and commercial usage`
+Community and commercial usage
+------------------------------
Canonical OpenStack is based on Sunbeam - an open source project that warmly
welcomes a free-of-charge usage, constructive feedback, community discussions
diff --git a/docs/redirects.txt b/docs/redirects.txt
new file mode 100644
index 0000000..e4e5e8b
--- /dev/null
+++ b/docs/redirects.txt
@@ -0,0 +1,8 @@
+# Client-side page redirects. Each mapping takes the format:
+#
+# "" ""
+#
+# Paths must be represented as source files relative to the root of the docs directory.
+# The old path must be a file that doesn't exist in the source. The current path must be
+# a file that does exist in the source. Redirecting to a specific section is not supported.
+
diff --git a/reference/_include/manifest-file-reference.yaml b/docs/reference/_include/manifest-file-reference.yaml
similarity index 100%
rename from reference/_include/manifest-file-reference.yaml
rename to docs/reference/_include/manifest-file-reference.yaml
diff --git a/reference/api-auditing.rst b/docs/reference/api-auditing.rst
similarity index 100%
rename from reference/api-auditing.rst
rename to docs/reference/api-auditing.rst
diff --git a/reference/enterprise-requirements.rst b/docs/reference/enterprise-requirements.rst
similarity index 100%
rename from reference/enterprise-requirements.rst
rename to docs/reference/enterprise-requirements.rst
diff --git a/reference/example-physical-configuration.rst b/docs/reference/example-physical-configuration.rst
similarity index 100%
rename from reference/example-physical-configuration.rst
rename to docs/reference/example-physical-configuration.rst
diff --git a/reference/images/canonical-openstack-based-on-openstack-charms-release-cycle.png b/docs/reference/images/canonical-openstack-based-on-openstack-charms-release-cycle.png
similarity index 100%
rename from reference/images/canonical-openstack-based-on-openstack-charms-release-cycle.png
rename to docs/reference/images/canonical-openstack-based-on-openstack-charms-release-cycle.png
diff --git a/reference/images/canonical-openstack-based-on-sunbeam-release-cycle.png b/docs/reference/images/canonical-openstack-based-on-sunbeam-release-cycle.png
similarity index 100%
rename from reference/images/canonical-openstack-based-on-sunbeam-release-cycle.png
rename to docs/reference/images/canonical-openstack-based-on-sunbeam-release-cycle.png
diff --git a/reference/images/example-physical-configuration-layout.png b/docs/reference/images/example-physical-configuration-layout.png
similarity index 100%
rename from reference/images/example-physical-configuration-layout.png
rename to docs/reference/images/example-physical-configuration-layout.png
diff --git a/reference/images/openstack-packages-release-cycle.png b/docs/reference/images/openstack-packages-release-cycle.png
similarity index 100%
rename from reference/images/openstack-packages-release-cycle.png
rename to docs/reference/images/openstack-packages-release-cycle.png
diff --git a/reference/index.rst b/docs/reference/index.rst
similarity index 95%
rename from reference/index.rst
rename to docs/reference/index.rst
index bbd7618..437b6f9 100644
--- a/reference/index.rst
+++ b/docs/reference/index.rst
@@ -1,3 +1,5 @@
+.. _reference:
+
Reference
=========
diff --git a/reference/interactive-configuration-prompts.rst b/docs/reference/interactive-configuration-prompts.rst
similarity index 100%
rename from reference/interactive-configuration-prompts.rst
rename to docs/reference/interactive-configuration-prompts.rst
diff --git a/reference/known-limitations.rst b/docs/reference/known-limitations.rst
similarity index 100%
rename from reference/known-limitations.rst
rename to docs/reference/known-limitations.rst
diff --git a/reference/manifest-file-reference.rst b/docs/reference/manifest-file-reference.rst
similarity index 100%
rename from reference/manifest-file-reference.rst
rename to docs/reference/manifest-file-reference.rst
diff --git a/reference/network-debugging.rst b/docs/reference/network-debugging.rst
similarity index 98%
rename from reference/network-debugging.rst
rename to docs/reference/network-debugging.rst
index b65a625..30b0760 100644
--- a/reference/network-debugging.rst
+++ b/docs/reference/network-debugging.rst
@@ -19,15 +19,8 @@ Contents:
- `Resolving OpenFlow port
numbers <#heading--resolving-openflow-port-numbers>`__
-.. raw:: html
-
-
-
Accessing OVN databases
-
-.. raw:: html
-
-
+-----------------------
There are four containers in each :code:`ovn-chassis` pod:
@@ -66,15 +59,9 @@ Set up aliases:
bash
alias ovn-sbctl='ovn-sbctl --db=ssl:127.0.0.1:6642 -c /etc/ovn/cert_host -p /etc/ovn/key_host -C /etc/ovn/ovn-central.crt'
-.. raw:: html
-
-
Querying OVN databases
-
-.. raw:: html
-
-
+----------------------
Assuming that all the defaults for a single-node install were used and
``sunbeam launch`` was used to create a guest, then there will be a
@@ -233,15 +220,8 @@ The flows can also be listed:
ovn-sbctl lflow-list
...
-.. raw:: html
-
-
-
Capturing and tracing an ingress packet
-
-.. raw:: html
-
-
+---------------------------------------
The example below captures and then traces an ICMP echo request packet
destined for a guest. The first step is to capture an echo request
@@ -442,15 +422,8 @@ This time the trace command ends with:
44. ip,reg0=0x200/0x200,reg15=0x3,metadata=0x2, priority 2001, cookie 0x5eeee244
drop
-.. raw:: html
-
-
-
Resolving OpenFlow port numbers
-
-.. raw:: html
-
-
+-------------------------------
When looking at OpenFlow rules or tracing a packet, the ports are given
numbers. These are the OpenFlow port numbers. For example, to find what
diff --git a/reference/proxy-acl-access.rst b/docs/reference/proxy-acl-access.rst
similarity index 100%
rename from reference/proxy-acl-access.rst
rename to docs/reference/proxy-acl-access.rst
diff --git a/reference/release-cycle-and-supported-versions.rst b/docs/reference/release-cycle-and-supported-versions.rst
similarity index 100%
rename from reference/release-cycle-and-supported-versions.rst
rename to docs/reference/release-cycle-and-supported-versions.rst
diff --git a/reference/underlying-projects-and-charms.rst b/docs/reference/underlying-projects-and-charms.rst
similarity index 100%
rename from reference/underlying-projects-and-charms.rst
rename to docs/reference/underlying-projects-and-charms.rst
diff --git a/docs/requirements.txt b/docs/requirements.txt
new file mode 100644
index 0000000..c8c0535
--- /dev/null
+++ b/docs/requirements.txt
@@ -0,0 +1,34 @@
+# Canonical theme (still needed for Furo theme and custom templates)
+canonical-sphinx~=0.6
+
+# Extensions previously auto-loaded by canonical-sphinx
+myst-parser~=4.0 # v5.0.0 causes version conflicts
+sphinx-autobuild
+sphinx-design==0.6.1
+sphinx-notfound-page~=1.1
+sphinx-reredirects==0.1.6
+sphinx-tabs~=3.5
+sphinxcontrib-jquery~=4.1
+sphinxext-opengraph~=0.13
+sphinx-rerediraffe>=0.0.3, <1.0.0
+
+# Extra extensions, previously bundled as canonical-sphinx-extensions
+sphinx-config-options~=0.1
+sphinx-contributor-listing~=0.1
+sphinx-filtered-toctree~=0.1
+sphinx-related-links~=0.1
+sphinx-roles~=0.1
+sphinx-terminal~=1.0
+sphinx-ubuntu-images~=0.1
+sphinx-youtube-links~=0.1
+
+# Other dependencies
+packaging~=26.1
+sphinxcontrib-svg2pdfconverter[CairoSVG]~=2.1
+sphinx-last-updated-by-git~=0.3
+sphinx-sitemap~=2.9
+sphinx-llm~=0.4
+
+# Vale dependencies
+rst2html
+vale~=3.13
diff --git a/reuse/links.txt b/docs/reuse/links.txt
similarity index 100%
rename from reuse/links.txt
rename to docs/reuse/links.txt
diff --git a/tutorial/explore-full-potential-of-openstack.rst b/docs/tutorial/explore-full-potential-of-openstack.rst
similarity index 100%
rename from tutorial/explore-full-potential-of-openstack.rst
rename to docs/tutorial/explore-full-potential-of-openstack.rst
diff --git a/tutorial/get-familiar-with-openstack.rst b/docs/tutorial/get-familiar-with-openstack.rst
similarity index 99%
rename from tutorial/get-familiar-with-openstack.rst
rename to docs/tutorial/get-familiar-with-openstack.rst
index a34275b..8ac805a 100644
--- a/tutorial/get-familiar-with-openstack.rst
+++ b/docs/tutorial/get-familiar-with-openstack.rst
@@ -443,12 +443,10 @@ Once this command finishes, you should be able to see the following message on t
Please check minimum hardware requirements for support:
- https://microstack.run/docs/enterprise-reqs
+ https://canonical-openstack.readthedocs-hosted.com/en/latest/reference/enterprise-requirements
Ubuntu Pro enabled.
-.. TODO:: Update the link to the enterprise requirements page
-
Depending on the subscription type, your machine is now eligible for certain Ubuntu Pro services:
.. code-block :: text
diff --git a/tutorial/get-started-with-openstack.rst b/docs/tutorial/get-started-with-openstack.rst
similarity index 100%
rename from tutorial/get-started-with-openstack.rst
rename to docs/tutorial/get-started-with-openstack.rst
diff --git a/tutorial/images/explore-full-potential-of-openstack-01.png b/docs/tutorial/images/explore-full-potential-of-openstack-01.png
similarity index 100%
rename from tutorial/images/explore-full-potential-of-openstack-01.png
rename to docs/tutorial/images/explore-full-potential-of-openstack-01.png
diff --git a/tutorial/images/explore-full-potential-of-openstack-02.png b/docs/tutorial/images/explore-full-potential-of-openstack-02.png
similarity index 100%
rename from tutorial/images/explore-full-potential-of-openstack-02.png
rename to docs/tutorial/images/explore-full-potential-of-openstack-02.png
diff --git a/tutorial/images/get-familiar-with-openstack-01.png b/docs/tutorial/images/get-familiar-with-openstack-01.png
similarity index 100%
rename from tutorial/images/get-familiar-with-openstack-01.png
rename to docs/tutorial/images/get-familiar-with-openstack-01.png
diff --git a/tutorial/images/get-familiar-with-openstack-02.png b/docs/tutorial/images/get-familiar-with-openstack-02.png
similarity index 100%
rename from tutorial/images/get-familiar-with-openstack-02.png
rename to docs/tutorial/images/get-familiar-with-openstack-02.png
diff --git a/tutorial/images/get-familiar-with-openstack-03.png b/docs/tutorial/images/get-familiar-with-openstack-03.png
similarity index 100%
rename from tutorial/images/get-familiar-with-openstack-03.png
rename to docs/tutorial/images/get-familiar-with-openstack-03.png
diff --git a/tutorial/images/get-familiar-with-openstack-04.png b/docs/tutorial/images/get-familiar-with-openstack-04.png
similarity index 100%
rename from tutorial/images/get-familiar-with-openstack-04.png
rename to docs/tutorial/images/get-familiar-with-openstack-04.png
diff --git a/tutorial/images/get-familiar-with-openstack-05.png b/docs/tutorial/images/get-familiar-with-openstack-05.png
similarity index 100%
rename from tutorial/images/get-familiar-with-openstack-05.png
rename to docs/tutorial/images/get-familiar-with-openstack-05.png
diff --git a/tutorial/images/get-familiar-with-openstack-06.png b/docs/tutorial/images/get-familiar-with-openstack-06.png
similarity index 100%
rename from tutorial/images/get-familiar-with-openstack-06.png
rename to docs/tutorial/images/get-familiar-with-openstack-06.png
diff --git a/tutorial/images/get-familiar-with-openstack-07.png b/docs/tutorial/images/get-familiar-with-openstack-07.png
similarity index 100%
rename from tutorial/images/get-familiar-with-openstack-07.png
rename to docs/tutorial/images/get-familiar-with-openstack-07.png
diff --git a/tutorial/images/get-familiar-with-openstack-08.png b/docs/tutorial/images/get-familiar-with-openstack-08.png
similarity index 100%
rename from tutorial/images/get-familiar-with-openstack-08.png
rename to docs/tutorial/images/get-familiar-with-openstack-08.png
diff --git a/tutorial/images/get-familiar-with-openstack-09.png b/docs/tutorial/images/get-familiar-with-openstack-09.png
similarity index 100%
rename from tutorial/images/get-familiar-with-openstack-09.png
rename to docs/tutorial/images/get-familiar-with-openstack-09.png
diff --git a/tutorial/images/get-familiar-with-openstack-10.png b/docs/tutorial/images/get-familiar-with-openstack-10.png
similarity index 100%
rename from tutorial/images/get-familiar-with-openstack-10.png
rename to docs/tutorial/images/get-familiar-with-openstack-10.png
diff --git a/tutorial/images/get-familiar-with-openstack-11.png b/docs/tutorial/images/get-familiar-with-openstack-11.png
similarity index 100%
rename from tutorial/images/get-familiar-with-openstack-11.png
rename to docs/tutorial/images/get-familiar-with-openstack-11.png
diff --git a/tutorial/images/get-familiar-with-openstack-12.png b/docs/tutorial/images/get-familiar-with-openstack-12.png
similarity index 100%
rename from tutorial/images/get-familiar-with-openstack-12.png
rename to docs/tutorial/images/get-familiar-with-openstack-12.png
diff --git a/tutorial/images/get-familiar-with-openstack-13.png b/docs/tutorial/images/get-familiar-with-openstack-13.png
similarity index 100%
rename from tutorial/images/get-familiar-with-openstack-13.png
rename to docs/tutorial/images/get-familiar-with-openstack-13.png
diff --git a/tutorial/images/get-familiar-with-openstack-14.png b/docs/tutorial/images/get-familiar-with-openstack-14.png
similarity index 100%
rename from tutorial/images/get-familiar-with-openstack-14.png
rename to docs/tutorial/images/get-familiar-with-openstack-14.png
diff --git a/tutorial/images/get-familiar-with-openstack-15.png b/docs/tutorial/images/get-familiar-with-openstack-15.png
similarity index 100%
rename from tutorial/images/get-familiar-with-openstack-15.png
rename to docs/tutorial/images/get-familiar-with-openstack-15.png
diff --git a/tutorial/images/get-familiar-with-openstack-16.png b/docs/tutorial/images/get-familiar-with-openstack-16.png
similarity index 100%
rename from tutorial/images/get-familiar-with-openstack-16.png
rename to docs/tutorial/images/get-familiar-with-openstack-16.png
diff --git a/tutorial/images/get-familiar-with-openstack-17.png b/docs/tutorial/images/get-familiar-with-openstack-17.png
similarity index 100%
rename from tutorial/images/get-familiar-with-openstack-17.png
rename to docs/tutorial/images/get-familiar-with-openstack-17.png
diff --git a/tutorial/images/get-familiar-with-openstack-18.png b/docs/tutorial/images/get-familiar-with-openstack-18.png
similarity index 100%
rename from tutorial/images/get-familiar-with-openstack-18.png
rename to docs/tutorial/images/get-familiar-with-openstack-18.png
diff --git a/tutorial/images/get-familiar-with-openstack-19.png b/docs/tutorial/images/get-familiar-with-openstack-19.png
similarity index 100%
rename from tutorial/images/get-familiar-with-openstack-19.png
rename to docs/tutorial/images/get-familiar-with-openstack-19.png
diff --git a/tutorial/images/on-board-your-users-01.png b/docs/tutorial/images/on-board-your-users-01.png
similarity index 100%
rename from tutorial/images/on-board-your-users-01.png
rename to docs/tutorial/images/on-board-your-users-01.png
diff --git a/tutorial/images/on-board-your-users-02.png b/docs/tutorial/images/on-board-your-users-02.png
similarity index 100%
rename from tutorial/images/on-board-your-users-02.png
rename to docs/tutorial/images/on-board-your-users-02.png
diff --git a/tutorial/images/on-board-your-users-03.png b/docs/tutorial/images/on-board-your-users-03.png
similarity index 100%
rename from tutorial/images/on-board-your-users-03.png
rename to docs/tutorial/images/on-board-your-users-03.png
diff --git a/tutorial/images/on-board-your-users-04.png b/docs/tutorial/images/on-board-your-users-04.png
similarity index 100%
rename from tutorial/images/on-board-your-users-04.png
rename to docs/tutorial/images/on-board-your-users-04.png
diff --git a/tutorial/images/on-board-your-users-05.png b/docs/tutorial/images/on-board-your-users-05.png
similarity index 100%
rename from tutorial/images/on-board-your-users-05.png
rename to docs/tutorial/images/on-board-your-users-05.png
diff --git a/tutorial/images/on-board-your-users-06.png b/docs/tutorial/images/on-board-your-users-06.png
similarity index 100%
rename from tutorial/images/on-board-your-users-06.png
rename to docs/tutorial/images/on-board-your-users-06.png
diff --git a/tutorial/index.rst b/docs/tutorial/index.rst
similarity index 97%
rename from tutorial/index.rst
rename to docs/tutorial/index.rst
index bad3d92..9a1d198 100644
--- a/tutorial/index.rst
+++ b/docs/tutorial/index.rst
@@ -1,3 +1,5 @@
+.. _tutorial:
+
Tutorials
=========
diff --git a/tutorial/on-board-your-users.rst b/docs/tutorial/on-board-your-users.rst
similarity index 100%
rename from tutorial/on-board-your-users.rst
rename to docs/tutorial/on-board-your-users.rst
diff --git a/init.sh b/init.sh
deleted file mode 100755
index 976c75d..0000000
--- a/init.sh
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/bin/bash
-
-# Generate a unique directory name based on timestamp
-timestamp=$(date +%Y%m%d%H%M%S)
-temp_directory="temp-starter-pack-$timestamp"
-
-# Ask the user for the installation directory
-read -p "Enter the installation directory (e.g., '.' or 'docs'): " install_directory
-
-# Clone the starter pack repository to the temporary directory
-echo "Cloning the starter pack repository..."
-git clone --depth 1 https://github.com/canonical/sphinx-docs-starter-pack "$temp_directory"
-rm -rf "$temp_directory/.git"
-
-# Update file contents for the install directory
-echo "Removing internal workflow files..."
-rm -f $temp_directory/.github/workflows/sphinx-python-dependency-build-checks.yml
-echo "Updating working directory in workflow files..."
-sed -i "s|working-directory:\s*'\.'|working-directory: '$install_directory'|g" "$temp_directory/.github/workflows"/*
-echo "Updating .readthedocs.yaml configuration..."
-sed -i "s|-\s\s*python3\s\s*.sphinx/build_requirements\.py|- cd '$install_directory' \&\& python3 .sphinx/build_requirements.py|g" "$temp_directory/.readthedocs.yaml"
-sed -i "s|configuration:\s*conf\.py|configuration: $install_directory/conf.py|g" "$temp_directory/.readthedocs.yaml"
-sed -i "s|requirements:\s*\.sphinx/requirements\.txt|requirements: $install_directory/.sphinx/requirements.txt|g" "$temp_directory/.readthedocs.yaml"
-
-# Create the specified installation directory if it doesn't exist
-if [ ! -d "$install_directory" ]; then
- echo "Creating the installation directory: $install_directory"
- mkdir -p "$install_directory"
-fi
-
-# Copy the contents of the starter pack repository to the installation directory
-echo "Copying contents to the installation directory..."
-cp -R "$temp_directory"/* "$temp_directory"/.??* "$install_directory"
-
-# Move workflow files and configuration
-if [ "$install_directory" != "." ]; then
- echo "Moving workflow files and configuration..."
- if [ ! -d .github/workflows ]; then
- mkdir -p .github/workflows
- fi
- mv "$install_directory/.github/workflows"/* .github/workflows
- rmdir -p --ignore-fail-on-non-empty "$install_directory/.github/workflows"
- if [ ! -f .wokeignore ]; then
- ln -s "$install_directory/.wokeignore"
- else
- echo "ACTION REQUIRED: Found a .wokeignore file in the root directory. Include the contents from $install_directory/.wokeignore in this file!"
- fi
-fi
-
-# Clean up
-echo "Cleaning up..."
-rm -rf "$temp_directory"
-
-echo "Setup completed!"
diff --git a/make.bat b/make.bat
deleted file mode 100644
index 32bb245..0000000
--- a/make.bat
+++ /dev/null
@@ -1,35 +0,0 @@
-@ECHO OFF
-
-pushd %~dp0
-
-REM Command file for Sphinx documentation
-
-if "%SPHINXBUILD%" == "" (
- set SPHINXBUILD=sphinx-build
-)
-set SOURCEDIR=.
-set BUILDDIR=_build
-
-%SPHINXBUILD% >NUL 2>NUL
-if errorlevel 9009 (
- echo.
- echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
- echo.installed, then set the SPHINXBUILD environment variable to point
- echo.to the full path of the 'sphinx-build' executable. Alternatively you
- echo.may add the Sphinx directory to PATH.
- echo.
- echo.If you don't have Sphinx installed, grab it from
- echo.https://www.sphinx-doc.org/
- exit /b 1
-)
-
-if "%1" == "" goto help
-
-%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
-goto end
-
-:help
-%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
-
-:end
-popd