当我查看
cryptogen
(fabric 命令)配置文件时。我看到那里的符号。
Profiles:
SampleInsecureSolo:
Orderer:
<<: *OrdererDefaults ## what is the `<<`
Organizations:
- *ExampleCom ## what is the `*`
Consortiums:
SampleConsortium:
Organizations:
- *Org1ExampleCom
- *Org2ExampleCom
上面有两个符号
<<
和*
。
Application: &ApplicationDefaults # what is the `&` mean
Organizations:
如您所见,还有另一个符号
&
。
我不知道这些是什么意思。即使查看了源代码我也没有得到任何信息(fabric/common/configtx/tool/configtxgen/main.go
)
嗯,这些是 YAML 文件格式的元素,此处使用它来为
configtxgen
提供配置文件。 “&”符号表示锚点,“*”表示锚点,这基本上用于避免重复,例如:
person: &person
name: "John Doe"
employee: &employee
<< : *person
salary : 5000
将重用 person 的字段,其含义类似于:
employee: &employee
name : "John Doe"
salary : 5000
另一个例子是简单地重用值:
key1: &key some very common value
key2: *key
相当于:
key1: some very common value
key2: some very common value
由于
abric/common/configtx/tool/configtxgen/main.go
使用了架子 YAML 解析器,您将不会在 configtxgen
相关代码中找到对这些符号的任何引用。我建议阅读更多有关 YAML 文件格式的内容。
在 yaml 中,如果数据类似于
user: &userId '123'
username: *userId
equivalent yml is
user: '123'
username: '123'
or
equivalent json will is
{
"user": "123",
"username": "123"
}
所以它基本上允许重用数据,您也可以尝试使用数组而不是像 123 这样的单个值
尝试使用任何 yml 到 json 在线转换器将下面的 yml 转换为 json
users: &users
k1: v1
k2: v2
usernames: *users
我仍然不确定(<<:) after reading this article. I found out that it is called an override. Overrides are used to merge values in the YAML file.
在此示例中,我们要管理服务的三个不同版本。我们定义生产服务,然后定义另外两个服务,例如开发版本和旧版本以捕获回归。
vars:
prod_service:
config: &service_config
env: prod
retries: 3
version: 6.8
dev_service:
config:
<<: *service_config
version: 7.23
regr_service:
config:
<<: *service_config
version: 5.1