什么是`<<` and `&` in yaml mean?

问题描述 投票:0回答:3

当我查看

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 hyperledger-fabric
3个回答
83
投票

嗯,这些是 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 文件格式的内容。


2
投票

在 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

0
投票

我仍然不确定(<<:) 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
© www.soinside.com 2019 - 2024. All rights reserved.