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
This commit is contained in:
Doug Szumski 2019-12-13 09:49:33 +00:00 committed by Pierre Riteau
parent f6a93bbc21
commit 72d4d64609
7 changed files with 124 additions and 0 deletions

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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:

View 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
---------

View File

@ -0,0 +1,4 @@
---
features:
- |
Adds support for passing through group vars to Kolla Ansible.