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


161

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

development: &default
  adapter: postgresql
  database: dev_development

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


cucumber:
  <<: *test

production:
  <<: *default
  database: test_production

6
ymlファイルでは、接続パラメーターが類似している場合、別の環境でデータベース接続パラメーターを何度も書き換える必要はありません。ここで上記のケースでは、環境キュウリはテスト環境と同じように正確な接続パラメータを使用します。また、本番環境では、データベース名を除いて、開発と同じように接続パラメーターを使用します。これは、DRY(自分を繰り返さない)コードのようなものです。お気軽に訂正ください。
kxhitiz

回答:


191

&(あなたの例ではノードのためのマーク別名&default「デフォルト」などの開発ノード別名)と*参照名「デフォルト」とエイリアスノード。<<:そのノードの内容を挿入します。

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

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

あなたの例の一部

development: &default
  adapter: postgresql
  database: dev_development

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

実際に拡大する

development: &default
  adapter: postgresql
  database: dev_development

test: &test
  adapter: postgresql       # from the "default" alias
  database: test_test       # overridden by the duplicate key

同時に、「test」ノードをエイリアス「test」の下でも使用できるようにします。

詳細については、YAML仕様 -2.2 構造をご覧ください(または、モアdocs ++も必要な場合:3.2.2.2。アンカーとエイリアス)。


2
おもしろい: "test"はtest:&test adapter:postgresql# "default"エイリアスデータベースから:dev_development# "default"エイリアスデータベースから:test_test完全に正確です。2番目の「データベース」は、「* default」から参照されるデータベースを上書きしますか?
グリップ

2
@Grippはい、データベースキーは<<: *default上書き後に宣言されます。でYAMLそれが生産する{"development"=>{"adapter"=>"postgresql", "database"=>"dev_development"}, "test"=>{"adapter"=>"postgresql", "database"=>"test_test"}}
氏はタオ

13

&default この属性のセットに、後で使用するための名前を付けます。

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



3

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

test: &test
  <<: *default

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

<<: *default テストにデフォルト設定を使用するように言います

cucumber:
  <<: *test

これでcucumber、の設定を使用したいことがわかりましたtest


2

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

基本クラステンプレートでは、すべての一般的な詳細を「&」で記述します。これは、これらのフィールドを必要とする他の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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.