これまでは、各パラメーターを明示的に呼び出すdatabase.ymlのみを使用していましたが、以下のファイルでは、理解できない文字を使用しています。各行とシンボル(&、*、<<)はどういう意味ですか、このファイルをどのように読みますか?
development: &default
adapter: postgresql
database: dev_development
test: &test
<<: *default
database: test_test
cucumber:
<<: *test
production:
<<: *default
database: test_production
&
はノードのエイリアスをマークします(例では&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 )
&default
は、後で使用するためにこの属性セットに何らかの名前を付けていることを意味します
<<: *default
は、デフォルトとしてラベル付けされたグループのすべての属性を含めることを意味します
これらは、同じ設定を何度も繰り返さずに(DRY it up)環境を参照する方法です。
test: &test
<<: *default
&test
は、これらの特定の設定への参照を作成します。
<<: *default
は、テストにデフォルト設定を使用することを示します
cucumber:
<<: *test
これで、cucumber
にはtest
の設定を使用することがわかりました。
簡単に言えば、この概念は基本クラスと派生クラスに似ています。
基本クラステンプレートでは、すべての一般的な詳細を「&」で示します。つまり、これらのフィールドを必要とする他の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
ただし、拡張フィールドを上書きしたくない場合は、「<<:」をスキップできます。