【问题标题】:Write output of ansible task to file in proper JSON format以正确的 JSON 格式将 ansible 任务的输出写入文件
【发布时间】:2019-06-07 08:46:43
【问题描述】:

我正在尝试将 shell 任务输出写入 json,但我遇到了将其解析为一个有效的 json 文件的问题。

这是 shell 任务输出的示例: {"firstname": "John", "lastname": "Smith", "user": "john"}

- name: 'Execute script'
  shell: /tmp/script.sh
  register: script_output

- name: 'Output to json'
  local_action:
    module: lineinfile
    dest: output.json
    line: '{{ script_output.stdout }}'
    create: yes

playbook执行后,json文件内容如下:

{"firstname": "John", "lastname": "Smith", "user": "john"}
{"firstname": "John", "lastname": "Smith", "user": "john"}
{"firstname": "John", "lastname": "Smith", "user": "john"}

如何将输出格式化为附件中的 json 有效格式?

[
    {"firstname": "John", "lastname": "Smith", "user": "john"},
    {"firstname": "John", "lastname": "Smith", "user": "john"},
    {"firstname": "John", "lastname": "Smith", "user": "john"}
]

【问题讨论】:

    标签: json regex ansible ansible-2.x


    【解决方案1】:

    没有 ansible json module 可以这样做。但是您可以为此使用第三方模块,例如 ansible-jsonpatch

    【讨论】:

      【解决方案2】:

      这是一个简单的案例,您可以使用 @JGK 回复的内容,或者您​​可以定义一个列表并将这些 json 元素添加到其中。没有任何模块!

      即:

        - vars:
            elem:
            - {"firstname": "John", "lastname": "Smith", "user": "john"}
            - {"firstname": "John", "lastname": "Smith", "user": "john"}
            - {"firstname": "John", "lastname": "Smith", "user": "john"}
      
        - set_fact:
            my_list: []
      
        - name: add to list
          set_fact:
            my_list: "{{ my_list + [item] }}"
          loop: "{{ elem }}"
      
        - debug:
            msg: "{{ my_list }}"
      
        - copy:
            content: "{{ my_list }}"
            dest: ./x.json
          delegate_to: localhost
      

      这是使用 json python 模块或 jq 验证的结果:

      $ jq . x.json
      [
        {
          "lastname": "Smith",
          "user": "john",
          "firstname": "John"
        },
        {
          "lastname": "Smith",
          "user": "john",
          "firstname": "John"
        },
        {
          "lastname": "Smith",
          "user": "john",
          "firstname": "John"
        }
      ]
      

      Python:

      $ python -m json.tool x.json 
      [
          {
              "firstname": "John",
              "lastname": "Smith",
              "user": "john"
          },
          {
              "firstname": "John",
              "lastname": "Smith",
              "user": "john"
          },
          {
              "firstname": "John",
              "lastname": "Smith",
              "user": "john"
          }
      ]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-03
        • 2011-07-27
        • 2022-01-21
        • 1970-01-01
        • 2016-07-23
        • 2011-02-02
        相关资源
        最近更新 更多