include_variable 的 ansible 循环

ansible loop with include_variable

我有一个剧本,在任务的 include_vars 部分下有多个 yaml 文件,如您所见,我正在一个一个地定义它们。我想知道我是否可以让它们通过循环。

我查看了 google 和 ansible doc link here,但我没有找到 loop 示例,但是,我看到了 with_first_found,但我不想要那个。

下面是我的剧本

    ---
    - name: Creating aws host
      hosts: localhost
      connection: local
      become: yes
    
      tasks:
        - include_vars: awsvariable.yml
          no_log: true
        - include_vars: vaults/mysecrets.yml
          no_log: true
        - include_vars: vaults/mydev.yml
          no_log: true
        - include_vars: requirements.yml

以下是我正在考虑的

下面这样可行吗?

      tasks:
        - include_vars: "{{ item }}"
          loop:
            - awsvariable.yml
            - vaults/mysecrets.yml
            - vaults/mydev.yml
            - requirements.yml

OR

      tasks:
        - include_vars: ['awsvariable.yml', 'vaults/mysecrets.yml', 'vaults/mydev.yml', 'requirements.yml']
          no_log: true
          

如果我们能以其他方式更好地对齐它们,请提出建议。

ansible版本:2.9 BR.

似乎 include_vars 模块无法使用循环。您可以使用 include_task 模块循环访问具有单个任务的文件 include_vars:

---
- hosts: localhost
  gather_facts: false
  vars:
    files_to_load: 
    - file1.yml
    - file2.yml
    - file3.yml

  tasks:

  - include_tasks: include_vars.yml
    loop: "{{ files_to_load }}"
    loop_control:
      loop_var: file_to_load

蚂蚁 include_vars.yml 文件:

- name: include vars {{ file_to_load }}
  include_vars: "{{ file_to_load }}"

更新:

关于我试过但没有用的循环语法,以下尝试失败了:

第一名:

  - include_vars: "{{ item }}"
    loop: - "{{ files_to_load }}" 

第二名:

  - include_vars: "{{ item }}"
    loop: 
    - "{{ files_to_load }}"

我知道这个语法有效:

- name: Include variable files
  include_vars: "{{ item }}"
  loop:
    - "vars/file.yml"
    - "vars/anotherfile.yml"

但我个人认为您需要在任务级别列出循环项并不方便。

我看到你已经接近你的答案了,是的 loop 应该可以,尝试 运行 你的游戏在干 运行 模式下并设置 no_log: false查看您的变量是否得到扩展。

示例:

$ ansible-playbook test_play.yml --check --ask-vault-pass

您的代码

- include_vars: "{{ item }}"
  loop:
    - 'awsvariable.yml'
    - 'vaults/mysecrets.yml'
    - 'vaults/mydev.yml'
    - 'requirements.yml'
  no_log: true

使用 dir 将所有文件包含在一个文件夹中。

- name: Include variable files
  include_vars:
    dir: vars
    extensions:
      - "yml"

或者可以同时使用 loopwith_items 来遍历文件名并包含它们。

- name: Include variable files
  include_vars: "{{ item }}"
  with_items:
    - "vars/file.yml"
    - "vars/anotherfile.yml"

或使用较新的 loop

- name: Include variable files
  include_vars: "{{ item }}"
  loop:
    - "vars/file.yml"
    - "vars/anotherfile.yml"