0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AnsibleでJSONデータの定義方法

Posted at

前提

version Ansible 2.8

目的

set_factを利用し、dictやlistを定義する方法。

背景

半構造データはvars/main.ymlやインベントリでyaml形式で定義出来るが、
動的にこういったデータを作成したい場合の文献がパッと出てこなかったので記事を書いた。

留意点

そもそも静的な変数の場合、varsやdefault変数として定義して方が良い。
あくまでregisterなどを使った後、動的な変数を作成したい場合にset_factは利用される。
set_factは変数としての優先度が高く、他のtask、roleなどを跨いだ場合も有効。
影響範囲が大きいので極力vars、defaultか、インベントリに定義した変数を利用すべき。

具体的なコード

  • dictの場合
    • defaultフィルターを利用し空のdictを定義、そのdictに対し値を定義していく。
    • defaultフィルターを利用せずdict_hogeに値を入れようとするとundefinedのエラーが発生するので注意。
    • combineフィルターを利用し、空のdictに対し値を適用させていく。
- name: define dict
  set_fact:
    dict_hoge: "{{ dict_hoge: | default({}) | combine( {"key1": "value1", "key2", "value2"} ) }}"
  • listの場合
    • defaultフィルターを利用し空のlistを定義、そのdictに対し値を定義していく。
    • defaultフィルターを利用せずdict_hogeに値を入れようとするとundefinedのエラーが発生するので注意。
- name: define list
  set_fact:
    list_hoge: "{{ list_hoge: | default([]) + ["value1", "value2"] }}"

おまけ

構造データ作成時のタイポでなぜかjsonではなくunicodeになる。
単純ミスからえぐいハマり方をした。

- name: define list
  set_fact:
    list_hoge: "{{ list_hoge: | default([]) + ["value1"] }}"


- debug:
    msg: " {{ list_hoge}}"
#         ^ ここに半角スペースが入ってるせいでunicodeになる、つまりlist_hoge[0]などするとエラーが出る。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?