Memo/yaml

http://dexlab.net/pukiwiki/index.php?Memo%2Fyaml
 

'Memo/yaml/' には、下位層のページがありません。

yaml

  • http://yaml.org/
    • データ構造であるが、それ自体にアンカーやエイリアス等の機能がある。
    • 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.  
    8. TASK: [debug var=array2] ******************************************************
    9. ok: [127.0.0.1] => {
    10.     "var": {
    11.         "array2": [
    12.             "foo",
    13.             "bar"
    14.         ]
    15.     }
    16. }
    17.  
    18. TASK: [debug var=dict2] *******************************************************
    19. ok: [127.0.0.1] => {
    20.     "var": {
    21.         "dict2": {
    22.             "key1": "foo",
    23.             "key2": "bar"
    24.         }
    25.     }
    26. }

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-06-20 (水) 15:55:09 (1d)