Added documentation

Change-Id: I4cb4c8c56642337899d0865c147b54df72b2c1fa
diff --git a/.gitignore b/.gitignore
index 172bf57..6ffdefe 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,4 @@
 .tox
+.vscode
+doc/build/*
+doc/source/roles/*/defaults
\ No newline at end of file
diff --git a/doc/requirements.txt b/doc/requirements.txt
new file mode 100644
index 0000000..5a1ebd7
--- /dev/null
+++ b/doc/requirements.txt
@@ -0,0 +1,5 @@
+sphinx
+sphinx_rtd_theme
+reno[sphinx]
+https://github.com/ypid/yaml4rst/archive/master.tar.gz
+https://github.com/debops/yaml2rst/archive/master.tar.gz
\ No newline at end of file
diff --git a/doc/source/_static/.gitkeep b/doc/source/_static/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/doc/source/_static/.gitkeep
diff --git a/doc/source/_templates/yaml4rst/defaults_header.j2 b/doc/source/_templates/yaml4rst/defaults_header.j2
new file mode 100644
index 0000000..b15a2e1
--- /dev/null
+++ b/doc/source/_templates/yaml4rst/defaults_header.j2
@@ -0,0 +1,11 @@
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
+
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
\ No newline at end of file
diff --git a/doc/source/conf.py b/doc/source/conf.py
new file mode 100644
index 0000000..ce1d48d
--- /dev/null
+++ b/doc/source/conf.py
@@ -0,0 +1,110 @@
+# Copyright (c) 2022 VEXXHOST, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+# -- Path setup --------------------------------------------------------------
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#
+# import os
+# import sys
+# sys.path.insert(0, os.path.abspath('.'))
+
+# -- yaml2rst ----------------------------------------------------------------
+import os
+import glob
+import yaml2rst
+from yaml4rst.reformatter import YamlRstReformatter
+import pathlib
+
+for defaults_file in glob.glob("../../roles/*/defaults/main.yml"):
+    role_name = defaults_file.split("/")[-3]
+
+    YamlRstReformatter._HEADER_END_LINES = {
+        'yaml4rst': [
+            '# Default variables',
+            '#    :local:',
+            '# .. contents:: Sections',
+            '# .. include:: includes/all.rst',
+            '# .. include:: includes/role.rst',
+            '# .. include:: ../../../includes/global.rst',
+            '# -----------------',
+        ],
+    }
+
+    reformatter = YamlRstReformatter(
+        preset='yaml4rst',
+        template_path=os.path.join(
+            os.path.abspath(os.path.dirname(__file__)),
+            '_templates',
+        ),
+        config={
+            'ansible_full_role_name': f"vexxhost.atmosphere.{role_name}",
+            'ansible_role_name': role_name,
+        }
+    )
+    reformatter.read_file(defaults_file)
+    reformatter.reformat()
+    reformatter.write_file(
+        output_file=defaults_file,
+        only_if_changed=True,
+    )
+
+    pathlib.Path(f"roles/{role_name}/defaults").mkdir(parents=True, exist_ok=True)
+
+    rst_content = yaml2rst.convert_file(
+        defaults_file,
+        f"roles/{role_name}/defaults/main.rst",
+        strip_regex=r'\s*(:?\[{3}|\]{3})\d?$',
+        yaml_strip_regex=r'^\s{66,67}#\s\]{3}\d?$',
+    )
+
+
+# -- Project information -----------------------------------------------------
+
+project = 'Atmosphere'
+copyright = '2022, VEXXHOST, Inc.'
+author = 'VEXXHOST, Inc.'
+
+
+# -- General configuration ---------------------------------------------------
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+    'reno.sphinxext',
+]
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+# This pattern also affects html_static_path and html_extra_path.
+exclude_patterns = []
+
+
+# -- Options for HTML output -------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+#
+html_theme = 'sphinx_rtd_theme'
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
diff --git a/doc/source/index.rst b/doc/source/index.rst
new file mode 100644
index 0000000..df83fbc
--- /dev/null
+++ b/doc/source/index.rst
@@ -0,0 +1,22 @@
+.. Atmosphere documentation master file, created by
+   sphinx-quickstart on Sun Mar 13 17:40:34 2022.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+Welcome to Atmosphere's documentation!
+======================================
+
+.. toctree::
+   :maxdepth: 1
+   :caption: Contents:
+
+   roles/index
+   releasenotes
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
diff --git a/doc/source/releasenotes.rst b/doc/source/releasenotes.rst
new file mode 100644
index 0000000..f182f00
--- /dev/null
+++ b/doc/source/releasenotes.rst
@@ -0,0 +1,4 @@
+Release Notes
+=============
+
+.. release-notes::
\ No newline at end of file
diff --git a/doc/source/roles/ceph_csi_rbd/index.rst b/doc/source/roles/ceph_csi_rbd/index.rst
new file mode 100644
index 0000000..3cf76af
--- /dev/null
+++ b/doc/source/roles/ceph_csi_rbd/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``ceph_csi_rbd``
+================
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/ceph_mon/index.rst b/doc/source/roles/ceph_mon/index.rst
new file mode 100644
index 0000000..3cdec24
--- /dev/null
+++ b/doc/source/roles/ceph_mon/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``ceph_mon``
+============
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/ceph_osd/index.rst b/doc/source/roles/ceph_osd/index.rst
new file mode 100644
index 0000000..3591ee1
--- /dev/null
+++ b/doc/source/roles/ceph_osd/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``ceph_osd``
+============
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/ceph_repository/index.rst b/doc/source/roles/ceph_repository/index.rst
new file mode 100644
index 0000000..090527f
--- /dev/null
+++ b/doc/source/roles/ceph_repository/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``ceph_repository``
+===================
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/cert_manager/index.rst b/doc/source/roles/cert_manager/index.rst
new file mode 100644
index 0000000..81a18b8
--- /dev/null
+++ b/doc/source/roles/cert_manager/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``cert_manager``
+================
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/containerd/index.rst b/doc/source/roles/containerd/index.rst
new file mode 100644
index 0000000..0ebf780
--- /dev/null
+++ b/doc/source/roles/containerd/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``containerd``
+==============
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/helm/index.rst b/doc/source/roles/helm/index.rst
new file mode 100644
index 0000000..6c8de12
--- /dev/null
+++ b/doc/source/roles/helm/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``helm``
+========
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/index.rst b/doc/source/roles/index.rst
new file mode 100644
index 0000000..a55c879
--- /dev/null
+++ b/doc/source/roles/index.rst
@@ -0,0 +1,11 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+Role reference
+==============
+
+.. toctree::
+   :maxdepth: 1
+   :glob:
+
+   */index
diff --git a/doc/source/roles/kubernetes/index.rst b/doc/source/roles/kubernetes/index.rst
new file mode 100644
index 0000000..a8b9bcc
--- /dev/null
+++ b/doc/source/roles/kubernetes/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``kubernetes``
+==============
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/openstack_cli/index.rst b/doc/source/roles/openstack_cli/index.rst
new file mode 100644
index 0000000..246af3b
--- /dev/null
+++ b/doc/source/roles/openstack_cli/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``openstack_cli``
+=================
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/openstack_helm_cinder/index.rst b/doc/source/roles/openstack_helm_cinder/index.rst
new file mode 100644
index 0000000..f9fb91c
--- /dev/null
+++ b/doc/source/roles/openstack_helm_cinder/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``openstack_helm_cinder``
+=========================
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/openstack_helm_endpoints/index.rst b/doc/source/roles/openstack_helm_endpoints/index.rst
new file mode 100644
index 0000000..aad51b7
--- /dev/null
+++ b/doc/source/roles/openstack_helm_endpoints/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``openstack_helm_endpoints``
+============================
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/openstack_helm_glance/index.rst b/doc/source/roles/openstack_helm_glance/index.rst
new file mode 100644
index 0000000..a9868c6
--- /dev/null
+++ b/doc/source/roles/openstack_helm_glance/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``openstack_helm_glance``
+=========================
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/openstack_helm_heat/index.rst b/doc/source/roles/openstack_helm_heat/index.rst
new file mode 100644
index 0000000..c77c442
--- /dev/null
+++ b/doc/source/roles/openstack_helm_heat/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``openstack_helm_heat``
+=======================
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/openstack_helm_horizon/index.rst b/doc/source/roles/openstack_helm_horizon/index.rst
new file mode 100644
index 0000000..c017ea4
--- /dev/null
+++ b/doc/source/roles/openstack_helm_horizon/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``openstack_helm_horizon``
+==========================
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/openstack_helm_infra_ceph_provisioners/index.rst b/doc/source/roles/openstack_helm_infra_ceph_provisioners/index.rst
new file mode 100644
index 0000000..83a0d64
--- /dev/null
+++ b/doc/source/roles/openstack_helm_infra_ceph_provisioners/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``openstack_helm_infra_ceph_provisioners``
+==========================================
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/openstack_helm_infra_libvirt/index.rst b/doc/source/roles/openstack_helm_infra_libvirt/index.rst
new file mode 100644
index 0000000..355ff12
--- /dev/null
+++ b/doc/source/roles/openstack_helm_infra_libvirt/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``openstack_helm_infra_libvirt``
+================================
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/openstack_helm_infra_memcached/index.rst b/doc/source/roles/openstack_helm_infra_memcached/index.rst
new file mode 100644
index 0000000..8e39b8e
--- /dev/null
+++ b/doc/source/roles/openstack_helm_infra_memcached/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``openstack_helm_infra_memcached``
+==================================
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/openstack_helm_infra_openvswitch/index.rst b/doc/source/roles/openstack_helm_infra_openvswitch/index.rst
new file mode 100644
index 0000000..6f7e857
--- /dev/null
+++ b/doc/source/roles/openstack_helm_infra_openvswitch/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``openstack_helm_infra_openvswitch``
+====================================
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/openstack_helm_infra_rabbitmq/index.rst b/doc/source/roles/openstack_helm_infra_rabbitmq/index.rst
new file mode 100644
index 0000000..4ab8e1f
--- /dev/null
+++ b/doc/source/roles/openstack_helm_infra_rabbitmq/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``openstack_helm_infra_rabbitmq``
+=================================
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/openstack_helm_ingress/index.rst b/doc/source/roles/openstack_helm_ingress/index.rst
new file mode 100644
index 0000000..b068625
--- /dev/null
+++ b/doc/source/roles/openstack_helm_ingress/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``openstack_helm_ingress``
+==========================
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/openstack_helm_keystone/index.rst b/doc/source/roles/openstack_helm_keystone/index.rst
new file mode 100644
index 0000000..bb37000
--- /dev/null
+++ b/doc/source/roles/openstack_helm_keystone/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``openstack_helm_keystone``
+===========================
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/openstack_helm_neutron/index.rst b/doc/source/roles/openstack_helm_neutron/index.rst
new file mode 100644
index 0000000..a84eff8
--- /dev/null
+++ b/doc/source/roles/openstack_helm_neutron/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``openstack_helm_neutron``
+==========================
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/openstack_helm_nova/index.rst b/doc/source/roles/openstack_helm_nova/index.rst
new file mode 100644
index 0000000..5fbfafb
--- /dev/null
+++ b/doc/source/roles/openstack_helm_nova/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``openstack_helm_nova``
+=======================
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/openstack_helm_placement/index.rst b/doc/source/roles/openstack_helm_placement/index.rst
new file mode 100644
index 0000000..f5f67e3
--- /dev/null
+++ b/doc/source/roles/openstack_helm_placement/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``openstack_helm_placement``
+============================
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/doc/source/roles/openstack_helm_senlin/index.rst b/doc/source/roles/openstack_helm_senlin/index.rst
new file mode 100644
index 0000000..982967e
--- /dev/null
+++ b/doc/source/roles/openstack_helm_senlin/index.rst
@@ -0,0 +1,10 @@
+.. Copyright (C) 2022 VEXXHOST, Inc.
+.. SPDX-License-Identifier: Apache-2.0
+
+``openstack_helm_senlin``
+=========================
+
+.. toctree::
+   :maxdepth: 2
+
+   defaults/main
\ No newline at end of file
diff --git a/releasenotes/notes/added-role-docs-e7203e2b3db04f9f.yaml b/releasenotes/notes/added-role-docs-e7203e2b3db04f9f.yaml
new file mode 100644
index 0000000..ecade5f
--- /dev/null
+++ b/releasenotes/notes/added-role-docs-e7203e2b3db04f9f.yaml
@@ -0,0 +1,3 @@
+---
+other:
+  - Added basic documentation infrastructure.
\ No newline at end of file
diff --git a/roles/ceph_csi_rbd/defaults/main.yml b/roles/ceph_csi_rbd/defaults/main.yml
index fc16f2d..025bca2 100644
--- a/roles/ceph_csi_rbd/defaults/main.yml
+++ b/roles/ceph_csi_rbd/defaults/main.yml
@@ -1,20 +1,43 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: ceph_csi_rbd_ceph_fsid [[[
+#
+# Filesystem ID for Ceph cluster
 ceph_csi_rbd_ceph_fsid: "{{ ceph_mon_fsid }}"
+
+                                                                   # ]]]
+# .. envvar:: ceph_csi_rbd_mons_group [[[
+#
+# Ansible group that contains all Ceph monitors
 ceph_csi_rbd_mons_group: ceph_mons
 
+                                                                   # ]]]
+# .. envvar:: ceph_csi_rbd_id [[[
+#
+# ID of the Ceph CSI RBD user
 ceph_csi_rbd_id: kube
+
+                                                                   # ]]]
+# .. envvar:: ceph_csi_rbd_user [[[
+#
+# Name of Ceph user to use for Ceph CSI RBD
 ceph_csi_rbd_user: "client.{{ ceph_csi_rbd_id }}"
+
+                                                                   # ]]]
+# .. envvar:: ceph_csi_rbd_pool [[[
+#
+# Name of Ceph pool to use for Ceph CSI RBD
 ceph_csi_rbd_pool: kube
+
+                                                                   # ]]]
diff --git a/roles/ceph_mon/defaults/main.yml b/roles/ceph_mon/defaults/main.yml
index d8f595b..f001f84 100644
--- a/roles/ceph_mon/defaults/main.yml
+++ b/roles/ceph_mon/defaults/main.yml
@@ -1,16 +1,25 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: ceph_mon_group [[[
+#
+# Name of Ansible group that contains all Ceph monitors
 ceph_mon_group: ceph_mons
+
+                                                                   # ]]]
+# .. envvar:: ceph_mon_cluster_network [[[
+#
+# Cluster (replication) network used by Ceph
 ceph_mon_cluster_network: "{{ ceph_mon_public_network }}"
+
+                                                                   # ]]]
diff --git a/roles/ceph_osd/defaults/main.yml b/roles/ceph_osd/defaults/main.yml
index 0c6f323..844bdee 100644
--- a/roles/ceph_osd/defaults/main.yml
+++ b/roles/ceph_osd/defaults/main.yml
@@ -1,15 +1,19 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: ceph_osd_mons_group [[[
+#
+# Name of Ansible group that contains all Ceph monitors
 ceph_osd_mons_group: ceph_mons
+
+                                                                   # ]]]
diff --git a/roles/ceph_repository/defaults/main.yml b/roles/ceph_repository/defaults/main.yml
index a898c6f..85b5d7b 100644
--- a/roles/ceph_repository/defaults/main.yml
+++ b/roles/ceph_repository/defaults/main.yml
@@ -1,17 +1,31 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: ceph_repository_apt_key [[[
+#
+# Ceph APT repository GPG key
 ceph_repository_apt_key: "https://download.ceph.com/keys/release.asc"
+
+                                                                   # ]]]
+# .. envvar:: ceph_repository_url [[[
+#
+# Ceph APT repository URL
 ceph_repository_url: https://download.ceph.com/debian-pacific/
+
+                                                                   # ]]]
+# .. envvar:: ceph_repository_version [[[
+#
+# Ceph version to pin package manager to
 ceph_repository_version: 16.2.7
+
+                                                                   # ]]]
diff --git a/roles/cert_manager/defaults/main.yml b/roles/cert_manager/defaults/main.yml
index 45415d9..508c527 100644
--- a/roles/cert_manager/defaults/main.yml
+++ b/roles/cert_manager/defaults/main.yml
@@ -1,19 +1,25 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: cert_manager_acme_server [[[
+#
+# ACME server URL
 cert_manager_acme_server: https://acme-v02.api.letsencrypt.org/directory
 
+                                                                   # ]]]
+# .. envvar:: cert_manager_issuer [[[
+#
+# Definition for the ``cert-manager`` issuer
 cert_manager_issuer:
   acme:
     email: mnaser@vexxhost.com
@@ -24,3 +30,5 @@
       - http01:
           ingress:
             class: openstack
+
+                                                                   # ]]]
diff --git a/roles/containerd/defaults/main.yml b/roles/containerd/defaults/main.yml
index 10c3662..2b742d1 100644
--- a/roles/containerd/defaults/main.yml
+++ b/roles/containerd/defaults/main.yml
@@ -1,15 +1,19 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: containerd_pause_image [[[
+#
+# Image to use for ``containerd`` pause container
 containerd_pause_image: k8s.gcr.io/pause:3.5
+
+                                                                   # ]]]
diff --git a/roles/helm/defaults/main.yml b/roles/helm/defaults/main.yml
index 61eac60..bd0af99 100644
--- a/roles/helm/defaults/main.yml
+++ b/roles/helm/defaults/main.yml
@@ -1,17 +1,31 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: helm_repository_apt_key [[[
+#
+# Helm APT repository GPG key
 helm_repository_apt_key: https://baltocdn.com/helm/signing.asc
+
+                                                                   # ]]]
+# .. envvar:: helm_repository_url [[[
+#
+# Helm APT repository URL
 helm_repository_url: https://baltocdn.com/helm/stable/debian/
+
+                                                                   # ]]]
+# .. envvar:: helm_version [[[
+#
+# Helm version to use
 helm_version: 3.8.0
+
+                                                                   # ]]]
diff --git a/roles/kubernetes/defaults/main.yml b/roles/kubernetes/defaults/main.yml
index 74f6c2c..7e0d154 100644
--- a/roles/kubernetes/defaults/main.yml
+++ b/roles/kubernetes/defaults/main.yml
@@ -1,23 +1,38 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: kubernetes_repo_url [[[
+#
+# Kubernetes repository URL
 kubernetes_repo_url: "{{ _kubernetes_upstream_apt_repository }}"
+
+                                                                   # ]]]
+# .. envvar:: kubernetes_version [[[
+#
+# Kubernetes version
 kubernetes_version: 1.22.7
 
+                                                                   # ]]]
+# .. envvar:: kubernetes_kernel_modules [[[
+#
+# List of kernel modules to be automatically loaded
 kubernetes_kernel_modules:
   - br_netfilter
 
+                                                                   # ]]]
+# .. envvar:: kubernetes_sysctls [[[
+#
+# List of ``sysctl`` parameters to set
 kubernetes_sysctls:
   - name: net.ipv4.ip_forward
     value: 1
@@ -32,4 +47,10 @@
   - name: net.ipv4.conf.all.rp_filter
     value: 0
 
+                                                                   # ]]]
+# .. envvar:: kubernetes_control_plane_group [[[
+#
+# Name of Ansible group containing all control-plane nodes
 kubernetes_control_plane_group: controllers
+
+                                                                   # ]]]
diff --git a/roles/openstack_cli/defaults/main.yml b/roles/openstack_cli/defaults/main.yml
index 8079a74..03d293c 100644
--- a/roles/openstack_cli/defaults/main.yml
+++ b/roles/openstack_cli/defaults/main.yml
@@ -1,16 +1,20 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: openstack_cli_packages [[[
+#
+# List of packages to install for OpenStack CLI
 openstack_cli_packages:
   - python3-openstackclient
+
+                                                                   # ]]]
diff --git a/roles/openstack_helm_cinder/defaults/main.yml b/roles/openstack_helm_cinder/defaults/main.yml
index 02e5a98..c4f55b5 100644
--- a/roles/openstack_helm_cinder/defaults/main.yml
+++ b/roles/openstack_helm_cinder/defaults/main.yml
@@ -1,23 +1,55 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: openstack_helm_cinder_chart_repo_name [[[
+#
+# Helm repository name for the chart.
 openstack_helm_cinder_chart_repo_name: openstack-helm
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_cinder_chart_repo_url [[[
+#
+# Helm repository URL for the chart.
 openstack_helm_cinder_chart_repo_url: https://tarballs.opendev.org/openstack/openstack-helm/
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_cinder_chart_name [[[
+#
+# Helm chart name (will also be used for release name)
 openstack_helm_cinder_chart_name: cinder
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_cinder_image_repository [[[
+#
+# Image repository location to be prefixed for all images
 openstack_helm_cinder_image_repository: "{{ atmosphere_image_repository | default('us-docker.pkg.dev/vexxhost-infra/openstack') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_cinder_image_tag [[[
+#
+# Image tag for container
 openstack_helm_cinder_image_tag: 18.1.1.dev29-1
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_cinder_heat_image_tag [[[
+#
+# Image tag for Heat to be used for jobs running via Helm hooks
 openstack_helm_cinder_heat_image_tag: wallaby
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_cinder_values [[[
+#
+# Overrides for Helm chart values
 openstack_helm_cinder_values: {}
+
+                                                                   # ]]]
diff --git a/roles/openstack_helm_endpoints/defaults/main.yml b/roles/openstack_helm_endpoints/defaults/main.yml
index 721dcc5..56050cb 100644
--- a/roles/openstack_helm_endpoints/defaults/main.yml
+++ b/roles/openstack_helm_endpoints/defaults/main.yml
@@ -1,109 +1,408 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
-# Base configuration
-openstack_helm_endpoints_region_name: "{{ undef(hint='You must specify an OpenStack region name') }}"
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+# .. envvar:: openstack_helm_endpoints_config [[[
+#
+# Additional overrides for the OpenStack Helm endpoints
 openstack_helm_endpoints_config: {}
 
-# RabbitMQ
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_region_name [[[
+#
+# Default OpenStack region name
+openstack_helm_endpoints_region_name: "{{ undef(hint='You must specify an OpenStack region name') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_rabbitmq_erlang_cookie [[[
+#
+# Erlang cookie for RabbitMQ
 openstack_helm_endpoints_rabbitmq_erlang_cookie: "{{ undef(hint='You must specify an RabbitMQ Erlang cookie') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_rabbitmq_admin_password [[[
+#
+# RabbitMQ administrator password
 openstack_helm_endpoints_rabbitmq_admin_password: "{{ undef(hint='You must specify a RabbitMQ admin password') }}"
 
-# Memcached
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_memcached_secret_key [[[
+#
+# Memcached secret key for ``oslo.cache``
 openstack_helm_endpoints_memcached_secret_key: "{{ undef(hint='You must specify a Memcached secret key') }}"
 
-# Keystone
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_keystone_api_host [[[
+#
+# API hostname for OpenStack Identity Service
 openstack_helm_endpoints_keystone_api_host: "{{ undef(hint='You must specify a Keystone API hostname') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_keystone_region_name [[[
+#
+# Region name for service
 openstack_helm_endpoints_keystone_region_name: "{{ openstack_helm_endpoints_region_name }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_keystone_admin_password [[[
+#
+# Keystone password for ``admin`` user
 openstack_helm_endpoints_keystone_admin_password: "{{ undef(hint='You must specify a Keystone administrator password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_keystone_mariadb_password [[[
+#
+# Database password for service
 openstack_helm_endpoints_keystone_mariadb_password: "{{ undef(hint='You must specify a Keystone MariaDB password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_keystone_rabbitmq_password [[[
+#
+# RabbitMQ password for service
 openstack_helm_endpoints_keystone_rabbitmq_password: "{{ undef(hint='You must specify a Keystone RabbitMQ password') }}"
 
-# Glance
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_glance_api_host [[[
+#
+# API hostname for OpenStack Image Service
 openstack_helm_endpoints_glance_api_host: "{{ undef(hint='You must specify a Glance API hostname') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_glance_region_name [[[
+#
+# Region name for service
 openstack_helm_endpoints_glance_region_name: "{{ openstack_helm_endpoints_region_name }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_glance_keystone_password [[[
+#
+# Keystone password for service
 openstack_helm_endpoints_glance_keystone_password: "{{ undef(hint='You must specify a Glance Keystone password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_glance_mariadb_password [[[
+#
+# Database password for service
 openstack_helm_endpoints_glance_mariadb_password: "{{ undef(hint='You must specify a Glance MariaDB password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_glance_rabbitmq_password [[[
+#
+# RabbitMQ password for service
 openstack_helm_endpoints_glance_rabbitmq_password: "{{ undef(hint='You must specify a Glance RabbitMQ password') }}"
 
-# Cinder
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_cinder_api_host [[[
+#
+# API hostname for OpenStack Block Storage Service
 openstack_helm_endpoints_cinder_api_host: "{{ undef(hint='You must specify a Cinder API hostname') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_cinder_region_name [[[
+#
+# Region name for service
 openstack_helm_endpoints_cinder_region_name: "{{ openstack_helm_endpoints_region_name }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_cinder_keystone_password [[[
+#
+# Keystone password for service
 openstack_helm_endpoints_cinder_keystone_password: "{{ undef(hint='You must specify a Cinder Keystone password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_cinder_mariadb_password [[[
+#
+# Database password for service
 openstack_helm_endpoints_cinder_mariadb_password: "{{ undef(hint='You must specify a Cinder MariaDB password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_cinder_rabbitmq_password [[[
+#
+# RabbitMQ password for service
 openstack_helm_endpoints_cinder_rabbitmq_password: "{{ undef(hint='You must specify a Cinder RabbitMQ password') }}"
 
-# Placement
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_placement_api_host [[[
+#
+# API hostname for OpenStack Placement Service
 openstack_helm_endpoints_placement_api_host: "{{ undef(hint='You must specify a Placement API hostname') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_placement_region_name [[[
+#
+# Region name for service
 openstack_helm_endpoints_placement_region_name: "{{ openstack_helm_endpoints_region_name }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_placement_keystone_password [[[
+#
+# Keystone password for service
 openstack_helm_endpoints_placement_keystone_password: "{{ undef(hint='You must specify a Placement Keystone password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_placement_mariadb_password [[[
+#
+# Database password for service
 openstack_helm_endpoints_placement_mariadb_password: "{{ undef(hint='You must specify a Placement MariaDB password') }}"
 
-# Neutron
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_neutron_api_host [[[
+#
+# API hostname for OpenStack Networking Service
 openstack_helm_endpoints_neutron_api_host: "{{ undef(hint='You must specify a Neutron API hostname') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_neutron_region_name [[[
+#
+# Region name for service
 openstack_helm_endpoints_neutron_region_name: "{{ openstack_helm_endpoints_region_name }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_neutron_keystone_password [[[
+#
+# Keystone password for service
 openstack_helm_endpoints_neutron_keystone_password: "{{ undef(hint='You must specify a Neutron Keystone password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_neutron_mariadb_password [[[
+#
+# Database password for service
 openstack_helm_endpoints_neutron_mariadb_password: "{{ undef(hint='You must specify a Neutron MariaDB password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_neutron_rabbitmq_password [[[
+#
+# RabbitMQ password for service
 openstack_helm_endpoints_neutron_rabbitmq_password: "{{ undef(hint='You must specify a Neutron RabbitMQ password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_neutron_metadata_secret [[[
+#
+# Shared secret for Nova metadata service
 openstack_helm_endpoints_neutron_metadata_secret: "{{ undef(hint='You must specify a Neutron metadata secret') }}"
 
-# Nova
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_nova_api_host [[[
+#
+# API hostname for OpenStack Compute Service
 openstack_helm_endpoints_nova_api_host: "{{ undef(hint='You must specify a Nova API hostname') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_nova_novnc_host [[[
+#
+# API hostname for OpenStack Compute Service (VNC)
 openstack_helm_endpoints_nova_novnc_host: "{{ undef(hint='You must specify a Nova NoVNC hostname') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_nova_region_name [[[
+#
+# Region name for service
 openstack_helm_endpoints_nova_region_name: "{{ openstack_helm_endpoints_region_name }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_nova_keystone_password [[[
+#
+# Keystone password for service
 openstack_helm_endpoints_nova_keystone_password: "{{ undef(hint='You must specify a Nova Keystone password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_nova_mariadb_password [[[
+#
+# Database password for service
 openstack_helm_endpoints_nova_mariadb_password: "{{ undef(hint='You must specify a Nova MariaDB password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_nova_rabbitmq_password [[[
+#
+# RabbitMQ password for service
 openstack_helm_endpoints_nova_rabbitmq_password: "{{ undef(hint='You must specify a Nova RabbitMQ password') }}"
 
-# Ironic
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_ironic_api_host [[[
+#
+# API hostname for OpenStack Bare Metal Service
 openstack_helm_endpoints_ironic_api_host: "{{ undef(hint='You must specify an Ironic API hostname') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_ironic_region_name [[[
+#
+# Region name for service
 openstack_helm_endpoints_ironic_region_name: "{{ openstack_helm_endpoints_region_name }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_ironic_keystone_password [[[
+#
+# Keystone password for service
 openstack_helm_endpoints_ironic_keystone_password: "{{ undef(hint='You must specify an Ironic Keystone password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_ironic_mariadb_password [[[
+#
+# Database password for service
 openstack_helm_endpoints_ironic_mariadb_password: "{{ undef(hint='You must specify an Ironic MariaDB password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_ironic_rabbitmq_password [[[
+#
+# RabbitMQ password for service
 openstack_helm_endpoints_ironic_rabbitmq_password: "{{ undef(hint='You must specify an Ironic RabbitMQ password') }}"
 
-# Designate
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_designate_api_host [[[
+#
+# API hostname for OpenStack DNS Service
 openstack_helm_endpoints_designate_api_host: "{{ undef(hint='You must specify a Designate API hostname') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_designate_region_name [[[
+#
+# Region name for service
 openstack_helm_endpoints_designate_region_name: "{{ openstack_helm_endpoints_region_name }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_designate_keystone_password [[[
+#
+# Keystone password for service
 openstack_helm_endpoints_designate_keystone_password: "{{ undef(hint='You must specify a Designate Keystone password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_designate_mariadb_password [[[
+#
+# Database password for service
 openstack_helm_endpoints_designate_mariadb_password: "{{ undef(hint='You must specify a Designate MariaDB password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_designate_rabbitmq_password [[[
+#
+# RabbitMQ password for service
 openstack_helm_endpoints_designate_rabbitmq_password: "{{ undef(hint='You must specify a Designate RabbitMQ password') }}"
 
-# Octavia
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_octavia_api_host [[[
+#
+# API hostname for OpenStack Load Balancer Service
 openstack_helm_endpoints_octavia_api_host: "{{ undef(hint='You must specify an Octavia API hostname') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_octavia_region_name [[[
+#
+# Region name for service
 openstack_helm_endpoints_octavia_region_name: "{{ openstack_helm_endpoints_region_name }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_octavia_keystone_password [[[
+#
+# Keystone password for service
 openstack_helm_endpoints_octavia_keystone_password: "{{ undef(hint='You must specify an Octavia Keystone password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_octavia_mariadb_password [[[
+#
+# Database password for service
 openstack_helm_endpoints_octavia_mariadb_password: "{{ undef(hint='You must specify an Octavia MariaDB password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_octavia_rabbitmq_password [[[
+#
+# RabbitMQ password for service
 openstack_helm_endpoints_octavia_rabbitmq_password: "{{ undef(hint='You must specify an Octavia RabbitMQ password') }}"
 
-# Senlin
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_senlin_api_host [[[
+#
+# API hostname for OpenStack Clustering Service
 openstack_helm_endpoints_senlin_api_host: "{{ undef(hint='You must specify a Senlin API hostname') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_senlin_region_name [[[
+#
+# Region name for service
 openstack_helm_endpoints_senlin_region_name: "{{ openstack_helm_endpoints_region_name }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_senlin_keystone_password [[[
+#
+# Keystone password for service
 openstack_helm_endpoints_senlin_keystone_password: "{{ undef(hint='You must specify a Senlin Keystone password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_senlin_mariadb_password [[[
+#
+# Database password for service
 openstack_helm_endpoints_senlin_mariadb_password: "{{ undef(hint='You must specify a Senlin MariaDB password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_senlin_rabbitmq_password [[[
+#
+# RabbitMQ password for service
 openstack_helm_endpoints_senlin_rabbitmq_password: "{{ undef(hint='You must specify a Senlin RabbitMQ password') }}"
 
-# Heat
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_heat_api_host [[[
+#
+# API hostname for OpenStack Orchestration Service
 openstack_helm_endpoints_heat_api_host: "{{ undef(hint='You must specify a Heat API hostname') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_heat_region_name [[[
+#
+# Region name for service
 openstack_helm_endpoints_heat_region_name: "{{ openstack_helm_endpoints_region_name }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_heat_keystone_password [[[
+#
+# Keystone password for service
 openstack_helm_endpoints_heat_keystone_password: "{{ undef(hint='You must specify a Heat Keystone password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_heat_trustee_keystone_password [[[
+#
+# Keystone password for service
 openstack_helm_endpoints_heat_trustee_keystone_password: "{{ undef(hint='You must specify a Heat trustee Keystone password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_heat_stack_user_keystone_password [[[
+#
+# Keystone password for service
 openstack_helm_endpoints_heat_stack_user_keystone_password: "{{ undef(hint='You must specify a Heat stack user Keystone password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_heat_mariadb_password [[[
+#
+# Database password for service
 openstack_helm_endpoints_heat_mariadb_password: "{{ undef(hint='You must specify a Heat MariaDB password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_heat_rabbitmq_password [[[
+#
+# RabbitMQ password for service
 openstack_helm_endpoints_heat_rabbitmq_password: "{{ undef(hint='You must specify a Heat RabbitMQ password') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_heat_cfn_api_host [[[
+#
+# API hostname for OpenStack Orchestration Service (CloudFormation)
 openstack_helm_endpoints_heat_cfn_api_host: "{{ undef(hint='You must specify a Heat CloudFormation API hostname') }}"
 
-# Horizon
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_horizon_api_host [[[
+#
+# API hostname for OpenStack Dashboard
 openstack_helm_endpoints_horizon_api_host: "{{ undef(hint='You must specify a Horizon API hostname') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_endpoints_horizon_mariadb_password [[[
+#
+# Database password for service
 openstack_helm_endpoints_horizon_mariadb_password: "{{ undef(hint='You must specify a Horizon MariaDB password') }}"
+
+                                                                   # ]]]
diff --git a/roles/openstack_helm_glance/defaults/main.yml b/roles/openstack_helm_glance/defaults/main.yml
index bfb6e83..41251bd 100644
--- a/roles/openstack_helm_glance/defaults/main.yml
+++ b/roles/openstack_helm_glance/defaults/main.yml
@@ -1,23 +1,55 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: openstack_helm_glance_chart_repo_name [[[
+#
+# Helm repository name for the chart.
 openstack_helm_glance_chart_repo_name: openstack-helm
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_glance_chart_repo_url [[[
+#
+# Helm repository URL for the chart.
 openstack_helm_glance_chart_repo_url: https://tarballs.opendev.org/openstack/openstack-helm/
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_glance_chart_name [[[
+#
+# Helm chart name (will also be used for release name)
 openstack_helm_glance_chart_name: glance
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_glance_image_repository [[[
+#
+# Image repository location to be prefixed for all images
 openstack_helm_glance_image_repository: "{{ atmosphere_image_repository | default('us-docker.pkg.dev/vexxhost-infra/openstack') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_glance_image_tag [[[
+#
+# Image tag for container
 openstack_helm_glance_image_tag: 22.1.1.dev2-1
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_glance_heat_image_tag [[[
+#
+# Image tag for Heat to be used for jobs running via Helm hooks
 openstack_helm_glance_heat_image_tag: wallaby
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_glance_values [[[
+#
+# Overrides for Helm chart values
 openstack_helm_glance_values: {}
+
+                                                                   # ]]]
diff --git a/roles/openstack_helm_heat/defaults/main.yml b/roles/openstack_helm_heat/defaults/main.yml
index 3ca6123..8ec2bab 100644
--- a/roles/openstack_helm_heat/defaults/main.yml
+++ b/roles/openstack_helm_heat/defaults/main.yml
@@ -1,27 +1,67 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: openstack_helm_heat_chart_repo_name [[[
+#
+# Helm repository name for the chart.
 openstack_helm_heat_chart_repo_name: openstack-helm
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_heat_chart_repo_url [[[
+#
+# Helm repository URL for the chart.
 openstack_helm_heat_chart_repo_url: https://tarballs.opendev.org/openstack/openstack-helm/
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_heat_chart_name [[[
+#
+# Helm chart name (will also be used for release name)
 openstack_helm_heat_chart_name: heat
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_heat_image_repository [[[
+#
+# Image repository location to be prefixed for all images
 openstack_helm_heat_image_repository: "{{ atmosphere_image_repository | default('us-docker.pkg.dev/vexxhost-infra/openstack') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_heat_image_tag [[[
+#
+# Image tag for container
 openstack_helm_heat_image_tag: 16.0.1.dev16
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_heat_auth_encryption_key [[[
+#
+# Unique value to use for encrypting Heat secrets
 openstack_helm_heat_auth_encryption_key: "{{ undef(hint='You must specifiy an encryption key for Heat.') }}"
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_heat_diff [[[
+#
+# Disable a diff of the release values and ask for manual confirmation
 openstack_helm_heat_diff: false
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_heat_migrate_from_mariadb [[[
+#
+# Execute a migration from legacy MariaDB to Percona XtraDB cluster
 openstack_helm_heat_migrate_from_mariadb: false
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_heat_values [[[
+#
+# Overrides for Helm chart values
 openstack_helm_heat_values: {}
+
+                                                                   # ]]]
diff --git a/roles/openstack_helm_horizon/defaults/main.yml b/roles/openstack_helm_horizon/defaults/main.yml
index ba6c691..65e5af6 100644
--- a/roles/openstack_helm_horizon/defaults/main.yml
+++ b/roles/openstack_helm_horizon/defaults/main.yml
@@ -1,23 +1,55 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: openstack_helm_horizon_chart_repo_name [[[
+#
+# Helm repository name for the chart.
 openstack_helm_horizon_chart_repo_name: openstack-helm
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_horizon_chart_repo_url [[[
+#
+# Helm repository URL for the chart.
 openstack_helm_horizon_chart_repo_url: https://tarballs.opendev.org/openstack/openstack-helm/
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_horizon_chart_name [[[
+#
+# Helm chart name (will also be used for release name)
 openstack_helm_horizon_chart_name: horizon
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_horizon_image_repository [[[
+#
+# Image repository location to be prefixed for all images
 openstack_helm_horizon_image_repository: "{{ atmosphere_image_repository | default('us-docker.pkg.dev/vexxhost-infra/openstack') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_horizon_image_tag [[[
+#
+# Image tag for container
 openstack_helm_horizon_image_tag: 19.2.1.dev13
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_horizon_heat_image_tag [[[
+#
+# Image tag for Heat to be used for jobs running via Helm hooks
 openstack_helm_horizon_heat_image_tag: wallaby
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_horizon_values [[[
+#
+# Overrides for Helm chart values
 openstack_helm_horizon_values: {}
+
+                                                                   # ]]]
diff --git a/roles/openstack_helm_infra_ceph_provisioners/defaults/main.yml b/roles/openstack_helm_infra_ceph_provisioners/defaults/main.yml
index f450a53..b4f8d8a 100644
--- a/roles/openstack_helm_infra_ceph_provisioners/defaults/main.yml
+++ b/roles/openstack_helm_infra_ceph_provisioners/defaults/main.yml
@@ -1,23 +1,55 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: openstack_helm_infra_ceph_provisioners_chart_repo_name [[[
+#
+# Helm repository name for the chart.
 openstack_helm_infra_ceph_provisioners_chart_repo_name: openstack-helm-infra
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_ceph_provisioners_chart_repo_url [[[
+#
+# Helm repository URL for the chart.
 openstack_helm_infra_ceph_provisioners_chart_repo_url: https://tarballs.opendev.org/openstack/openstack-helm-infra/
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_ceph_provisioners_chart_name [[[
+#
+# Helm chart name (will also be used for release name)
 openstack_helm_infra_ceph_provisioners_chart_name: ceph-provisioners
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_ceph_provisioners_ceph_monitors [[[
+#
+# IP address list of Ceph monitors
 openstack_helm_infra_ceph_provisioners_ceph_monitors: "{{ _ceph_csi_rbd_helm_info.status['values']['csiConfig'][0]['monitors'] }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_ceph_provisioners_ceph_fsid [[[
+#
+# Filesystem ID for Ceph cluster
 openstack_helm_infra_ceph_provisioners_ceph_fsid: "{{ _ceph_csi_rbd_helm_info.status['values']['csiConfig'][0]['clusterID'] }}"
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_ceph_provisioners_ceph_public_network [[[
+#
+# Public network used by Ceph
 openstack_helm_infra_ceph_provisioners_ceph_public_network: "{{ ceph_mon_public_network }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_ceph_provisioners_ceph_cluster_network [[[
+#
+# Cluster (replication) network used by Ceph
 openstack_helm_infra_ceph_provisioners_ceph_cluster_network: "{{ openstack_helm_infra_ceph_provisioners_ceph_public_network }}"
+
+                                                                   # ]]]
diff --git a/roles/openstack_helm_infra_libvirt/defaults/main.yml b/roles/openstack_helm_infra_libvirt/defaults/main.yml
index c2c4511..1dc7b6b 100644
--- a/roles/openstack_helm_infra_libvirt/defaults/main.yml
+++ b/roles/openstack_helm_infra_libvirt/defaults/main.yml
@@ -1,22 +1,49 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: openstack_helm_infra_libvirt_chart_repo_name [[[
+#
+# Helm repository name for the chart.
 openstack_helm_infra_libvirt_chart_repo_name: openstack-helm-infra
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_libvirt_chart_repo_url [[[
+#
+# Helm repository URL for the chart.
 openstack_helm_infra_libvirt_chart_repo_url: https://tarballs.opendev.org/openstack/openstack-helm-infra/
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_libvirt_chart_name [[[
+#
+# Helm chart name (will also be used for release name)
 openstack_helm_infra_libvirt_chart_name: libvirt
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_libvirt_image_repository [[[
+#
+# Image repository location to be prefixed for all images
 openstack_helm_infra_libvirt_image_repository: "{{ atmosphere_image_repository | default('us-docker.pkg.dev/vexxhost-infra/openstack') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_libvirt_image_tag [[[
+#
+# Image tag for container
 openstack_helm_infra_libvirt_image_tag: wallaby
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_libvirt_values [[[
+#
+# Overrides for Helm chart values
 openstack_helm_infra_libvirt_values: {}
+
+                                                                   # ]]]
diff --git a/roles/openstack_helm_infra_memcached/defaults/main.yml b/roles/openstack_helm_infra_memcached/defaults/main.yml
index 23a09da..cee6841 100644
--- a/roles/openstack_helm_infra_memcached/defaults/main.yml
+++ b/roles/openstack_helm_infra_memcached/defaults/main.yml
@@ -1,20 +1,43 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: openstack_helm_infra_memcached_chart_repo_name [[[
+#
+# Helm repository name for the chart.
 openstack_helm_infra_memcached_chart_repo_name: openstack-helm-infra
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_memcached_chart_repo_url [[[
+#
+# Helm repository URL for the chart.
 openstack_helm_infra_memcached_chart_repo_url: https://tarballs.opendev.org/openstack/openstack-helm-infra/
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_memcached_chart_name [[[
+#
+# Helm chart name (will also be used for release name)
 openstack_helm_infra_memcached_chart_name: memcached
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_memcached_diff [[[
+#
+# Disable a diff of the release values and ask for manual confirmation
 openstack_helm_infra_memcached_diff: false
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_memcached_values [[[
+#
+# Overrides for Helm chart values
 openstack_helm_infra_memcached_values: {}
+
+                                                                   # ]]]
diff --git a/roles/openstack_helm_infra_openvswitch/defaults/main.yml b/roles/openstack_helm_infra_openvswitch/defaults/main.yml
index c8c6a93..eb1f4e5 100644
--- a/roles/openstack_helm_infra_openvswitch/defaults/main.yml
+++ b/roles/openstack_helm_infra_openvswitch/defaults/main.yml
@@ -1,22 +1,49 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: openstack_helm_infra_openvswitch_chart_repo_name [[[
+#
+# Helm repository name for the chart.
 openstack_helm_infra_openvswitch_chart_repo_name: openstack-helm-infra
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_openvswitch_chart_repo_url [[[
+#
+# Helm repository URL for the chart.
 openstack_helm_infra_openvswitch_chart_repo_url: https://tarballs.opendev.org/openstack/openstack-helm-infra/
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_openvswitch_chart_name [[[
+#
+# Helm chart name (will also be used for release name)
 openstack_helm_infra_openvswitch_chart_name: openvswitch
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_openvswitch_image_repository [[[
+#
+# Image repository location to be prefixed for all images
 openstack_helm_infra_openvswitch_image_repository: "{{ atmosphere_image_repository | default('us-docker.pkg.dev/vexxhost-infra/openstack') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_openvswitch_image_tag [[[
+#
+# Image tag for container
 openstack_helm_infra_openvswitch_image_tag: wallaby
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_openvswitch_values [[[
+#
+# Overrides for Helm chart values
 openstack_helm_infra_openvswitch_values: {}
+
+                                                                   # ]]]
diff --git a/roles/openstack_helm_infra_rabbitmq/defaults/main.yml b/roles/openstack_helm_infra_rabbitmq/defaults/main.yml
index b248ba7..355e1be 100644
--- a/roles/openstack_helm_infra_rabbitmq/defaults/main.yml
+++ b/roles/openstack_helm_infra_rabbitmq/defaults/main.yml
@@ -1,19 +1,37 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: openstack_helm_infra_rabbitmq_chart_repo_name [[[
+#
+# Helm repository name for the chart.
 openstack_helm_infra_rabbitmq_chart_repo_name: openstack-helm-infra
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_rabbitmq_chart_repo_url [[[
+#
+# Helm repository URL for the chart.
 openstack_helm_infra_rabbitmq_chart_repo_url: https://tarballs.opendev.org/openstack/openstack-helm-infra/
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_rabbitmq_chart_name [[[
+#
+# Helm chart name (will also be used for release name)
 openstack_helm_infra_rabbitmq_chart_name: rabbitmq
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_infra_rabbitmq_image_repository [[[
+#
+# Image repository location to be prefixed for all images
 openstack_helm_infra_rabbitmq_image_repository: "{{ atmosphere_image_repository | default('us-docker.pkg.dev/vexxhost-infra/openstack') }}"
+
+                                                                   # ]]]
diff --git a/roles/openstack_helm_ingress/defaults/main.yml b/roles/openstack_helm_ingress/defaults/main.yml
index 9ec5bd9..1ae03fe 100644
--- a/roles/openstack_helm_ingress/defaults/main.yml
+++ b/roles/openstack_helm_ingress/defaults/main.yml
@@ -1,16 +1,25 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: openstack_helm_ingress_annotations [[[
+#
+# Additional annotations to include for Kubernetes ingress
 openstack_helm_ingress_annotations: {}
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_ingress_paths [[[
+#
+# Additional paths to include for Kubernetes ingress
 openstack_helm_ingress_paths: []
+
+                                                                   # ]]]
diff --git a/roles/openstack_helm_keystone/defaults/main.yml b/roles/openstack_helm_keystone/defaults/main.yml
index 7f2358b..5e9dc46 100644
--- a/roles/openstack_helm_keystone/defaults/main.yml
+++ b/roles/openstack_helm_keystone/defaults/main.yml
@@ -1,23 +1,55 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: openstack_helm_keystone_chart_repo_name [[[
+#
+# Helm repository name for the chart.
 openstack_helm_keystone_chart_repo_name: openstack-helm
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_keystone_chart_repo_url [[[
+#
+# Helm repository URL for the chart.
 openstack_helm_keystone_chart_repo_url: https://tarballs.opendev.org/openstack/openstack-helm/
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_keystone_chart_name [[[
+#
+# Helm chart name (will also be used for release name)
 openstack_helm_keystone_chart_name: keystone
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_keystone_image_repository [[[
+#
+# Image repository location to be prefixed for all images
 openstack_helm_keystone_image_repository: "{{ atmosphere_image_repository | default('us-docker.pkg.dev/vexxhost-infra/openstack') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_keystone_image_tag [[[
+#
+# Image tag for container
 openstack_helm_keystone_image_tag: 19.0.1.dev11
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_keystone_heat_image_tag [[[
+#
+# Image tag for Heat to be used for jobs running via Helm hooks
 openstack_helm_keystone_heat_image_tag: wallaby
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_keystone_values [[[
+#
+# Overrides for Helm chart values
 openstack_helm_keystone_values: {}
+
+                                                                   # ]]]
diff --git a/roles/openstack_helm_neutron/defaults/main.yml b/roles/openstack_helm_neutron/defaults/main.yml
index e81f9f8..8f50663 100644
--- a/roles/openstack_helm_neutron/defaults/main.yml
+++ b/roles/openstack_helm_neutron/defaults/main.yml
@@ -1,25 +1,61 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: openstack_helm_neutron_chart_repo_name [[[
+#
+# Helm repository name for the chart.
 openstack_helm_neutron_chart_repo_name: openstack-helm
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_neutron_chart_repo_url [[[
+#
+# Helm repository URL for the chart.
 openstack_helm_neutron_chart_repo_url: https://tarballs.opendev.org/openstack/openstack-helm/
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_neutron_chart_name [[[
+#
+# Helm chart name (will also be used for release name)
 openstack_helm_neutron_chart_name: neutron
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_neutron_image_repository [[[
+#
+# Image repository location to be prefixed for all images
 openstack_helm_neutron_image_repository: "{{ atmosphere_image_repository | default('us-docker.pkg.dev/vexxhost-infra/openstack') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_neutron_image_tag [[[
+#
+# Image tag for container
 openstack_helm_neutron_image_tag: 18.2.1.dev7-6
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_neutron_heat_image_tag [[[
+#
+# Image tag for Heat to be used for jobs running via Helm hooks
 openstack_helm_neutron_heat_image_tag: wallaby
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_neutron_values [[[
+#
+# Overrides for Helm chart values
 openstack_helm_neutron_values: {}
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_neutron_networks [[[
+#
+# List of networks to provision inside OpenStack
 openstack_helm_neutron_networks: []
+
+                                                                   # ]]]
diff --git a/roles/openstack_helm_nova/defaults/main.yml b/roles/openstack_helm_nova/defaults/main.yml
index 75ad162..f956af9 100644
--- a/roles/openstack_helm_nova/defaults/main.yml
+++ b/roles/openstack_helm_nova/defaults/main.yml
@@ -1,29 +1,79 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: openstack_helm_nova_chart_repo_name [[[
+#
+# Helm repository name for the chart.
 openstack_helm_nova_chart_repo_name: openstack-helm
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_nova_chart_repo_url [[[
+#
+# Helm repository URL for the chart.
 openstack_helm_nova_chart_repo_url: https://tarballs.opendev.org/openstack/openstack-helm/
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_nova_chart_name [[[
+#
+# Helm chart name (will also be used for release name)
 openstack_helm_nova_chart_name: nova
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_nova_image_repository [[[
+#
+# Image repository location to be prefixed for all images
 openstack_helm_nova_image_repository: "{{ atmosphere_image_repository | default('us-docker.pkg.dev/vexxhost-infra/openstack') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_nova_image_tag [[[
+#
+# Image tag for container
 openstack_helm_nova_image_tag: 23.1.1.dev11
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_nova_ssh_image_tag [[[
+#
+# Image tag for SSH container
 openstack_helm_nova_ssh_image_tag: wallaby
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_nova_heat_image_tag [[[
+#
+# Image tag for Heat to be used for jobs running via Helm hooks
 openstack_helm_nova_heat_image_tag: wallaby
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_nova_diff [[[
+#
+# Disable a diff of the release values and ask for manual confirmation
 openstack_helm_nova_diff: false
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_nova_migrate_from_mariadb [[[
+#
+# Execute a migration from legacy MariaDB to Percona XtraDB cluster
 openstack_helm_nova_migrate_from_mariadb: false
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_nova_values [[[
+#
+# Overrides for Helm chart values
 openstack_helm_nova_values: {}
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_nova_flavors [[[
+#
+# List of flavors to provision inside Nova
 openstack_helm_nova_flavors: []
+
+                                                                   # ]]]
diff --git a/roles/openstack_helm_placement/defaults/main.yml b/roles/openstack_helm_placement/defaults/main.yml
index 113b39b..e7c219c 100644
--- a/roles/openstack_helm_placement/defaults/main.yml
+++ b/roles/openstack_helm_placement/defaults/main.yml
@@ -1,23 +1,55 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: openstack_helm_placement_chart_repo_name [[[
+#
+# Helm repository name for the chart.
 openstack_helm_placement_chart_repo_name: openstack-helm
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_placement_chart_repo_url [[[
+#
+# Helm repository URL for the chart.
 openstack_helm_placement_chart_repo_url: https://tarballs.opendev.org/openstack/openstack-helm/
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_placement_chart_name [[[
+#
+# Helm chart name (will also be used for release name)
 openstack_helm_placement_chart_name: placement
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_placement_image_repository [[[
+#
+# Image repository location to be prefixed for all images
 openstack_helm_placement_image_repository: "{{ atmosphere_image_repository | default('us-docker.pkg.dev/vexxhost-infra/openstack') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_placement_image_tag [[[
+#
+# Image tag for container
 openstack_helm_placement_image_tag: 5.0.1
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_placement_heat_image_tag [[[
+#
+# Image tag for Heat to be used for jobs running via Helm hooks
 openstack_helm_placement_heat_image_tag: wallaby
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_placement_values [[[
+#
+# Overrides for Helm chart values
 openstack_helm_placement_values: {}
+
+                                                                   # ]]]
diff --git a/roles/openstack_helm_senlin/defaults/main.yml b/roles/openstack_helm_senlin/defaults/main.yml
index b9b1822..0ab813b 100644
--- a/roles/openstack_helm_senlin/defaults/main.yml
+++ b/roles/openstack_helm_senlin/defaults/main.yml
@@ -1,26 +1,67 @@
-# Copyright (c) 2022 VEXXHOST, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
+---
+# .. vim: foldmarker=[[[,]]]:foldmethod=marker
 
+# .. Copyright (C) 2022 VEXXHOST, Inc.
+# .. SPDX-License-Identifier: Apache-2.0
+
+# Default variables
+# =================
+
+# .. contents:: Sections
+#    :local:
+
+
+# .. envvar:: openstack_helm_senlin_chart_repo_name [[[
+#
+# Helm repository name for the chart.
 openstack_helm_senlin_chart_repo_name: openstack-helm
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_senlin_chart_repo_url [[[
+#
+# Helm repository URL for the chart.
 openstack_helm_senlin_chart_repo_url: https://tarballs.opendev.org/openstack/openstack-helm/
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_senlin_chart_name [[[
+#
+# Helm chart name (will also be used for release name)
 openstack_helm_senlin_chart_name: senlin
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_senlin_image_repository [[[
+#
+# Image repository location to be prefixed for all images
 openstack_helm_senlin_image_repository: "{{ atmosphere_image_repository | default('us-docker.pkg.dev/vexxhost-infra/openstack') }}"
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_senlin_image_tag [[[
+#
+# Image tag for container
 openstack_helm_senlin_image_tag: 11.0.1.dev3
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_senlin_heat_image_tag [[[
+#
+# Image tag for Heat to be used for jobs running via Helm hooks
 openstack_helm_senlin_heat_image_tag: wallaby
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_senlin_diff [[[
+#
+# Disable a diff of the release values and ask for manual confirmation
 openstack_helm_senlin_diff: false
+
+                                                                   # ]]]
+# .. envvar:: openstack_helm_senlin_migrate_from_mariadb [[[
+#
+# Execute a migration from legacy MariaDB to Percona XtraDB cluster
 openstack_helm_senlin_migrate_from_mariadb: false
 
+                                                                   # ]]]
+# .. envvar:: openstack_helm_senlin_values [[[
+#
+# Overrides for Helm chart values
 openstack_helm_senlin_values: {}
+
+                                                                   # ]]]
diff --git a/tox.ini b/tox.ini
index 75f7b62..1f4cb11 100644
--- a/tox.ini
+++ b/tox.ini
@@ -30,3 +30,9 @@
     -rmolecule/default/requirements.txt
 commands =
     molecule {posargs}
+
+[testenv:docs]
+deps =
+    -r{toxinidir}/doc/requirements.txt
+commands =
+    sphinx-build -E -W -d doc/build/doctrees -b html doc/source/ doc/build/html
\ No newline at end of file
diff --git a/zuul.d/project.yaml b/zuul.d/project.yaml
index c154370..860720c 100644
--- a/zuul.d/project.yaml
+++ b/zuul.d/project.yaml
@@ -16,6 +16,14 @@
     check:
       jobs:
         - ansible-collection-atmosphere-tox-molecule-default
+        - opendev-tox-docs
     gate:
       jobs:
         - ansible-collection-atmosphere-tox-molecule-default
+        - opendev-tox-docs
+    promote:
+      jobs:
+        - opendev-promote-docs
+    release:
+      jobs:
+        - opendev-publish-tox-docs
\ No newline at end of file