diff --git a/doc/source/conf.py b/doc/source/conf.py
index 2d889a63a7..f4c66427d2 100644
--- a/doc/source/conf.py
+++ b/doc/source/conf.py
@@ -22,10 +22,22 @@
# All configuration values have a default; values that are commented out
# serve to show the default.
+import imp
import os
import pbr.version
import sys
+# Create dynamic table file.
+CONF_PATH = os.path.dirname(os.path.realpath(__file__))
+SCENARIO_TABLE = 'contributor/scenario-table-gen.html'
+TABLE_FILE = os.path.join(CONF_PATH, SCENARIO_TABLE)
+stg = imp.load_source(
+ 'scenario_table_gen',
+ os.path.join(CONF_PATH, 'scenario_table_gen.py')
+)
+with open(TABLE_FILE, 'a+') as f:
+ f.write(stg.main())
+
# 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.
diff --git a/doc/source/contributor/quickstart-aio.rst b/doc/source/contributor/quickstart-aio.rst
index 3ad7c03965..753db08299 100644
--- a/doc/source/contributor/quickstart-aio.rst
+++ b/doc/source/contributor/quickstart-aio.rst
@@ -183,6 +183,12 @@ execute the following:
# export SCENARIO='ceph'
# scripts/bootstrap-aio.sh
+**Tested Scenarios**
+
+.. raw:: html
+ :file: scenario-table-gen.html
+
+
To add OpenStack Services over and above the `bootstrap-aio default services`_
for the applicable scenario, copy the ``conf.d`` files with the ``.aio`` file
extension into ``/etc/openstack_deploy`` and rename then to ``.yml`` files.
diff --git a/doc/source/contributor/scenario-table-gen.html b/doc/source/contributor/scenario-table-gen.html
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/doc/source/scenario_table_gen.py b/doc/source/scenario_table_gen.py
new file mode 100644
index 0000000000..5bc743ea5e
--- /dev/null
+++ b/doc/source/scenario_table_gen.py
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+# Copyright 2017, Rackspace US, 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.
+
+import os
+
+import yaml
+
+
+SCRIPT_PATH = os.path.dirname(os.path.realpath(__file__))
+SCENARIO_FILE = '../../tests/vars/bootstrap-aio-vars.yml'
+HTML_TABLE = """
"""
+
+
+def main():
+ scenario_file = os.path.join(SCRIPT_PATH, SCENARIO_FILE)
+ with open(scenario_file) as f:
+ _meta_data = yaml.safe_load(f.read())
+
+ scenario_meta_data = _meta_data['confd_overrides']
+ scenarios = list(sorted(scenario_meta_data.keys()))
+ scenarios.insert(0, '')
+ HTML_TABLE = ''
+ HTML_TABLE += ''
+ for s in scenarios:
+ HTML_TABLE += '{} | '.format(s)
+ HTML_TABLE += '
'
+
+ config_items = set()
+ for items in scenario_meta_data.values():
+ for item in items:
+ config_items.add(item['name'].split('.')[0])
+ config_items = list(config_items)
+
+ for item in config_items:
+ HTML_TABLE += ''
+ HTML_TABLE += '{} | '.format(item.lower())
+ for scenario in scenarios:
+ try:
+ scenario_meta = scenario_meta_data[scenario]
+ except KeyError:
+ pass
+ else:
+ for _items in scenario_meta:
+ if item == _items['name'].split('.')[0]:
+ HTML_TABLE += 'X | '
+ break
+ else:
+ HTML_TABLE += ' | '
+ HTML_TABLE += '
'
+ HTML_TABLE += ''
+ HTML_TABLE += '
'
+
+ return HTML_TABLE
+
+
+if __name__ == '__main__':
+ print(main())
diff --git a/tests/bootstrap-aio.yml b/tests/bootstrap-aio.yml
index ef435e29df..882e918989 100644
--- a/tests/bootstrap-aio.yml
+++ b/tests/bootstrap-aio.yml
@@ -23,52 +23,8 @@
- role: "bootstrap-host"
vars:
ansible_python_interpreter: "/usr/bin/python"
- openstack_confd_entries: "{{ confd_overrides[bootstrap_host_scenario] }}"
bootstrap_host_scenario: "{{ lookup('env','SCENARIO') | default('aio', true) }}"
- confd_overrides:
- aio:
- - name: cinder.yml.aio
- - name: designate.yml.aio
- - name: glance.yml.aio
- - name: heat.yml.aio
- - name: horizon.yml.aio
- - name: keystone.yml.aio
- - name: neutron.yml.aio
- - name: nova.yml.aio
- - name: swift.yml.aio
- ceph:
- - name: ceph.yml.aio
- - name: cinder.yml.aio
- - name: glance.yml.aio
- - name: heat.yml.aio
- - name: horizon.yml.aio
- - name: keystone.yml.aio
- - name: neutron.yml.aio
- - name: nova.yml.aio
- translations:
- - name: cinder.yml.aio
- - name: designate.yml.aio
- - name: glance.yml.aio
- - name: heat.yml.aio
- - name: horizon.yml.aio
- - name: keystone.yml.aio
- - name: neutron.yml.aio
- - name: nova.yml.aio
- - name: swift.yml.aio
- - name: sahara.yml.aio
- - name: magnum.yml.aio
- - name: octavia.yml.aio
- - name: trove.yml.aio
- octavia:
- - name: glance.yml.aio
- - name: keystone.yml.aio
- - name: neutron.yml.aio
- - name: nova.yml.aio
- - name: octavia.yml.aio
- tacker:
- - name: keystone.yml.aio
- - name: heat.yml.aio
- - name: tacker.yml.aio
+ openstack_confd_entries: "{{ confd_overrides[bootstrap_host_scenario] }}"
pip_install_upper_constraints_proto: "{{ ansible_python_version | version_compare('2.7.9', '>=') | ternary('https','http') }}"
sftp_subsystem:
'apt': 'sftp /usr/lib/openssh/sftp-server'
@@ -117,4 +73,5 @@
GSSAPICleanupCredentials: no
vars_files:
- "{{ playbook_dir }}/../playbooks/defaults/repo_packages/openstack_services.yml"
+ - vars/bootstrap-aio-vars.yml
environment: "{{ deployment_environment_variables | default({}) }}"
diff --git a/tests/vars/bootstrap-aio-vars.yml b/tests/vars/bootstrap-aio-vars.yml
new file mode 100644
index 0000000000..5e5784797f
--- /dev/null
+++ b/tests/vars/bootstrap-aio-vars.yml
@@ -0,0 +1,59 @@
+---
+# Copyright 2017, Rackspace US, 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.
+
+confd_overrides:
+ aio:
+ - name: cinder.yml.aio
+ - name: designate.yml.aio
+ - name: glance.yml.aio
+ - name: heat.yml.aio
+ - name: horizon.yml.aio
+ - name: keystone.yml.aio
+ - name: neutron.yml.aio
+ - name: nova.yml.aio
+ - name: swift.yml.aio
+ ceph:
+ - name: ceph.yml.aio
+ - name: cinder.yml.aio
+ - name: glance.yml.aio
+ - name: heat.yml.aio
+ - name: horizon.yml.aio
+ - name: keystone.yml.aio
+ - name: neutron.yml.aio
+ - name: nova.yml.aio
+ translations:
+ - name: cinder.yml.aio
+ - name: designate.yml.aio
+ - name: glance.yml.aio
+ - name: heat.yml.aio
+ - name: horizon.yml.aio
+ - name: keystone.yml.aio
+ - name: neutron.yml.aio
+ - name: nova.yml.aio
+ - name: swift.yml.aio
+ - name: sahara.yml.aio
+ - name: magnum.yml.aio
+ - name: octavia.yml.aio
+ - name: trove.yml.aio
+ octavia:
+ - name: glance.yml.aio
+ - name: keystone.yml.aio
+ - name: neutron.yml.aio
+ - name: nova.yml.aio
+ - name: octavia.yml.aio
+ tacker:
+ - name: keystone.yml.aio
+ - name: heat.yml.aio
+ - name: tacker.yml.aio