Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ansible 可替代的角色。默认值_Ansible - Fatal编程技术网

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,您可以使用directery
main
来代替
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脚本”,它没有引用文本中提到的所有角色魔法,比如自动变量加载。