command-line-arguments - 在Ansible中构建映射时发出警告

标签 command-line-arguments ansible jinja2 ansible-playbook ansible-2.x

每当我运行我的剧本时,都会出现以下警告:

[WARNING]: While constructing a mapping from /etc/ansible/roles/foo/tasks/main.yml, line 17, column 3, found a duplicate dict key (file). Using last defined value only.



任务文件夹中main.yml的相关部分是这样的:

(第17行是清理文件的任务,似乎有点不对劲,所以我想问题出在前一个“脚本”行)
- name: Run script to format output
  script: foo.py {{ taskname }} /tmp/fcpout.log
- name: Clean temp files
  file: path=/tmp/fcpout.log state=absent

还有我的vars文件:
---
my_dict: {SLM: "114", Regular: "255", Production: "1"}
taskid: "{{my_dict[taskname]}}"

要运行我的剧本,请执行以下操作:
ansible-playbook playbooks/foo.yml --extra-vars "server=bar taskname=SLM"

我想做的是获取命令行参数,设置主机:使用“server”参数,获取任务名称,然后从中找出id所指。此ID用作远程运行的python脚本的第一个输入。

该剧本可以正常运行,但我不明白为什么会收到警告。谁能解释这是怎么回事?

最佳答案

您确定17号线附近没有更多吗?当任务中有两个相同的键(或字典中的任何位置)时,将触发此警告。

警告声明有两个file键,表明任务如下所示:

- name: Clean temp files
  file: ...
  file: ...

一个常见的错误是人们忘记为下一个任务启动新的列表项。以下内容将是有效的,而以上内容则无效:
- name: Clean temp files
  file: ...
- file: ...

我注意到Ansible有时会在错误消息中使行甚至文件出错。我看到它提示tasks/main.yml,而问题实际上出在handlers/main.yml上。如果在该行附近找不到重复的file键重复的任务,请在整个文件甚至其他文件中搜索。如果在任何地方都找不到这样的东西,那么看来您在Ansible中发现了一个错误。在这种情况下,您应该repot it on github

关于command-line-arguments - 在Ansible中构建映射时发出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35945797/

相关文章:

python - Jinja 2 不会迭代我的 python 字典(从 Redis 读取)

ansible - 在ansible中如何在文件末尾添加一个文本 block ,标记前有一个空行?

makefile - Ansible 配置和制作

python - jinja2 函数和过滤器之间的区别?

C:带有字符串的命令行参数

Ansible 控制节点 - 它可以自行配置吗?

django - 在 jinja 模板中切换语言

scheme - Chicken Scheme 是否相当于 Perl 的 $0?

bash - 在 bash 脚本中传递给 for 循环的参数

c - 如何在 C 中为输入和输出文件运行命令行参数