2016-09-22 140 views
1

我无法找到的文档的答案,无论是我能找到一个例子:有没有可能在其他role/defaults/然后main.yml命名文件?我的意思是,main.yml是具有默认值的文件的唯一有效名称?Ansible角色。默认值

回答

2

通过本文档的声音;

http://docs.ansible.com/ansible/playbooks_roles.html#roles

角色只是自动化围绕“包括”指令如上所述 ,真不含有超出一些 改进多少额外的魔法搜索路径处理为引用的文件。但是, 可以是一件大事!

这将指定下列行为,为每个角色的“x”:

如果角色/ X// main.yml存在,其中所列的任务将被添加 到播放任务

如果角色/ X /处理/ main.yml存在,处理程序列出 在其中将被添加到播放

如果角色/ X /瓦尔/ main.yml存在,其中所列 变量将被添加到播放

如果 角色/ X /默认/ main.yml存在,其中列出的变量将是 添加到播放

如果角色/ X /元/ main.yml存在,其中所列的任何角色 依赖将被添加到角色(1.3 及更高版本)的任何副本,脚本,模板或列表中包括(在角色) 可以在角色/ X/{文件,模板,任务}引用文件的任务/(DIR取决于 的任务),而不必以相对或绝对路径

问:我的意思是,main.yml t他只有一个有缺省值的文件的有效名称?
- 答:听起来就像它是只有当你想要自动加载特定的var_files为该角色和自动include任务文件。

问:是否有可能命名文件
答:是的,它只是意味着在剧本,你必须使用include指令,并明确其指向唯一的任务的文件名。

例子:

- name: Do role 
    hosts: localhost 
    tasks: 
    - include: roles/operations/tasks/installProgram.yml 
+0

如果我命名默认文件'role/defaults/a.yml',然后在我的任务中包含include语句(不确定是否可能),它会真的*默认*吗?它会被覆盖吗? Ansible如何知道这包括必须具有较低的优先级作为常规变量? – madhead

+0

Ansible新手在这里。尽管如此,我的歉意并不确定。我想当你使用'include'语句时,它仅仅意味着'hey运行这个yml脚本',并且它没有像引用文本中提到的所有角色魔法,比如自动变量加载。 –

1

Ansible将查找在任务,变量,处理程序等默认的角色/目录。角色/默认只是他们的文档中提供的示例。您可以按不同的方式组织您的角色以满足您的需求例如,我有这样的建立;

roles/windows/<somerole>/tasks/main.yml 
roles/linux/<somerole>/tasks/main.yml 

main.yml是运行剧本时会被自动加载(通过“默认”)的唯一文件。如果您想要指定另一个文件名称,您需要使用include函数并指向您的文件,如上所述。

Best Practices”指南对目录结构提供了一些很好的见解。