web-dev-qa-db-ja.com

このdatabase.ymlファイルで&、<<、*はどういう意味ですか?

これまでは、各パラメーターを明示的に呼び出すdatabase.ymlのみを使用していましたが、以下のファイルでは、理解できない文字を使用しています。各行とシンボル(&、*、<<)はどういう意味ですか、このファイルをどのように読みますか?

development: &default
  adapter: postgresql
  database: dev_development

test: &test
  <<: *default
  database: test_test


cucumber:
  <<: *test

production:
  <<: *default
  database: test_production
140
holaSenor

&はノードのエイリアスをマークします(例では&defaultは、「デフォルト」として開発ノードをエイリアスします)および*は、「default」という名前のエイリアスノードを参照します。 <<:は、そのノードのコンテンツを挿入します。

ここでYAML仕様を引用させてください:

繰り返されるノード(オブジェクト)は、最初にアンカー(アンパサンド-「&」でマーク)で識別され、その後エイリアス(アスタリスク-「*」で参照)で識別されます。

あなたの例の一部

test: &test
  <<: *default

実際に展開する

test: &test
  adapter: postgresql       # from the "default" alias
  database: dev_development # from the "default" alias

同時に、別名「test」の下で「test」ノードも使用可能にします。詳細については、 YAML仕様-2.2構造 を参照してください(または、moar docs ++が必要な場合: .2.2.2。Anchors and Aliases

168
paukul

これらは、アンカー(&)タグでラベル付けされたノードを参照するノード参照(*)および連想配列マージ(<<)を表します- wikipedia

自分で試してみてください オンライン

9
Sam Ruby

&defaultは、後で使用するためにこの属性セットに何らかの名前を付けていることを意味します

<<: *defaultは、デフォルトとしてラベル付けされたグループのすべての属性を含めることを意味します

8
keymone

これらは、同じ設定を何度も繰り返さずに(DRY it up)環境を参照する方法です。

test: &test
  <<: *default

&testは、これらの特定の設定への参照を作成します。

<<: *defaultは、テストにデフォルト設定を使用することを示します

cucumber:
  <<: *test

これで、cucumberにはtestの設定を使用することがわかりました。

2
thenengah

簡単に言えば、この概念は基本クラスと派生クラスに似ています。

基本クラステンプレートでは、すべての一般的な詳細を「&」で示します。つまり、これらのフィールドを必要とする他のyamlセクションを展開するために使用できます。この「基本クラス」型構造の設定値のスーパーセットである別のセクションを作成するとき、基本クラスアンカー(「&」で始まるもの)とともに「*」を使用します。 「ベースクラス」セクションを実際に配置するためのyaml表記として「<<:」を使用します。これは後でオーバーライドできます。

vsm:
  stub_nsx_mgr: &MGR_CTRL_STUB
    username: ADMIN
    password: $DEFAULT_PASSWORD
    deployment: ovf
    build: $PR_BUILD
    vmnics:
      - network: $MANAGEMENT_NETWORK_0
    vc: vc_0
    ovf_options:
      - --diskMode=$DISKMODE
      - --deploymentOption=$DEPLOYMENT_OPTION
$MGR_0:
    <<: *MGR_CTRL_STUB
    ovf_path_regex: 'appliance.*\.ovf'
    ovf_options:
      - --diskMode=$DISKMODE
      - --deploymentOption=$DEPLOYMENT_OPTION
$CTRL_0:
    <<: *MGR_CTRL_STUB
    ovf_options:
      - --diskMode=$DISKMODE
      - --allowExtraConfig
$CTRL_1:
    *MGR_CTRL_STUB

ただし、拡張フィールドを上書きしたくない場合は、「<<:」をスキップできます。