Ansible中的双循环,如何处理?

我有这样的build设:

- 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_nestedlookup来做到这一点:

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

这将生成嵌套循环:外部one – over delegates列表中的每个项目(可通过item[0]访问),内部one – over序列1-max_num