在Ansible中构建映射时发出警告

时间:2016-03-11 16:56:59

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

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

  

[警告]:从/etc/ansible/roles/foo/tasks/main.yml,第17行,第3列构建映射时,发现   重复的dict键(文件)。仅使用最后定义的值。

我的main.yml在tasks文件夹中的相关部分是这样的:

(第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"

我尝试做的是接受命令行参数,设置主机:使用"服务器"参数,获取任务名称,然后从中查找id引用的内容。这个id用作我远程运行的python脚本的第一个输入。

该剧本工作正常,但我不明白为什么会收到警告。任何人都可以解释这里有什么问题吗?

2 个答案:

答案 0 :(得分:10)

你确定17号线附近没有更多吗?当任务中有两个相同的键(或通常在dict中的任何位置)时,会触发此警告。

警告声称有两个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

答案 1 :(得分:0)

由于在模块中使用重复的选项,我遇到了此警告。例如,不小心在模块定义中两次使用了“ host”选项,如下所示:

 name: Create NEW DB User
 mysql_user:
   name: NEW USER NAME
   login_user: root
   login_password: Root Passwd
   password: NEW USER'S PASSWD
   host: localhost
   priv: 'DB NAME.*:ALL,GRANT'
   state: present
   host: localhost

通过省略主机选项之一,警告已消失。