pip install json2yaml
json2yaml input.json output.yml
YAML構文を使って分割する。
# "echo foo var\n"として実行される - shell: > echo foo var
# "echo foo\necho var"として実行される - shell: | echo foo echo var
# " echo foo\n echo var"として実行される - shell: | echo foo echo var
sudo wget "https://github.com/sahilm/yamldiff/releases/download/0.0.1/yamldiff-v0.0.1-linux-amd64" -O /usr/local/bin/yamldiff sudo chmod +x /usr/local/bin/yamldiff
key1: val1 key2: val2 key3: | example
key1: val1 key3: | example key3-diff key2: val2-diff
yamldiff --file1 example1.yaml --file2 example2.yaml - key2: "val2", - key3: "example\n", + key2: "val2-diff", + key3: "example\nkey3-diff\n",
common: &_common user: readonly db: dummy development: <<: *_common db: dev_db production: <<: *_common db: prod_db
common: &_common - aaa - bbb development: *_common # 成功 development: *_common &_development # エラー。&_developmentアンカーが使えなくて困る &_development: *_common # null development: &_allow_login_full_admin - <<: *_common # エラー <<: *_common # エラー <<: *_common # エラー development: &_allow_login_full_admin - *_common # 成功だが [ [ aaa, bbb ] ] になる development: &_allow_login_full_admin [ *_common ] # 上と同じ
common: &_common ? aaa # aaa: null と同じ ? bbb # bbb: null と同じ development: &_development <<: *_common ? ccc
YAMLの機能。データに「&name」と名前を付け、「*name」で参照できる。 同じ値を書かずに済む。
- hosts: all gather_facts: true sudo: true vars: - var1: &_a1 hoge - var2: *_a1 - array1: &_a2 - foo - bar - array2: *_a2 - dict1: &_a3 key1: foo key2: bar - dict2: *_a3 tasks: - debug: var=var2 - debug: var=array2 - debug: var=dict2
TASK: [debug var=var2] ******************************************************** ok: [127.0.0.1] => { "var": { "var2": "hoge" } } TASK: [debug var=array2] ****************************************************** ok: [127.0.0.1] => { "var": { "array2": [ "foo", "bar" ] } } TASK: [debug var=dict2] ******************************************************* ok: [127.0.0.1] => { "var": { "dict2": { "key1": "foo", "key2": "bar" } } }