Ansible 角色。默认值

mad*_*ead 4 ansible

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

Sam*_*Toh 5

根据本文档的声音;

\n

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

\n
\n

角色只是围绕 \xe2\x80\x98include\xe2\x80\x99 指令的自动化,如上所述,并且除了对引用文件的搜索路径处理的一些\n改进之外,实际上不\xe2\x80\x99包含太多额外的魔力。然而,\n这可能是一件大事!

\n

这为每个角色 \xe2\x80\x98x\xe2\x80\x99 指定以下行为:

\n

如果 Roles/x/tasks/main.yml 存在,其中列出的任务将被添加到\n到戏剧中

\n

如果 Roles/x/handlers/main.yml 存在,则其中列出的处理程序将被添加到戏剧中

\n

如果 Roles/x/vars/main.yml 存在,\n其中列出的变量将被添加到戏剧中

\n

如果\nroles/x/defaults/main.yml 存在,其中列出的变量\n将被添加到播放中

\n

如果 Roles/x/meta/main.yml 存在,则其中列出的任何角色\n依赖项都将添加到角色列表中(1.3\n及更高版本)任何副本、脚本、模板或包含任务(在角色中)\n可以引用文件在 Roles/x/{files,templates,tasks}/ (目录取决于\非任务)中,无需相对或绝对路径它们

\n
\n

问:我的意思是,main.yml 是具有默认值的文件的唯一有效名称吗?
\n答:听起来只有当您希望 ansible 自动加载该角色的某些 var_files 并自动执行include任务文件时才如此。

\n

问:是否可以命名文件
\n答:是的,这只是意味着在剧本中您必须使用include指令并明确地将其指向唯一的任务文件名。

\n

例子:

\n
- name: Do role\n  hosts: localhost\n  tasks:\n  - include: roles/operations/tasks/installProgram.yml\n
Run Code Online (Sandbox Code Playgroud)\n


xen*_*nlo 5

正如您在评论中所说,可以在roles/my_role/defaults/. 问题是像这样的文件roles/my_role/defaults/anything_else.yml永远不会默认加载。即使您能够使用 加载它include_vars,它将获得包含的变量 (18/22) 的高优先级

\n

不过,从 Ansible 2.6 开始,您可以使用目录main代替main.yml文件!

\n

通过这样做,您可以通过将变量拆分为roles/my_role/defaults/main/something.yml, roles/my_role/defaults/main/anything_else.yml, \xe2\x80\xa6来达到您的目标

\n

更多详细信息请参见StackOverflow 答案

\n

但实际上这个功能还没有记录(我刚刚创建了一个关于这个的问题)。

\n