yaml †
- データ構造であるが、それ自体にアンカーやエイリアス等の機能がある。
- ansible, puppet hieraでも採用
anchorとaliasを展開 †
jsonとの変換 †
長い行の分割 †
yamldiff: yamlを比較、ソート、色づけ †
- 比較
yamldiff --file1 example1.yaml --file2 example2.yaml
- key2: "val2",
- key3: "example\n",
+ key2: "val2-diff",
+ key3: "example\nkey3-diff\n",
データ型 †
マージ †
- dict型は以下のようにマージできる。yamlの機能
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 ] # 上と同じ
- ? はdict型のvalueなし扱いなのでマージできる
common: &_common ? aaa # aaa: null と同じ
? bbb # bbb: null と同じ
development: &_development
<<: *_common ? ccc
アンカー、エイリアス †
YAMLの機能。データに「&name」と名前を付け、「*name」で参照できる。
同じ値を書かずに済む。
- アンカーを先に、エイリアスを後に書かないとエラーが出る実装もある(puppet hiera)
- ansible 2.5.3では複数のyamlに分割した場合、アンカー/エイリアスは使えなかった
- 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"
}
}
}