如何使用Shell脚本将新配置文件附加到configtx.yaml文件?

时间:2020-10-28 05:53:17

标签: yaml hyperledger-fabric yq

我是Shell脚本的新手,正在尝试探索它。要求如下。我需要编写一个脚本文件,以便从前端动态获取channelProfile名称,对于此channelProfile,我必须在configtx.yaml文件的Profiles部分下附加现有的TwoOrgsChannel。我有configtx.yaml文件,其配置文件部分定义为:

            Profiles:
            TwoOrgsChannel:
                     Consortium: SampleConsortium
                     <<: *ChannelDefaults
                     Application:
                         <<: *ApplicationDefaults
                         Organizations:
                             - *Org1
                             - *Org2
                         Capabilities:
                           <<: *ApplicationCapabilities

注意:* ChannelDefaults,* ApplicationDefaults,* ApplicationCapabilities是在同一文件(configtx.yaml)中定义的。

输出应如下所示:

            Profiles:
            TwoOrgsChannel:
                     Consortium: SampleConsortium
                     <<: *ChannelDefaults
                     Application:
                         <<: *ApplicationDefaults
                         Organizations:
                             - *Org1
                             - *Org2
                         Capabilities:
                           <<: *ApplicationCapabilities
        FiveOrgsChannel:
                     Consortium: SampleConsortium
                     <<: *ChannelDefaults
                     Application:
                         <<: *ApplicationDefaults
                         Organizations:
                             - *Org1
                             - *Org2
                         Capabilities:
                           <<: *ApplicationCapabilities
            

这是我正在尝试实现的代码,但无法生成预期的输出。

            export CONFIGTXFILE=$1
            export CHANNELPROFILE=$2
             
            yq r --prettyPrint -j $ CONFIGTXFILE > peer.json 
            jq --arg e "${CONFIGTXFILE}" ".Profiles += ${CHANNELPROFILE} Profiles.TwoOrgsChannel " peer.json > mypeer.json
            
            yq r --prettyPrint mypeer.json > configtx.yaml
            

运行此文件时,出现此错误。

            div@DESKTOP-0BSERCC:/mnt/c/Users/Div/Downloads/fabric-samples_3/first-network$ ./scriptFile.sh configtx.yaml FiveOrgsChannel
            jq: error: FiveOrgsChannel/0 is not defined at <top-level>, line 1:
            .Profiles += FiveOrgsChannel, Profiles.TwoOrgsChannel
            jq: error: Profiles/0 is not defined at <top-level>, line 1:
            .Profiles += FiveOrgsChannel, Profiles.TwoOrgsChannel
            jq: 2 compile errors

1 个答案:

答案 0 :(得分:0)

如果将新的“ FiveOrgsChannel”配置文件部分保存到名为“ newProfile.txt”的文件中,则可以:

$ cat newProfile.txt >> configtx.yaml

此命令会将newProfile.txt的内容附加到configtx.yaml文件的末尾。对于此特定用例,这应该是可以接受的,因为“配置文件”部分是configtx.yaml中的最后一个部分

注意:您将需要确保newProfile.txt包含configtx.yaml文件的正确缩进。 (在上面列出的示例中,缩进似乎不正确-FiveOrgsChannel应该与TwoOrgsChannel处于相同的缩进级别。)