我在文档中找不到答案,我也找不到示例:是否可以在role/defaults/
以外的main.yml
中命名文件?我的意思是,main.yml
是具有默认值的文件的唯一有效名称吗?
答案 0 :(得分:2)
根据本文档的声音;
http://docs.ansible.com/ansible/playbooks_roles.html#roles
如上所述,角色只是围绕'include'指令的自动化 以上,真的不包含太多额外的魔法超越一些 对引用文件的搜索路径处理的改进。然而, 这可能是一件大事!
这为每个角色'x'指定了以下行为:
如果存在roles / x / tasks / main.yml,则会添加其中列出的任务 到了戏剧
如果存在roles / x / handlers / main.yml,则列出处理程序 其中将添加到剧中
如果存在roles / x / vars / main.yml, 其中列出的变量将被添加到游戏中
如果 roles / x / defaults / main.yml存在,其中列出的变量将是 添加到剧中
如果存在roles / x / meta / main.yml,则为任何角色 其中列出的依赖关系将被添加到角色列表中(1.3 以后)任何副本,脚本,模板或包含任务(在角色中) 可以引用角色/ x / {文件,模板,任务}中的文件/(目录取决于 在任务上)而不必相对或绝对地路径他们
问:我的意思是,main.yml是具有默认值的文件的唯一有效名称吗?
答:听起来只有当您希望ansible自动为该角色加载某些var_files并自动include
任务文件时才会这样。
问:是否可以命名文件
A:是的,它只是意味着在剧本中你必须使用include
指令并明确地将其指向唯一的任务文件名。
示例:
- name: Do role
hosts: localhost
tasks:
- include: roles/operations/tasks/installProgram.yml
答案 1 :(得分:1)
默认情况下,Ansible会在roles /目录中查找任务,变量,处理程序等。 roles / default只是他们的文档中提供的一个示例。您可以以不同方式构建角色以满足您的需求。例如,我有我的设置;
roles/windows/<somerole>/tasks/main.yml
roles/linux/<somerole>/tasks/main.yml
main.yml是唯一一个在运行playbooks时会自动加载的文件(默认为“默认”)。如果您想要指定其他文件名,无论出于何种原因需要使用include函数并指向您的文件,如上所述。
“Best Practices”指南提供了对目录结构的一些很好的了解。
答案 2 :(得分:1)
正如您在注释中所指出的,可以在roles/my_role/defaults/
下调用任何其他文件。问题在于,像roles/my_role/defaults/anything_else.yml
这样的文件将永远不会默认加载。即使您能够使用include_vars
加载它,它也会获得high precedence of included vars (18/22)。
尽管如此,自Ansible 2.6起,您就可以使用指向符main
代替main.yml
文件!
这样做,您可以通过将变量分为roles/my_role/defaults/main/something.yml
,roles/my_role/defaults/main/anything_else.yml
,…来实现目标。
this StackOverflow answer中的更多详细信息。
但是确实尚未记录此功能(我刚刚创建了issue about that)。