【发布时间】:2021-12-31 06:56:50
【问题描述】:
我想让一个文件由两个文件的组合组成循环,我正在使用 ansible 重复执行 jq 命令。这是我在剧本中的任务:
- name: COMBINE JSON FILES
shell: jq -s '{bgp_verif:.[0], vni_verif:.[1]}' {{ item.name }}-bgp.json {{ item.name }}-vni.json > {{ item.name }}-result.json
with_file:
- "/containers/http_server/data/verif_json/{{ item.name }}-bgp.json"
- "/containers/http_server/data/verif_json/{{ item.name }}-vni.json"
loop: "{{ get_devices.json.results }}"
when: "item.device_type.manufacturer.slug == 'cumulus-linux'"
运行剧本后,我收到此错误
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: AttributeError: 'dict' object has no attribute 'startswith'
fatal: [localhost]: FAILED! => {"msg": "Unexpected failure during module execution.", "stdout": ""}
我在我的任务中遗漏了什么吗?如果您能告诉我如何解决此错误,我将不胜感激,谢谢。
【问题讨论】:
-
您提到的错误与您粘贴的代码没有直接关系,是吗?据称不存在的“开始”在哪里?尝试添加一些上下文。另外,请注意 Ansible 提供过滤器,例如
from_json、to_json、from_yaml、to_yaml、... 不知道您的上下文:我不确定 jq 是否相关。集成的插件和过滤器往往表现良好。 -
除了出现与任务无关的错误之外,您还向我们展示了一个完全无效的任务,因为您同时指定了
loop和with_file。 -
您看到的错误表明 Ansible 使用的 Python 版本与您或您的工具所期望的不同。尝试仔细检查正在运行的 Python 解释器(Python 2 与 3)。