gpt4 book ai didi

loops - ansible中的多个嵌套循环

转载 作者:行者123 更新时间:2023-12-02 03:17:09 29 4
gpt4 key购买 nike

我正在尝试遍历一个存储在字典中的列表,该字典是另一个列表的一部分。我的剧本看起来像这样:

---
- hosts: all
vars:
copy_certs:
- { domain: 'domainname', copy_to: ['/tmp/foo', '/tmp/bar'], restart: [["mailhost", "postfix"], ["mailhost", "dovecot"]] }
- { domain: 'domainname2', copy_to: ['/tmp/foo2', '/tmp/bar2'], restart: [["mail.lxc", "postfix"]] }
tasks:
[...]
- name: Copy Private Key
register: copied_key
copy: src=/etc/letsencrypt/live/{{ item.0.domain }}/privkey.pem dest="{{ item.1 }}/"
with_subelements:
- copy_certs
- copy_to
- name: Debug (here should be delegates to "item.restart.NUM.0" to restart "item.restart.NUM.1" with_subelements: ...)
debug: var=item
with_items: copied_key.results

现在我正在迭代列表,因为 ansible 似乎不支持真正的嵌套,但只支持两个嵌套循环的一些预定义结构。

我需要类似的东西(不起作用):

with_subelements:
- copied_key.results
- item.domain.restart

或(子元素语法错误):

with_subelements:
- copied_key.results
- item.domain
- restart

我已经尝试过使用冗余列表:

vars:
restart_services:
domainname: [["mailhost", "postfix"]]
tasks:
- name: Debug
debug: var=restart_services[item.item.0.domain]
with_items: copied_key.results

如您所见,item.item 已经开始变得丑陋了。

它需要类似的东西

  register: [to_restart for to_restart in item['restart']] as services_to_rstart
- debug: var=item # item.0 = hostname item.1 = servicename
with_items: services_to_restart

或者如果它不需要是列表就可以遍历它,甚至 item.hostname 而不是元组(实际上是列表)。

如果有一些方法可以通过嵌套指定循环而不是使用像 with_subelements 这样的预制过滤器,那就太好了。

最佳答案

您是否尝试过使用“with_nested”?您可以查看 Ansible documentation .

这可能有效:

- name: Copy Private Key
register: copied_key
copy: src=/etc/letsencrypt/live/{{ item[0].domain }}/privkey.pem dest="{{ item[1] }}/"
with_nested:
- copy_certs
- copy_certs.copy_to

关于loops - ansible中的多个嵌套循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36206551/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com