move ccpackage/ contents into network script

Signed-off-by: Josh Kneubuhl <jkneubuh@us.ibm.com>
This commit is contained in:
Josh Kneubuhl 2022-04-04 14:24:16 -04:00
parent a48aa0a46f
commit 827e30cf30
9 changed files with 111 additions and 132 deletions

View file

@ -26,7 +26,7 @@ network up
network channel create network channel create
``` ```
``` ```
network chaincode deploy ${PWD} network chaincode deploy asset-transfer-basic basic_1.0 ${PWD}
``` ```
``` ```
network chaincode metadata asset-transfer-basic network chaincode metadata asset-transfer-basic
@ -44,22 +44,22 @@ network channel create
```shell ```shell
# Build the chaincode docker image # Build the chaincode docker image
docker build -t hyperledger/fabric-samples/asset-transfer-basic/chaincode-java . docker build -t fabric-samples/asset-transfer-basic/chaincode-java .
# Load the docker image directly to the KIND control plane. # Load the docker image directly to the KIND control plane.
# (Alternately, build/tag/push the image to a remote container registry, e.g. localhost:5000) # (Alternately, build/tag/push the image to a remote container registry, e.g. localhost:5000)
kind load docker-image hyperledger/fabric-samples/asset-transfer-basic/chaincode-java kind load docker-image fabric-samples/asset-transfer-basic/chaincode-java
``` ```
```shell ```shell
# Assemble the chaincode package archive # Assemble the chaincode package archive
network chaincode package $PWD/ccpackage/ $PWD/build/asset-transfer.tgz network chaincode package basic_1.0 asset-transfer-basic $PWD/build/asset-transfer.tgz
# Determine the ID for the chaincode package # Determine the ID for the chaincode package
CORE_CHAINCODE_ID_NAME=$(network chaincode id $PWD/build/asset-transfer.tgz) CORE_CHAINCODE_ID_NAME=$(network chaincode id $PWD/build/asset-transfer.tgz)
# Launch the chaincode in k8s as Deployment + Service # Launch the chaincode in k8s as Deployment + Service
network chaincode launch $PWD/build/asset-transfer.tgz network chaincode launch asset-transfer-basic $CORE_CHAINCODE_ID_NAME fabric-samples/asset-transfer-basic/chaincode-java
# Complete the chaincode lifecycle # Complete the chaincode lifecycle
network chaincode install $PWD/build/asset-transfer.tgz network chaincode install $PWD/build/asset-transfer.tgz
@ -75,7 +75,7 @@ network chaincode query asset-transfer-basic '{"Args":["ReadAsset","asset1"]
``` ```
```shell ```shell
kubectl -n test-network logs -f deployment/org1peer1-cc-asset-transfer-basic kubectl -n test-network logs -f deployment/org1peer1-ccaas-asset-transfer-basic
``` ```
## Debugging ## Debugging
@ -96,20 +96,16 @@ docker build -t fabric-samples/asset-transfer-basic/chaincode-java .
By instructing the peer to connect to chaincode at the Docker host alias `host.docker.internal`, pods running in By instructing the peer to connect to chaincode at the Docker host alias `host.docker.internal`, pods running in
Kubernetes will access the local process via a special loopback interface established by KIND. Kubernetes will access the local process via a special loopback interface established by KIND.
Set the "address" attribute in the project's [ccpackage/connection.json](ccpackage/connection.json) descriptor and assemble the chaincode package: Set the "address" attribute in the package connection.json descriptor and assemble the chaincode package:
```json
{
"address": "host.docker.internal:9999",
}
```
```shell ```shell
network cc package $PWD/ccpackage/ $PWD/build/asset-transfer-debug.tgz export TEST_NETWORK_CHAINCODE_ADDRESS=host.docker.internal:9999
network cc package basic_1.0 asset-transfer-debug $PWD/build/asset-transfer-debug.tgz
``` ```
### Launch ### Launch
When chaincode is launched locally, it must declare the package ID in the enviroment as if the process had been managed When chaincode is launched locally, it must declare the package ID in the environment as if the process had been managed
by the peer's chaincode lifecycle manager. Calculate the package ID and start the chaincode, binding to port 9999 by the peer's chaincode lifecycle manager. Calculate the package ID and start the chaincode, binding to port 9999
on the local system: on the local system:
@ -117,7 +113,7 @@ on the local system:
export CHAINCODE_SERVER_ADDRESS=0.0.0.0:9999 export CHAINCODE_SERVER_ADDRESS=0.0.0.0:9999
export CORE_CHAINCODE_ID_NAME=$(network chaincode id $PWD/build/asset-transfer-debug.tgz) export CORE_CHAINCODE_ID_NAME=$(network chaincode id $PWD/build/asset-transfer-debug.tgz)
java -jar build/libs/chaincode.jar java -jar build/libs/chaincode.jar
``` ```
Or using the editor/debugger/IDE of your choice, create a launch target for `ContractMain.main()`, specifying the Or using the editor/debugger/IDE of your choice, create a launch target for `ContractMain.main()`, specifying the

