gpt4 book ai didi

Ansible with_subelements 默认值

转载 作者:行者123 更新时间:2023-12-04 04:47:08 25 4
gpt4 key购买 nike

我有一个像这样的 vars 定义:

sites:
- site: mysite1.com
exec_init:
- "command1 to exec"
- "command2 to exec"
- site: mysite2.com

然后我玩了以下任务
- name: Execute init scripts for all sites
shell: "{{item.1}}"
with_subelements:
- sites
- exec_init
when: item.0.exec_init is defined

这里的想法是我将在我的变量中有多个“站点”定义和许多其他属性,
然后我想为那些定义了“exec_init”的站点执行多个Shell脚本命令

这样做它总是跳过执行任务,我已经尝试了所有我能想象的组合,但我无法让它工作......

这是正确的做法吗?也许我正在努力实现一些没有意义的东西?

谢谢你的帮助

最佳答案

嗯,看起来 sites 中的元素结构不统一是什么with_subelements不喜欢。还有那个item不包含您在 with_subelements 列表中指定的子元素。你可以做几件事:

  • 确保有一个 exec_init列表,即使它是空的。 with_subelements将跳过带有空子元素的项目。我认为这是最好的选择,虽然在编写剧本时有点不方便。
  • 不要使用 with_subelements并批量执行自己(有点难看):
    - name: Execute init scripts for all sites
    shell: "echo '{{item.exec_init | join(';')}}' | bash"
    when: item.exec_init is defined
    with_items: sites
  • 定制 with_subelements这样它就会包含缺少子元素的项目。您可以复制原件(我的在 /usr/local/lib/python2.7/dist-packages/ansible/runner/lookup_plugins/with_subelements.py 中)并将其放入 lookup_plugins您的剧本旁边的目录,以不同的名称(比如 subelements_missingok.py )。然后将第 59 行更改为:
    raise errors.AnsibleError("could not find '%s' key in iterated item '%s'" % (subelement, item0))

    到:
    continue

    那么您的任务可能如下所示:
    - name: Execute init scripts for all sites
    debug: "msg={{item.1}}"
    with_subelements_missingok:
    - sites
    - exec_init
  • 关于Ansible with_subelements 默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24616107/

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