Ansible 可替代的角色。默认值
我在文档中找不到答案,也找不到一个例子:是否可以在Ansible 可替代的角色。默认值,ansible,Ansible,我在文档中找不到答案,也找不到一个例子:是否可以在role/defaults/other中命名文件,然后在main.yml?我的意思是,main.yml是否是具有默认值的文件的唯一有效名称 角色只是围绕所描述的“include”指令的自动化 上面,真的不包含太多额外的魔法以外的一些 改进了对引用文件的搜索路径处理。然而, 那可能是件大事 这为每个角色“x”指定了以下行为: 如果存在roles/x/tasks/main.yml,将添加其中列出的任务 去看戏 如果存在roles/x/handler
role/defaults/
other中命名文件,然后在main.yml
?我的意思是,main.yml
是否是具有默认值的文件的唯一有效名称
角色只是围绕所描述的“include”指令的自动化
上面,真的不包含太多额外的魔法以外的一些
改进了对引用文件的搜索路径处理。然而,
那可能是件大事
这为每个角色“x”指定了以下行为:
如果存在roles/x/tasks/main.yml,将添加其中列出的任务
去看戏
如果存在roles/x/handlers/main.yml,将列出处理程序
其中将被添加到该剧中
如果存在roles/x/vars/main.yml,
其中列出的变量将添加到剧本中
如果
角色/x/defaults/main.yml存在,其中列出的变量将为
添加到剧本中
如果roles/x/meta/main.yml存在,则任何角色
其中列出的依赖项将添加到角色列表中(1.3
任何副本、脚本、模板或包含任务(在角色中)
可以引用角色/x/{文件、模板、任务}/(取决于目录)中的文件
在任务中)而不必相对或绝对地对其进行路径选择
Q:我的意思是,main.yml是具有默认值的文件的唯一有效名称吗?A:听起来只有当您希望ansible自动加载该角色的特定变量文件并自动
包含任务文件时,才会这样做
Q:可以给文件命名吗
A:是的,这意味着在剧本中必须使用include
指令,并将其明确指向唯一的任务文件名
例如:
- name: Do role
hosts: localhost
tasks:
- include: roles/operations/tasks/installProgram.yml
默认情况下,Ansible将在角色/目录中查找任务、变量、处理程序等。角色/默认值只是其文档中提供的一个示例。您可以根据自己的需要对角色进行不同的组织。例如,我已经将我的设置为这样
roles/windows/<somerole>/tasks/main.yml
roles/linux/<somerole>/tasks/main.yml
roles/windows//tasks/main.yml
角色/linux//tasks/main.yml
main.yml是运行playbooks时自动(默认)加载的唯一文件。如果出于任何原因要指定另一个文件名,则需要使用include函数并如上所述指向文件
“”指南对目录结构提供了一些很好的见解 正如您在评论中所说,可以在角色/my_角色/defaults/
下调用文件。问题是像roles/my_role/defaults/anything.yml这样的文件永远不会作为默认文件加载。即使您能够使用include_vars
加载它,它也将获得最大的可用性
然而,由于Ansible 2.6,您可以使用directerymain
来代替main.yml
文件
通过这样做,您可以通过将变量拆分为roles/my_role/defaults/main/something.yml
,roles/my_role/defaults/main/anything.yml
更多详情请参阅
但事实上,这个特性还没有被记录下来(我刚刚创建了一个)。如果我命名一个默认文件role/defaults/a.yml
,然后将它包含在任务中的include
语句中(不确定是否可能),它真的是默认的吗?它会被覆盖吗?Ansible怎么知道这个include必须比常规变量的优先级低?Ansible新手。我还在学习,所以我不确定我的评论,我的道歉。我认为当您使用include
语句时,它只是意味着“嘿,运行那个yml脚本”,它没有引用文本中提到的所有角色魔法,比如自动变量加载。