Ansible角色。默认值

时间:2016-09-22 21:12:53

标签: ansible

我在文档中找不到答案,我也找不到示例:是否可以在role/defaults/以外的main.yml中命名文件?我的意思是,main.yml是具有默认值的文件的唯一有效名称吗?

3 个答案:

答案 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.ymlroles/my_role/defaults/main/anything_else.yml,…来实现目标。

this StackOverflow answer中的更多详细信息。

但是确实尚未记录此功能(我刚刚创建了issue about that)。