-
Notifications
You must be signed in to change notification settings - Fork 3.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #80 from nikhil550/FAB-17145
[FAB-17145] Add test network to Fabric Samples
- Loading branch information
Showing
32 changed files
with
4,468 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
COMPOSE_PROJECT_NAME=net | ||
IMAGE_TAG=latest | ||
SYS_CHANNEL=system-channel |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
/channel-artifacts/*.tx | ||
/channel-artifacts/*.block | ||
/ledgers | ||
/ledgers-backup | ||
/channel-artifacts/*.json | ||
/org3-artifacts/crypto-config/* | ||
organizations/fabric-ca/ordererOrg/* | ||
organizations/fabric-ca/org1/* | ||
organizations/fabric-ca/org2/* | ||
organizations/ordererOrganizations/* | ||
organizations/peerOrganizations/* | ||
system-genesis-block/* | ||
fabcar.tar.gz | ||
log.txt |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
## Running the test network | ||
|
||
Use the `./network.sh` script to stand up a simple Fabric test network. The | ||
network has two peer peer organizations with one peer each and a single node | ||
raft ordering service. You can also use the script to create channels, and deploy | ||
the fabcar chaincode on those channels. The test network is being introduced in | ||
Fabric v2.0 as the long term replacement for the `first-network` sample. | ||
|
||
Before you can deploy the test network, you need follow the instructions to | ||
[Install the Samples, Binaries and Docker Images](https://hyperledger-fabric.readthedocs.io/en/latest/install.html) in the Hyperledger Fabric documentation. You may experience problems if you run the | ||
sample using a local build. | ||
|
||
For more information, see `./network.sh -help` | ||
``` | ||
Usage: | ||
network.sh <Mode> [Flags] | ||
<Mode> | ||
- 'up' - bring up fabric orderer and peer nodes. No channel is created | ||
- 'up createChannel' - bring up fabric network with one channel | ||
- 'createChannel' - create and join a channel after the network is created | ||
- 'deployCC' - deploy the fabcar chaincode on the channel | ||
- 'down' - clear the network with docker-compose down | ||
- 'restart' - restart the network | ||
Flags: | ||
-ca <use CAs> - create Certificate Authorities to generate the crypto material | ||
-c <channel name> - channel name to use (defaults to "mychannel") | ||
-s <dbtype> - the database backend to use: goleveldb (default) or couchdb | ||
-r <max retry> - CLI times out after certain number of attempts (defaults to 5) | ||
-d <delay> - delay duration in seconds (defaults to 3) | ||
-l <language> - the programming language of the chaincode to deploy: go (default), javascript, or java | ||
-v <version> - chaincode version. Must be a round number, 1, 2, 3, etc | ||
-i <imagetag> - the tag to be used to launch the network (defaults to "latest") | ||
-verbose - verbose mode | ||
network.sh -h (print this message) | ||
Possible Mode and flags | ||
network.sh up -ca -c -r -d -s -i -verbose | ||
network.sh up createChannel -ca -c -r -d -s -i -verbose | ||
network.sh createChannel -c -r -d -verbose | ||
network.sh deployCC -l -v -r -d -verbose | ||
Taking all defaults: | ||
network.sh up | ||
Examples: | ||
network.sh up createChannel -ca -c mychannel -s couchdb -i 1.4.0 | ||
network.sh createChannel -c channelName | ||
network.sh deployCC -l node | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
COMPOSE_PROJECT_NAME=net | ||
IMAGE_TAG=latest |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,228 @@ | ||
#!/bin/bash | ||
# | ||
# Copyright IBM Corp All Rights Reserved | ||
# | ||
# SPDX-License-Identifier: Apache-2.0 | ||
# | ||
|
||
# This script extends the Hyperledger Fabric test network by adding | ||
# adding a third organization to the network | ||
# | ||
|
||
# prepending $PWD/../bin to PATH to ensure we are picking up the correct binaries | ||
# this may be commented out to resolve installed version of tools if desired | ||
export PATH=${PWD}/../../bin:${PWD}:$PATH | ||
export FABRIC_CFG_PATH=${PWD} | ||
export VERBOSE=false | ||
|
||
# Print the usage message | ||
function printHelp () { | ||
echo "Usage: " | ||
echo " addOrg3.sh up|down|generate [-c <channel name>] [-t <timeout>] [-d <delay>] [-f <docker-compose-file>] [-s <dbtype>]" | ||
echo " addOrg3.sh -h|--help (print this message)" | ||
echo " <mode> - one of 'up', 'down', or 'generate'" | ||
echo " - 'up' - add org3 to the sample network. You need to create a channel first." | ||
echo " - 'down' - clear the network with docker-compose down" | ||
echo " - 'generate' - generate required certificates and org definition" | ||
echo " -c <channel name> - channel name to use (defaults to \"mychannel\")" | ||
echo " -t <timeout> - CLI timeout duration in seconds (defaults to 10)" | ||
echo " -d <delay> - delay duration in seconds (defaults to 3)" | ||
echo " -f <docker-compose-file> - specify which docker-compose file use (defaults to docker-compose-cli.yaml)" | ||
echo " -s <dbtype> - the database backend to use: goleveldb (default) or couchdb" | ||
echo " -i <imagetag> - the tag to be used to launch the network (defaults to \"latest\")" | ||
echo " -v - verbose mode" | ||
echo | ||
echo "Typically, one would first generate the required certificates and " | ||
echo "genesis block, then bring up the network. e.g.:" | ||
echo | ||
echo " eyfn.sh generate" | ||
echo " addOrg3.sh up -c mychannel -s couchdb" | ||
echo " addOrg3.sh up -l node" | ||
echo " addOrg3.sh down -c mychannel" | ||
echo | ||
echo "Taking all defaults:" | ||
echo " addOrg3.sh up" | ||
echo " addOrg3.sh down" | ||
} | ||
|
||
# We use the cryptogen tool to generate the cryptographic material | ||
# (x509 certs) for the new org. After we run the tool, the certs will | ||
# be put in the organizations folder with org1 and org2 | ||
|
||
# Generates Org3 certs using cryptogen tool | ||
function generateOrg3 (){ | ||
which cryptogen | ||
if [ "$?" -ne 0 ]; then | ||
echo "cryptogen tool not found. exiting" | ||
exit 1 | ||
fi | ||
echo | ||
echo "###############################################################" | ||
echo "##### Generate Org3 certificates using cryptogen tool #########" | ||
echo "###############################################################" | ||
|
||
set -x | ||
cryptogen generate --config=org3-crypto.yaml --output="../organizations" | ||
res=$? | ||
set +x | ||
if [ $res -ne 0 ]; then | ||
echo "Failed to generate certificates..." | ||
exit 1 | ||
fi | ||
echo | ||
} | ||
|
||
# Generate channel configuration transaction | ||
function generateOrg3Definition() { | ||
which configtxgen | ||
if [ "$?" -ne 0 ]; then | ||
echo "configtxgen tool not found. exiting" | ||
exit 1 | ||
fi | ||
echo "##########################################################" | ||
echo "######### Generating Org3 config material ###############" | ||
echo "##########################################################" | ||
export FABRIC_CFG_PATH=$PWD | ||
set -x | ||
configtxgen -printOrg Org3MSP > ../organizations/peerOrganizations/org3.example.com/org3.json | ||
res=$? | ||
set +x | ||
if [ $res -ne 0 ]; then | ||
echo "Failed to generate Org3 config material..." | ||
exit 1 | ||
fi | ||
echo | ||
} | ||
|
||
|
||
|
||
# Generate the needed certificates, the genesis block and start the network. | ||
function networkUp () { | ||
# generate artifacts if they don't exist | ||
if [ ! -d "../organizations/peerOrganizations/org3.example.com" ]; then | ||
generateOrg3 | ||
generateOrg3Definition | ||
fi | ||
# start org3 peers | ||
if [ "${DATABASE}" == "couchdb" ]; then | ||
IMAGE_TAG=${IMAGETAG} docker-compose -f $COMPOSE_FILE_ORG3 -f $COMPOSE_FILE_COUCH_ORG3 up -d 2>&1 | ||
else | ||
IMAGE_TAG=$IMAGETAG docker-compose -f $COMPOSE_FILE_ORG3 up -d 2>&1 | ||
fi | ||
if [ $? -ne 0 ]; then | ||
echo "ERROR !!!! Unable to start Org3 network" | ||
exit 1 | ||
fi | ||
|
||
# Use the CLI container to create the configuration transaction needed to add | ||
# Org3 to the network | ||
echo | ||
echo "###############################################################" | ||
echo "####### Generate and submit config tx to add Org3 #############" | ||
echo "###############################################################" | ||
docker exec Org3cli ./scripts/org3-scripts/step1org3.sh $CHANNEL_NAME $CLI_DELAY $CLI_TIMEOUT $VERBOSE | ||
if [ $? -ne 0 ]; then | ||
echo "ERROR !!!! Unable to create config tx" | ||
exit 1 | ||
fi | ||
|
||
echo | ||
echo "###############################################################" | ||
echo "############### Have Org3 peers join network ##################" | ||
echo "###############################################################" | ||
docker exec Org3cli ./scripts/org3-scripts/step2org3.sh $CHANNEL_NAME $CLI_DELAY $CLI_TIMEOUT $VERBOSE | ||
if [ $? -ne 0 ]; then | ||
echo "ERROR !!!! Unable to have Org3 peers join network" | ||
exit 1 | ||
fi | ||
|
||
} | ||
|
||
# Tear down running network | ||
function networkDown () { | ||
|
||
cd .. | ||
./network.sh down | ||
|
||
} | ||
|
||
|
||
# If the test network is not up, abort | ||
if [ ! -d ../organizations/peerOrganizations ]; then | ||
echo | ||
echo "ERROR: Please, run network.sh first." | ||
echo | ||
exit 1 | ||
fi | ||
|
||
# Obtain the OS and Architecture string that will be used to select the correct | ||
# native binaries for your platform | ||
OS_ARCH=$(echo "$(uname -s|tr '[:upper:]' '[:lower:]'|sed 's/mingw64_nt.*/windows/')-$(uname -m | sed 's/x86_64/amd64/g')" | awk '{print tolower($0)}') | ||
# timeout duration - the duration the CLI should wait for a response from | ||
# another container before giving up | ||
CLI_TIMEOUT=10 | ||
#default for delay | ||
CLI_DELAY=3 | ||
# channel name defaults to "mychannel" | ||
CHANNEL_NAME="mychannel" | ||
# use this as the docker compose couch file | ||
COMPOSE_FILE_COUCH_ORG3=docker/docker-compose-couch-org3.yaml | ||
# use this as the default docker-compose yaml definition | ||
COMPOSE_FILE_ORG3=docker/docker-compose-org3.yaml | ||
# default image tag | ||
IMAGETAG="latest" | ||
# database | ||
DATABASE="leveldb" | ||
|
||
# Parse commandline args | ||
if [ "$1" = "-m" ];then # supports old usage, muscle memory is powerful! | ||
shift | ||
fi | ||
MODE=$1;shift | ||
# Determine whether starting, stopping, restarting or generating for announce | ||
if [ "$MODE" == "up" ]; then | ||
echo ="Add org3 to channel '${CHANNEL_NAME}' with '${CLI_TIMEOUT}' seconds and CLI delay of '${CLI_DELAY}' seconds and using database '${DATABASE}'" | ||
echo | ||
elif [ "$MODE" == "down" ]; then | ||
EXPMODE="Stopping network" | ||
elif [ "$MODE" == "generate" ]; then | ||
EXPMODE="Generating certs and organization definition for Org3" | ||
else | ||
printHelp | ||
exit 1 | ||
fi | ||
while getopts "h?c:t:d:f:s:l:i:v" opt; do | ||
case "$opt" in | ||
h|\?) | ||
printHelp | ||
exit 0 | ||
;; | ||
c) CHANNEL_NAME=$OPTARG | ||
;; | ||
t) CLI_TIMEOUT=$OPTARG | ||
;; | ||
d) CLI_DELAY=$OPTARG | ||
;; | ||
f) COMPOSE_FILE=$OPTARG | ||
;; | ||
s) DATABASE=$OPTARG | ||
;; | ||
i) IMAGETAG=$OPTARG | ||
;; | ||
v) VERBOSE=true | ||
;; | ||
esac | ||
done | ||
|
||
#Create the network using docker compose | ||
if [ "${MODE}" == "up" ]; then | ||
networkUp | ||
elif [ "${MODE}" == "down" ]; then ## Clear the network | ||
networkDown | ||
elif [ "${MODE}" == "generate" ]; then ## Generate Artifacts | ||
generateOrg3 | ||
generateOrg3Definition | ||
else | ||
printHelp | ||
exit 1 | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
# Copyright IBM Corp. All Rights Reserved. | ||
# | ||
# SPDX-License-Identifier: Apache-2.0 | ||
# | ||
|
||
--- | ||
################################################################################ | ||
# | ||
# Section: Organizations | ||
# | ||
# - This section defines the different organizational identities which will | ||
# be referenced later in the configuration. | ||
# | ||
################################################################################ | ||
Organizations: | ||
- &Org3 | ||
# DefaultOrg defines the organization which is used in the sampleconfig | ||
# of the fabric.git development environment | ||
Name: Org3MSP | ||
|
||
# ID to load the MSP definition as | ||
ID: Org3MSP | ||
|
||
MSPDir: ../organizations/peerOrganizations/org3.example.com/msp | ||
|
||
Policies: | ||
Readers: | ||
Type: Signature | ||
Rule: "OR('Org3MSP.admin', 'Org3MSP.peer', 'Org3MSP.client')" | ||
Writers: | ||
Type: Signature | ||
Rule: "OR('Org3MSP.admin', 'Org3MSP.client')" | ||
Admins: | ||
Type: Signature | ||
Rule: "OR('Org3MSP.admin')" | ||
|
||
AnchorPeers: | ||
# AnchorPeers defines the location of peers which can be used | ||
# for cross org gossip communication. Note, this value is only | ||
# encoded in the genesis block in the Application section context | ||
- Host: peer0.org3.example.com | ||
Port: 11051 |
39 changes: 39 additions & 0 deletions
39
test-network/add-org3/docker/docker-compose-couch-org3.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
# Copyright IBM Corp. All Rights Reserved. | ||
# | ||
# SPDX-License-Identifier: Apache-2.0 | ||
# | ||
|
||
version: '2' | ||
|
||
networks: | ||
test: | ||
|
||
services: | ||
couchdb4: | ||
container_name: couchdb4 | ||
image: hyperledger/fabric-couchdb | ||
# Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password | ||
# for CouchDB. This will prevent CouchDB from operating in an "Admin Party" mode. | ||
environment: | ||
- COUCHDB_USER= | ||
- COUCHDB_PASSWORD= | ||
# Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service, | ||
# for example map it to utilize Fauxton User Interface in dev environments. | ||
ports: | ||
- "9984:5984" | ||
networks: | ||
- test | ||
|
||
peer0.org3.example.com: | ||
environment: | ||
- CORE_LEDGER_STATE_STATEDATABASE=CouchDB | ||
- CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb4:5984 | ||
# The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD | ||
# provide the credentials for ledger to connect to CouchDB. The username and password must | ||
# match the username and password set for the associated CouchDB. | ||
- CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME= | ||
- CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD= | ||
depends_on: | ||
- couchdb4 | ||
networks: | ||
- test |
Oops, something went wrong.