我在我的角色中使用了大量的YAML锚点和引用来将逻辑保留在一个地方,而不是在多个任务中重复自己。以下是一个非常基本的例子。在Ansible 2中防止重复键警告
- &sometask
name: "Some Task"
some_module: with a lot of parameters
with_items: list_A
- <<: *sometask
name: "Some OTHER Task"
with_items: list_B
这个例子可能不会显示这个实际上是如何是有用的,但它是。想象一下,你循环了一系列的字典,将每个字典中的各个键传递给模块,可能有相当复杂的“when”,“failed_when”和“changed_when”条件。你只是想干。
因此,而不是定义两次全年任务的,我用一个锚的第一个和它的所有内容合并成一个新的任务,然后覆盖不同部分。这工作正常。
需要说明的是,这是基本的YAML功能,与Ansible本身无关。
上述定义(什么Ansible时看到在解析YAML文件)的结果将评估为:
- name: "Some Task"
some_module: with a lot of parameters
with_items: list_A
- name: "Some Task"
some_module: with a lot of parameters
with_items: list_A
name: "Some OTHER Task"
with_items: list_B
Ansible 2现在有一个特点,当钥匙已经在任务被定义多次抱怨。它仍然有效,但在运行时,剧本产生不必要的噪音:
TASK [Some OTHER Task] *******************************************************
[WARNING]: While constructing a mapping from /some/file.yml, line 42, column 3, found a duplicate dict key (name). Using last defined value only.
[WARNING]: While constructing a mapping from /some/file.yml, line 42, column 3, found a duplicate dict key (with_items). Using last defined value only.
Ansible配置允许防止deprecation_warnings
和command_warnings
。有没有办法来防止这种警告?
这里有趣的是我正要提交一个拉请求来使这个确切的警告致命,因为它掩盖了剧本中的实际错误。现在我想知道是否应该有某种' - 警告是致命的'标志,而不是...... – larsks