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"
或者可以同时使用 loop
或 with_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"
我有一个剧本,在任务的 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"
或者可以同时使用 loop
或 with_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"