ansible - 替代的 ansible 语法
问题描述
我看过一个看起来像这样的剧本:
- hosts:
- foo
- bar
roles:
- role: whatever
它有效,但从文档中我预计:
一个。主机将作为单个空格分隔的行给出,例如:
- hosts: foo bar
而不是一个列表。
湾。剧本中“roles”键的值将是一个列表,例如:
roles:
- whatever
而不是键:值对。
有人可以解释一下我在 yaml 中缺少什么,这使得这些替代方案在解析后就等效,或者在 ansible 文档中它解释了这些替代定义的什么地方?
解决方案
TL;DR
用于hosts
使用您和其他使用它的人最熟悉的语法。
对于,仅当您还想为角色设置其他属性时才roles
需要该语法。role: <name>
更长的答案
我偶尔也想知道这个。
在文档部分Intro to Playbooks, Basics中,它说:
该
hosts
行是一个或多个组或主机模式的列表,以冒号分隔,如使用模式文档中所述。
然而,它并没有明确提到这个列表也可以是一个空格分隔的字符串。
就roles
戏剧的属性而言,我认为替代语法变体是直截了当的。如果您只是传递一个名称(单个字符串),那么这显然是角色的名称。
如果你想传递额外的参数,比如变量,那么你需要创建一个字典。在文档中查看一起使用的两种语法的示例(搜索“角色可以接受其他关键字”)。
这两个问题的明确答案在源代码中:
这是解析hosts
剧中列表的部分:
https ://github.com/ansible/ansible/blob/devel/lib/ansible/playbook/play.py#L104-L116
这是为以下角色执行的部分roles
:
https ://github.com/ansible/ansible/blob/devel/lib/ansible/playbook/role/definition.py#L68-L135
中还有另一个提示playbook/base.py#preprocess_data
:
不常用的方法对遗留术语进行一些预处理
例如,Play
该类继承/覆盖了这个方法,就在我上面链接的代码片段的正下方。
推荐阅读
- svg - 有没有办法绘制形状,以便它们的填充在组内充当不透明但对背景透明
- reactjs - 如何暂停 requestAnimationFrame 并在特定时间恢复(在 React 中)?
- recursion - 以队列为参数的递归空间复杂度
- wpf - 使用 Prism 7.x 和 8.x 在对话框中控制焦点?
- typescript - 在 TypeScript 中派生仅具有另一个自身属性的类型的最佳方法?
- c# - 将 Discord、Twitter、Twitch、YouTube 等链接到您的帐户
- javascript - 如何向现有 url 添加参数?...Django...Paginator
- c# - SQLHelper 类 - 插入/更新方法返回插入的 ID @@identity
- c - sizeof 运算符在 c 中显示错误的结构大小
- arrays - 在 C 中迭代 MDA