我看过一本看起来像这样的剧本:
- hosts:
- foo
- bar
roles:
- role: whatever
它可以工作,但是从文档中我希望:
a。主机将以单行分隔的形式给出,例如:
- hosts: foo bar
而不是列表。
b。剧本中“角色”键的值应为列表,例如:
roles:
- whatever
而不是key:value对。
有人可以解释我在yaml中缺少的内容吗,它使这些替代方法在解析后就等效,或者在ansible文档中的何处解释了这些替代定义?
答案 0 :(得分:0)
TL; DR
对于if ( is_cart() ) {
?>
<div class="quantity">
<input type="text" id="<?php echo esc_attr( $input_id ); ?>" class="qty" name="<?php echo esc_attr( $input_name ); ?>" value="<?php echo esc_attr( $min_value ); ?>" readonly="readonly" />
</div>
<?php
} else {
?>
<div class="quantity hidden">
<input type="hidden" id="<?php echo esc_attr( $input_id ); ?>" class="qty" name="<?php echo esc_attr( $input_name ); ?>" value="<?php echo esc_attr( $min_value ); ?>" />
</div>
<?php
}
,请使用您和与此相关的其他人最熟悉的语法。
对于hosts
,仅在还要为角色设置其他属性的情况下,才需要roles
语法。
更长的答案
我偶尔也对此感到疑惑。
在文档部分Intro to Playbooks, Basics中,它表示:
role: <name>
行是一个或多个以冒号分隔的组或主机模式的列表,如Working with Patterns文档中所述。
但是,它没有明确提及此列表也可以是由空格分隔的字符串。
就戏剧的hosts
属性而言,我认为备用语法变体很简单。如果仅传递一个名称(单个字符串),那么显然这就是角色的名称。
如果要传递其他参数(例如变量),则需要创建字典。查看here in the docs一起使用的两种语法的示例(搜索“角色可以接受其他关键字”)。
这两个问题的明确答案在源代码中:
以下是在剧本中解析roles
列表的部分:
https://github.com/ansible/ansible/blob/devel/lib/ansible/playbook/play.py#L104-L116
这是在hosts
中扮演角色的部分:
https://github.com/ansible/ansible/blob/devel/lib/ansible/playbook/role/definition.py#L68-L135
playbook/base.py#preprocess_data
中还有另一个提示:
不常用的方法来对遗留条款进行一些预处理
例如,roles
类继承/重写了此方法,位于我上面链接的摘录的正下方。