ansible:角色的多个 var 文件?

fab*_*ous 8 ansible

在我找到的所有 ansible 文档中,该[role]/vars/main.yml文件都被引用为角色变量的位置。

使用可以进行一些自定义[role]/defaults/main.yml,然后可以被 覆盖[role]/vars/main.yml

如果我想解决多种场景,并说根据主变量加载一组变量,然后将分组的变量放入每个文件中,例如

[role]/vars/main.yml
[role]/vars/scenario1.yml
[role]/vars/scenario2.yml
[role]/vars/scenario3.yml
[role]/vars/scenario4.yml
Run Code Online (Sandbox Code Playgroud)

换句话说,[role]/vars目录除了包含main.yml文件之外还有其他用处吗?

具体的挑战是,使用公钥定义用户集,因此根据我所在的机器,创建适当的用户帐户

Zei*_*tor 7

的作用vars/main.yml并不是真正覆盖 中定义的变量defaults/main.yml。事实上,这实际上会适得其反,因为 in 中定义的变量vars/main.yml具有相当高的优先级,并且更难覆盖,而您通常希望defaults/main.yml用户可以轻松修改 in 中的变量。

关于该vars文件夹,它按照约定包含定义特定于您的角色的变量的文件。但只会vars/main.yml默认加载。

同时,当您离开角色时,该文件夹(例如vars与您的剧本相邻的文件夹,如果有的话)位于搜索路径上include_vars。因此,如果我以你的例子为例,你可以轻松地include_vars: scenario1.yml在你的角色中的某个地方,或者即使include_vars: "scenario{{ scenario_number }}.yml"你动态地得到它。

免责声明我是以下示例角色的维护者

这是取自ansible-thoteam/nexus-oss 角色的现实生活示例。

如您所见,该角色有一个包含多个文件的vars文件夹,但没有default.yml. 所以默认情况下不会加载任何角色变量。这些文件会在需要时动态加载。

有 2 个与该角色支持的不同操作系统系列相关的文件:configure-Debian.ymlconfigure-RedHat.yml. tasks/main.yml它们根据以下任务的需要加载:

- name: Include OS specific variables.
  include_vars: "configure-{{ ansible_os_family }}.yml"
Run Code Online (Sandbox Code Playgroud)

或者,您可以查看也可用于此类场景的first_found查找。