Skip to content
Snippets Groups Projects
Commit 72d4d646 authored by Doug Szumski's avatar Doug Szumski Committed by Pierre Riteau
Browse files

Support custom Kolla group_vars

In Kayobe hosts which are part of a Nova cell can be managed via the
existing controller and compute groups. However, since Nova Cells are
configured via group vars in Kolla Ansible we need some way of setting
these. We could pass vars through to Kolla Ansible host vars using
`kolla_overcloud_inventory_pass_through_host_vars` but the list of
variables which may be set on a per cell basis is large and undefined.

This change allows the user to directly specify Kolla Ansible group vars
as part of Kayobe config, allowing the deployment of Nova Cells by
Kayobe to be largely unchanged from the procedure documented in Kolla
Ansible.

Change-Id: I2695034d36936fcc77a4828c67f9552155781dd6
Story: 2004291
Task: 37804
parent f6a93bbc
No related branches found
No related tags found
No related merge requests found
......@@ -290,6 +290,7 @@
kolla_external_fqdn_cert: "{{ kolla_config_path }}/certificates/haproxy.pem"
kolla_internal_fqdn_cert: "{{ kolla_config_path }}/certificates/haproxy-internal.pem"
kolla_ansible_passwords_path: "{{ kayobe_config_path }}/kolla/passwords.yml"
kolla_overcloud_group_vars_path: "{{ kayobe_config_path }}/kolla/inventory/group_vars"
# NOTE: This differs from the default SELinux mode in kolla ansible,
# which is permissive. The justification for using this mode is twofold:
# 1. it avoids filling up the audit log
......
......@@ -54,6 +54,9 @@ kolla_ansible_become: true
# Full custom seed inventory contents.
kolla_seed_inventory_custom:
# Directory containing custom Kolla-Ansible group vars.
kolla_overcloud_group_vars_path:
# List of names of host variables to pass through from kayobe hosts to
# the kolla-ansible seed host, if set. See also
# kolla_seed_inventory_pass_through_host_vars_map.
......
......@@ -38,6 +38,7 @@
- "{{ kolla_config_path }}"
- "{{ kolla_seed_inventory_path }}/host_vars"
- "{{ kolla_overcloud_inventory_path }}/host_vars"
- "{{ kolla_overcloud_inventory_path }}/group_vars"
- "{{ kolla_node_custom_config_path }}"
- name: Ensure the Kolla global configuration file exists
......@@ -72,6 +73,17 @@
dest: "{{ kolla_overcloud_inventory_path }}/hosts"
mode: 0640
- name: Look for custom Kolla overcloud group vars
stat:
path: "{{ kolla_overcloud_group_vars_path }}"
register: kolla_ansible_custom_overcloud_group_vars
- name: Copy over custom Kolla overcloud group vars
copy:
src: "{{ kolla_overcloud_group_vars_path }}"
dest: "{{ kolla_overcloud_inventory_path }}/"
when: kolla_ansible_custom_overcloud_group_vars.stat.exists
- name: Ensure the Kolla overcloud host vars files exist
template:
src: host-vars.j2
......
......@@ -19,6 +19,9 @@
kolla_ansible_venv: "{{ temp_path }}/venv"
kolla_config_path: "{{ temp_path }}/etc/kolla"
kolla_node_custom_config_path: "{{ temp_path }}/etc/kolla/config"
# Purposely does not exist to simulate the case when no group vars
# are provided
kolla_overcloud_group_vars_path: "{{ temp_path }}/etc/kayobe/kolla/inventory/group_vars"
kolla_ansible_passwords_path: "{{ temp_path }}/passwords.yml"
# Required config.
kolla_base_distro: "fake-distro"
......@@ -131,6 +134,7 @@
- seed/host_vars
- overcloud
- overcloud/host_vars
- overcloud/group_vars
register: inventory_stat
- name: Validate inventory files
......@@ -142,6 +146,18 @@
Inventory file {{ item.item }} was not found.
with_items: "{{ inventory_stat.results }}"
- name: Look for custom overcloud group vars
find:
paths: "{{ temp_path ~ '/etc/kolla/inventory/group_vars' }}"
register: kolla_ansible_overcloud_group_vars
- name: Check that no overcloud group vars are set
assert:
that:
- kolla_ansible_overcloud_group_vars.matched == 0
msg: >
Overcloud group vars were found when they should not be set.
- name: Validate passwords.yml contents
assert:
that: item in passwords_yml
......
......@@ -49,6 +49,25 @@
state: directory
register: tempfile_result
- name: Create directory for custom overcloud foo group vars
file:
path: "{{ tempfile_result.path ~ '/etc/kayobe/kolla/inventory/group_vars/foo_group' }}"
state: directory
- name: Create custom overcloud foo group vars
copy:
dest: "{{ tempfile_result.path ~ '/etc/kayobe/kolla/inventory/group_vars/foo_group/all' }}"
content: |
---
foo_port: "1234"
- name: Create custom overcloud bar group vars
copy:
dest: "{{ tempfile_result.path ~ '/etc/kayobe/kolla/inventory/group_vars/bar_group' }}"
content: |
---
bar_port: "4567"
- block:
- name: Test the kolla-ansible role with default values
include_role:
......@@ -61,6 +80,7 @@
kolla_ansible_venv: "{{ temp_path }}/venv"
kolla_ansible_vault_password: "fake-password"
kolla_config_path: "{{ temp_path }}/etc/kolla"
kolla_overcloud_group_vars_path: "{{ temp_path }}/etc/kayobe/kolla/inventory/group_vars"
kolla_node_custom_config_path: "{{ temp_path }}/etc/kolla/config"
kolla_ansible_passwords_path: "{{ temp_path }}/passwords.yml"
# Config.
......@@ -496,6 +516,46 @@
neutron_external_interface: "eth4,eth5"
neutron_bridge_name: "br0,br1"
- name: Check whether inventory group vars files exist
stat:
path: "{{ temp_path ~ '/etc/kolla/inventory/overcloud/group_vars/' ~ item }}"
with_items:
- foo_group/all
- bar_group
register: group_vars_stat
- name: Validate inventory group vars files
assert:
that:
- item.stat.exists
- item.stat.size > 0
msg: >
Inventory file {{ item.item }} was not found.
with_items: "{{ group_vars_stat.results }}"
- name: Read inventory group vars files
slurp:
src: "{{ item.stat.path }}"
with_items: "{{ group_vars_stat.results }}"
register: group_vars_slurp
- name: Validate inventory group vars file contents
assert:
that:
- group_vars_content is defined
- group_vars_content == item.1
with_together:
- "{{ group_vars_slurp.results }}"
- "{{ expected_contents }}"
vars:
group_vars_content: "{{ item.0.content | b64decode }}"
expected_contents:
- |
---
foo_port: "1234"
- |
---
bar_port: "4567"
always:
- name: Ensure the temporary directory is removed
file:
......
......@@ -299,6 +299,34 @@ to enable debug logging for Nova services:
---
nova_logging_debug: true
Custom Group Variables
----------------------
Group variables can be used to set configuration for all hosts in a group. They
can be set in Kolla Ansible by placing files in
``${KAYOBE_CONFIG_PATH}/kolla/inventory/group_vars/*``. Since this
directory is copied directly into the Kolla Ansible inventory, Kolla
Ansible group names should be used. It should be noted that
``extra-vars`` and ``host_vars`` take precedence over ``group_vars``. For
more information on variable precedence see the Ansible `documentation
<http://docs.ansible.com/ansible/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable>`_.
Example: configure a Nova cell
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
In Kolla Ansible, :kolla-ansible-doc:`Nova cells are configured
<reference/compute/nova-cells-guide>` via group variables. For example, to
configure ``cell0001`` the following file could be created:
.. code-block:: yaml
:caption: ``$KAYOBE_CONFIG_PATH/kolla/inventory/group_vars/cell0001/all``
---
nova_cell_name: cell0001
nova_cell_novncproxy_group: cell0001-vnc
nova_cell_conductor_group: cell0001-control
nova_cell_compute_group: cell0001-compute
Passwords
---------
......
---
features:
- |
Adds support for passing through group vars to Kolla Ansible.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment