У меня такая конструкция:
- name: Run validation query on db localy
shell: >
docker exec postgres.1.$(docker service ps -f "name=postgres.1" postgres -q) bash -c 'psql -v --username "{{ pg_connection_speruser }}" --dbname "{{ pg_db }}" -c "select 1"'
register: validation_query
delegate_to: "{{ item }}"
with_items: "{{ groups.postgres_server }}"
until: validation_query.stderr == ''
retries: 6
delay: 10
ignore_errors: false
changed_when: false
Что мне нужно сделать:
- name: Run validation query on db localy
shell: >
docker exec postgres.{{ item }}.$(docker service ps -f "name=postgres.{{ item }}" postgres -q) bash -c 'psql -v --username "{{ pg_connection_speruser }}" --dbname "{{ pg_db }}" -c "select 1"'
register: validation_query
with_sequence: start=1 end="{{ pg_docker_service_replicas }}"
delegate_to: "{{ item }}"
with_items: "{{ groups.postgres_server }}"
until: validation_query.stderr == ''
retries: 6
delay: 10
ignore_errors: false
changed_when: false
Но, конечно, есть проблема с двойным циклом with_sequence и with_items.
А можно по-другому? Спасибо
Вы можете сделать это с помощью with_nested
и lookup
:
---
- hosts: localhost
gather_facts: no
vars:
max_num: 3
delegates:
- host1
- host2
tasks:
- debug:
msg: "delegate={{ item[0] }} seq={{ item [1] }}"
with_nested:
- "{{ delegates }}"
- "{{ lookup('sequence','start=1 end='+max_num|string,wantlist=True) }}"
Это сгенерирует вложенный цикл: внешний - по каждому элементу в delegates
список (доступен через item[0]
), внутренний - над последовательностью 1-max_num
.