我目前正在尝试执行一项为两个不同服务创建目录的任务,但我无法解决如何使用 ansible 循环来做到这一点。
这是对象:
obj:
metadata:
uuid:
version:
services:
- server:
archive: binary.tar.gz
dirs:
bindir: /path/to/bindir/
confdir: /path/to/confdir/
tmpdir: /path/to/tmpdir/
- client:
archive: binary.tar.gz
dirs:
tmpdir: /path/to/tmpdir
以下是我的相关任务:
#Creating directories
- name: Creating directories for server and client mode.
file:
path: "{{ item.1.dirs['tmpdir'] }}"
state: directory
owner: "{{ item.0.metadata.uuid }}"
group: "{{ item.0.metadata.uuid }}"
mode: 0750
with_subelements:
- "{{ obj }}"
- services
现在,我对循环在 ansible 上的工作方式感到有点不安,并且暂时坚持我当前的迭代,所以,你能帮我找到一种方法来实现我想要做的事情吗?
答案1
根据您的评论,您想要为obj.services.#.dirs.tmpdir
包含 详细信息的项目创建目录obj.metadata
。 解决方案width_items: "{{ object.services }}"
几乎可行 - 但您无权访问obj.metadata
。 问题是 - 只有一个obj.metadata
,因此您无需在循环中引用它。 您可以直接使用它。
- name: Creating directories for server and client mode.
file:
path: "{{ item.dirs['tmpdir'] }}"
state: directory
owner: "{{ obj.metadata.uuid }}"
group: "{{ obj.metadata.uuid }}"
mode: 0750
with_items:
- "{{ obj.services }}"