Use ansible_facts to reference facts
By default, Ansible injects a variable for every fact, prefixed with ansible_. This can result in a large number of variables for each host, which at scale can incur a performance penalty. Ansible provides a configuration option [0] that can be set to False to prevent this injection of facts. In this case, facts should be referenced via ansible_facts.<fact>. This change updates all references to Ansible facts within Tenks from using individual fact variables to using the items in the ansible_facts dictionary. This allows users to disable fact variable injection in their Ansible configuration, which may provide some performance improvement. This change disables fact variable injection in the ansible configuration used in CI, to catch any attempts to use the injected variables. [0] https://docs.ansible.com/ansible/latest/reference_appendices/config.html#inject-facts-as-vars Change-Id: I4831769909c341c72bb178daf8df3309773a56ad Co-Authored-By: Radosław Piliszek <radoslaw.piliszek@gmail.com>
This commit is contained in:
parent
d25067dd1a
commit
9111328e8a
@ -2,5 +2,6 @@ skip_list:
|
|||||||
- '106' # Role name {} does not match ``^[a-z][a-z0-9_]+$`` pattern'
|
- '106' # Role name {} does not match ``^[a-z][a-z0-9_]+$`` pattern'
|
||||||
|
|
||||||
warn_list:
|
warn_list:
|
||||||
- experimental
|
|
||||||
- no-changed-when
|
- no-changed-when
|
||||||
|
- command-instead-of-shell # Use shell only when shell functionality is required
|
||||||
|
- experimental # all rules tagged as experimental
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
---
|
---
|
||||||
# Path to virtualenv used to install Python requirements. If a virtualenv does
|
# Path to virtualenv used to install Python requirements. If a virtualenv does
|
||||||
# not exist at this location, one will be created.
|
# not exist at this location, one will be created.
|
||||||
virtualenv_path: "{{ '/'.join([ansible_env['HOME'], 'tenks-venv']) }}"
|
virtualenv_path: "{{ '/'.join([ansible_facts.env['HOME'], 'tenks-venv']) }}"
|
||||||
|
|
||||||
# The URL of the upper constraints file to pass to pip when installing Python
|
# The URL of the upper constraints file to pass to pip when installing Python
|
||||||
# packages.
|
# packages.
|
||||||
python_upper_constraints_url: >-
|
python_upper_constraints_url: >-
|
||||||
https://releases.openstack.org/constraints/upper/{% if ansible_python.version.major == 2 %}train{% else %}master{% endif %}
|
https://releases.openstack.org/constraints/upper/{% if ansible_facts.python.version.major == 2 %}train{% else %}master{% endif %}
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
physnet_mappings: {}
|
physnet_mappings: {}
|
||||||
|
|
||||||
system_requirements:
|
system_requirements:
|
||||||
- "python{% if ansible_python.version.major == 3 %}3{% endif %}-virtualenv"
|
- "python{% if ansible_facts.python.version.major == 3 %}3{% endif %}-virtualenv"
|
||||||
|
|
||||||
# Tenks bridge type. Options are "openvswitch", "linuxbridge". Default is
|
# Tenks bridge type. Options are "openvswitch", "linuxbridge". Default is
|
||||||
# "openvswitch". Note that this relates to bridges created by Tenks, not the
|
# "openvswitch". Note that this relates to bridges created by Tenks, not the
|
||||||
|
@ -5,8 +5,8 @@ libvirt_pool_type: dir
|
|||||||
# Capacity is irrelevant for directory-based pools.
|
# Capacity is irrelevant for directory-based pools.
|
||||||
libvirt_pool_capacity:
|
libvirt_pool_capacity:
|
||||||
libvirt_pool_mode: 755
|
libvirt_pool_mode: 755
|
||||||
libvirt_pool_owner: "{{ ansible_user_id }}"
|
libvirt_pool_owner: "{{ ansible_facts.user_id }}"
|
||||||
libvirt_pool_group: "{{ ansible_user_id }}"
|
libvirt_pool_group: "{{ ansible_facts.user_id }}"
|
||||||
|
|
||||||
# By default, allow QEMU without hardware virtualisation since this is a
|
# By default, allow QEMU without hardware virtualisation since this is a
|
||||||
# development tool.
|
# development tool.
|
||||||
|
@ -53,8 +53,8 @@
|
|||||||
# NOTE(mgoddard): On CentOS 8 if SELinux is enabled, install
|
# NOTE(mgoddard): On CentOS 8 if SELinux is enabled, install
|
||||||
# virtualbmc to the system rather than a virtualenv. SELinux
|
# virtualbmc to the system rather than a virtualenv. SELinux
|
||||||
# prevents systemd from accessing files in users' home directories.
|
# prevents systemd from accessing files in users' home directories.
|
||||||
selinux_enabled: "{{ ansible_selinux.status | default('disabled') == 'enabled' }}"
|
selinux_enabled: "{{ ansible_facts.selinux.status | default('disabled') == 'enabled' }}"
|
||||||
is_centos8: "{{ ansible_os_family == 'RedHat' and ansible_distribution_major_version | int == 8 }}"
|
is_centos8: "{{ ansible_facts.os_family == 'RedHat' and ansible_facts.distribution_major_version | int == 8 }}"
|
||||||
vbmcd_virtualenv_path: "{{ '' if is_centos8 and selinux_enabled else virtualenv_path }}"
|
vbmcd_virtualenv_path: "{{ '' if is_centos8 and selinux_enabled else virtualenv_path }}"
|
||||||
vbmcd_python_upper_constraints_url: >-
|
vbmcd_python_upper_constraints_url: >-
|
||||||
{{ python_upper_constraints_url }}
|
{{ python_upper_constraints_url }}
|
||||||
|
@ -3,9 +3,9 @@
|
|||||||
include_vars: "{{ item }}"
|
include_vars: "{{ item }}"
|
||||||
with_first_found:
|
with_first_found:
|
||||||
- files:
|
- files:
|
||||||
- "{{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml"
|
- "{{ ansible_facts.distribution }}-{{ ansible_facts.distribution_major_version }}.yml"
|
||||||
- "{{ ansible_distribution }}.yml"
|
- "{{ ansible_facts.distribution }}.yml"
|
||||||
- "{{ ansible_os_family }}.yml"
|
- "{{ ansible_facts.os_family }}.yml"
|
||||||
skip: true
|
skip: true
|
||||||
tags: vars
|
tags: vars
|
||||||
|
|
||||||
|
@ -48,8 +48,8 @@
|
|||||||
# NOTE(mgoddard): On CentOS 8 if SELinux is enabled, install virtualbmc
|
# NOTE(mgoddard): On CentOS 8 if SELinux is enabled, install virtualbmc
|
||||||
# to the system rather than a virtualenv. SELinux prevents systemd from
|
# to the system rather than a virtualenv. SELinux prevents systemd from
|
||||||
# accessing files in users' home directories.
|
# accessing files in users' home directories.
|
||||||
selinux_enabled: "{{ ansible_selinux.status | default('disabled') == 'enabled' }}"
|
selinux_enabled: "{{ ansible_facts.selinux.status | default('disabled') == 'enabled' }}"
|
||||||
is_centos8: "{{ ansible_os_family == 'RedHat' and ansible_distribution_major_version | int == 8 }}"
|
is_centos8: "{{ ansible_facts.os_family == 'RedHat' and ansible_facts.distribution_major_version | int == 8 }}"
|
||||||
vbmc_virtualenv_path: "{{ '' if is_centos8 and selinux_enabled else virtualenv_path }}"
|
vbmc_virtualenv_path: "{{ '' if is_centos8 and selinux_enabled else virtualenv_path }}"
|
||||||
vbmc_log_directory: "{{ log_directory }}"
|
vbmc_log_directory: "{{ log_directory }}"
|
||||||
vbmc_state: "{{ domain.get('state', 'present') }}"
|
vbmc_state: "{{ domain.get('state', 'present') }}"
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
include_vars: "{{ item }}"
|
include_vars: "{{ item }}"
|
||||||
with_first_found:
|
with_first_found:
|
||||||
- files:
|
- files:
|
||||||
- "{{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml"
|
- "{{ ansible_facts.distribution }}-{{ ansible_facts.distribution_major_version }}.yml"
|
||||||
- "{{ ansible_distribution }}.yml"
|
- "{{ ansible_facts.distribution }}.yml"
|
||||||
- "{{ ansible_os_family }}.yml"
|
- "{{ ansible_facts.os_family }}.yml"
|
||||||
skip: true
|
skip: true
|
||||||
tags: vars
|
tags: vars
|
||||||
|
|
||||||
@ -15,7 +15,7 @@
|
|||||||
msg: >
|
msg: >
|
||||||
The interface {{ source_interface }} specified for the physical network
|
The interface {{ source_interface }} specified for the physical network
|
||||||
{{ network_name }} does not exist.
|
{{ network_name }} does not exist.
|
||||||
when: source_interface not in ansible_interfaces
|
when: source_interface not in ansible_facts.interfaces
|
||||||
|
|
||||||
### Firstly, some fact gathering.
|
### Firstly, some fact gathering.
|
||||||
# Start off by assuming the source interface is direct, unless proven
|
# Start off by assuming the source interface is direct, unless proven
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
- name: Set Ironic port attributes
|
- name: Set Ironic port attributes
|
||||||
vars:
|
vars:
|
||||||
port_attributes: "{{ port_attributes_output.stdout | from_json }}"
|
port_attributes: "{{ port_attributes_output.stdout | from_json }}"
|
||||||
switch_id: "{{ hostvars[ironic_hypervisor]['ansible_' + bridge].macaddress }}"
|
switch_id: "{{ hostvars[ironic_hypervisor].ansible_facts[bridge].macaddress }}"
|
||||||
switch_info: "{{ bridge }}"
|
switch_info: "{{ bridge }}"
|
||||||
port_id: >-
|
port_id: >-
|
||||||
{{ source_interface
|
{{ source_interface
|
||||||
|
@ -3,9 +3,9 @@
|
|||||||
include_vars: "{{ item }}"
|
include_vars: "{{ item }}"
|
||||||
with_first_found:
|
with_first_found:
|
||||||
- files:
|
- files:
|
||||||
- "{{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml"
|
- "{{ ansible_facts.distribution }}-{{ ansible_facts.distribution_major_version }}.yml"
|
||||||
- "{{ ansible_distribution }}.yml"
|
- "{{ ansible_facts.distribution }}.yml"
|
||||||
- "{{ ansible_os_family }}.yml"
|
- "{{ ansible_facts.os_family }}.yml"
|
||||||
skip: true
|
skip: true
|
||||||
tags: vars
|
tags: vars
|
||||||
|
|
||||||
@ -29,7 +29,7 @@
|
|||||||
- name: Ensure Python requirements are installed
|
- name: Ensure Python requirements are installed
|
||||||
pip:
|
pip:
|
||||||
name:
|
name:
|
||||||
- "virtualbmc>=1.4.0{% if ansible_python.version.major == 2 %},<2{% endif %}"
|
- "virtualbmc>=1.4.0{% if ansible_facts.python.version.major == 2 %},<2{% endif %}"
|
||||||
# NOTE(priteau): Ignore PyYAML when installing system-wide to avoid the
|
# NOTE(priteau): Ignore PyYAML when installing system-wide to avoid the
|
||||||
# following error: Cannot uninstall 'PyYAML'. It is a distutils installed
|
# following error: Cannot uninstall 'PyYAML'. It is a distutils installed
|
||||||
# project and thus we cannot accurately determine which files belong to it
|
# project and thus we cannot accurately determine which files belong to it
|
||||||
|
@ -29,8 +29,8 @@
|
|||||||
include_role:
|
include_role:
|
||||||
name: fkautz.openvswitch-install
|
name: fkautz.openvswitch-install
|
||||||
when:
|
when:
|
||||||
- ansible_os_family == "RedHat"
|
- ansible_facts.os_family == "RedHat"
|
||||||
- ansible_distribution_major_version is version(8, '<')
|
- ansible_facts.distribution_major_version is version(8, '<')
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- name: Install the Delorean repositories
|
- name: Install the Delorean repositories
|
||||||
@ -50,8 +50,8 @@
|
|||||||
name: openvswitch
|
name: openvswitch
|
||||||
state: started
|
state: started
|
||||||
when:
|
when:
|
||||||
- ansible_os_family == "RedHat"
|
- ansible_facts.os_family == "RedHat"
|
||||||
- ansible_distribution_major_version is version(8, '>=')
|
- ansible_facts.distribution_major_version is version(8, '>=')
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- name: Install packages
|
- name: Install packages
|
||||||
@ -68,5 +68,5 @@
|
|||||||
service:
|
service:
|
||||||
name: openvswitch-switch
|
name: openvswitch-switch
|
||||||
state: started
|
state: started
|
||||||
when: ansible_os_family == "Debian"
|
when: ansible_facts.os_family == "Debian"
|
||||||
|
|
||||||
|
@ -23,13 +23,25 @@
|
|||||||
become: true
|
become: true
|
||||||
package:
|
package:
|
||||||
name: python3
|
name: python3
|
||||||
when: ansible_python.version.major == 3
|
when: ansible_facts.python.version.major == 3
|
||||||
|
|
||||||
- name: Create virtualenv for tenks
|
- name: Create virtualenv for tenks
|
||||||
pip:
|
pip:
|
||||||
requirements: "{{ tenks_src_dir }}/requirements.txt"
|
requirements: "{{ tenks_src_dir }}/requirements.txt"
|
||||||
virtualenv: "{{ tenks_venv }}"
|
virtualenv: "{{ tenks_venv }}"
|
||||||
virtualenv_python: "{{ ansible_python.executable }}"
|
virtualenv_python: "{{ ansible_facts.python.executable }}"
|
||||||
|
|
||||||
|
- name: Ensure /etc/ansible exists
|
||||||
|
file:
|
||||||
|
path: /etc/ansible
|
||||||
|
state: directory
|
||||||
|
become: true
|
||||||
|
|
||||||
|
- name: Template ansible.cfg
|
||||||
|
template:
|
||||||
|
src: "ansible.cfg.j2"
|
||||||
|
dest: /etc/ansible/ansible.cfg
|
||||||
|
become: true
|
||||||
|
|
||||||
- name: Template requirements overrides
|
- name: Template requirements overrides
|
||||||
template:
|
template:
|
||||||
|
7
playbooks/tenks-deploy-teardown/templates/ansible.cfg.j2
Normal file
7
playbooks/tenks-deploy-teardown/templates/ansible.cfg.j2
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[defaults]
|
||||||
|
# Ensure that facts are referenced via ansible_facts.<fact>.
|
||||||
|
inject_facts_as_vars = False
|
||||||
|
|
||||||
|
[ssh_connection]
|
||||||
|
pipelining = True
|
||||||
|
retries = 3
|
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
# Use python3 on Ubuntu remote hosts.
|
# Use python3 on Ubuntu remote hosts.
|
||||||
ansible_python_interpreter: "{{ '/usr/bin/python3' if ansible_python.version.major == 3 else '/usr/bin/python2' }}"
|
ansible_python_interpreter: "{{ '/usr/bin/python3' if ansible_facts.python.version.major == 3 else '/usr/bin/python2' }}"
|
||||||
|
|
||||||
# This file holds the config given to Tenks when running the zuul job,
|
# This file holds the config given to Tenks when running the zuul job,
|
||||||
# tenks-deploy-teardown. It assumes the existence of the bridge `breth1`.
|
# tenks-deploy-teardown. It assumes the existence of the bridge `breth1`.
|
||||||
|
@ -2,14 +2,14 @@
|
|||||||
|
|
||||||
# Variables shared between the playbooks
|
# Variables shared between the playbooks
|
||||||
|
|
||||||
tenks_src_dir: "{{ ansible_env.HOME ~ '/' ~ zuul.projects['opendev.org/openstack/tenks'].src_dir }}"
|
tenks_src_dir: "{{ ansible_facts.env.HOME ~ '/' ~ zuul.projects['opendev.org/openstack/tenks'].src_dir }}"
|
||||||
stackhpc_libvirt_host_src_dir: >-
|
stackhpc_libvirt_host_src_dir: >-
|
||||||
{{ ansible_env.HOME ~ '/' ~ zuul.projects['github.com/stackhpc/ansible-role-libvirt-host'].src_dir }}
|
{{ ansible_facts.env.HOME ~ '/' ~ zuul.projects['github.com/stackhpc/ansible-role-libvirt-host'].src_dir }}
|
||||||
stackhpc_libvirt_vm_src_dir: >-
|
stackhpc_libvirt_vm_src_dir: >-
|
||||||
{{ ansible_env.HOME ~ '/' ~ zuul.projects['github.com/stackhpc/ansible-role-libvirt-vm'].src_dir }}
|
{{ ansible_facts.env.HOME ~ '/' ~ zuul.projects['github.com/stackhpc/ansible-role-libvirt-vm'].src_dir }}
|
||||||
upper_constraints_path: "{{ ansible_env.HOME ~ '/' ~ zuul.projects['opendev.org/openstack/requirements'].src_dir ~ '/upper-constraints.txt' }}"
|
upper_constraints_path: "{{ ansible_facts.env.HOME ~ '/' ~ zuul.projects['opendev.org/openstack/requirements'].src_dir ~ '/upper-constraints.txt' }}"
|
||||||
tenks_venv: "{{ ansible_env.HOME ~ '/' ~ 'venv-tenks' }}"
|
tenks_venv: "{{ ansible_facts.env.HOME ~ '/' ~ 'venv-tenks' }}"
|
||||||
config_dir: "{{ ansible_env.HOME ~ '/' ~ 'tenks-config' }}"
|
config_dir: "{{ ansible_facts.env.HOME ~ '/' ~ 'tenks-config' }}"
|
||||||
tenks_overrides_path: "{{ config_dir ~ '/' ~ 'tenks-overrides.yml' }}"
|
tenks_overrides_path: "{{ config_dir ~ '/' ~ 'tenks-overrides.yml' }}"
|
||||||
tenks_requirements_overrides_path: "{{ tenks_src_dir }}/requirements-overrides.yml"
|
tenks_requirements_overrides_path: "{{ tenks_src_dir }}/requirements-overrides.yml"
|
||||||
logs_dir: "/tmp/logs"
|
logs_dir: "/tmp/logs"
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
- name: Enable the EPEL yum repository
|
- name: Enable the EPEL yum repository
|
||||||
command: yum-config-manager --enable epel
|
command: yum-config-manager --enable epel
|
||||||
when: ansible_os_family == 'RedHat'
|
when: ansible_facts.os_family == 'RedHat'
|
||||||
become: true
|
become: true
|
||||||
|
|
||||||
- name: Install Python3 modules
|
- name: Install Python3 modules
|
||||||
@ -20,4 +20,4 @@
|
|||||||
- python3-pip
|
- python3-pip
|
||||||
- python3-setuptools
|
- python3-setuptools
|
||||||
- python3-wheel
|
- python3-wheel
|
||||||
- "{% if ansible_os_family == 'Debian' %}virtualenv{% else %}python3-virtualenv{% endif %}"
|
- "{% if ansible_facts.os_family == 'Debian' %}virtualenv{% else %}python3-virtualenv{% endif %}"
|
||||||
|
Loading…
Reference in New Issue
Block a user