Add a new key-value to a json file using Ansible

前端 未结 4 1629
孤独总比滥情好
孤独总比滥情好 2021-02-13 01:47

I\'m using Ansible to automate some configuration steps for my application VM, but having difficult to insert a new key-value to an existing json file on the remote host.

<
4条回答
  •  不思量自难忘°
    2021-02-13 02:49

    since the file is of json format, you could import the file to a variable, append the extra key:value pairs you want, and then write back to the filesystem.

    here is a way to do it:

    ---
    - hosts: localhost
      connection: local
      gather_facts: false
      vars:
    
      tasks:
      - name: load var from file
        include_vars:
          file: /tmp/var.json
          name: imported_var
    
      - debug:
          var: imported_var
    
      - name: append more key/values
        set_fact:
          imported_var: "{{ imported_var | default([]) | combine({ 'hello': 'world' }) }}"
    
      - debug:
          var: imported_var
    
      - name: write var to file
        copy: 
          content: "{{ imported_var | to_nice_json }}" 
          dest: /tmp/final.json
    

    UPDATE:

    as OP updated, the code should work towards remote host, in this case we cant use included_vars or lookups. We could use the slurp module.

    NEW code for remote hosts:

    ---
    - hosts: greenhat
      # connection: local
      gather_facts: false
      vars:
    
      tasks:
      - name: load var from file
        slurp:
          src: /tmp/var.json
        register: imported_var
    
      - debug:
          msg: "{{ imported_var.content|b64decode|from_json }}"
    
      - name: append more key/values
        set_fact:
          imported_var: "{{ imported_var.content|b64decode|from_json | default([]) | combine({ 'hello': 'world' }) }}"
    
      - debug:
          var: imported_var
    
      - name: write var to file
        copy: 
          content: "{{ imported_var | to_nice_json }}" 
          dest: /tmp/final.json
    

    hope it helps

提交回复
热议问题