Ansible 循环遍历列表和数组混合

Ansible 循环遍历列表和数组混合

我目前正在尝试执行一项为两个不同服务创建目录的任务,但我无法解决如何使用 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 }}"

相关内容