From 58bee812eb07289d0d72205a868f5ef5f75f9df6 Mon Sep 17 00:00:00 2001 From: saikumarbommakanti Date: Thu, 25 Jan 2024 08:22:06 +0000 Subject: [PATCH 1/2] docs(quorum): operations section under guides tab changes: updated quorum-add-new-org.md fixes:2483 Signed-off-by: saikumarbommakanti --- docs/source/guides/quorum-add-new-org.md | 126 +---------------------- 1 file changed, 3 insertions(+), 123 deletions(-) diff --git a/docs/source/guides/quorum-add-new-org.md b/docs/source/guides/quorum-add-new-org.md index 8779a4851157..df168ca1020f 100644 --- a/docs/source/guides/quorum-add-new-org.md +++ b/docs/source/guides/quorum-add-new-org.md @@ -29,132 +29,12 @@ The `network.yaml` file should contain the specific `network.organization` detai Make sure that the genesis block information is given in base64 encoding. Also, if you are adding node to the same cluster as of another node, make sure that you add the ambassador ports of the existing node present in the cluster to the network.yaml -For reference, sample `network.yaml` file looks like below for RAFT consensus (but always check the latest network-quorum-newnode.yaml at `platforms/quourm/configuration/samples`): +For reference, sample `network-quorum-newnode.yaml` file [here](https://github.com/hyperledger/bevel/blob/main/platforms/quorum/configuration/samples/network-quorum-newnode.yaml) +```yaml +--8<-- "platforms/quorum/configuration/samples/network-quorum-newnode.yaml:1:133" ``` ---- -# This is a sample configuration file for Quorum network which has 4 nodes. -# All text values are case-sensitive -network: - # Network level configuration specifies the attributes required for each organization - # to join an existing network. - type: quorum - version: 23.4.0 #this is the version of Quorum - - #Environment section for Kubernetes setup - env: - type: "dev" # tag for the environment. Important to run multiple flux on single cluster - proxy: ambassador # value has to be 'ambassador' as 'haproxy' has not been implemented for Quorum - # These ports are enabled per cluster, so if you have multiple clusters you do not need so many ports - # This sample uses a single cluster, so we have to open 4 ports for each Node. These ports are again specified for each organization below - ambassadorPorts: # Any additional Ambassador ports can be given here, this is valid only if proxy='ambassador' - portRange: # For a range of ports - from: 15010 - to: 15043 - # ports: 15020,15021 # For specific ports - retry_count: 20 # Retry count for the checks on Kubernetes cluster - external_dns: enabled # Should be enabled if using external-dns for automatic route configuration - - # Docker registry details where images are stored. This will be used to create k8s secrets - # Please ensure all required images are built and stored in this registry. - # Do not check-in docker_password. - docker: - url: "ghcr.io/hyperledger" - username: "docker_username" - password: "docker_password" - - # Following are the configurations for the common Quorum network - config: - consensus: "raft" # Options are "raft" and "ibft" - ## Certificate subject for the root CA of the network. - # This is for development usage only where we create self-signed certificates and the truststores are generated automatically. - # Production systems should generate proper certificates and configure truststores accordingly. - subject: "CN=DLT Root CA,OU=DLT,O=DLT,L=London,C=GB" - transaction_manager: "tessera" # Options are "tessera" - # This is the version of "tessera" - tm_version: "23.4.0" - tm_tls: "strict" # Options are "strict" and "off" - tm_trust: "tofu" # Options are: "ca-or-tofu", "ca", "tofu" - ## Transaction Manager nodes public addresses should be provided. - # For "tessera", all participating nodes should be provided - # In the example (for tessera ) below, the domain name is formed by the https://(peer.name).(org.external_url_suffix) - tm_nodes: - - "https://carrier.test.quorum.blockchaincloudpoc.com" - - "https://manufacturer.test.quorum.blockchaincloudpoc.com" - - "https://store.test.quorum.blockchaincloudpoc.com" - - "https://warehouse.test.quorum.blockchaincloudpoc.com" - ##### Following keys are used only to add new Node(s) to existing network. - staticnodes: # Existing network's static nodes file path needs to be given - genesis: # Existing network's genesis.json file path needs to be given - # make sure that the account is unlocked prior to adding a new node - bootnode: - #name of the node - name: carrier - #ambassador url of the node - url: carrierrpc.test.quorum.blockchaincloudpoc.com - #rpc port of the node - rpcport: 80 - #id of the node. - nodeid: 1 - - # Allows specification of one or many organizations that will be connecting to a network. - organizations: - # Specification for the 1st organization. Each organization should map to a VPC and a separate k8s cluster for production deployments - - organization: - name: neworg - external_url_suffix: test.quorum.blockchaincloudpoc.com # This is the url suffix that will be added in DNS recordset. Must be different for different clusters - cloud_provider: aws # Options: aws, azure, gcp - aws: - access_key: "aws_access_key" # AWS Access key, only used when cloud_provider=aws - secret_key: "aws_secret_key" # AWS Secret key, only used when cloud_provider=aws - # Kubernetes cluster deployment variables. The config file path and name has to be provided in case - # the cluster has already been created. - k8s: - context: "cluster_context" - config_file: "cluster_config" - # Hashicorp Vault server address and root-token. Vault should be unsealed. - # Do not check-in root_token - vault: - url: "vault_addr" - root_token: "vault_root_token" - # Git Repo details which will be used by GitOps/Flux. - # Do not check-in git_access_token - gitops: - git_protocol: "https" # Option for git over https or ssh - git_url: "https://github.com//bevel.git" # Gitops https or ssh url for flux value files - branch: "develop" # Git branch where release is being made - release_dir: "platforms/quorum/releases/dev" # Relative Path in the Git repo for flux sync per environment. - chart_source: "platforms/quorum/charts" # Relative Path where the Helm charts are stored in Git repo - git_repo: "github.com//bevel.git" # Gitops git repository URL for git push - username: "git_username" # Git Service user who has rights to check-in in all branches - password: "git_access_token" # Git Server user access token (Optional for ssh; Required for https) - email: "git_email" # Email to use in git config - private_key: "path_to_private_key" # Path to private key file which has write-access to the git repo (Optional for https; Required for ssh) - # The participating nodes are named as peers - services: - peers: - - peer: - name: neworg - subject: "O=Neworg,OU=Neworg,L=51.50/-0.13/London,C=GB" # This is the node subject. L=lat/long is mandatory for supplychain sample app - type: validator # value can be validator or member, only applicable if consensus = 'ibft' - geth_passphrase: 12345 # Passphrase to be used to generate geth account - p2p: - port: 21000 - ambassador: 15010 #Port exposed on ambassador service (use one port per org if using single cluster) - rpc: - port: 8546 - ambassador: 15011 #Port exposed on ambassador service (use one port per org if using single cluster) - transaction_manager: - port: 443 - ambassador: 443 - raft: # Only used if consensus = 'raft' - port: 50401 - ambassador: 15013 - db: # Only used if transaction_manager = "tessera" - port: 3306 - -``` Below three new sections are added to the network.yaml | Field | Description | From c84898cc56f5c4922464c92229fd6d2a53e63dc6 Mon Sep 17 00:00:00 2001 From: mgCepeda Date: Tue, 30 Jan 2024 15:38:36 +0000 Subject: [PATCH 2/2] [fabric] Updated docs **Primary Changes** 1. Updated operations Fabric docs 2. Updated Fabric config file 3. Fixed broken links fixes #2465 #2483 Signed-off-by: mgCepeda --- docs/source/_static/NetworkYamlFabric1.png | Bin 148557 -> 0 bytes docs/source/guides/fabric/add-cli.md | 41 +- docs/source/guides/fabric/add-new-channel.md | 36 +- .../guides/fabric/add-new-orderer-org.md | 45 +-- .../guides/fabric/add-new-orderer-peer.md | 38 +- docs/source/guides/fabric/add-new-org.md | 42 +- docs/source/guides/fabric/add-new-peer.md | 53 +-- .../guides/fabric/chaincode-operations.md | 35 +- .../guides/fabric/deploy-fabric-operator.md | 16 +- .../fabric/deploy-operations-console.md | 9 + .../fabric/external-chaincode-operations.md | 28 +- docs/source/guides/fabric/remove-org.md | 45 +-- .../guides/fabric/setup-cactus-connector.md | 34 +- .../source/guides/fabric/upgrade-chaincode.md | 74 +--- .../fabric/upgrade-network-1.4.x-2.2.x.md | 7 +- docs/source/guides/fabric/upgrade-network.md | 12 +- docs/source/guides/networkyaml-fabric.md | 362 +++++------------- .../network-fabric-add-new-channel.yaml | 2 +- .../network-fabric-add-ordererorg.yaml | 2 +- .../network-fabric-add-organization.yaml | 2 +- .../samples/network-fabric-add-peer.yaml | 2 +- .../network-fabric-remove-organization.yaml | 2 +- .../network-fabricv2-external-chaincode.yaml | 11 +- .../network-fabricv2-raft-add-orderer.yaml | 2 +- .../samples/network-fabricv2.yaml | 2 +- platforms/shared/configuration/site.yaml | 6 +- 26 files changed, 272 insertions(+), 636 deletions(-) delete mode 100644 docs/source/_static/NetworkYamlFabric1.png diff --git a/docs/source/_static/NetworkYamlFabric1.png b/docs/source/_static/NetworkYamlFabric1.png deleted file mode 100644 index 9b9c3f8faa0237d614afacb3a3546bf3d889512d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148557 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

>XKFOgzq21*u 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 UN(S76zwr&JXQcb?l6~mE0WX$ahyVZp diff --git a/docs/source/guides/fabric/add-cli.md b/docs/source/guides/fabric/add-cli.md index 46aad8fecde9..074a34344eba 100644 --- a/docs/source/guides/fabric/add-cli.md +++ b/docs/source/guides/fabric/add-cli.md @@ -7,9 +7,8 @@ # Adding cli to Hyperledger Fabric - [Prerequisites](#prerequisites) -- [Modifying configuration file](#create_config_file) -- [Running playbook to deploy Hyperledger Fabric network](#run_network) - +- [Modifying Configuration File](#modifying-configuration-file) +- [Run playbook](#run-playbook) ## Prerequisites @@ -27,33 +26,21 @@ Refer [this guide](../networkyaml-fabric.md) for details on editing the configur While modifying the configuration file(`network.yaml`) for adding cli, all the existing organizations should have `org_status` tag as `existing` and the new organization should have `org_status` tag as `new` under `network.channels` e.g. - network: - channels: - - channel: - .. - .. - participants: - - organization: - .. - .. - org_status: new # new for new organization(s) - - organization: - .. - .. - org_status: existing # existing for old organization(s) + +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabric-add-organization.yaml:65:139" +``` and under `network.organizations` as - network: - organizations: - - organization: - .. - .. - org_status: new # new for new organization(s) - - organization: - .. - .. - org_status: existing # existing for old organization(s) +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabric-add-organization.yaml:143:155" + .. + .. +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabric-add-organization.yaml:406:414" + .. + .. +``` The `network.yaml` file should contain the specific `network.organization` details along with the orderer information. diff --git a/docs/source/guides/fabric/add-new-channel.md b/docs/source/guides/fabric/add-new-channel.md index 5d7e2480f64c..7b9f85183a19 100644 --- a/docs/source/guides/fabric/add-new-channel.md +++ b/docs/source/guides/fabric/add-new-channel.md @@ -7,8 +7,8 @@ # Adding a new channel in Hyperledger Fabric - [Prerequisites](#prerequisites) -- [Modifying configuration file](#create_config_file) -- [Running playbook to deploy Hyperledger Fabric network](#run_network) +- [Modifying Configuration File](#modifying-configuration-file) +- [Run playbook](#run-playbook) @@ -27,41 +27,19 @@ Refer [this guide](../networkyaml-fabric.md) for details on editing the configur While modifying the configuration file(`network.yaml`) for adding new channel, all the existing channel should have `channel_status` tag as `existing` and the new channel should have `channel_status` tag as `new` under `network.channels` e.g. - network: - channels: - - channel: - channel_status: existing - .. - .. - participants: - - organization: - .. - .. - - organization: - .. - .. - - channel: - channel_status: new - .. - .. - participants: - - organization: - .. - .. - - organization: - .. - .. - +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabric-add-new-channel.yaml:66:193" +``` The `network.yaml` file should contain the specific `network.organization` details along with the orderer information. -For reference, see `network-fabric-add-channel.yaml` file [here](https://github.com/hyperledger/bevel/tree/main/platforms/hyperledger-fabric/configuration/samples). +For reference, see `network-fabric-add-channel.yaml` file [here](https://github.com/hyperledger/bevel/tree/main/platforms/hyperledger-fabric/configuration/samples/network-fabric-add-new-channel.yaml). ## Run playbook -The [add-new-channel.yaml](https://github.com/hyperledger/bevel/tree/main/platforms/shared/configuration/add-new-channel.yaml) playbook is used to add a new channel to the existing network. This can be done using the following command +The [add-new-channel.yaml](https://github.com/hyperledger/bevel/blob/main/platforms/hyperledger-fabric/configuration/add-new-channel.yaml) playbook is used to add a new channel to the existing network. This can be done using the following command ``` ansible-playbook platforms/hyperledger-fabric/configuration/add-new-channel.yaml --extra-vars "@path-to-network.yaml" diff --git a/docs/source/guides/fabric/add-new-orderer-org.md b/docs/source/guides/fabric/add-new-orderer-org.md index 04f429da068d..121760dd2377 100644 --- a/docs/source/guides/fabric/add-new-orderer-org.md +++ b/docs/source/guides/fabric/add-new-orderer-org.md @@ -7,9 +7,8 @@ # Adding a new Orderer organization in Hyperledger Fabric - [Prerequisites](#prerequisites) -- [Modifying configuration file](#create_config_file) -- [Running playbook to deploy Hyperledger Fabric network](#run_network) - +- [Modifying Configuration File](#modifying-configuration-file) +- [Run playbook](#run-playbook) ## Prerequisites @@ -17,7 +16,7 @@ To add a new Orderer organization, a fully configured Fabric network must be pre --- **NOTE**: Addition of a new Orderer organization has been tested on an existing network which is created by Bevel. Networks created using other methods may be suitable but this has not been tested by Bevel team. -Addition of new Orderer organization only works with Fabric 2.2.2 and RAFT Service. +Addition of new Orderer organization only works with Fabric 2.2.2, 2.5.4 and RAFT Service. --- @@ -28,38 +27,26 @@ Refer [this guide](../networkyaml-fabric.md) for details on editing the configur While modifying the configuration file(`network.yaml`) for adding new orderer organization, all the existing organizations should have `org_status` tag as `existing` and the new organization should have `org_status` tag as `new` under `network.channels` e.g. - network: - channels: - - channel: - .. - .. - participants: - - organization: - .. - .. - org_status: new # new for new organization(s) - - organization: - .. - .. - org_status: existing # existing for old organization(s) + +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabric-add-ordererorg.yaml:64:138" +``` and under `network.organizations` as - network: - organizations: - - organization: - .. - .. - org_status: new # new for new organization(s) - - organization: - .. - .. - org_status: existing # existing for old organization(s) +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabric-add-ordererorg.yaml:145:154" + .. + .. +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabric-add-ordererorg.yaml:230:239" + .. + .. +``` The `network.yaml` file should contain the specific `network.organization` details along with the orderer information. -For reference, see `network-fabric-add-ordererorg.yaml` file [here](https://github.com/hyperledger/bevel/tree/main/platforms/hyperledger-fabric/configuration/add-orderer-organization.yaml). +For reference, see `network-fabric-add-ordererorg.yaml` file [here](https://github.com/hyperledger/bevel/tree/main/platforms/hyperledger-fabric/configuration/samples/network-fabric-add-ordererorg.yaml). ## Run playbook diff --git a/docs/source/guides/fabric/add-new-orderer-peer.md b/docs/source/guides/fabric/add-new-orderer-peer.md index 47b433dfe5e7..8316a7e71f58 100644 --- a/docs/source/guides/fabric/add-new-orderer-peer.md +++ b/docs/source/guides/fabric/add-new-orderer-peer.md @@ -6,10 +6,9 @@ # Adding a new RAFT orderer to existing Orderer organization in Hyperledger Fabric - - [Prerequisites](#prerequisites) - - [Modifying Configuration File](#modifying-configuration-file) - - [Run playbook](#run-playbook) - - [Chaincode Installation](#chaincode-installation) +- [Prerequisites](#prerequisites) +- [Modifying Configuration File](#modifying-configuration-file) +- [Run playbook](#run-playbook) @@ -31,24 +30,21 @@ For generic instructions on the Fabric configuration file, refer [this guide](.. While modifying the configuration file(`network.yaml`) for adding new peer, all the existing orderers should have `status` tag as `existing` and the new orderers should have `status` tag as `new` under `network.organizations` as - network: - organizations: - - organization: - org_status: existing # org_status must be existing when adding peer - .. - .. - services: - orderers: - - orderer: - .. - .. - status: new # new for new peers(s) - - orderer: - .. - .. - status: existing # existing for existing peers(s) - +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2-raft-add-orderer.yaml:126:135" + .. + .. +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2-raft-add-orderer.yaml:174:174" +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2-raft-add-orderer.yaml:185:220" + +``` +and under `network.orderers` the new orderer must be added. + +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2-raft-add-orderer.yaml:42:66" +``` + The `network.yaml` file should contain the specific `network.organization` details. Ensure the following is considered when adding the new orderer on a different cluster: diff --git a/docs/source/guides/fabric/add-new-org.md b/docs/source/guides/fabric/add-new-org.md index 0fe219cdb75e..c5abe3baf51c 100644 --- a/docs/source/guides/fabric/add-new-org.md +++ b/docs/source/guides/fabric/add-new-org.md @@ -7,8 +7,8 @@ # Adding a new organization in Hyperledger Fabric - [Prerequisites](#prerequisites) -- [Modifying configuration file](#create_config_file) -- [Running playbook to deploy Hyperledger Fabric network](#run_network) +- [Modifying Configuration File](#modifying-configuration-file) +- [Run playbook](#run-playbook) @@ -27,38 +27,26 @@ Refer [this guide](../networkyaml-fabric.md) for details on editing the configur While modifying the configuration file(`network.yaml`) for adding new organization, all the existing organizations should have `org_status` tag as `existing` and the new organization should have `org_status` tag as `new` under `network.channels` e.g. - network: - channels: - - channel: - .. - .. - participants: - - organization: - .. - .. - org_status: new # new for new organization(s) - - organization: - .. - .. - org_status: existing # existing for old organization(s) +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabric-add-organization.yaml:65:139" +``` and under `network.organizations` as - network: - organizations: - - organization: - .. - .. - org_status: new # new for new organization(s) - - organization: - .. - .. - org_status: existing # existing for old organization(s) +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabric-add-organization.yaml:144:155" + .. + .. +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabric-add-organization.yaml:406:414" + .. + .. + +``` The `network.yaml` file should contain the specific `network.organization` details along with the orderer information. -For reference, see `network-fabric-add-organization.yaml` file [here](https://github.com/hyperledger/bevel/tree/main/platforms/hyperledger-fabric/configuration/samples). +For reference, see `network-fabric-add-organization.yaml` file [here](https://github.com/hyperledger/bevel/tree/main/platforms/hyperledger-fabric/configuration/samples/network-fabric-add-organization.yaml). ## Run playbook diff --git a/docs/source/guides/fabric/add-new-peer.md b/docs/source/guides/fabric/add-new-peer.md index ec79ee4a61e4..7ecb7b05f6dc 100644 --- a/docs/source/guides/fabric/add-new-peer.md +++ b/docs/source/guides/fabric/add-new-peer.md @@ -24,51 +24,30 @@ To add a new peer a fully configured Fabric network must be present already, i.e ## Modifying Configuration File -A Sample configuration file for adding new peer is available [here](https://github.com/hyperledger/bevel/blob/main/platforms/hyperledger-fabric/configuration/samples/network-fabricv-add-peer.yaml). Please go through this file and all the comments there and edit accordingly. +A Sample configuration file for adding new peer is available [here](https://github.com/hyperledger/bevel/blob/main/platforms/hyperledger-fabric/configuration/samples/network-fabric-add-peer.yaml). Please go through this file and all the comments there and edit accordingly. For generic instructions on the Fabric configuration file, refer [this guide](../networkyaml-fabric.md). While modifying the configuration file(`network.yaml`) for adding new peer, all the existing peers should have `peerstatus` tag as `existing` and the new peers should have `peerstatus` tag as `new` under `network.channels` e.g. - network: - channels: - - channel: - .. - .. - participants: - - organization: - peers: - - peer: - .. - .. - peerstatus: new # new for new peers(s) - gossipAddress: peer0.xxxx.com # gossip Address must be one existing peer - - peer: - .. - .. - peerstatus: existing # existing for existing peers(s) - +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabric-add-peer.yaml:60:87" +``` and under `network.organizations` as - network: - organizations: - - organization: - org_status: existing # org_status must be existing when adding peer +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabric-add-peer.yaml:94:103" + .. + .. +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabric-add-peer.yaml:144:144" +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabric-add-peer.yaml:153:159" + .. .. +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabric-add-peer.yaml:187:192" .. - services: - peers: - - peer: - .. - .. - peerstatus: new # new for new peers(s) - gossipAddress: peer0.xxxx.com # gossip Address must be one existing peer - - peer: - .. - .. - peerstatus: existing # existing for existing peers(s) - + .. +``` The `network.yaml` file should contain the specific `network.organization` details. Orderer information is needed if you are going to install/upgrade the existing chaincodes, otherwise it is not needed. And the `org_status` must be `existing` when adding peer. @@ -100,8 +79,8 @@ ansible-playbook platforms/hyperledger-fabric/configuration/add-peer.yaml --extr Use the same network.yaml if you need to install chaincode on the new peers. --- -**NOTE:** With Fabric 2.2 chaincode lifecyle, re-installing chaincode on new peer is not needed as when the blocks are synced, the new peer will have access to already committed chaincode. If still needed, you can upgrade the version of the chaincode and install on all peers. +**NOTE:** With Fabric 2.2 and 2.5 chaincode lifecyle, re-installing chaincode on new peer is not needed as when the blocks are synced, the new peer will have access to already committed chaincode. If still needed, you can upgrade the version of the chaincode and install on all peers. --- -Refer [this guide](./chaincode-operations.md) for details on installing chaincode. +Refer [Install chaincode guide](./chaincode-operations.md) or [Install external chaincode guide](./external-chaincode-operations.md) for details on installing chaincode. diff --git a/docs/source/guides/fabric/chaincode-operations.md b/docs/source/guides/fabric/chaincode-operations.md index fe89a1ca5ff3..1cb85444447b 100644 --- a/docs/source/guides/fabric/chaincode-operations.md +++ b/docs/source/guides/fabric/chaincode-operations.md @@ -23,44 +23,23 @@ The `network.yaml` file should contain the specific `network.organizations.servi For reference, following snippet shows that section of `network.yaml` -``` ---- -network: - .. - .. - organizations: - - organization: - name: manufacturer +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:241:248" + .. .. - .. - services: - peers: - - peer: - name: peer0 - .. - chaincodes: - - name: "chaincode_name" #This has to be replaced with the name of the chaincode - version: "chaincode_version" # This has to be different than the current version - maindirectory: "chaincode_main" #The main directory where chaincode is needed to be placed - repository: - username: "git_username" # Git Service user who has rights to check-in in all branches - password: "git_access_token" - url: "github.com/hyperledger/bevel.git" - branch: develop - path: "chaincode_src" #The path to the chaincode - arguments: 'chaincode_args' #Arguments to be passed along with the chaincode parameters - endorsements: "" #Endorsements (if any) provided along with the chaincode +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:297:297" +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:304:338" ``` ## Chaincode Operations in Bevel for the deployed Hyperledger Fabric network The playbook [chaincode-ops.yaml](https://github.com/hyperledger/bevel/tree/main/platforms/hyperledger-fabric/configuration/chaincode-ops.yaml) is used to install and instantiate chaincode for the existing fabric network. -For Fabric v2.2 multiple operations such as approve, commit and invoke the chaincode are available in the same playbook. +For Fabric v2.2 and 2.5 multiple operations such as approve, commit and invoke the chaincode are available in the same playbook. This can be done by using the following command ``` - ansible-playbook platforms/hyperledger-fabric/configuration/chaincode-ops.yaml --extra-vars "@path-to-network.yaml" +ansible-playbook platforms/hyperledger-fabric/configuration/chaincode-ops.yaml --extra-vars "@path-to-network.yaml" ``` --- diff --git a/docs/source/guides/fabric/deploy-fabric-operator.md b/docs/source/guides/fabric/deploy-fabric-operator.md index b4d92c2e0c15..f79df4845705 100644 --- a/docs/source/guides/fabric/deploy-fabric-operator.md +++ b/docs/source/guides/fabric/deploy-fabric-operator.md @@ -27,9 +27,17 @@ Due to open issues with bevel-operator-fabric, it is not recommended for Product A Sample configuration file for deploying using bevel-operator-fabric is available [here](https://github.com/hyperledger/bevel/blob/main/platforms/hyperledger-fabric/configuration/samples/network-operator-fabric.yaml). Following are the main changes in this file from previous versions: 1. `network.env.type` must be `operator`. This is how Ansible will understand that bevel-operator-fabric will be used. -1. `network.env.proxy` must be `istio` as no other proxy is supported by bevel-operator-fabric. -1. Only `443` is supported as external port because that is what bevel-operator-fabric supports. -1. `vault` and `gitops` sections are removed as they are not applicable. +2. `network.env.proxy` must be `istio` as no other proxy is supported by bevel-operator-fabric. +3. Only `443` is supported as external port because that is what bevel-operator-fabric supports. +4. `vault` and `gitops` sections are removed as they are not applicable. + + +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-operator-fabric.yaml:8:21" + .. + .. +``` + For generic instructions on the Fabric configuration file, refer [this guide](../networkyaml-fabric.md). @@ -44,7 +52,7 @@ ansible-playbook platforms/shared/configuration/site.yaml -e "@./build/network.y ``` The `site.yaml` playbook, in turn calls various playbooks depending on the configuration file and sets up your DLT/Blockchain network. -The [deploy-fabric-console.yaml](https://github.com/hyperledger/bevel/tree/main/platforms/hyperledger-fabric/configuration/deploy-operator-network.yaml) playbook can be used as well if the pre-requisites like Istio and krew is already installed. This can be done using the following command +The [deploy-operator-network.yaml](https://github.com/hyperledger/bevel/tree/main/platforms/hyperledger-fabric/configuration/deploy-operator-network.yaml) playbook can be used as well if the pre-requisites like Istio and krew is already installed. This can be done using the following command ``` ansible-playbook platforms/hyperledger-fabric/configuration/deploy-operator-network.yaml -e "@/path/to/network.yaml" diff --git a/docs/source/guides/fabric/deploy-operations-console.md b/docs/source/guides/fabric/deploy-operations-console.md index c3a1b4f403b2..8d87483ae9f7 100644 --- a/docs/source/guides/fabric/deploy-operations-console.md +++ b/docs/source/guides/fabric/deploy-operations-console.md @@ -29,6 +29,15 @@ If you want to create the JSON files automatically by using our ansible playbook A Sample configuration file for deploying Operations Console is available [here](https://github.com/hyperledger/bevel/blob/main/platforms/hyperledger-fabric/configuration/samples/network-fabricv2-raft.yaml). Main change being addition of a new key `organization.fabric_console` which when `enabled` will deploy the operations console for the organization. +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:151:166" + .. + .. +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:340:350" + .. + .. +``` + For generic instructions on the Fabric configuration file, refer [this guide](../networkyaml-fabric.md). diff --git a/docs/source/guides/fabric/external-chaincode-operations.md b/docs/source/guides/fabric/external-chaincode-operations.md index 5a4399f69017..0fe9459d0843 100644 --- a/docs/source/guides/fabric/external-chaincode-operations.md +++ b/docs/source/guides/fabric/external-chaincode-operations.md @@ -143,33 +143,7 @@ While modifying the configuration file (`network.yaml`), the following two secti - `crypto_mount_path`: If TLS is enabled, path to mount TLS certs and key in the chaincode server pod ```yaml - network: - channels: - - channel: - .. - .. - participants: - organizations: - - organization: - services: - peers: - name: - type: - gossippeeraddress: - cli: - grpc: - port: - chaincodes: - - name: "assettransfer" #This has to be replaced with the name of the chaincode - version: "1" #This has to be replaced with the version of the chaincode - external_chaincode: true - tls: true - buildpack_path: /home/bevel/fabric-samples/asset-transfer-basic/chaincode-external/sampleBuilder - image: ghcr.io/hyperledger/bevel-samples-example:1.0 - arguments: '\"InitLedger\",\"\"' #Arguments to be passed along with the chaincode parameters - crypto_mount_path: /crypto # OPTIONAL | tls: true | Path where crypto shall be mounted for the chaincode server - .. - .. +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2-external-chaincode.yaml:289:319" ``` ## Execute playbook diff --git a/docs/source/guides/fabric/remove-org.md b/docs/source/guides/fabric/remove-org.md index 2a66fdbe42e3..87c9d3de0ad6 100644 --- a/docs/source/guides/fabric/remove-org.md +++ b/docs/source/guides/fabric/remove-org.md @@ -6,9 +6,9 @@ # Removing an organization in Hyperledger Fabric - - [Prerequisites](#prerequisites) - - [Modifying Configuration File](#modifying-configuration-file) - - [Run playbook](#run-playbook) +- [Prerequisites](#prerequisites) +- [Modifying Configuration File](#modifying-configuration-file) +- [Run playbook](#run-playbook) @@ -27,43 +27,30 @@ Refer [this guide](../networkyaml-fabric.md) for details on editing the configur While modifying the configuration file(`network.yaml`) for removing an organization, all the existing organizations should have `org_status` tag as `existing` and to be deleted organization should have `org_status` tag as `delete` under `network.channels` e.g. - network: - channels: - - channel: - .. - .. - participants: - - organization: - .. - .. - org_status: delete # delete for to be deleted organization(s) - - organization: - .. - .. - org_status: existing # existing for old organization(s) +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabric-remove-organization.yaml:62:112" +``` and under `network.organizations` as - network: - organizations: - - organization: - .. - .. - org_status: delete # delete for to be deleted organization(s) - - organization: - .. - .. - org_status: existing # existing for old organization(s) +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabric-remove-organization.yaml:117:128" + .. + .. +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabric-remove-organization.yaml:381:389" + .. + .. +``` The `network.yaml` file should contain the specific `network.organization` details along with the orderer information. -For reference, see `network-fabric-remove-organization.yaml` file [here](https://github.com/hyperledger/bevel/tree/main/platforms/hyperledger-fabric/configuration/samples). +For reference, see `network-fabric-remove-organization.yaml` file [here](https://github.com/hyperledger/bevel/tree/main/platforms/hyperledger-fabric/configuration/samples/network-fabric-remove-organization.yaml). ## Run playbook -The [remove-organization.yaml](https://github.com/hyperledger/bevel/platforms/hyperledger-fabric/configuration/remove-organization.yaml) playbook is used to remove organization(s) from the existing network. This can be done using the following command +The [remove-organization.yaml](https://github.com/hyperledger/bevel/tree/main/platforms/hyperledger-fabric/configuration/remove-organization.yaml) playbook is used to remove organization(s) from the existing network. This can be done using the following command ``` ansible-playbook platforms/hyperledger-fabric/configuration/remove-organization.yaml --extra-vars "@path-to-network.yaml" diff --git a/docs/source/guides/fabric/setup-cactus-connector.md b/docs/source/guides/fabric/setup-cactus-connector.md index 6b42500daf84..f404bc84671a 100644 --- a/docs/source/guides/fabric/setup-cactus-connector.md +++ b/docs/source/guides/fabric/setup-cactus-connector.md @@ -7,8 +7,8 @@ # Deploy Fabric Cactus connector - [Prerequisites](#prerequisites) -- [Modifying configuration file](#create_config_file) -- [Running playbook to deploy Hyperledger Fabric network](#run_network) +- [Modifying Configuration File](#modifying-configuration-file) +- [Run playbook](#run-playbook) @@ -27,31 +27,17 @@ Refer [this guide](../networkyaml-fabric.md) for details on editing the configur While modifying the configuration file(`network.yaml`)to deploy the cactus connector, all peers in member organizations should have `cactus_connector` tag as `enabled` e.g. - network: - organizations: - - organization: - type: peer +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:242:248" + .. + .. +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:297:297" +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:304:312" .. .. - services: - peers: - - peer: - .. - .. - cactus_connector: enabled # set to enabled to create a cactus connector for Fabric - - - organization: - type: peer - .. - .. - services: - peers: - - peer: - .. - .. - cactus_connector: enabled # set to enabled to create a cactus connector for Fabric +``` -For reference, see `network-fabricv2.yaml` file [here](https://github.com/hyperledger/bevel/tree/main/platforms/hyperledger-fabric/configuration/samples). +For reference, see `network-fabricv2.yaml` file [here](https://github.com/hyperledger/bevel/tree/main/platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml). diff --git a/docs/source/guides/fabric/upgrade-chaincode.md b/docs/source/guides/fabric/upgrade-chaincode.md index e10ca134835f..b01e3c84f56a 100644 --- a/docs/source/guides/fabric/upgrade-chaincode.md +++ b/docs/source/guides/fabric/upgrade-chaincode.md @@ -6,12 +6,11 @@ # Upgrading chaincode in Hyperledger Fabric -- [Upgrading chaincode in Hyperledger Fabric](#upgrading-chaincode-in-hyperledger-fabric) - - [Pre-requisites](#pre-requisites) - - [Modifying configuration file](#modifying-configuration-file) - - [Run playbook for Fabric version 1.4.x](#run-playbook-for-fabric-version-14x) - - [Run playbook for Fabric version 2.2.x](#run-playbook-for-fabric-version-22x) - - [Run playbook for Fabric version 2.2.x with external chaincode](#run-playbook-for-fabric-version-22x-with-external-chaincode) +- [Pre-requisites](#pre-requisites) +- [Modifying configuration file](#modifying-configuration-file) +- [Run playbook for Fabric version 1.4.x](#run-playbook-for-fabric-version-14x) +- [Run playbook for Fabric version 2.2.x](#run-playbook-for-fabric-version-22x) +- [Run playbook for Fabric version 2.2.x with external chaincode](#run-playbook-for-fabric-version-22x-with-external-chaincode) ## Pre-requisites @@ -26,35 +25,12 @@ The `network.yaml` file should contain the specific `network.organizations.servi For reference, following snippet shows that section of `network.yaml` -``` ---- -network: - .. - .. - organizations: - - organization: - name: manufacturer +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:242:248" + .. .. - .. - services: - peers: - - peer: - name: peer0 - .. - chaincodes: - - name: "chaincode_name" #This has to be replaced with the name of the chaincode - version: "chaincode_version" # This has to be greater than the current version, should be an integer. - sequence: "2" # sequence of the chaincode, update this only for chaincode upgrade depending on the last sequence - maindirectory: "chaincode_main" #The main directory where chaincode is needed to be placed - lang: "java" # The chaincode language, optional field with default vaule of 'go'. - repository: - username: "git_username" # Git Service user who has rights to check-in in all branches - password: "git_access_token" - url: "github.com/hyperledger/bevel.git" - branch: develop - path: "chaincode_src" #The path to the chaincode - arguments: 'chaincode_args' #Arguments to be passed along with the chaincode parameters - endorsements: "" #Endorsements (if any) provided along with the chaincode +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:297:297" +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:304:338" ``` When the chaincode is an external service, `network.organizations.services.peers.chaincodes[*].upgrade_chaincode` variable must also be added to change the version. If only the sequence is modified, it isn't necessary to add this field. @@ -63,32 +39,12 @@ The sequence must be incremented in each execution regardless of whether the ver For reference, following snippet shows that section of `network.yaml` -``` ---- -network: - .. - .. - organizations: - - organization: - name: manufacturer +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2-external-chaincode.yaml:227:233" + .. .. - .. - services: - peers: - - peer: - name: peer0 - .. - chaincodes: - - name: "chaincode_name" #This has to be replaced with the name of the chaincode - version: "2" #This has to be replaced with the version of the chaincode - sequence: "2" - external_chaincode: true - upgrade_chaincode: true - tls: true - buildpack_path: /home/fabric-samples/asset-transfer-basic/chaincode-external/sampleBuilder # The path where buildpacks are locally stored - image: ghcr.io/hyperledger/bevel-samples-example:1.0 - arguments: '\"InitLedger\",\"\"' # Init Arguments to be passed which will mark chaincode as init-required - crypto_mount_path: /crypto # OPTIONAL | tls: true | Path where crypto shall be mounted for the chaincode server +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2-external-chaincode.yaml:282:282" +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2-external-chaincode.yaml:289:321" ``` diff --git a/docs/source/guides/fabric/upgrade-network-1.4.x-2.2.x.md b/docs/source/guides/fabric/upgrade-network-1.4.x-2.2.x.md index 676f186903fc..f7acd80f7a53 100755 --- a/docs/source/guides/fabric/upgrade-network-1.4.x-2.2.x.md +++ b/docs/source/guides/fabric/upgrade-network-1.4.x-2.2.x.md @@ -45,9 +45,10 @@ Update the network network.yaml [here](https://github.com/hyperledger/bevel/tree a. Set the required version tag under `network.version` for upgrading the base images of CA, orderer and peer. b. Add the upgrade flag to true For example: - network: - version: 2.2.2 - upgrade: true + +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:8:16" +``` Note: The network.yaml should reflect the entire network which requires to be upgraded diff --git a/docs/source/guides/fabric/upgrade-network.md b/docs/source/guides/fabric/upgrade-network.md index 0d28d8b476b2..ebcfa71da2d6 100644 --- a/docs/source/guides/fabric/upgrade-network.md +++ b/docs/source/guides/fabric/upgrade-network.md @@ -34,17 +34,17 @@ For example, for Fabric v1.4.8, these are the image tags of the supporting docke The network.yaml [here](https://github.com/hyperledger/bevel/tree/main/platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml) should be updated with the required version tag under `network.version` for upgrading the base images of CA, orderer and peer. For example: - - network: - version: 1.4.8 +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:8:16" +``` 2 files need to be edited in order to support version change for kafka, zookeeper and couchDB | File | Fabric entity | Key | |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------|-------------------------| -| [orderer vars](https://github.com/hyperledger/bevel/tree/main/platforms/hyperledger-fabric/configuration/roles/create/orderers/vars/main.yaml) | kafka | kafka_image_version | -| [orderer vars](https://github.com/hyperledger/bevel/tree/main/platforms/hyperledger-fabric/configuration/roles/create/orderers/vars/main.yaml) | zookeeper | zookeeper_image_version | -| [peer vars](https://github.com/hyperledger/bevel/tree/main/platforms/hyperledger-fabric/configuration/roles/create/peers/vars/main.yaml) | couchDB | couchdb_image_version | +| [orderer vars](https://github.com/hyperledger/bevel/blob/main/platforms/hyperledger-fabric/configuration/roles/helm_component/vars/main.yaml#L35) | kafka | kafka_image | +| [orderer vars](https://github.com/hyperledger/bevel/blob/main/platforms/hyperledger-fabric/configuration/roles/helm_component/vars/main.yaml#L36) | zookeeper | zookeeper_image | +| [peer vars](https://github.com/hyperledger/bevel/blob/main/platforms/hyperledger-fabric/configuration/roles/helm_component/vars/main.yaml#L53) | couchDB | couchdb_image | ## Executing Ansible playbook The playbook [site.yaml](https://github.com/hyperledger/bevel/tree/main/platforms/shared/configuration/site.yaml) ([ReadMe](https://github.com/hyperledger/bevel/tree/main/platforms/shared/configuration/)) can be run after the configuration file (for example: [network.yaml](https://github.com/hyperledger/bevel/tree/main/platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml) for Fabric) has been updated. diff --git a/docs/source/guides/networkyaml-fabric.md b/docs/source/guides/networkyaml-fabric.md index 46f7a3463606..4460825d7287 100644 --- a/docs/source/guides/networkyaml-fabric.md +++ b/docs/source/guides/networkyaml-fabric.md @@ -4,64 +4,66 @@ [//]: # (##############################################################################################) # Configuration file specification: Hyperledger-Fabric -A network.yaml file is the base configuration file designed in Hyperledger Bevel for setting up a Fabric DLT network. This file contains all the information related to the infrastructure and network specifications. Below shows its structure. -![](./../_static/TopLevelClass-Fabric.png) +A network.yaml file is the base configuration file designed in Hyperledger Bevel for setting up a Fabric DLT network. This file contains all the information related to the infrastructure and network specifications. -Before setting up a Fabric DLT/Blockchain network, this file needs to be updated with the required specifications. -A sample configuration file is provided in the repo path: -`platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml` +??? note "Schema Definition" -A json-schema definition is provided in `platforms/network-schema.json` to assist with semantic validations and lints. You can use your favorite yaml lint plugin compatible with json-schema specification, like `redhat.vscode-yaml` for VSCode. You need to adjust the directive in template located in the first line based on your actual build directory: + A json-schema definition is provided in `platforms/network-schema.json` to assist with semantic validations and lints. You can use your favorite yaml lint plugin compatible with json-schema specification, like `redhat.vscode-yaml` for VSCode. You need to adjust the directive in template located in the first line based on your actual build directory: -`# yaml-language-server: $schema=../platforms/network-schema.json` + `# yaml-language-server: $schema=../platforms/network-schema.json` The configurations are grouped in the following sections for better understanding. -* type +* [type](#type) + +* [version](#version) -* version +* [frontend](#frontend) -* docker +* [env](#env) -* frontend +* [frontend](#frontend) -* env +* [docker](#docker) -* consensus +* [consensus](#consensus) -* orderers +* [orderers](#orderers) -* channels +* [channels](#channels) -* organizations +* [organizations](#organizations) -Here is the snapshot from the sample configuration file -![](./../_static/NetworkYamlFabric1.png) +Before setting up a Fabric DLT/Blockchain network, this file needs to be updated with the required specifications. -The sections in the sample configuration file are: +Use this [sample configuration file](https://github.com/hyperledger/bevel/blob/main/platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml) as a base. -`type` defines the platform choice like corda/fabric, here in the example its Fabric +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:7:14" +``` -`version` defines the version of platform being used. The current Fabric version support is 1.4.8, 2.2.2 & 2.5.4 + +type +: `type` defines the platform choice like corda/fabric/quorum, here in the example its **Fabric**. -`frontend` is a flag which defines if frontend is enabled for nodes or not. Its value can only be enabled/disabled. This is only applicable if the sample Supplychain App is being installed. + +version +: `version` defines the version of platform being used. The current Fabric version support is 1.4.8, 2.2.2 & 2.5.4 -`env` section contains the environment type. Value for proxy field under this section can be 'none' or 'haproxy' + +frontend +: `frontend` s a flag which defines if frontend is enabled for nodes or not. Its value can only be enabled/disabled. This is only applicable if the sample Supplychain App is being installed. + + +env +: `env` section contains the environment type. Value for proxy field under this section can be 'none' or 'haproxy' The snapshot of the `env` section with example value is below -```yaml - env: - type: "dev" # tag for the environment. Important to run multiple flux on single cluster - proxy: haproxy # values can be 'haproxy' or 'none' - retry_count: 100 # Retry count for the checks - external_dns: enabled # Should be enabled if using external-dns for automatic route configuration - annotations: # Additional annotations that can be used for some pods (ca, ca-tools, orderer and peer nodes) - service: - - example1: example2 - deployment: {} - pvc: {} + +```yaml +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:19:28" ``` The fields under `env` section are @@ -73,18 +75,17 @@ The fields under `env` section are |external_dns | If the cluster has the external DNS service, this has to be set `enabled` so that the hosted zone is automatically updated. | |annotations| Use this to pass additional annotations to the `service`, `deployment` and `pvc` elements of Kubernetes| -`docker` section contains the credentials of the repository where all the required images are built and stored. + + +docker +: `docker` section contains the credentials of the container registry where all the required images are stored. The snapshot of the `docker` section with example values is below + ```yaml - # Docker registry details where images are stored. This will be used to create k8s secrets - # Please ensure all required images are built and stored in this registry. - # Do not check-in docker_password. - docker: - url: "docker_url" - username: "docker_username" - password: "docker_password" +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:34:40" ``` + The fields under `docker` section are | Field | Description | @@ -97,43 +98,30 @@ The fields under `docker` section are Please follow [these instructions](../getting-started/configure-prerequisites.md#docker) to build and store the docker images before running the Ansible playbooks. -`consensus` section contains the consensus service that uses the orderers provided in the following `orderers` section. + +consensus +: `consensus` section contains the consensus service that uses the orderers provided in the following `orderers` section. ```yaml - consensus: - name: raft +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:44:45" ``` + The fields under the each `consensus` are | Field | Description | |-------------|----------------------------------------------------------| -| name | Name of the Consensus service. Can be `raft` or `kafka`. | +| name | Name of the Consensus service. Can be `raft` or `kafka`. | -`orderers` section contains a list of orderers with variables which will expose it for the network. + +orderers +: `orderers` section contains a list of orderers with variables which will expose it for the network. The snapshot of the `orderers` section with example values is below + ```yaml - # Remote connection information for orderer (will be blank or removed for orderer hosting organization) - orderers: - - orderer: - type: orderer - name: orderer1 - org_name: supplychain #org_name should match one organization definition below in organizations: key - uri: orderer1.org1ambassador.blockchaincloudpoc.com:443 # Must include port, Can be external or internal URI for orderer which should be reachable by all peers - certificate: /home/bevel/build/orderer1.crt # Ensure that the directory exists - - orderer: - type: orderer - name: orderer2 - org_name: supplychain #org_name should match one organization definition below in organizations: key - uri: orderer2.org1ambassador.blockchaincloudpoc.com:443 # Must include port, Can be external or internal URI for orderer which should be reachable by all peers - certificate: /home/bevel/build/orderer2.crt # Ensure that the directory exists - - orderer: - type: orderer - name: orderer3 - org_name: supplychain #org_name should match one organization definition below in organizations: key - uri: orderer3.org1ambassador.blockchaincloudpoc.com:443 # Must include port, Can be external or internal URI for orderer which should be reachable by all peers - certificate: /home/bevel/build/orderer3.crt # Ensure that the directory exists +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:46:64" ``` + The fields under the each `orderer` are | Field | Description | @@ -144,96 +132,17 @@ The fields under the each `orderer` are | uri | Orderer URL which is accessible by all Peers. This must include the port even when running on 443 | | certificate | Path to orderer certificate. For inital network setup, ensure that the directory is present, the file need not be present. For adding a new organization, ensure that the file is the crt file of the orderer of the existing network. | -The `channels` sections contains the list of channels mentioning the participating peers of the organizations. + + +channels +: The `channels` sections contains the list of channels mentioning the participating peers of the organizations. The snapshot of channels section with its fields and sample values is below ```yaml - # The channels defined for a network with participating peers in each channel - channels: - - channel: - consortium: SupplyChainConsortium - channel_name: AllChannel - osn_creator_org: - name: supplychain - chaincodes: - - "chaincode_name" - orderers: - - supplychain - participants: - - organization: - name: carrier - type: creator # creator organization will create the channel and instantiate chaincode, in addition to joining the channel and install chaincode - org_status: new - peers: - - peer: - name: peer0 - gossipAddress: peer0.carrier-net.org3ambassador.blockchaincloudpoc.com:443 # Must include port, External or internal URI of the gossip peer - peerAddress: peer0.carrier-net.org3ambassador.blockchaincloudpoc.com:443 # Must include port, External URI of the peer - ordererAddress: orderer1.org1ambassador.blockchaincloudpoc.com:443 # Must include port, External or internal URI of the orderer - - organization: - name: store - type: joiner # joiner organization will only join the channel and install chaincode - org_status: new - peers: - - peer: - name: peer0 - gossipAddress: peer0.store-net.org4ambassador.blockchaincloudpoc.com:443 - peerAddress: peer0.store-net.org4ambassador.blockchaincloudpoc.com:443 # Must include port, External URI of the peer - ordererAddress: orderer1.org1ambassador.blockchaincloudpoc.com:443 - - organization: - name: warehouse - type: joiner - org_status: new - peers: - - peer: - name: peer0 - gossipAddress: peer0.warehouse-net.org5ambassador.blockchaincloudpoc.com:443 - peerAddress: peer0.warehouse-net.org5ambassador.blockchaincloudpoc.com:443 # Must include port, External URI of the peer - ordererAddress: orderer1.org1ambassador.blockchaincloudpoc.com:443 - - organization: - name: manufacturer - type: joiner - org_status: new - peers: - - peer: - name: peer0 - gossipAddress: peer0.manufacturer-net.org2ambassador.blockchaincloudpoc.com:443 - peerAddress: peer0.manufacturer-net.org2ambassador.blockchaincloudpoc.com:443 # Must include port, External URI of the peer - ordererAddress: orderer1.org1ambassador.blockchaincloudpoc.com:443 - endorsers: - # Only one peer per org required for endorsement - - organization: - name: carrier - peers: - - peer: - name: peer0 - corepeerAddress: peer0.carrier-net.org3ambassador.blockchaincloudpoc.com:443 - certificate: "/path/ca.crt" # certificate path for peer - - organization: - name: warehouse - peers: - - peer: - name: peer0 - corepeerAddress: peer0.warehouse-net.org5ambassador.blockchaincloudpoc.com:443 - certificate: "/path/ca.crt" # certificate path for peer - - organization: - name: manufacturer - peers: - - peer: - name: peer0 - corepeerAddress: peer0.manufacturer-net.org2ambassador.blockchaincloudpoc.com:443 - certificate: "/path/ca.crt" # certificate path for peer - - organization: - name: store - peers: - - peer: - name: peer0 - corepeerAddress: peer0.store-net.org4ambassador.blockchaincloudpoc.com:443 - certificate: "/path/ca.crt" # certificate path for peer - genesis: - name: OrdererGenesis +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:66:149" ``` + The fields under the `channel` are | Field | Description | @@ -269,28 +178,20 @@ Each `organization` field under `endorsers` field of the channel contains the fo | peer.corepeerAddress | Endorsers addresses, including port | | peer.certificate | Certificate path for peer | -The `organizations` section contains the specifications of each organization. + + + +organizations +: The `organizations` section contains the specifications of each organization. In the sample configuration example, we have five organization under the `organizations` section The snapshot of an organization field with sample values is below + ```yaml - organizations: - # Specification for the 1st organization. Each organization maps to a VPC and a separate k8s cluster - - organization: - name: supplychain - country: UK - state: London - location: London - subject: "O=Orderer,L=51.50/-0.13/London,C=GB" - type: orderer - external_url_suffix: org1ambassador.blockchaincloudpoc.com - org_status: new - ca_data: - url: ca.supplychain-net:7054 - certificate: file/server.crt # This has not been implemented - cloud_provider: aws # Options: aws, azure, gcp, digitalocean, minikube +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:154:171" ``` + Each `organization` under the `organizations` section has the following fields. | Field | Description | @@ -313,16 +214,9 @@ Each `organization` under the `organizations` section has the following fields. | services | Contains list of services which could ca/peer/orderers/concensus based on the type of organization | For the aws and k8s field the snapshot with sample values is below + ```yaml - aws: - access_key: "" # AWS Access key, only used when cloud_provider=aws - secret_key: "" # AWS Secret key, only used when cloud_provider=aws - - # Kubernetes cluster deployment variables. - k8s: - region: "" - context: "" - config_file: "" +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:172:181" ``` The `aws` field under each organization contains: (This will be ignored if cloud_provider is not 'aws') @@ -341,19 +235,9 @@ The `k8s` field under each organization contains | config_file | Path to the kubernetes cluster configuration file | For gitops fields the snapshot from the sample configuration file with the example values is below + ```yaml - # Git Repo details which will be used by GitOps/Flux. - gitops: - git_protocol: "https" # Option for git over https or ssh - git_url: "https://github.com//bevel.git" # Gitops htpps or ssh url for flux value files - branch: "" # Git branch where release is being made - release_dir: "platforms/hyperledger-fabric/releases/dev" # Relative Path in the Git repo for flux sync per environment. - chart_source: "platforms/hyperledger-fabric/charts" # Relative Path where the Helm charts are stored in Git repo - git_repo: "github.com//bevel.git" # without https:// - username: "" # Git Service user who has rights to check-in in all branches - password: "" # Git Server user password/personal token (Optional for ssh; Required for https) - email: "" # Email to use in git config - private_key: "" # Path to private key (Optional for https; Required for ssh) +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:189:201" ``` The gitops field under each organization contains @@ -372,15 +256,11 @@ The gitops field under each organization contains | private_key | Path to the private key file which has write-access to the git repo (Optional for https; Required for ssh) | For Hyperledger Fabric, you can also generate different user certificates and pass the names and attributes in the specific section for `users`. This is only applicable if using Fabric CA. An example is below: + ```yaml - # Generating User Certificates with custom attributes using Fabric CA in BAF for Peer Organizations - users: - - user: - identity: user1 - attributes: - - key: "hf.Revoker" - value: "true" +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:288:294" ``` + The fields under `user` are | Field | Description | @@ -392,17 +272,11 @@ The fields under `user` are The services field for each organization under `organizations` section of Fabric contains list of `services` which could be ca/orderers/consensus/peers based on if the type of organization. Each organization will have a CA service under the service field. The snapshot of CA service with example values is below + ```yaml - # Services maps to the pods that will be deployed on the k8s cluster - # This sample is an orderer service and includes a zk-kafka consensus - services: - ca: - name: ca - subject: "/C=GB/ST=London/L=London/O=Orderer/CN=ca.supplychain-net" - type: ca - grpc: - port: 7054 +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:203:211" ``` + The fields under `ca` service are | Field | Description | @@ -414,44 +288,11 @@ The fields under `ca` service are Each organization with type as peer will have a peers service. The snapshot of peers service with example values is below + ```yaml - peers: - - peer: - name: peer0 - type: anchor # This can be anchor/nonanchor. Atleast one peer should be anchor peer. - gossippeeraddress: peer0.manufacturer-net:7051 # Internal Address of the other peer in same Org for gossip, same peer if there is only one peer - peerAddress: peer0.carrier-net.org3ambassador.blockchaincloudpoc.com:443 # Must include port, External URI of the peer - certificate: /path/manufacturer/peer0.crt # Path to peer Certificate - cli: disabled # Creates a peer cli pod depending upon the (enabled/disabled) - configpath: /path/to/peer0-core.yaml # path to custom core.yaml tag. - grpc: - port: 7051 - events: - port: 7053 - couchdb: - port: 5984 - restserver: # This is for the rest-api server - targetPort: 20001 - port: 20001 - expressapi: # This is for the express api server - targetPort: 3000 - port: 3000 - chaincodes: - - name: "chaincode_name" #This has to be replaced with the name of the chaincode - version: "chaincode_version" #This has to be replaced with the version of the chaincode - maindirectory: "chaincode_main" #The main directory where chaincode is needed to be placed - repository: - username: "git_username" # Git Service user who has rights to check-in in all branches - password: "git_access_token" - url: "github.com/hyperledger/bevel.git" - branch: develop - path: "chaincode_src" #The path to the chaincode - arguments: 'chaincode_args' #Arguments to be passed along with the chaincode parameters - endorsements: "" #Endorsements (if any) provided along with the chaincode - metrics: - enabled: true # Enable/disable metrics collector for prometheus - port: 9443 # metrics port - internal to the cluster +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:304:338" ``` + The fields under `peer` service are | Field | Description | @@ -495,14 +336,11 @@ The chaincodes section contains the list of chaincode for the peer, the fields u | crypto_mount_path | Required only when `tls: true`, the path where the crypto materials will be stored | The organization with orderer type will have concensus service. The snapshot of consensus service with example values is below + ```yaml - consensus: - name: raft - type: broker #This field is not consumed for raft consensus - replicas: 4 #This field is not consumed for raft consensus - grpc: - port: 9092 #This field is not consumed for raft consensus +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:213:214" ``` + The fields under `consensus` service are | Field | Description | @@ -513,35 +351,11 @@ The fields under `consensus` service are | grpc.port | Only for `kafka`. Grpc port of consensus service | The organization with orderer type will have orderers service. The snapshot of orderers service with example values is below + ```yaml - orderers: - # This sample has multiple orderers as an example. - # You can use a single orderer for most production implementations. - - orderer: - name: orderer1 - type: orderer - consensus: raft - grpc: - port: 7050 - ordererAddress: orderer1.org1ambassador.blockchaincloudpoc.com:443 - - orderer: - name: orderer2 - type: orderer - consensus: raft - grpc: - port: 7050 - ordererAddress: orderer2.org1ambassador.blockchaincloudpoc.com:443 - - orderer: - name: orderer3 - type: orderer - consensus: raft - grpc: - port: 7050 - ordererAddress: orderer3.org1ambassador.blockchaincloudpoc.com:443 - metrics: - enabled: true # Enable/disable metrics collector for prometheus - port: 9443 # metrics port - internal to the cluster +--8<-- "platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml:215:239" ``` + The fields under `orderer` service are | Field | Description | diff --git a/platforms/hyperledger-fabric/configuration/samples/network-fabric-add-new-channel.yaml b/platforms/hyperledger-fabric/configuration/samples/network-fabric-add-new-channel.yaml index 166347992ae4..6a02eebf0630 100644 --- a/platforms/hyperledger-fabric/configuration/samples/network-fabric-add-new-channel.yaml +++ b/platforms/hyperledger-fabric/configuration/samples/network-fabric-add-new-channel.yaml @@ -11,7 +11,7 @@ network: # Network level configuration specifies the attributes required for each organization # to join an existing network. type: fabric - version: 2.2.2 # currently tested 1.4.8 and 2.2.2 + version: 2.2.2 # currently tested 1.4.8, 2.2.2 and 2.5.4 frontend: enabled #Flag for frontend to enabled for nodes/peers diff --git a/platforms/hyperledger-fabric/configuration/samples/network-fabric-add-ordererorg.yaml b/platforms/hyperledger-fabric/configuration/samples/network-fabric-add-ordererorg.yaml index 5b606b1678a2..99424a65ae54 100644 --- a/platforms/hyperledger-fabric/configuration/samples/network-fabric-add-ordererorg.yaml +++ b/platforms/hyperledger-fabric/configuration/samples/network-fabric-add-ordererorg.yaml @@ -14,7 +14,7 @@ network: # Network level configuration specifies the attributes required for each organization # to join an existing network. type: fabric - version: 2.2.2 #Addition of ordrer organization only works for 2.2.2 + version: 2.2.2 #Addition of ordrer organization works for 2.2.2 and 2.5.4 frontend: enabled #Flag for frontend to enabled for nodes/peers diff --git a/platforms/hyperledger-fabric/configuration/samples/network-fabric-add-organization.yaml b/platforms/hyperledger-fabric/configuration/samples/network-fabric-add-organization.yaml index 4c8853b59230..65ef1b55687a 100644 --- a/platforms/hyperledger-fabric/configuration/samples/network-fabric-add-organization.yaml +++ b/platforms/hyperledger-fabric/configuration/samples/network-fabric-add-organization.yaml @@ -11,7 +11,7 @@ network: # Network level configuration specifies the attributes required for each organization # to join an existing network. type: fabric - version: 2.2.2 # currently tested 1.4.8 and 2.2.2 + version: 2.2.2 # currently tested 1.4.8, 2.2.2 and 2.5.4 frontend: enabled #Flag for frontend to enabled for nodes/peers diff --git a/platforms/hyperledger-fabric/configuration/samples/network-fabric-add-peer.yaml b/platforms/hyperledger-fabric/configuration/samples/network-fabric-add-peer.yaml index 0ce83ed16ea7..24da0562f210 100644 --- a/platforms/hyperledger-fabric/configuration/samples/network-fabric-add-peer.yaml +++ b/platforms/hyperledger-fabric/configuration/samples/network-fabric-add-peer.yaml @@ -11,7 +11,7 @@ network: # Network level configuration specifies the attributes required for each organization # to join an existing network. type: fabric - version: 2.2.2 # currently tested 1.4.8 and 2.2.2 + version: 2.2.2 # currently tested 1.4.8, 2.2.2 and 2.5.4 frontend: enabled #Flag for frontend to enabled for nodes/peers #Environment section for Kubernetes setup diff --git a/platforms/hyperledger-fabric/configuration/samples/network-fabric-remove-organization.yaml b/platforms/hyperledger-fabric/configuration/samples/network-fabric-remove-organization.yaml index df1dc6e7c709..f0ffe9b1dd08 100644 --- a/platforms/hyperledger-fabric/configuration/samples/network-fabric-remove-organization.yaml +++ b/platforms/hyperledger-fabric/configuration/samples/network-fabric-remove-organization.yaml @@ -11,7 +11,7 @@ network: # Network level configuration specifies the attributes required for each organization # to remove an organization from existing network. type: fabric - version: 2.2.2 # currently tested 1.4.8 and 2.2.2 + version: 2.2.2 # currently tested 1.4.8, 2.2.2 and 2.5.4 frontend: enabled #Flag for frontend to enabled for nodes/peers diff --git a/platforms/hyperledger-fabric/configuration/samples/network-fabricv2-external-chaincode.yaml b/platforms/hyperledger-fabric/configuration/samples/network-fabricv2-external-chaincode.yaml index e92ec77618ca..b12d70a544b2 100644 --- a/platforms/hyperledger-fabric/configuration/samples/network-fabricv2-external-chaincode.yaml +++ b/platforms/hyperledger-fabric/configuration/samples/network-fabricv2-external-chaincode.yaml @@ -11,7 +11,7 @@ network: # Network level configuration specifies the attributes required for each organization # to join an existing network. type: fabric - version: 2.2.2 # currently tested 1.4.8 and 2.2.2 + version: 2.2.2 # currently tested 1.4.8, 2.2.2 and 2.5.4 frontend: enabled #Flag for frontend to enabled for nodes/peers @@ -310,9 +310,11 @@ network: chaincodes: - name: "assettransfer" # This has to be replaced with the name of the chaincode version: "1" # This has to be replaced with the version of the chaincode + sequence: "1" # Sequence of the chaincode, update this only for chaincode upgrade external_chaincode: true init_required: false tls: true + upgrade_chaincode: false buildpack_path: /home/fabric-samples/asset-transfer-basic/chaincode-external/sampleBuilder # The path where buildpacks are locally stored image: ghcr.io/hyperledger/bevel-samples-example:1.0 arguments: '\"InitLedger\",\"\"' # Init Arguments to be passed which will mark chaincode as init-required @@ -402,9 +404,11 @@ network: chaincodes: - name: "assettransfer" # This has to be replaced with the name of the chaincode version: "1" # This has to be replaced with the version of the chaincode + sequence: "1" # Sequence of the chaincode, update this only for chaincode upgrade external_chaincode: true init_required: false tls: true + upgrade_chaincode: false buildpack_path: /home/fabric-samples/asset-transfer-basic/chaincode-external/sampleBuilder # The path where buildpacks are locally stored image: ghcr.io/hyperledger/bevel-samples-example:1.0 arguments: '\"InitLedger\",\"\"' # Init Arguments to be passed which will mark chaincode as init-required @@ -494,9 +498,11 @@ network: chaincodes: - name: "assettransfer" # This has to be replaced with the name of the chaincode version: "1" # This has to be replaced with the version of the chaincode + sequence: "1" # Sequence of the chaincode, update this only for chaincode upgrade external_chaincode: true init_required: false tls: true + upgrade_chaincode: false buildpack_path: /home/fabric-samples/asset-transfer-basic/chaincode-external/sampleBuilder # The path where buildpacks are locally stored image: ghcr.io/hyperledger/bevel-samples-example:1.0 arguments: '\"InitLedger\",\"\"' # Init Arguments to be passed which will mark chaincode as init-required @@ -579,10 +585,11 @@ network: chaincodes: - name: "assettransfer" # This has to be replaced with the name of the chaincode version: "1" # This has to be replaced with the version of the chaincode + sequence: "1" # Sequence of the chaincode, update this only for chaincode upgrade external_chaincode: true init_required: false tls: true - upgrade_chaincode: true + upgrade_chaincode: false buildpack_path: /home/fabric-samples/asset-transfer-basic/chaincode-external/sampleBuilder # The path where buildpacks are locally stored image: ghcr.io/hyperledger/bevel-samples-example:1.0 arguments: '\"InitLedger\",\"\"' # Init Arguments to be passed which will mark chaincode as init-required diff --git a/platforms/hyperledger-fabric/configuration/samples/network-fabricv2-raft-add-orderer.yaml b/platforms/hyperledger-fabric/configuration/samples/network-fabricv2-raft-add-orderer.yaml index 1aaab440b31a..773b86353d9a 100644 --- a/platforms/hyperledger-fabric/configuration/samples/network-fabricv2-raft-add-orderer.yaml +++ b/platforms/hyperledger-fabric/configuration/samples/network-fabricv2-raft-add-orderer.yaml @@ -11,7 +11,7 @@ network: # Network level configuration specifies the attributes required for each organization # to join an existing network. type: fabric - version: 2.2.2 # currently tested 1.4.8 and 2.2.2 + version: 2.2.2 # currently tested 1.4.8, 2.2.2 and 2.5.4 frontend: enabled #Flag for frontend to enabled for nodes/peers diff --git a/platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml b/platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml index de34d8340e88..3c50f15c7dca 100644 --- a/platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml +++ b/platforms/hyperledger-fabric/configuration/samples/network-fabricv2.yaml @@ -12,7 +12,7 @@ network: # to join an existing network. type: fabric version: 2.2.2 # currently tested 1.4.8, 2.2.2 and 2.5.4 - + upgrade: false # true : To upgrading Hyperledger Fabric version from 1.4.x to 2.2.x frontend: enabled #Flag for frontend to enabled for nodes/peers #Environment section for Kubernetes setup diff --git a/platforms/shared/configuration/site.yaml b/platforms/shared/configuration/site.yaml index 732de7c6baf3..c621744d79b3 100755 --- a/platforms/shared/configuration/site.yaml +++ b/platforms/shared/configuration/site.yaml @@ -32,7 +32,7 @@ - network.type == 'fabric' - network.env.type != 'operator' - (reset is undefined or reset == 'false') - - (network.upgrade is not defined) + - (network.upgrade is not defined or network.upgrade == false) - import_playbook: "{{ playbook_dir }}/../../hyperledger-fabric/configuration/deploy-operator-network.yaml" vars: @@ -41,7 +41,7 @@ - network.type == 'fabric' - network.env.type == 'operator' - (reset is undefined or reset == 'false') - - (network.upgrade is not defined) + - (network.upgrade is not defined or network.upgrade == false) # Upgrade network - import_playbook: "{{ playbook_dir }}/../../hyperledger-fabric/configuration/upgrade-network.yaml" @@ -51,7 +51,7 @@ - network.type == 'fabric' - network.env.type != 'operator' - (reset is undefined or reset == 'false') - - (network.upgrade is defined) + - (network.upgrade is defined and network.upgrade == true) ############################################ # Playbook for R3 Corda Operations