到目前为止,我只使用了database.yml,每个参数都被明确调出,在下面的文件中,它使用了一些我不理解的字符。每行和符号(&,*,<<<)的含义是什么,我如何阅读此文件?
development: &default
adapter: postgresql
database: dev_development
test: &test
<<: *default
database: test_test
cucumber:
<<: *test
production:
<<: *default
database: test_production
答案 0 :(得分:163)
&
标记节点的别名(在您的示例&default
中将开发节点别名为“default”)并且*
引用名为“default”的别名节点。 <<:
插入该节点的内容。
请允许我在此引用YAML规范:
重复节点(对象)首先由锚点标记(用&符号标记 - “&amp;”),然后别名(用星号 - “*”引用)。
你的例子的部分内容
test: &test
<<: *default
实际上扩展到
test: &test
adapter: postgresql # from the "default" alias
database: dev_development # from the "default" alias
并同时使别名“test”下的“test”节点可用。 请查看YAML specification - 2.2 Structures以获取更多详细信息(或者如果您甚至需要moar docs ++:3.2.2.2. Anchors and Aliases)
答案 1 :(得分:9)
答案 2 :(得分:8)
&default
表示您使用某个名称标记这组属性以供日后使用
<<: *default
表示您包含标记为默认
答案 3 :(得分:2)
它们是一种引用环境的方法,无需反复重复相同的设置(干掉它)。
test: &test
<<: *default
&test
创建对这些特定设置的引用。
<<: *default
表示使用测试的默认设置
cucumber:
<<: *test
现在我们知道,对于cucumber
,我们要使用test
中的设置。
答案 4 :(得分:1)
简单来说,这个概念类似于基类和派生类。
在基类模板中,您使用'&amp;'提及所有常见细节,这意味着它可用于扩展需要这些字段的其他yaml部分。 现在,当您创建另一个超出此“基类”类型结构的配置值的部分时,您将使用'*'以及基类锚(即以'&amp;'开头的那个)。您使用'&lt;&lt;:'作为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
但是,如果您不想覆盖扩展字段,可以跳过'&lt;&lt;:'