在我找到的所有 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
文件之外还有其他用处吗?
具体的挑战是,使用公钥定义用户集,因此根据我所在的机器,创建适当的用户帐户
的作用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.yml
和configure-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
查找。
归档时间: |
|
查看次数: |
5143 次 |
最近记录: |