web-dev-qa-db-ja.com

Ansibleを使用してjsonファイルに新しいKey-Valueを追加します

Ansibleを使用して、アプリケーションVMのいくつかの構成手順を自動化していますが、リモートホスト上の既存のjsonファイルに新しいKey-Valueを挿入することは困難です。

このjsonファイルがあるとします:

{
  "foo": "bar"
}

そして、新しいキーと値のペアを挿入して、ファイルを次のようにします。

{
  "foo": "bar",
  "hello": "world"
}

JSON形式は行ベースではないため、lineinfileモジュールをオプションから除外しています。また、外部モジュールを使用しないことを希望します。 Googleはjsonファイルの読み方を示す例を提供し続けていますが、json値を変更してファイルに書き戻すことについては何もしていません。あなたの助けを本当に感謝してください!

9
fengye87

ファイルはjson形式なので、ファイルを変数にインポートし、必要な追加のキーと値のペアを追加してから、ファイルシステムに書き戻すことができます。

ここにそれを行う方法があります:

---
- 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 [〜#〜]

oPが更新されると、コードはリモートホストに対して機能するはずです。この場合、included_varsまたはルックアップ。 Slurpモジュールを使用できます。

[〜#〜] new [〜#〜]リモートホストのコード:

---
- 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

それが役に立てば幸い

8
ilias-sp
 - name: update log
    copy:
      content: "{{ log | to_Nice_json}}"
      dest: "{{ log_file }}"
    vars:
      log: "{{ (lookup('file', log_file) | from_json) + ([{'job': (build_id if build_id != '' else 'dev'), 'keystore': ks, 'timestamp': ansible_date_time.iso8601}]) }}"
      log_file: log/log.json
      build_id: "{{ lookup('ENV', 'BUILD_ID') }}"
    tags: log
0
Rich Nahra