kayobe/ansible/roles/swift-rings/tasks/main.yml
2021-02-03 13:36:43 +00:00

68 lines
2.3 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:
- 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 }}"
register: copy_result
- 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: >-
python3 {{ 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: "{{ copy_result.uid }}:{{ copy_result.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
become: true
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) }}"