
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 Kayobe 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 Story: 2007993 Task: 42464 Depends-On: https://review.opendev.org/c/openstack/kolla-ansible/+/791276 Change-Id: I14db53ed6e57d37bbd28dd5819e432e3fe6628b2
98 lines
3.4 KiB
YAML
98 lines
3.4 KiB
YAML
---
|
|
# Create a virtualenv for ansible modules to use on the remote target systems
|
|
# when running kayobe.
|
|
|
|
- name: Ensure a virtualenv exists for kayobe
|
|
hosts: seed:seed-hypervisor:overcloud
|
|
gather_facts: False
|
|
tags:
|
|
- kayobe-target-venv
|
|
tasks:
|
|
- name: Set a fact about the kayobe target virtualenv
|
|
set_fact:
|
|
virtualenv: "{{ ansible_python_interpreter | dirname | dirname }}"
|
|
when:
|
|
- ansible_python_interpreter is defined
|
|
- not ansible_python_interpreter.startswith('/bin')
|
|
- not ansible_python_interpreter.startswith('/usr/bin')
|
|
|
|
- block:
|
|
- name: Gather facts
|
|
setup:
|
|
when: not ansible_facts.module_setup | default(false)
|
|
register: gather_facts
|
|
|
|
- name: Ensure the Python virtualenv package is installed
|
|
package:
|
|
name: python3-virtualenv
|
|
state: present
|
|
cache_valid_time: "{{ apt_cache_valid_time if ansible_facts.os_family == 'Debian' else omit }}"
|
|
update_cache: "{{ True if ansible_facts.os_family == 'Debian' else omit }}"
|
|
become: True
|
|
|
|
- name: Ensure global virtualenv directory exists
|
|
file:
|
|
path: "{{ virtualenv_path }}"
|
|
state: directory
|
|
owner: "{{ ansible_facts.user_uid }}"
|
|
group: "{{ ansible_facts.user_gid }}"
|
|
mode: 0755
|
|
# Check whether the virtualenv directory is a subdirectory of the
|
|
# global virtualenv directory.
|
|
when: virtualenv.startswith(virtualenv_path)
|
|
become: True
|
|
|
|
- name: Ensure kayobe virtualenv directory exists
|
|
file:
|
|
path: "{{ virtualenv }}"
|
|
state: directory
|
|
owner: "{{ ansible_facts.user_uid }}"
|
|
group: "{{ ansible_facts.user_gid }}"
|
|
mode: 0700
|
|
become: True
|
|
|
|
- name: Ensure kayobe virtualenv has the latest version of pip installed
|
|
pip:
|
|
name: pip
|
|
state: latest
|
|
virtualenv: "{{ virtualenv }}"
|
|
# Site packages are required for using the dnf module, which is not
|
|
# available via PyPI.
|
|
virtualenv_site_packages: True
|
|
virtualenv_python: "python3.{{ ansible_facts.python.version.minor }}"
|
|
|
|
- name: Ensure kayobe virtualenv has SELinux bindings installed
|
|
pip:
|
|
name: selinux
|
|
state: latest
|
|
virtualenv: "{{ virtualenv }}"
|
|
when:
|
|
- ansible_facts.os_family == 'RedHat'
|
|
vars:
|
|
# Use the system python interpreter since the virtualenv might not
|
|
# exist.
|
|
ansible_python_interpreter: /usr/bin/python3
|
|
when: virtualenv is defined
|
|
|
|
# If we gathered facts earlier it would have been with a different Python
|
|
# interpreter. For gathering modes that may use a fact cache, gather facts
|
|
# again using the interpreter from the virtual environment.
|
|
- name: Gather facts
|
|
setup:
|
|
when:
|
|
- virtualenv is defined
|
|
- gather_facts is not skipped
|
|
- lookup('config', 'DEFAULT_GATHERING') != 'implicit'
|
|
|
|
- block:
|
|
- name: Ensure Python setuptools and pip packages are installed
|
|
vars:
|
|
packages:
|
|
- python3-setuptools
|
|
- python3-pip
|
|
package:
|
|
name: "{{ packages | select | list }}"
|
|
state: present
|
|
become: True
|
|
when: virtualenv is not defined
|