在 Ansible 中构建映射时发出警告
Warning while constructing a mapping in Ansible
每当我 运行 我的剧本时,就会出现以下警告:
[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 行是清理文件的任务,看起来有点不对劲,所以我猜问题出在前面的 "script" 行)
- 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.
我遇到这个警告是因为在模块中使用了重复的选项。例如,我不小心在模块定义中使用了 "host" 选项 2 次,如下所示:
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
警告已通过省略主机选项之一消失。
每当我 运行 我的剧本时,就会出现以下警告:
[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 行是清理文件的任务,看起来有点不对劲,所以我猜问题出在前面的 "script" 行)
- 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.
我遇到这个警告是因为在模块中使用了重复的选项。例如,我不小心在模块定义中使用了 "host" 选项 2 次,如下所示:
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
警告已通过省略主机选项之一消失。