Ansibleを使用して、アプリケーションVMのいくつかの構成手順を自動化していますが、リモートホスト上の既存のjsonファイルに新しいKey-Valueを挿入することは困難です。
このjsonファイルがあるとします:
{
"foo": "bar"
}
そして、新しいキーと値のペアを挿入して、ファイルを次のようにします。
{
"foo": "bar",
"hello": "world"
}
JSON形式は行ベースではないため、lineinfile
モジュールをオプションから除外しています。また、外部モジュールを使用しないことを希望します。 Googleはjsonファイルの読み方を示す例を提供し続けていますが、json値を変更してファイルに書き戻すことについては何もしていません。あなたの助けを本当に感謝してください!
ファイルは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
それが役に立てば幸い
- 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