如何拆分ansible角色';是否将s`defaults/main.yml`文件转换为多个文件?
在一些ansible角色(例如,如何拆分ansible角色';是否将s`defaults/main.yml`文件转换为多个文件?,ansible,ansible-role,file-organization,Ansible,Ansible Role,File Organization,在一些ansible角色(例如,roles/my role/)中,我有一些很大的默认变量文件(defaults/main.yml)。我想把main.yml分割成几个较小的文件。有可能吗 我曾尝试创建文件defaults/1.yml和defaults/2.yml,但它们不是由ansible加载的。我下面描述的功能自ansible 2.6起就可用,但在v2.6.2中有一个错误修复,在v2.7中有另一个(次要)错误修复。 要查看旧版本的解决方案,请参阅Paul的答案 defaults/main/ 不
roles/my role/
)中,我有一些很大的默认变量文件(defaults/main.yml
)。我想把main.yml
分割成几个较小的文件。有可能吗
我曾尝试创建文件
defaults/1.yml
和defaults/2.yml
,但它们不是由ansible加载的。我下面描述的功能自ansible 2.6起就可用,但在v2.6.2中有一个错误修复,在v2.7中有另一个(次要)错误修复。要查看旧版本的解决方案,请参阅Paul的答案
defaults/main/
不要创建defaults/main.yml
,而是创建一个目录-defaults/main/
,并将所有YAML文件放在其中
→defaults/main.yml
默认值/main/*.yml
*.yml
文件,因此您可以将文件命名为roles/my role/defaults/main/{1,2}.yml
注意,旧文件-defaults/main.yml
-必须不存在。看
vars/main/
顺便说一句,上述解决方案也适用于vars/
:
→vars/main.yml
vars/main/*.yml
进一步详情 该功能已在v2.6- 有两个错误修复:
- v2.7修复:,-后端口到v2.6.2:
- v2.7修复:
- name: Include vars of stuff.yaml into the 'stuff' variable (2.2).
include_vars:
file: stuff.yaml
name: stuff
- name: Conditionally decide to load in variables into 'plans' when x is 0, otherwise do not. (2.2)
include_vars:
file: contingency_plan.yaml
name: plans
when: x == 0
- name: Load a variable file based on the OS type, or a default if not found. Using free-form to specify the file.
include_vars: "{{ item }}"
with_first_found:
- "{{ ansible_distribution }}.yaml"
- "{{ ansible_os_family }}.yaml"
- default.yaml
- name: Bare include (free-form)
include_vars: myvars.yaml
- name: Include all .json and .jsn files in vars/all and all nested directories (2.3)
include_vars:
dir: vars/all
extensions:
- json
- jsn
- name: Include all default extension files in vars/all and all nested directories and save the output in test. (2.2)
include_vars:
dir: vars/all
name: test
- name: Include default extension files in vars/services (2.2)
include_vars:
dir: vars/services
depth: 1
- name: Include only files matching bastion.yaml (2.2)
include_vars:
dir: vars
files_matching: bastion.yaml
但请注意,这是一个任务指令。它没有能够将其包含到默认文件本身那么简单。这真是个好消息!好消息!尽管如此,我在本地机器上运行ansible 2.6.1,但它不工作。升级到当前最新的ansible(2.7.6)后,它工作正常。@Lorex我现在相信您遇到了v2.6.2中修复的错误,如果需要,请参阅我的更新答案interested@Arash这已经被问到并回答了(“它只是更接近当前的功能。如果开始读取所有文件,这将是一个突破性的变化。”)和(“允许您通过[来自选项的]
defaults\u]指定“备用”文件[.]。include\u role
模块还具有一个vars\u from
参数。