
One way to improve the performance of Ansible is through fact caching. Rather than gather facts in every play, we can configure Ansible to cache them in a persistent store. An example Ansible configuration for doing this is as follows: [defaults] gathering = smart fact_caching = jsonfile fact_caching_connection = ./facts fact_caching_timeout = 86400 While this mostly just works, there are a few places where we unconditionally gather facts using the setup module. This change modifies these to only gather facts when necessary. We no longer execute the MichaelRigart.interfaces role using become: true, since it may gather facts and we do not want it to do so as root. The role uses become where necessary. Change-Id: I9984a187fc6c0496ada489bb8eef36e44d695aac Story: 2007492 Task: 39216
71 lines
2.4 KiB
YAML
71 lines
2.4 KiB
YAML
---
|
|
# We generate a configuration file and execute a python script in a container
|
|
# that builds a ring based on the config file contents. Doing it this way
|
|
# avoids a large task loop with docker container for each step, which would be
|
|
# quite slow.
|
|
|
|
# Execute the following commands on the ring build host.
|
|
- block:
|
|
# Facts required for ansible_user_uid and ansible_user_gid.
|
|
- name: Gather facts for swift ring build host
|
|
setup:
|
|
when: not module_setup | default(false)
|
|
|
|
- name: Ensure Swift ring build directory exists
|
|
file:
|
|
path: "{{ swift_ring_build_path }}"
|
|
state: directory
|
|
|
|
- name: Ensure Swift ring builder script exists
|
|
copy:
|
|
src: swift-ring-builder.py
|
|
dest: "{{ swift_ring_build_path }}"
|
|
|
|
- name: Ensure Swift ring builder configuration exists
|
|
template:
|
|
src: swift-ring.yml.j2
|
|
dest: "{{ swift_ring_build_path }}/{{ service_name }}-ring.yml"
|
|
with_items: "{{ swift_service_names }}"
|
|
loop_control:
|
|
loop_var: service_name
|
|
|
|
- name: Ensure Swift rings exist
|
|
docker_container:
|
|
cleanup: true
|
|
command: >-
|
|
python {{ swift_container_build_path }}/swift-ring-builder.py
|
|
{{ swift_container_build_path }}/{{ item }}-ring.yml
|
|
{{ swift_container_build_path }}
|
|
{{ item }}
|
|
detach: false
|
|
image: "{{ swift_ring_build_image }}"
|
|
name: "swift_{{ item }}_ring_builder"
|
|
user: "{{ ansible_user_uid }}:{{ ansible_user_gid }}"
|
|
volumes:
|
|
- "{{ swift_ring_build_path }}/:{{ swift_container_build_path }}/"
|
|
with_items: "{{ swift_service_names }}"
|
|
|
|
- name: Ensure Swift ring files are copied
|
|
fetch:
|
|
src: "{{ swift_ring_build_path }}/{{ item[0] }}.{{ item[1] }}"
|
|
dest: "{{ swift_config_path }}/{{ item[0] }}.{{ item[1] }}"
|
|
flat: true
|
|
mode: 0644
|
|
with_nested:
|
|
- "{{ swift_service_names }}"
|
|
- - ring.gz
|
|
- builder
|
|
become: true
|
|
|
|
always:
|
|
- name: Remove Swift ring build directory from build host
|
|
file:
|
|
path: "{{ swift_ring_build_path }}"
|
|
state: absent
|
|
|
|
delegate_to: "{{ swift_ring_build_host }}"
|
|
vars:
|
|
# NOTE: Without this, the seed's ansible_host variable will not be
|
|
# respected when using delegate_to.
|
|
ansible_host: "{{ hostvars[swift_ring_build_host].ansible_host | default(swift_ring_build_host) }}"
|