Memo/yaml

http://dexlab.net/pukiwiki/index.php?Memo/yaml
 

yaml

  • データ構造であるが、それ自体にアンカーやエイリアス等の機能がある。
  • ansible, puppet hieraでも採用
  • 記事

データ型


マージ

  • dict型は以下のようにマージできる。yamlの機能
  1. common: &_common  user: readonly  db: dummy development:  <<: *_common  db: dev_db production:  <<: *_common  db: prod_db
  • array型はマージできない
  1. 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なし扱いなのでマージできる
  1. common: &_common  ? aaa # aaa: null と同じ  ? bbb # bbb: null と同じ development: &_development  <<: *_common  ? ccc

アンカー、エイリアス

YAMLの機能。データに「&name」と名前を付け、「*name」で参照できる。 同じ値を書かずに済む。

  • アンカーを先に、エイリアスを後に書かないとエラーが出る実装もある(puppet hiera)
  • ansible 2.5.3では複数のyamlに分割した場合、アンカー/エイリアスは使えなかった
  • 記事
  • ansible playbook
  1. - 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
  • 実行結果
  1. TASK: [debug var=var2] ********************************************************
  2. ok: [127.0.0.1] => {
  3.     "var": {
  4.         "var2": "hoge"
  5.     }
  6. }
  7. TASK: [debug var=array2] ******************************************************
  8. ok: [127.0.0.1] => {
  9.     "var": {
  10.         "array2": [
  11.             "foo",
  12.             "bar"
  13.         ]
  14.     }
  15. }
  16. TASK: [debug var=dict2] *******************************************************
  17. ok: [127.0.0.1] => {
  18.     "var": {
  19.         "dict2": {
  20.             "key1": "foo",
  21.             "key2": "bar"
  22.         }
  23.     }
  24. }

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-08-17 (金) 14:26:05 (4d)