Mark Goddard a91135179d CentOS 8: Use ansible_playbook_python for localhost dependencies
Currently we install python dependencies on the Ansible control host
each time the ip-allocation and console-allocation roles are executed.
This is inefficient, particularly in the case of the ip-allocation role
which is run serially for all hosts. It is also unnecessary since we
have these packages available in the Python environment used to execute
kayobe.

The kolla-ansible role also has an implicit dependency on PyYAML for
managing kolla passwords.

This change uses ansible_playbook_python as the Python interpreter for
the necessary tasks in these roles to avoid installing dependencies on
the system on CentOS 8 and Ubuntu. For CentOS 7 we still need to use the
platform Python, due to needing SELinux bindings.

Change-Id: Ic6a1c69a34241f4fbe617a0b12aec9b1528ba352
Story: 2006574
Task: 38825
2020-02-25 16:15:09 +00:00

40 lines
1.7 KiB
YAML

---
- block:
- name: Include OS family-specific variables
include_vars: "{{ hostvars.localhost.ansible_os_family }}.yml"
# Note: Currently we install these using the system package manager rather than
# pip to a virtualenv. This is because Yum is required elsewhere and cannot
# easily be installed in a virtualenv.
- name: Ensure package dependencies are installed
local_action:
module: package
name: "{{ item }}"
state: present
use: "{{ ip_allocation_package_manager }}"
become: True
with_items: "{{ ip_allocation_package_dependencies }}"
run_once: True
when:
- hostvars.localhost.ansible_os_family == 'RedHat'
- hostvars.localhost.ansible_distribution_major_version | int == 7
- name: Ensure IP addresses are allocated
vars:
# NOTE(mgoddard): Use the Python interpreter used to run ansible-playbook,
# since this has Python dependencies available to it (PyYAML). On CentOS 7
# we use the system Python to ensure that we can import SELinux bindings.
ansible_python_interpreter: >-
{{ '/usr/libexec/platform-python'
if hostvars.localhost.ansible_os_family == 'RedHat' and hostvars.localhost.ansible_distribution_major_version | int == 7
else ansible_playbook_python }}
local_action:
module: ip_allocation
allocation_file: "{{ ip_allocation_filename }}"
hostname: "{{ ip_allocation_hostname }}"
net_name: "{{ item.net_name }}"
cidr: "{{ item.cidr }}"
allocation_pool_start: "{{ item.allocation_pool_start | default(omit) }}"
allocation_pool_end: "{{ item.allocation_pool_end | default(omit) }}"
with_items: "{{ ip_allocations }}"