--- # 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) }}"