共通部分の切り出し

key: &keyのようにキーの横に&block-nameと書くとそのブロックをそれ以降で使い回せるようになります。これは場所はどこでもいいです。以下のbar,quux,piyoはどれも有効です。

foo:
  bar: &bar
    value: value
  baz:
    qux:
      quux: &quux
        value: value
    hoge:
      fuga:
        piyo: &piyo

オブジェクトに埋め込む

commonという共通ブロックを設定しました。

common: &common
  one: one
  two: two

このように<<: *block-nameという記法で使えます。

foo:
  zero: zero
  <<: *common
  three: three

これは JSON にするとこのような感じです。fooブロックの中に共通ブロックのonetwoを入れれました。

{
  "foo": {
    "zero": "zero", 
    "one": "one",
    "two": "two",
    "three": "three"
  }, 
  "common": {
    "two": "two", 
    "one": "one"
  }
}

配列に埋め込む

配列の場合は- *block-nameという記法で埋め込みます。commonは同じものを使います。また例です。

foo:
  - zero: zero
  - *common
  - three:
      value: value

JSON にするとこのような感じです。onetwoというキーを持ったオブジェクトがちゃんと入っているのが分かります。

{
  "foo": [
    {
      "zero": "zero"
    }, 
    {
      "one": "one"
      "two": "two", 
    }, 
    {
      "three": {
        "value": "value"
      }
    }
  ], 
  "common": {
    "two": "two", 
    "one": "one"
  }
}