View file

@ -1,49 +0,0 @@
# Scratch notes - Ignore - ... `fabric-cli` redux
`fabric [options] peer <group> <command> [parameters]`
```
fabric => network
peer => implicit (from env/context)
channel => implicit (from env/context)
group => chaincode
[params] => --param=value or NETWORK_$GROUP_$COMMAND_$PARAM=value from env
```
```shell
network chaincode package <folder-path> <bundle-path>
network chaincode id <bundle-path>
network chaincode install <bundle-path>
network chaincode approve <name> <id>
network chainocde commit <name>
```
```shell
network chaincode list
network chaincode delete <name>
network chaincode describe <name>
network chaincode invoke <name> <payload>
network chaincode query <name> <payload>
```
meta / fictitious targets:
```
network chaincode launch <name> <CC_IMAGE>
network chaincode deploy <name> <folder-path> # package, install, LAUNCH, approve, commit
```
ordinal position args vs. named parameters vs. env overrides
```shell
network chaincode package asset-transfer my-chaincode.tar.gz
network cc package --name=asset-transfer (or NETWORK_CHAINCODE_PACKAGE_NAME=asset-transfer)
network cc package --name= (or NETWORK_${GROUP}_${COMMAND}_${PARAM}=<value>)
```

View file

@ -1,4 +0,0 @@
{
"name": "asset-transfer-basic",
"image": "hyperledger/fabric-samples/asset-transfer-basic/chaincode-java:latest"
}

View file

@ -1,5 +0,0 @@
{
"address": "{{.peername}}-cc-asset-transfer-basic:9999",
"dial_timeout": "10s",
"tls_required": false
}

View file

@ -1,4 +0,0 @@
{
"type": "ccaas",
"label": "basic_1.0"
}

View file

