首页 > 解决方案 > 从存储在 Ansible 寄存器中的 JSON 类内容中提取键值对

问题描述

我有多个键值对存储在 Ansible 寄存器中。我想从此寄存器中提取每个键和值,并将其作为参数传递给另一个脚本。

注册:水果

的内容fruits如下所示:

{"key":"A","value":"Apple"}
{"key":"B","value":"Banana"}
{"key":"C","value":"Cherry"}

如何从中提取每个键并将fruits其作为参数传递给另一个 shell 脚本?

./script.sh A Apple
./script.sh B Banana
./script.sh C Cherry

提前致谢!

标签: ansibleansible-inventoryansible-factsansible-template

解决方案


如果数据是文本,这正是您发布的内容

    fruits: |-
      {"key":"A","value":"Apple"}
      {"key":"B","value":"Banana"}
      {"key":"C","value":"Cherry"}

然后拆分并转换行。例如

  - debug:
      msg: "./script.sh {{ item.key }} {{ item.value }}"
    loop: "{{ fruits.splitlines()|map('from_yaml')|list }}"

  msg: ./script.sh A Apple
  msg: ./script.sh B Banana
  msg: ./script.sh C Cherry

有效的 YAML

宣言

    fruits:
      {"key":"A","value":"Apple"}
      {"key":"B","value":"Banana"}
      {"key":"C","value":"Cherry"}

不是有效的 YAML


Syntax Error while loading YAML.
  did not find expected key

The offending line appears to be:

      {"key":"A","value":"Apple"}
      {"key":"B","value":"Banana"}
      ^ here

推荐阅读