Cob*_*ojo 7 jinja2 command-line-arguments ansible ansible-playbook ansible-2.x
每当我运行我的剧本时,都会出现以下警告:
[警告]:从/etc/ansible/roles/foo/tasks/main.yml第17行第3列构建映射时,发现了一个重复的dict密钥(文件).仅使用最后定义的值.
在tasks文件夹中我的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
Run Code Online (Sandbox Code Playgroud)
我的vars文件:
---
my_dict: {SLM: "114", Regular: "255", Production: "1"}
taskid: "{{my_dict[taskname]}}"
Run Code Online (Sandbox Code Playgroud)
要运行我的剧本我做:
ansible-playbook playbooks/foo.yml --extra-vars "server=bar taskname=SLM"
Run Code Online (Sandbox Code Playgroud)
我要做的是获取命令行参数,设置hosts:使用"server"参数,获取任务名称并从中查找id引用的内容.此id用作远程运行的python脚本的第一个输入.
该剧本工作正常,但我不明白为什么我会收到警告.有人能解释这里有什么问题吗?
udo*_*dan 10
你确定17号线附近没有更多吗?当任务中有两个相同的键(或通常在dict中的任何位置)时,将触发此警告.
警告声称有两个file
键,表明任务看起来像这样:
- name: Clean temp files
file: ...
file: ...
Run Code Online (Sandbox Code Playgroud)
一个常见的错误是人们忘记为下一个任务开始一个新的列表项.以下是有效的,而上述不是:
- name: Clean temp files
file: ...
- file: ...
Run Code Online (Sandbox Code Playgroud)
我注意到Ansible有时会在错误消息中获取行甚至文件错误.我看到它tasks/main.yml
在问题实际存在时抱怨handlers/main.yml
.如果file
在该行附近找不到具有重复键的此类任务,则搜索整个文件甚至其他文件.如果在任何地方都找不到这样的东西,那么看起来你在Ansible中发现了一个错误.在这种情况下,你应该在github上重新发布它.