@ -67,7 +67,7 @@ function createNetwork() {
./network channel create ./network channel create
print "Deploying chaincode" print "Deploying chaincode"
./network chaincode deploy $TEST_NETWORK_CHAINCODE_PATH ./network chaincode deploy asset-transfer-basic basic_1.0 $TEST_NETWORK_CHAINCODE_PATH
} }
function stopNetwork() { function stopNetwork() {
@ -82,7 +82,8 @@ trap "quitterLaScene" EXIT
createNetwork createNetwork
print "Inserting and querying assets" print "Inserting and querying assets"
( ./network chaincode invoke $CHAINCODE_NAME '{"Args":["InitLedger"]}' \ ( ./network chaincode metadata $CHAINCODE_NAME \
&& ./network chaincode invoke $CHAINCODE_NAME '{"Args":["InitLedger"]}' \
&& sleep 5 \ && sleep 5 \
&& ./network chaincode query $CHAINCODE_NAME '{"Args":["ReadAsset","asset1"]}' ) && ./network chaincode query $CHAINCODE_NAME '{"Args":["ReadAsset","asset1"]}' )
print "OK" print "OK"

View file

@ -7,16 +7,16 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: org1{{PEER_NAME}}-cc-{{CHAINCODE_NAME}} name: org1{{PEER_NAME}}-ccaas-{{CHAINCODE_NAME}}
spec: spec:
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
app: org1{{PEER_NAME}}-cc-{{CHAINCODE_NAME}} app: org1{{PEER_NAME}}-ccaas-{{CHAINCODE_NAME}}
template: template:
metadata: metadata:
labels: labels:
app: org1{{PEER_NAME}}-cc-{{CHAINCODE_NAME}} app: org1{{PEER_NAME}}-ccaas-{{CHAINCODE_NAME}}
spec: spec:
containers: containers:
- name: main - name: main
@ -36,11 +36,11 @@ spec:
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
name: org1{{PEER_NAME}}-cc-{{CHAINCODE_NAME}} name: org1{{PEER_NAME}}-ccaas-{{CHAINCODE_NAME}}
spec: spec:
ports: ports:
- name: chaincode - name: chaincode
port: 9999 port: 9999
protocol: TCP protocol: TCP
selector: selector:
app: org1{{PEER_NAME}}-cc-{{CHAINCODE_NAME}} app: org1{{PEER_NAME}}-ccaas-{{CHAINCODE_NAME}}

View file

@ -7,21 +7,35 @@
# Convenience routine to "do everything" required to bring up a sample CC. # Convenience routine to "do everything" required to bring up a sample CC.
function deploy_chaincode() { function deploy_chaincode() {
local cc_name=$1
local cc_label=$2
local cc_folder=$(absolute_path $3)
local temp_folder=$(mktemp -d)
local cc_package=${temp_folder}/${cc_name}.tgz
package_chaincode ${cc_label} ${cc_name} ${cc_package}
set_chaincode_id ${cc_package}
set_chaincode_image ${cc_folder}
build_chaincode_image ${cc_folder} ${CHAINCODE_IMAGE}
kind_load_image ${CHAINCODE_IMAGE}
launch_chaincode ${cc_name} ${CHAINCODE_ID} ${CHAINCODE_IMAGE}
activate_chaincode ${cc_name} ${cc_package}
}
# Infer a reasonable name for the chaincode image based on the folder path conventions, or
# allow the user to override with TEST_NETWORK_CHAINCODE_IMAGE.
function set_chaincode_image() {
local cc_folder=$1 local cc_folder=$1
local build_folder=${cc_folder}/build
local cc_package=${build_folder}/chaincode.tgz
build_chaincode_image ${cc_folder} if [ -z "$TEST_NETWORK_CHAINCODE_IMAGE" ]; then
CHAINCODE_IMAGE=${cc_folder/*fabric-samples/fabric-samples}
mkdir -p ${build_folder} else
CHAINCODE_IMAGE=${TEST_NETWORK_CHAINCODE_IMAGE}
package_chaincode ${cc_folder}/ccpackage ${cc_package} fi
extract_chaincode_image ${cc_package}
extract_chaincode_name ${cc_package}
launch_chaincode ${cc_package}
activate_chaincode ${CHAINCODE_NAME} ${cc_package}
} }
# Convenience routine to "do everything other than package and launch" a sample CC. # Convenience routine to "do everything other than package and launch" a sample CC.
@ -73,8 +87,6 @@ function invoke_chaincode() {
local cc_name=$1 local cc_name=$1
shift shift
# set -x
export_peer_context org1 peer1 export_peer_context org1 peer1
peer chaincode invoke \ peer chaincode invoke \
@ -89,24 +101,58 @@ function invoke_chaincode() {
function build_chaincode_image() { function build_chaincode_image() {
local cc_folder=$1 local cc_folder=$1
local cc_image=$(jq -r .image ${cc_folder}/ccpackage/ccaas.json) local cc_image=$2
push_fn "Building chaincode image ${cc_image}" push_fn "Building chaincode image ${cc_image}"
docker build -t ${cc_image} ${cc_folder} docker build -t ${cc_image} ${cc_folder}
pop_fn
}
function kind_load_image() {
local cc_image=$1
push_fn "Loading chaincode to kind image plane"
kind load docker-image ${cc_image} kind load docker-image ${cc_image}
pop_fn pop_fn
} }
function package_chaincode() { function package_chaincode() {
local cc_folder=$1 local cc_label=$1
local cc_archive=$2 local cc_name=$2
local archive_name=$(basename $cc_archive) local cc_archive=$3
push_fn "Packaging chaincode ${archive_name}"
tar -C ${cc_folder} -zcf ${cc_folder}/code.tar.gz connection.json ccaas.json local cc_folder=$(dirname $cc_archive)
local archive_name=$(basename $cc_archive)
push_fn "Packaging chaincode ${cc_label}"
mkdir -p ${cc_folder}
# Allow the user to override the service URL for the endpoint. This allows, for instance,
# local debugging at the 'host.docker.internal' DNS alias.
local cc_default_address="{{.peername}}-ccaas-${cc_name}:9999"
local cc_address=${TEST_NETWORK_CHAINCODE_ADDRESS:-$cc_default_address}
cat << EOF > ${cc_folder}/connection.json
{
"address": "${cc_address}",
"dial_timeout": "10s",
"tls_required": false
}
EOF
cat << EOF > ${cc_folder}/metadata.json
{
"type": "ccaas",
"label": "${cc_label}"
}
EOF
tar -C ${cc_folder} -zcf ${cc_folder}/code.tar.gz connection.json
tar -C ${cc_folder} -zcf ${cc_archive} code.tar.gz metadata.json tar -C ${cc_folder} -zcf ${cc_archive} code.tar.gz metadata.json
rm ${cc_folder}/code.tar.gz rm ${cc_folder}/code.tar.gz
@ -116,26 +162,37 @@ function package_chaincode() {
function launch_chaincode_service() { function launch_chaincode_service() {
local org=$1 local org=$1
local cc_id=$2 local peer=$2
local cc_image=$3 local cc_name=$3
local peer=$4 local cc_id=$4
local cc_image=$5
push_fn "Launching chaincode container \"${cc_image}\"" push_fn "Launching chaincode container \"${cc_image}\""
# The chaincode endpoint needs to have the generated chaincode ID available in the environment. # The chaincode endpoint needs to have the generated chaincode ID available in the environment.
# This could be from a config map, a secret, or by directly editing the deployment spec. Here we'll keep # This could be from a config map, a secret, or by directly editing the deployment spec. Here we'll keep
# things simple by using sed to substitute script variables into a yaml template. # things simple by using sed to substitute script variables into a yaml template.
cat kube/${org}/${org}-cc-template.yaml \ cat kube/${org}/${org}-cc-template.yaml \
| sed 's,{{CHAINCODE_NAME}},'${CHAINCODE_NAME}',g' \ | sed 's,{{CHAINCODE_NAME}},'${cc_name}',g' \
| sed 's,{{CHAINCODE_ID}},'${cc_id}',g' \ | sed 's,{{CHAINCODE_ID}},'${cc_id}',g' \
| sed 's,{{CHAINCODE_IMAGE}},'${cc_image}',g' \ | sed 's,{{CHAINCODE_IMAGE}},'${cc_image}',g' \
| sed 's,{{PEER_NAME}},'${peer}',g' \ | sed 's,{{PEER_NAME}},'${peer}',g' \
| exec kubectl -n $NS apply -f - | exec kubectl -n $NS apply -f -
kubectl -n $NS rollout status deploy/${org}${peer}-cc-${CHAINCODE_NAME} kubectl -n $NS rollout status deploy/${org}${peer}-ccaas-${cc_name}
pop_fn pop_fn
} }
function launch_chaincode() {
local org=org1
local cc_name=$1
local cc_id=$2
local cc_image=$3
launch_chaincode_service ${org} peer1 ${cc_name} ${cc_id} ${cc_image}
launch_chaincode_service ${org} peer2 ${cc_name} ${cc_id} ${cc_image}
}
function install_chaincode_for() { function install_chaincode_for() {
local org=$1 local org=$1
local peer=$2 local peer=$2
@ -202,27 +259,6 @@ function commit_chaincode() {
pop_fn pop_fn
} }
# The chaincode docker image is stored in the code.tar.gz ccaas.json
function extract_chaincode_image() {
CHAINCODE_IMAGE=$(tar zxfO $1 code.tar.gz | tar zxfO - ccaas.json | jq -r .image)
}
function extract_chaincode_name() {
CHAINCODE_NAME=$(tar zxfO $1 code.tar.gz | tar zxfO - ccaas.json | jq -r .name)
}
function launch_chaincode() {
local cc_package=$1
set_chaincode_id ${cc_package}
extract_chaincode_image ${cc_package}
extract_chaincode_name ${cc_package}
launch_chaincode_service org1 $CHAINCODE_ID $CHAINCODE_IMAGE peer1
launch_chaincode_service org1 $CHAINCODE_ID $CHAINCODE_IMAGE peer2
}
function set_chaincode_id() { function set_chaincode_id() {
local cc_package=$1 local cc_package=$1

View file

@ -102,3 +102,11 @@ function export_peer_context() {
export CORE_PEER_MSPCONFIGPATH=${TEMP_DIR}/enrollments/${org}/users/${org}admin/msp export CORE_PEER_MSPCONFIGPATH=${TEMP_DIR}/enrollments/${org}/users/${org}admin/msp
export CORE_PEER_TLS_ROOTCERT_FILE=${TEMP_DIR}/channel-msp/peerOrganizations/${org}/msp/tlscacerts/tlsca-signcert.pem export CORE_PEER_TLS_ROOTCERT_FILE=${TEMP_DIR}/channel-msp/peerOrganizations/${org}/msp/tlscacerts/tlsca-signcert.pem
} }
function absolute_path() {
local relative_path=$1
local abspath="$( cd "${relative_path}" && pwd )"
echo $abspath
}