#!/usr/bin/env bash # # Copyright IBM Corp All Rights Reserved # # SPDX-License-Identifier: Apache-2.0 # function launch_orderers() { push_fn "Launching orderers" apply_template kube/org0/org0-orderer1.yaml $ORG0_NS apply_template kube/org0/org0-orderer2.yaml $ORG0_NS apply_template kube/org0/org0-orderer3.yaml $ORG0_NS kubectl -n $ORG0_NS rollout status deploy/org0-orderer1 kubectl -n $ORG0_NS rollout status deploy/org0-orderer2 kubectl -n $ORG0_NS rollout status deploy/org0-orderer3 if [ "${ORDERER_TYPE}" == "bft" ]; then apply_template kube/org0/org0-orderer4.yaml $ORG0_NS kubectl -n $ORG0_NS rollout status deploy/org0-orderer4 fi pop_fn } function launch_peers() { push_fn "Launching peers" apply_template kube/org1/org1-peer1.yaml $ORG1_NS apply_template kube/org1/org1-peer2.yaml $ORG1_NS apply_template kube/org2/org2-peer1.yaml $ORG2_NS apply_template kube/org2/org2-peer2.yaml $ORG2_NS kubectl -n $ORG1_NS rollout status deploy/org1-peer1 kubectl -n $ORG1_NS rollout status deploy/org1-peer2 kubectl -n $ORG2_NS rollout status deploy/org2-peer1 kubectl -n $ORG2_NS rollout status deploy/org2-peer2 pop_fn } # Each network node needs a registration, enrollment, and MSP config.yaml function create_node_local_MSP() { local node_type=$1 local org=$2 local node=$3 local csr_hosts=$4 local ns=$5 local id_name=${org}-${node} local id_secret=${node_type}pw local ca_name=${org}-ca # Register the node admin rc=0 fabric-ca-client register \ --id.name ${id_name} \ --id.secret ${id_secret} \ --id.type ${node_type} \ --url https://${ca_name}.${DOMAIN}:${NGINX_HTTPS_PORT} \ --tls.certfiles $TEMP_DIR/cas/${ca_name}/tlsca-cert.pem \ --mspdir $TEMP_DIR/enrollments/${org}/users/${RCAADMIN_USER}/msp \ || rc=$? # trap error code from registration without exiting the network driver script" if [ $rc -eq 1 ]; then echo "CA admin was (probably) previously registered - continuing" fi # Enroll the node admin user from within k8s. This will leave the certificates available on a volume share in the # cluster for access by the nodes when launching in a container. cat <-.pem) cp /var/hyperledger/fabric/organizations/${node_type}Organizations/${org}.example.com/${node_type}s/${id_name}.${org}.example.com/msp/cacerts/*.pem \ /var/hyperledger/fabric/organizations/${node_type}Organizations/${org}.example.com/${node_type}s/${id_name}.${org}.example.com/msp/cacerts/${org}-ca.pem # Create local MSP config.yaml echo "NodeOUs: Enable: true ClientOUIdentifier: Certificate: cacerts/${org}-ca.pem OrganizationalUnitIdentifier: client PeerOUIdentifier: Certificate: cacerts/${org}-ca.pem OrganizationalUnitIdentifier: peer AdminOUIdentifier: Certificate: cacerts/${org}-ca.pem OrganizationalUnitIdentifier: admin OrdererOUIdentifier: Certificate: cacerts/${org}-ca.pem OrganizationalUnitIdentifier: orderer" > /var/hyperledger/fabric/organizations/${node_type}Organizations/${org}.example.com/${node_type}s/${id_name}.${org}.example.com/msp/config.yaml EOF } function create_orderer_local_MSP() { local org=$1 local orderer=$2 local csr_hosts=${org}-${orderer} create_node_local_MSP orderer $org $orderer $csr_hosts $ORG0_NS } function create_peer_local_MSP() { local org=$1 local peer=$2 local ns=$3 local csr_hosts=localhost,${org}-${peer},${org}-peer-gateway-svc create_node_local_MSP peer $org $peer $csr_hosts ${ns} } function create_local_MSP() { push_fn "Creating local node MSP" create_orderer_local_MSP org0 orderer1 create_orderer_local_MSP org0 orderer2 create_orderer_local_MSP org0 orderer3 if [ "${ORDERER_TYPE}" == "bft" ]; then create_orderer_local_MSP org0 orderer4 fi create_peer_local_MSP org1 peer1 $ORG1_NS create_peer_local_MSP org1 peer2 $ORG1_NS create_peer_local_MSP org2 peer1 $ORG2_NS create_peer_local_MSP org2 peer2 $ORG2_NS pop_fn } function network_up() { # Kube config init_namespace init_storage_volumes load_org_config # Service account permissions for the k8s builder if [ "${CHAINCODE_BUILDER}" == "k8s" ]; then apply_k8s_builder_roles apply_k8s_builders fi # Network TLS CAs init_tls_cert_issuers # Network ECert CAs launch_ECert_CAs enroll_bootstrap_ECert_CA_users # Test Network create_local_MSP launch_orderers launch_peers } function stop_services() { push_fn "Stopping Fabric services" for ns in $ORG0_NS $ORG1_NS $ORG2_NS; do kubectl -n $ns delete ingress --all kubectl -n $ns delete deployment --all kubectl -n $ns delete pod --all kubectl -n $ns delete service --all kubectl -n $ns delete configmap --all kubectl -n $ns delete cert --all kubectl -n $ns delete issuer --all kubectl -n $ns delete secret --all done pop_fn } function scrub_org_volumes() { push_fn "Scrubbing Fabric volumes" for org in org0 org1 org2; do # clean job to make this function can be rerun local namespace_variable=${org^^}_NS kubectl -n ${!namespace_variable} delete jobs --all # scrub all pv contents kubectl -n ${!namespace_variable} create -f kube/${org}/${org}-job-scrub-fabric-volumes.yaml kubectl -n ${!namespace_variable} wait --for=condition=complete --timeout=60s job/job-scrub-fabric-volumes kubectl -n ${!namespace_variable} delete jobs --all done pop_fn } function network_down() { set +e for ns in $ORG0_NS $ORG1_NS $ORG2_NS; do kubectl get namespace $ns > /dev/null if [[ $? -ne 0 ]]; then echo "No namespace $ns found - nothing to do." return fi done set -e stop_services scrub_org_volumes delete_namespace rm -rf $PWD/build }