gpt4 book ai didi

json - 仅当定义了复杂 JSON 中的项目时,如何运行 Ansible 任务?

转载 作者:行者123 更新时间:2023-12-05 05:22:08 26 4
gpt4 key购买 nike

我有两个主机:

  • foo
  • bla

foo 没有 host_varsbla 有一个包含以下内容的 host_vars 文件:

---
# host_vars/bla
'a': {
'b': {
'c': 'string'
}
}

我的任务只应在复杂 JSON 存在且包含项目 b 时运行。我的逻辑是:当 a 存在并且有项目 b 时,它也有 c

我的任务是这样的:

---
- name: example task
file:
dest: "{{ item.dest }}"
owner: "{{ item.owner }}"
state: directory
with_items:
- { dest: "/tmp/{{ a['b']['c'] }}", owner: root }
when: a['b'] is defined

结果

此任务对 bla 成功(因为它具有正确的 JSON)但对 foo 失败,因为它缺少 JSON。

fatal: [foo]: FAILED! => {"failed": true, "msg": "'dict object' has no attribute 'b'"}
ok: [bla] => (item={u'dest': u'/tmp/string', u'owner': u'root'})

预计

skipping: [foo]: => (item={u'dest': u'/tmp/', u'owner': u'root'})
ok: [bla] => (item={u'dest': u'/tmp/string', u'owner': u'root'})

通知

现在我知道 when 语句是为每个项目解释的,因此它不会起作用。有人可以提供可行的解决方案吗?

Ansible 版本是 2.2.0

编辑

---
- name: example task
file:
dest: "{{ item.dest }}"
owner: "{{ item.owner }}"
state: directory
with_items:
- { dest: "/tmp/{{ a['b']['c'] | default([]) }}", owner: root }
when: a['b'] is defined

这将不起作用,因为 when 是在 with_items 之后计算的,并且只要 a['b'] 未定义,它就会失败.

fatal: [foo]: FAILED! => {"failed": true, "msg": "'dict object' has no attribute 'b'"}

最佳答案

找到有用的东西:

- name: example task
file:
dest: "{{ item.dest }}"
owner: "{{ item.owner }}"
state: directory
with_items:
- { dest: "/tmp/{{ (a['b'] | default({}))['c'] | default('nA') }}", owner: root }
when: a['b'] is defined

关于json - 仅当定义了复杂 JSON 中的项目时,如何运行 Ansible 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41291739/

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