我有这样的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_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) }}"
这将生成嵌套循环:外部one – over delegates列表中的每个项目(可通过item[0]访问),内部one – over序列1-max_num 。