Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何拆分ansible角色';是否将s`defaults/main.yml`文件转换为多个文件?_Ansible_Ansible Role_File Organization - Fatal编程技术网

如何拆分ansible角色';是否将s`defaults/main.yml`文件转换为多个文件?

如何拆分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/ 不

在一些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/
不要创建
defaults/main.yml
,而是创建一个目录-
defaults/main/
,并将所有YAML文件放在其中

  • defaults/main.yml
    默认值/main/*.yml
Ansible将加载该目录中的任何
*.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修复:
如果您不使用2.6(您可能应该这样做,但我知道这并不总是一个选项),那么您可能会发现它很有用

- 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
参数。