From 4b8588749506b79d590bcc6670b6c61214b4a05e Mon Sep 17 00:00:00 2001 From: yahtoo ma Date: Fri, 26 May 2017 20:06:32 +0800 Subject: [PATCH] [CE-4] Support fabric 1.0 Simulation deployment fabric 1.0 e2e_cli example. First need to run # cd ./src/agent/docker/_compose_files/fabric-1.0/local/ && ./generateArtifacts.sh command to generate the required docker compose file. Issue: CE-4 Change-Id: I348ac40a71c0398b796d7ccdd05d22bd1337a8b0 Signed-off-by: yahtoo ma --- .../local/channel-artifacts/.gitkeep | 0 .../local/channel-artifacts/Org1MSPanchors.tx | Bin 0 -> 250 bytes .../local/channel-artifacts/Org2MSPanchors.tx | Bin 0 -> 250 bytes .../local/channel-artifacts/channel.tx | Bin 0 -> 461 bytes .../local/channel-artifacts/genesis.block | Bin 0 -> 6741 bytes ...1dea2acfa72dece25fa3a7c589ea6ae30c9413e_sk | 5 + .../example.com/ca/ca.example.com-cert.pem | 15 +++ .../msp/admincerts/Admin@example.com-cert.pem | 14 +++ .../msp/cacerts/ca.example.com-cert.pem | 15 +++ .../msp/signcerts/ca.example.com-cert.pem | 15 +++ .../msp/admincerts/Admin@example.com-cert.pem | 14 +++ .../msp/cacerts/ca.example.com-cert.pem | 15 +++ ...986b8defd875de80042d3bf738bcc7c18abd137_sk | 5 + .../signcerts/orderer.example.com-cert.pem | 15 +++ .../orderers/orderer.example.com/tls/ca.crt | 15 +++ .../orderer.example.com/tls/server.crt | 15 +++ .../orderer.example.com/tls/server.key | 5 + .../msp/admincerts/ca.example.com-cert.pem | 15 +++ .../msp/cacerts/ca.example.com-cert.pem | 15 +++ ...ca3416275e7b6e764e3aa1552f4161877cd58cf_sk | 5 + .../msp/signcerts/Admin@example.com-cert.pem | 14 +++ .../users/Admin@example.com/tls/ca.crt | 15 +++ .../users/Admin@example.com/tls/server.crt | 14 +++ .../users/Admin@example.com/tls/server.key | 5 + ...b52c9abcd8acf8cbfcf18894638f36c0fec2ce5_sk | 5 + .../ca/ca.org1.example.com-cert.pem | 16 +++ .../Admin@org1.example.com-cert.pem | 14 +++ .../msp/cacerts/ca.org1.example.com-cert.pem | 16 +++ .../signcerts/ca.org1.example.com-cert.pem | 16 +++ .../Admin@org1.example.com-cert.pem | 14 +++ .../msp/cacerts/ca.org1.example.com-cert.pem | 16 +++ ...fc54145f8dcb927b747d2f7d7bd0e8940004aee_sk | 5 + .../signcerts/peer0.org1.example.com-cert.pem | 15 +++ .../peers/peer0.org1.example.com/tls/ca.crt | 16 +++ .../peer0.org1.example.com/tls/server.crt | 15 +++ .../peer0.org1.example.com/tls/server.key | 5 + .../Admin@org1.example.com-cert.pem | 14 +++ .../msp/cacerts/ca.org1.example.com-cert.pem | 16 +++ ...907e8aa7cf9e59d29e0b2fca92f1b10258bfc5e_sk | 5 + .../signcerts/peer1.org1.example.com-cert.pem | 15 +++ .../peers/peer1.org1.example.com/tls/ca.crt | 16 +++ .../peer1.org1.example.com/tls/server.crt | 15 +++ .../peer1.org1.example.com/tls/server.key | 5 + .../admincerts/ca.org1.example.com-cert.pem | 16 +++ .../msp/cacerts/ca.org1.example.com-cert.pem | 16 +++ ...9fa3618381244100a184c7528c06e32e114d3b8_sk | 5 + .../signcerts/Admin@org1.example.com-cert.pem | 14 +++ .../users/Admin@org1.example.com/tls/ca.crt | 16 +++ .../Admin@org1.example.com/tls/server.crt | 14 +++ .../Admin@org1.example.com/tls/server.key | 5 + .../admincerts/ca.org1.example.com-cert.pem | 16 +++ .../msp/cacerts/ca.org1.example.com-cert.pem | 16 +++ ...161116d0ba482f93c1fa9e46f34bbb86a0f54a6_sk | 5 + .../signcerts/User1@org1.example.com-cert.pem | 14 +++ .../users/User1@org1.example.com/tls/ca.crt | 16 +++ .../User1@org1.example.com/tls/server.crt | 14 +++ .../User1@org1.example.com/tls/server.key | 5 + ...11a6d7c4ccf6869c79bfa820ea95f56b55514d4_sk | 5 + .../ca/ca.org2.example.com-cert.pem | 16 +++ .../Admin@org2.example.com-cert.pem | 14 +++ .../msp/cacerts/ca.org2.example.com-cert.pem | 16 +++ .../signcerts/ca.org2.example.com-cert.pem | 16 +++ .../Admin@org2.example.com-cert.pem | 14 +++ .../msp/cacerts/ca.org2.example.com-cert.pem | 16 +++ ...23424758e043acf4504bd80e4a6155db3eb70d9_sk | 5 + .../signcerts/peer0.org2.example.com-cert.pem | 15 +++ .../peers/peer0.org2.example.com/tls/ca.crt | 16 +++ .../peer0.org2.example.com/tls/server.crt | 15 +++ .../peer0.org2.example.com/tls/server.key | 5 + .../Admin@org2.example.com-cert.pem | 14 +++ .../msp/cacerts/ca.org2.example.com-cert.pem | 16 +++ ...85f5a2281e1dd472215951e79405f6ec2df7285_sk | 5 + .../signcerts/peer1.org2.example.com-cert.pem | 15 +++ .../peers/peer1.org2.example.com/tls/ca.crt | 16 +++ .../peer1.org2.example.com/tls/server.crt | 15 +++ .../peer1.org2.example.com/tls/server.key | 5 + .../admincerts/ca.org2.example.com-cert.pem | 16 +++ .../msp/cacerts/ca.org2.example.com-cert.pem | 16 +++ ...17daebe586e640b65bb4d622e318ad2dd33436f_sk | 5 + .../signcerts/Admin@org2.example.com-cert.pem | 14 +++ .../users/Admin@org2.example.com/tls/ca.crt | 16 +++ .../Admin@org2.example.com/tls/server.crt | 14 +++ .../Admin@org2.example.com/tls/server.key | 5 + .../admincerts/ca.org2.example.com-cert.pem | 16 +++ .../msp/cacerts/ca.org2.example.com-cert.pem | 16 +++ ...08c152cd5f7de9e8d9ee3f9f0f88c90a3bf7095_sk | 5 + .../signcerts/User1@org2.example.com-cert.pem | 14 +++ .../users/User1@org2.example.com/tls/ca.crt | 16 +++ .../User1@org2.example.com/tls/server.crt | 14 +++ .../User1@org2.example.com/tls/server.key | 5 + .../local/docker-compose-base-template.yaml | 103 +++++++++++++++++ .../local/docker-compose-e2e-template.yaml | 62 +++++++++++ .../fabric-1.0/local/generateArtifacts.sh | 105 ++++++++++++++++++ .../fabric-1.0/local/peer-base.yaml | 25 +++++ src/agent/docker/cluster.py | 37 +++--- src/agent/docker/docker_swarm.py | 96 ++++++++++++---- src/common/__init__.py | 2 +- src/common/utils.py | 5 +- src/modules/cluster.py | 45 ++++++-- src/modules/stat.py | 4 +- src/resources/cluster_api.py | 21 ++-- src/resources/cluster_view.py | 3 +- src/resources/index.py | 3 +- src/themes/basic/static/js/script.js | 34 ++++++ src/themes/basic/templates/cluster_info.html | 2 +- src/themes/basic/templates/clusters.html | 6 +- src/themes/basic/templates/layout.html | 41 +++++-- .../js/routes/cluster/active/ClusterModal.js | 7 +- 108 files changed, 1577 insertions(+), 77 deletions(-) create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/channel-artifacts/.gitkeep create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/channel-artifacts/Org1MSPanchors.tx create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/channel-artifacts/Org2MSPanchors.tx create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/channel-artifacts/channel.tx create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/channel-artifacts/genesis.block create mode 100755 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/ordererOrganizations/example.com/ca/6b56d50e703aa40cd55c998d71dea2acfa72dece25fa3a7c589ea6ae30c9413e_sk create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/ordererOrganizations/example.com/ca/ca.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/ordererOrganizations/example.com/msp/admincerts/Admin@example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/ordererOrganizations/example.com/msp/cacerts/ca.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/ordererOrganizations/example.com/msp/signcerts/ca.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/admincerts/Admin@example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem create mode 100755 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/keystore/59b6b24dd6e8ce4cb6b9c5e4b986b8defd875de80042d3bf738bcc7c18abd137_sk create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/signcerts/orderer.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.key create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/admincerts/ca.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/cacerts/ca.example.com-cert.pem create mode 100755 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore/18b4d449fba30c308ab3780f4ca3416275e7b6e764e3aa1552f4161877cd58cf_sk create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/signcerts/Admin@example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/ca.crt create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/server.crt create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/tls/server.key create mode 100755 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/ca/97e6352013067a8e2ace2388db52c9abcd8acf8cbfcf18894638f36c0fec2ce5_sk create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/msp/signcerts/ca.org1.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem create mode 100755 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/keystore/f6137342685f4f965acc96feffc54145f8dcb927b747d2f7d7bd0e8940004aee_sk create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/signcerts/peer0.org1.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/admincerts/Admin@org1.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem create mode 100755 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/keystore/1e2ba36e502372bd6a339c05c907e8aa7cf9e59d29e0b2fca92f1b10258bfc5e_sk create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/signcerts/peer1.org1.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.crt create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.key create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/admincerts/ca.org1.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem create mode 100755 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/9986b78d0eb5ebb0ec9bba9049fa3618381244100a184c7528c06e32e114d3b8_sk create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/ca.crt create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/server.crt create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/server.key create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/admincerts/ca.org1.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/cacerts/ca.org1.example.com-cert.pem create mode 100755 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/d38176ae96484ffd62e08331b161116d0ba482f93c1fa9e46f34bbb86a0f54a6_sk create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/ca.crt create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/server.crt create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/server.key create mode 100755 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/ca/5090a7af144ee94fd165d88d111a6d7c4ccf6869c79bfa820ea95f56b55514d4_sk create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/msp/signcerts/ca.org2.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem create mode 100755 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/keystore/7e4a455255ab1183307e9ce6023424758e043acf4504bd80e4a6155db3eb70d9_sk create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/signcerts/peer0.org2.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.crt create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.key create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem create mode 100755 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/keystore/bb892ba247ad5e01f55a1c6c885f5a2281e1dd472215951e79405f6ec2df7285_sk create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp/signcerts/peer1.org2.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.crt create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/server.key create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/admincerts/ca.org2.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem create mode 100755 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/e0adfea48ac500ee5609b427c17daebe586e640b65bb4d622e318ad2dd33436f_sk create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/ca.crt create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/server.crt create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/server.key create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/admincerts/ca.org2.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem create mode 100755 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/keystore/7076593fae97358456debae4908c152cd5f7de9e8d9ee3f9f0f88c90a3bf7095_sk create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/signcerts/User1@org2.example.com-cert.pem create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/ca.crt create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/server.crt create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/server.key create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/docker-compose-base-template.yaml create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/docker-compose-e2e-template.yaml create mode 100755 src/agent/docker/_compose_files/fabric-1.0/local/generateArtifacts.sh create mode 100644 src/agent/docker/_compose_files/fabric-1.0/local/peer-base.yaml diff --git a/src/agent/docker/_compose_files/fabric-1.0/local/channel-artifacts/.gitkeep b/src/agent/docker/_compose_files/fabric-1.0/local/channel-artifacts/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/src/agent/docker/_compose_files/fabric-1.0/local/channel-artifacts/Org1MSPanchors.tx b/src/agent/docker/_compose_files/fabric-1.0/local/channel-artifacts/Org1MSPanchors.tx new file mode 100644 index 0000000000000000000000000000000000000000..484163384c5c2bcc00e65d79d49555ba6cf85844 GIT binary patch literal 250 zcmd=3&d9~j#mm8@#F<-}oROH9mzpE=n33xNBNvi@zmP8%w_`y;PG)jqNoIbYkR1o3 zkQEoZe^I)jZ*YK+z7#tbGl;>U#LdMXl$w~5T2u_-gcoI&Ksa1nY>p|pnR!47sYXVj zdQ=k&fF|Z3Oibipl+pvL$V<-1FA7KnnIJDD%O%YvRsiG}=;Z@#)=RBO%q_@C)l1IL K73el6(G37|4L^_o literal 0 HcmV?d00001 diff --git a/src/agent/docker/_compose_files/fabric-1.0/local/channel-artifacts/Org2MSPanchors.tx b/src/agent/docker/_compose_files/fabric-1.0/local/channel-artifacts/Org2MSPanchors.tx new file mode 100644 index 0000000000000000000000000000000000000000..70f01a62eb4274741ed686862fd0315c6f8ea5fd GIT binary patch literal 250 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 $CRYPTOGEN" + else + echo "Building cryptogen" + make -C $FABRIC_ROOT release-all + fi + + echo + echo "##########################################################" + echo "##### Generate certificates using cryptogen tool #########" + echo "##########################################################" + $CRYPTOGEN generate --config=./crypto-config.yaml + echo +} + +## Generate orderer genesis block , channel configuration transaction and anchor peer update transactions +function generateChannelArtifacts() { + + CONFIGTXGEN=$FABRIC_ROOT/release/$OS_ARCH/bin/configtxgen + if [ -f "$CONFIGTXGEN" ]; then + echo "Using configtxgen -> $CONFIGTXGEN" + else + echo "Building configtxgen" + make -C $FABRIC_ROOT release-all + fi + + echo "##########################################################" + echo "######### Generating Orderer Genesis block ##############" + echo "##########################################################" + # Note: For some unknown reason (at least for now) the block file can't be + # named orderer.genesis.block or the orderer will fail to launch! + $CONFIGTXGEN -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block + + echo + echo "#################################################################" + echo "### Generating channel configuration transaction 'channel.tx' ###" + echo "#################################################################" + $CONFIGTXGEN -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME + + echo + echo "#################################################################" + echo "####### Generating anchor peer update for Org1MSP ##########" + echo "#################################################################" + $CONFIGTXGEN -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP + + echo + echo "#################################################################" + echo "####### Generating anchor peer update for Org2MSP ##########" + echo "#################################################################" + $CONFIGTXGEN -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP + echo +} + +#generateCerts +replacePrivateKey +#generateChannelArtifacts + diff --git a/src/agent/docker/_compose_files/fabric-1.0/local/peer-base.yaml b/src/agent/docker/_compose_files/fabric-1.0/local/peer-base.yaml new file mode 100644 index 000000000..18fed0be9 --- /dev/null +++ b/src/agent/docker/_compose_files/fabric-1.0/local/peer-base.yaml @@ -0,0 +1,25 @@ +version: '2' +services: + peer-base: + image: hyperledger/fabric-peer + environment: + - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock + # the following setting starts chaincode containers on the same + # bridge network as the peers + # https://docs.docker.com/compose/networking/ + - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=e2ecli_default + #- CORE_LOGGING_LEVEL=ERROR + - CORE_LOGGING_LEVEL=DEBUG + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_ENDORSER_ENABLED=true + - CORE_PEER_GOSSIP_USELEADERELECTION=true + - CORE_PEER_GOSSIP_ORGLEADER=false + # The following setting skips the gossip handshake since we are + # are not doing mutual TLS + - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true + - CORE_PEER_PROFILE_ENABLED=true + - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt + - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key + - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt + working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer + command: peer node start --peer-defaultchain=false diff --git a/src/agent/docker/cluster.py b/src/agent/docker/cluster.py index 27118b8aa..19ab2d455 100644 --- a/src/agent/docker/cluster.py +++ b/src/agent/docker/cluster.py @@ -8,7 +8,7 @@ from agent import compose_up, compose_clean, compose_start, compose_stop, \ compose_restart -from common import CONSENSUS_PLUGINS, \ +from common import FABRIC_VERSION, CONSENSUS_PLUGINS, \ CONSENSUS_MODES, CLUSTER_SIZES from ..cluster_base import ClusterBase @@ -27,6 +27,7 @@ def __init__(self): pass def create(self, cid, mapped_ports, host, user_id="", + fabric_version=FABRIC_VERSION[0], consensus_plugin=CONSENSUS_PLUGINS[0], consensus_mode=CONSENSUS_MODES[0], size=CLUSTER_SIZES[0]): """ Create a cluster based on given data @@ -38,6 +39,7 @@ def create(self, cid, mapped_ports, host, user_id="", :param start_port: first service port for cluster, will generate if not given :param user_id: user_id of the cluster if start to be applied + :param fabric_version: fabric images version :param consensus_plugin: type of the consensus type :param size: size of the cluster, int type :return: Id of the created cluster or None @@ -49,6 +51,7 @@ def create(self, cid, mapped_ports, host, user_id="", logger.debug("Start compose project with name={}".format(cid)) containers = compose_up( name=cid, mapped_ports=mapped_ports, host=host, + fabric_version=fabric_version, consensus_plugin=consensus_plugin, consensus_mode=consensus_mode, cluster_size=size) if not containers or len(containers) != size: @@ -58,24 +61,30 @@ def create(self, cid, mapped_ports, host, user_id="", else: return containers - def delete(self, id, daemon_url, consensus_plugin): - return compose_clean(id, daemon_url, consensus_plugin) + def delete(self, id, daemon_url, fabric_version, consensus_plugin, + cluster_size): + return compose_clean(id, daemon_url, fabric_version, + consensus_plugin, cluster_size) - def start(self, name, daemon_url, mapped_ports, consensus_plugin, + def start(self, name, daemon_url, mapped_ports, fabric_version, + consensus_plugin, consensus_mode, log_type, log_level, log_server, cluster_size): - return compose_start(name, daemon_url, mapped_ports, consensus_plugin, - consensus_mode, log_type, log_level, log_server, - cluster_size) - - def restart(self, name, daemon_url, mapped_ports, consensus_plugin, - consensus_mode, log_type, log_level, log_server, cluster_size): - return compose_restart(name, daemon_url, mapped_ports, + return compose_start(name, daemon_url, mapped_ports, fabric_version, + consensus_plugin, consensus_mode, log_type, + log_level, log_server, cluster_size) + + def restart(self, name, daemon_url, mapped_ports, fabric_version, + consensus_plugin, consensus_mode, log_type, log_level, + log_server, cluster_size): + return compose_restart(name, daemon_url, mapped_ports, fabric_version, consensus_plugin, consensus_mode, log_type, log_level, log_server, cluster_size) - def stop(self, name, daemon_url, mapped_ports, consensus_plugin, - consensus_mode, log_type, log_level, log_server, cluster_size): - return compose_stop(name, daemon_url, mapped_ports, consensus_plugin, + def stop(self, name, daemon_url, mapped_ports, fabric_version, + consensus_plugin, consensus_mode, log_type, log_level, + log_server, cluster_size): + return compose_stop(name, daemon_url, mapped_ports, fabric_version, + consensus_plugin, consensus_mode, log_type, log_level, log_server, cluster_size) diff --git a/src/agent/docker/docker_swarm.py b/src/agent/docker/docker_swarm.py index 33d504b67..2ae115cb2 100644 --- a/src/agent/docker/docker_swarm.py +++ b/src/agent/docker/docker_swarm.py @@ -12,7 +12,7 @@ from common import log_handler, LOG_LEVEL from common import \ HOST_TYPES, \ - CLUSTER_NETWORK, \ + CLUSTER_NETWORK, FABRIC_VERSION, \ CONSENSUS_PLUGINS, CONSENSUS_MODES, \ CLUSTER_LOG_TYPES, CLUSTER_LOG_LEVEL, \ CLUSTER_SIZES, \ @@ -308,7 +308,8 @@ def get_project(template_path): def _compose_set_env(name, daemon_url, mapped_ports=SERVICE_PORTS, - consensus_plugin=CONSENSUS_PLUGINS[0], + fabric_version=FABRIC_VERSION[0], + consensus_plugin=[0], consensus_mode=CONSENSUS_MODES[0], cluster_size=CLUSTER_SIZES[0], log_level=CLUSTER_LOG_LEVEL[0], @@ -322,6 +323,7 @@ def _compose_set_env(name, daemon_url, mapped_ports=SERVICE_PORTS, 'VM_DOCKER_HOSTCONFIG_NETWORKMODE': CLUSTER_NETWORK + "_{}".format(consensus_plugin), 'PEER_VALIDATOR_CONSENSUS_PLUGIN': consensus_plugin, + 'FABRIC_VERSION': fabric_version, 'PBFT_GENERAL_MODE': consensus_mode, 'PBFT_GENERAL_N': str(cluster_size), 'PEER_NETWORKID': name, @@ -337,15 +339,17 @@ def _compose_set_env(name, daemon_url, mapped_ports=SERVICE_PORTS, def compose_up(name, host, mapped_ports, + fabric_version=FABRIC_VERSION[0], consensus_plugin=CONSENSUS_PLUGINS[0], consensus_mode=CONSENSUS_MODES[0], cluster_size=CLUSTER_SIZES[0], - timeout=5, cluster_version='fabric-0.6'): + timeout=5): """ Compose up a cluster :param name: The name of the cluster :param mapped_ports: The mapped ports list of the cluster :param host: Docker host obj + :param fabric_version: Fabric version :param consensus_plugin: Cluster consensus plugin :param consensus_mode: Cluster consensus mode :param cluster_size: the size of the cluster @@ -363,9 +367,16 @@ def compose_up(name, host, mapped_ports, if log_type != CLUSTER_LOG_TYPES[0]: # not local os.environ['SYSLOG_SERVER'] = log_server - _compose_set_env(name, daemon_url, mapped_ports, consensus_plugin, - consensus_mode, cluster_size, log_level, log_type, - log_server) + _compose_set_env(name, daemon_url, mapped_ports, fabric_version, + consensus_plugin, consensus_mode, cluster_size, + log_level, log_type, log_server) + + if fabric_version == FABRIC_VERSION[1]: + cluster_version = 'fabric-0.6' + else: + logger.debug("log_type={}".format(log_type)) + cluster_version = 'fabric-1.0' + try: project = get_project(COMPOSE_FILE_PATH + "/{}/".format(cluster_version) + log_type) @@ -382,7 +393,8 @@ def compose_up(name, host, mapped_ports, return result -def compose_clean(name, daemon_url, consensus_plugin): +def compose_clean(name, daemon_url, fabric_version, + consensus_plugin, cluster_size): """ Try best to clean a compose project and clean related containers. @@ -394,7 +406,9 @@ def compose_clean(name, daemon_url, consensus_plugin): has_exception = False try: compose_down(name=name, daemon_url=daemon_url, - consensus_plugin=consensus_plugin) + fabric_version=fabric_version, + consensus_plugin=consensus_plugin, + cluster_size=cluster_size) except Exception as e: logger.error("Error in stop compose project, will clean") logger.debug(e) @@ -418,7 +432,8 @@ def compose_clean(name, daemon_url, consensus_plugin): def compose_start(name, daemon_url, mapped_ports=SERVICE_PORTS, - consensus_plugin=CONSENSUS_PLUGINS[0], + fabric_version=FABRIC_VERSION[0], + consensus_plugin=[0], consensus_mode=CONSENSUS_MODES[0], log_type=CLUSTER_LOG_TYPES[0], log_server="", log_level=CLUSTER_LOG_LEVEL[0], @@ -429,6 +444,7 @@ def compose_start(name, daemon_url, mapped_ports=SERVICE_PORTS, :param name: The name of the cluster :param mapped_ports: The mapped port list :param daemon_url: Docker host daemon + :param fabric_version: fabric version :param consensus_plugin: Cluster consensus type :param consensus_mode: Cluster consensus mode :param log_type: which log plugin for host @@ -437,12 +453,20 @@ def compose_start(name, daemon_url, mapped_ports=SERVICE_PORTS, :return: """ logger.debug("Compose Start {} with daemon_url={}, mapped_ports={} " - "consensus={}".format(name, daemon_url, mapped_ports, - consensus_plugin)) + "fabric_version={} consensus={}".format(name, daemon_url, + mapped_ports, + fabric_version, + consensus_plugin)) + + _compose_set_env(name, daemon_url, mapped_ports, fabric_version, + consensus_plugin, consensus_mode, cluster_size, + log_level, log_type, log_server) + + if fabric_version == FABRIC_VERSION[1]: + cluster_version = 'fabric-0.6' + else: + cluster_version = 'fabric-1.0' - _compose_set_env(name, daemon_url, mapped_ports, consensus_plugin, - consensus_mode, cluster_size, log_level, log_type, - log_server) # project = get_project(COMPOSE_FILE_PATH+"/"+consensus_plugin) project = get_project(COMPOSE_FILE_PATH + "/{}/".format(cluster_version) + log_type) @@ -456,7 +480,8 @@ def compose_start(name, daemon_url, mapped_ports=SERVICE_PORTS, def compose_restart(name, daemon_url, mapped_ports=SERVICE_PORTS, - consensus_plugin=CONSENSUS_PLUGINS[0], + fabric_version=FABRIC_VERSION[0], + consensus_plugin=[0], consensus_mode=CONSENSUS_MODES[0], log_type=CLUSTER_LOG_TYPES[0], log_server="", log_level=CLUSTER_LOG_LEVEL[0], @@ -467,6 +492,7 @@ def compose_restart(name, daemon_url, mapped_ports=SERVICE_PORTS, :param name: The name of the cluster :param mapped_ports: The mapped port list :param daemon_url: Docker host daemon + :param fabric_version: fabric image version :param consensus_plugin: Cluster consensus type :param consensus_mode: Cluster consensus mode :param log_type: which log plugin for host @@ -475,12 +501,21 @@ def compose_restart(name, daemon_url, mapped_ports=SERVICE_PORTS, :return: """ logger.debug("Compose restart {} with daemon_url={}, mapped_ports={} " - "consensus={}".format(name, daemon_url, mapped_ports, - consensus_plugin)) + "fabric_version={} consensus={}".format(name, daemon_url, + mapped_ports, + fabric_version, + consensus_plugin)) - _compose_set_env(name, daemon_url, mapped_ports, consensus_plugin, + _compose_set_env(name, daemon_url, mapped_ports, fabric_version, + consensus_plugin, consensus_mode, cluster_size, log_level, log_type, log_server) + + if fabric_version == FABRIC_VERSION[1]: + cluster_version = 'fabric-0.6' + else: + cluster_version = 'fabric-1.0' + # project = get_project(COMPOSE_FILE_PATH+"/"+consensus_plugin) project = get_project(COMPOSE_FILE_PATH + "/{}/".format(cluster_version) + log_type) @@ -494,7 +529,8 @@ def compose_restart(name, daemon_url, mapped_ports=SERVICE_PORTS, def compose_stop(name, daemon_url, mapped_ports=SERVICE_PORTS, - consensus_plugin=CONSENSUS_PLUGINS[0], + fabric_version=FABRIC_VERSION[0], + consensus_plugin=[0], consensus_mode=CONSENSUS_MODES[0], log_type=CLUSTER_LOG_TYPES[0], log_server="", log_level=CLUSTER_LOG_LEVEL[0], @@ -505,6 +541,7 @@ def compose_stop(name, daemon_url, mapped_ports=SERVICE_PORTS, :param name: The name of the cluster :param mapped_ports: The mapped ports list :param daemon_url: Docker host daemon + :param fabric_version: Fabric image version :param consensus_plugin: Cluster consensus type :param consensus_mode: Cluster consensus mode :param log_type: which log plugin for host @@ -519,9 +556,16 @@ def compose_stop(name, daemon_url, mapped_ports=SERVICE_PORTS, consensus_plugin, log_type)) - _compose_set_env(name, daemon_url, mapped_ports, consensus_plugin, + _compose_set_env(name, daemon_url, mapped_ports, fabric_version, + consensus_plugin, consensus_mode, cluster_size, log_level, log_type, log_server) + + if fabric_version == FABRIC_VERSION[1]: + cluster_version = 'fabric-0.6' + else: + cluster_version = 'fabric-1.0' + project = get_project(COMPOSE_FILE_PATH + "/{}/".format(cluster_version) + log_type) try: @@ -533,7 +577,8 @@ def compose_stop(name, daemon_url, mapped_ports=SERVICE_PORTS, def compose_down(name, daemon_url, mapped_ports=SERVICE_PORTS, - consensus_plugin=CONSENSUS_PLUGINS[0], + fabric_version=FABRIC_VERSION[0], + consensus_plugin=[0], consensus_mode=CONSENSUS_MODES[0], log_type=CLUSTER_LOG_TYPES[0], log_server="", log_level=CLUSTER_LOG_LEVEL[0], @@ -544,6 +589,7 @@ def compose_down(name, daemon_url, mapped_ports=SERVICE_PORTS, :param name: The name of the cluster :param mapped_ports: The mapped ports list :param daemon_url: Docker host daemon + :param fabric_version: Fabric image version :param consensus_plugin: Cluster consensus type :param consensus_mode: Cluster consensus mode :param log_type: which log plugin for host @@ -556,10 +602,16 @@ def compose_down(name, daemon_url, mapped_ports=SERVICE_PORTS, "consensus={}".format(name, daemon_url, consensus_plugin)) # import os, sys # compose use this - _compose_set_env(name, daemon_url, mapped_ports, consensus_plugin, + _compose_set_env(name, daemon_url, mapped_ports, fabric_version, + consensus_plugin, consensus_mode, cluster_size, log_level, log_type, log_server) + if fabric_version == FABRIC_VERSION[1]: + cluster_version = 'fabric-0.6' + else: + cluster_version = 'fabric-1.0' + # project = get_project(COMPOSE_FILE_PATH+"/"+consensus_plugin) project = get_project(COMPOSE_FILE_PATH + "/{}/".format(cluster_version) + log_type) diff --git a/src/common/__init__.py b/src/common/__init__.py index b27f93106..5c51af732 100644 --- a/src/common/__init__.py +++ b/src/common/__init__.py @@ -7,7 +7,7 @@ from .log import log_handler, LOG_LEVEL from .utils import \ PEER_SERVICE_PORTS, CA_SERVICE_PORTS, SERVICE_PORTS, \ - CONSENSUS_PLUGINS, CONSENSUS_MODES, CONSENSUS_TYPES, \ + FABRIC_VERSION, CONSENSUS_PLUGINS, CONSENSUS_MODES, CONSENSUS_TYPES, \ HOST_TYPES, \ CLUSTER_PORT_START, CLUSTER_PORT_STEP, CLUSTER_SIZES, \ CLUSTER_NETWORK, \ diff --git a/src/common/utils.py b/src/common/utils.py index 934f7db4b..85a75fd10 100644 --- a/src/common/utils.py +++ b/src/common/utils.py @@ -3,7 +3,7 @@ CLUSTER_NETWORK = "cello_net" -CLUSTER_SIZES = [4, 6] +CLUSTER_SIZES = [4, 6, 7] # first port that can be assigned as cluster API CLUSTER_PORT_START = int(os.getenv("CLUSTER_PORT_START", 7050)) @@ -30,8 +30,9 @@ SERVICE_PORTS = dict(list(PEER_SERVICE_PORTS.items()) + list(CA_SERVICE_PORTS.items())) +FABRIC_VERSION = ['1.0.0', '0.6.0'] # first one is the default one -CONSENSUS_PLUGINS = ['noops', 'pbft'] # first one is the default one +CONSENSUS_PLUGINS = ['noops', 'pbft', 'solo'] # first one is the default one # CONSENSUS_MODES = ['classic', 'batch', 'sieve'] # pbft has various modes CONSENSUS_MODES = ['batch'] # pbft has various modes diff --git a/src/modules/cluster.py b/src/modules/cluster.py index 5ec94323a..2416760fb 100644 --- a/src/modules/cluster.py +++ b/src/modules/cluster.py @@ -3,6 +3,7 @@ import os import sys import time +import copy from threading import Thread import requests @@ -13,9 +14,10 @@ from agent import get_swarm_node_ip -from common import CLUSTER_PORT_START, CLUSTER_PORT_STEP, CONSENSUS_PLUGINS, \ - CONSENSUS_MODES, HOST_TYPES, SYS_CREATOR, SYS_DELETER, SYS_USER, \ - SYS_RESETTING, CLUSTER_SIZES, PEER_SERVICE_PORTS, CA_SERVICE_PORTS +from common import CLUSTER_PORT_START, CLUSTER_PORT_STEP, FABRIC_VERSION, \ + CONSENSUS_PLUGINS, CONSENSUS_MODES, HOST_TYPES, SYS_CREATOR, SYS_DELETER, \ + SYS_USER, SYS_RESETTING, CLUSTER_SIZES, \ + PEER_SERVICE_PORTS, CA_SERVICE_PORTS from modules import host @@ -79,6 +81,7 @@ def get_by_id(self, id, col_name="active"): return self._serialize(cluster) def create(self, name, host_id, start_port=0, user_id="", + fabric_version=FABRIC_VERSION[0], consensus_plugin=CONSENSUS_PLUGINS[0], consensus_mode=CONSENSUS_MODES[0], size=CLUSTER_SIZES[0]): """ Create a cluster based on given data @@ -94,9 +97,10 @@ def create(self, name, host_id, start_port=0, user_id="", :param size: size of the cluster, int type :return: Id of the created cluster or None """ - logger.info("Create cluster {}, host_id={}, consensus={}/{}, " - "size={}".format(name, host_id, consensus_plugin, - consensus_mode, size)) + logger.info("Create cluster {}, host_id={}, fabric_version={}, " + "consensus={}/{}, size={}" + .format(name, host_id, fabric_version, + consensus_plugin, consensus_mode, size)) h = self.host_handler.get_active_host_by_id(host_id) if not h: @@ -131,6 +135,7 @@ def create(self, name, host_id, start_port=0, user_id="", 'user_id': user_id or SYS_CREATOR, # avoid applied 'host_id': host_id, 'daemon_url': daemon_url, + 'fabric_version': fabric_version, 'consensus_plugin': consensus_plugin, 'consensus_mode': consensus_mode, 'create_ts': datetime.datetime.now(), @@ -162,6 +167,7 @@ def create(self, name, host_id, start_port=0, user_id="", logger.debug("Start compose project with name={}".format(cid)) containers = self.cluster_agents[h.get('type')]\ .create(cid, mapped_ports, h, user_id=user_id, + fabric_version=fabric_version, consensus_plugin=consensus_plugin, consensus_mode=consensus_mode, size=size) if not containers: @@ -185,6 +191,11 @@ def create(self, name, host_id, start_port=0, user_id="", for k, v in ca_mapped_ports.items(): service_urls[k] = "{}:{}".format(ca_host_ip, v) + cpContainers = copy.copy(containers) + for key in cpContainers.keys(): + value_bak = containers.pop(key) + key = key.replace(".", "_") + containers.update(key=value_bak) # update api_url, container, and user_id field self.db_update_one( {"id": cid}, @@ -236,9 +247,12 @@ def delete(self, id, record=False, forced=False): self.col_active.update_one( {"id": id}, {"$set": {"user_id": SYS_DELETER + user_id}}) - host_id, daemon_url, consensus_plugin = \ + host_id, daemon_url, fabric_version, consensus_plugin, cluster_size = \ c.get("host_id"), c.get("daemon_url"), \ - c.get("consensus_plugin", CONSENSUS_PLUGINS[0]) + c.get("fabric_version", FABRIC_VERSION[0]), \ + c.get("consensus_plugin", CONSENSUS_PLUGINS[0]), \ + c.get("size", CLUSTER_SIZES[0]) + # port = api_url.split(":")[-1] or CLUSTER_PORT_START h = self.host_handler.get_active_host_by_id(host_id) if not h: @@ -248,7 +262,8 @@ def delete(self, id, record=False, forced=False): return False if not self.cluster_agents[h.get('type')]\ - .delete(id, daemon_url, consensus_plugin): + .delete(id, daemon_url, fabric_version, + consensus_plugin, cluster_size): logger.warning("Error to run compose clean work") self.col_active.update_one({"id": id}, {"$set": {"user_id": user_id}}) @@ -367,6 +382,7 @@ def start(self, cluster_id): result = self.cluster_agents[h.get('type')].start( name=cluster_id, daemon_url=h.get('daemon_url'), mapped_ports=c.get('mapped_ports', PEER_SERVICE_PORTS), + fabric_version=c.get('fabric_version'), consensus_plugin=c.get('consensus_plugin'), consensus_mode=c.get('consensus_mode'), log_type=h.get('log_type'), @@ -399,6 +415,7 @@ def restart(self, cluster_id): result = self.cluster_agents[h.get('type')].restart( name=cluster_id, daemon_url=h.get('daemon_url'), mapped_ports=c.get('mapped_ports', PEER_SERVICE_PORTS), + fabric_version=c.get('fabric_version'), consensus_plugin=c.get('consensus_plugin'), consensus_mode=c.get('consensus_mode'), log_type=h.get('log_type'), @@ -431,6 +448,7 @@ def stop(self, cluster_id): result = self.cluster_agents[h.get('type')].stop( name=cluster_id, daemon_url=h.get('daemon_url'), mapped_ports=c.get('mapped_ports', PEER_SERVICE_PORTS), + fabric_version=c.get('fabric_version'), consensus_plugin=c.get('consensus_plugin'), consensus_mode=c.get('consensus_mode'), log_type=h.get('log_type'), @@ -457,16 +475,18 @@ def reset(self, cluster_id, record=False): c = self.get_by_id(cluster_id) logger.debug("Run recreate_work in background thread") - cluster_name, host_id, mapped_ports, consensus_plugin, \ - consensus_mode, size = \ + cluster_name, host_id, mapped_ports, fabric_version, \ + consensus_plugin, consensus_mode, size = \ c.get("name"), c.get("host_id"), \ - c.get("mapped_ports"), c.get("consensus_plugin"), \ + c.get("mapped_ports"), c.get("fabric_version"), \ + c.get("consensus_plugin"), \ c.get("consensus_mode"), c.get("size") if not self.delete(cluster_id, record=record, forced=True): logger.warning("Delete cluster failed with id=" + cluster_id) return False if not self.create(name=cluster_name, host_id=host_id, start_port=mapped_ports['rest'], + fabric_version=fabric_version, consensus_plugin=consensus_plugin, consensus_mode=consensus_mode, size=size): logger.warning("Fail to recreate cluster {}".format(cluster_name)) @@ -490,6 +510,7 @@ def reset_free_one(self, cluster_id): return self.reset(cluster_id) def _serialize(self, doc, keys=('id', 'name', 'user_id', 'host_id', + 'fabric_version', 'consensus_plugin', 'consensus_mode', 'daemon_url', 'create_ts', 'apply_ts', 'release_ts', diff --git a/src/modules/stat.py b/src/modules/stat.py index 702149a04..ea147de5d 100644 --- a/src/modules/stat.py +++ b/src/modules/stat.py @@ -1,8 +1,8 @@ import logging import time from threading import Thread -from common import LOG_LEVEL, HOST_TYPES, CONSENSUS_PLUGINS, log_handler, \ - CONSENSUS_MODES +from common import LOG_LEVEL, HOST_TYPES, FABRIC_VERSION, CONSENSUS_PLUGINS, \ + log_handler, CONSENSUS_MODES from modules import host_handler, cluster_handler diff --git a/src/resources/cluster_api.py b/src/resources/cluster_api.py index e934c8572..c9210b4e4 100644 --- a/src/resources/cluster_api.py +++ b/src/resources/cluster_api.py @@ -9,7 +9,7 @@ from common import log_handler, LOG_LEVEL, \ request_get, make_ok_response, make_fail_response, \ request_debug, request_json_body, \ - CODE_CREATED, CODE_NOT_FOUND, \ + CODE_CREATED, CODE_NOT_FOUND, FABRIC_VERSION, \ CONSENSUS_PLUGINS, CONSENSUS_MODES, CLUSTER_SIZES from modules import cluster_handler, host_handler @@ -206,22 +206,24 @@ def cluster_create(): """ logger.info("/cluster action=" + r.method) request_debug(r, logger) - if not r.form["name"] or not r.form["host_id"] or not \ - r.form["consensus_plugin"] or not r.form["size"]: + if not r.form["name"] or not r.form["host_id"] \ + or not r.form["fabric_version"] \ + or not r.form["consensus_plugin"] or not r.form["size"]: error_msg = "cluster post without enough data" logger.warning(error_msg) return make_fail_response(error=error_msg, data=r.form) else: - name, host_id, consensus_plugin, consensus_mode, size = \ - r.form['name'], r.form['host_id'], r.form['consensus_plugin'],\ - r.form['consensus_mode'] or '', int(r.form[ - "size"]) + name, host_id, fabric_version, consensus_plugin, \ + consensus_mode, size = r.form['name'], r.form['host_id'], \ + r.form['fabric_version'], r.form['consensus_plugin'], \ + r.form['consensus_mode'] or '', int(r.form["size"]) if consensus_plugin not in CONSENSUS_PLUGINS: logger.debug("Unknown consensus_plugin={}".format( consensus_plugin)) return make_fail_response() - if consensus_plugin != CONSENSUS_PLUGINS[0] and consensus_mode \ - not in CONSENSUS_MODES: + if consensus_plugin != CONSENSUS_PLUGINS[0] \ + and consensus_plugin != CONSENSUS_PLUGINS[2] \ + and consensus_mode not in CONSENSUS_MODES: logger.debug("Invalid consensus, plugin={}, mode={}".format( consensus_plugin, consensus_mode)) return make_fail_response() @@ -230,6 +232,7 @@ def cluster_create(): logger.debug("Unknown cluster size={}".format(size)) return make_fail_response() if cluster_handler.create(name=name, host_id=host_id, + fabric_version=fabric_version, consensus_plugin=consensus_plugin, consensus_mode=consensus_mode, size=size): diff --git a/src/resources/cluster_view.py b/src/resources/cluster_view.py index 70a2474a9..8f2aadda9 100644 --- a/src/resources/cluster_view.py +++ b/src/resources/cluster_view.py @@ -7,7 +7,7 @@ sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..')) from common import log_handler, LOG_LEVEL, \ - request_debug, \ + request_debug, FABRIC_VERSION, \ CONSENSUS_PLUGINS, CONSENSUS_MODES, CLUSTER_SIZES from modules import cluster_handler, host_handler @@ -68,6 +68,7 @@ def clusters_show(): return render_template("clusters.html", type=show_type, col_name=col_name, items_count=total_items, items=clusters, hosts_available=hosts_avail, + fabric_version=FABRIC_VERSION, consensus_plugins=CONSENSUS_PLUGINS, consensus_modes=CONSENSUS_MODES, cluster_sizes=CLUSTER_SIZES) diff --git a/src/resources/index.py b/src/resources/index.py index 9bfaeb13c..583642a6b 100644 --- a/src/resources/index.py +++ b/src/resources/index.py @@ -5,7 +5,7 @@ from flask import request as r sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..')) -from common import log_handler, LOG_LEVEL, CONSENSUS_PLUGINS, \ +from common import log_handler, LOG_LEVEL, FABRIC_VERSION, CONSENSUS_PLUGINS, \ CONSENSUS_MODES, HOST_TYPES, CLUSTER_SIZES, request_debug, \ CLUSTER_LOG_TYPES, CLUSTER_LOG_LEVEL from version import version, homepage, author @@ -50,6 +50,7 @@ def show(): clusters_inuse=clusters_inuse, clusters_temp=clusters_temp, cluster_sizes=CLUSTER_SIZES, + fabric_version=FABRIC_VERSION, consensus_plugins=CONSENSUS_PLUGINS, consensus_modes=CONSENSUS_MODES, host_types=HOST_TYPES, diff --git a/src/themes/basic/static/js/script.js b/src/themes/basic/static/js/script.js index fb0e872b2..216d26985 100644 --- a/src/themes/basic/static/js/script.js +++ b/src/themes/basic/static/js/script.js @@ -1,4 +1,38 @@ $(document).ready(function () { + + $('#fabric_version').change(function() { + + var $consensus_plugin = $('#consensus_plugin'); + var $cluster_size = $('#cluster_size'); + var $consensus_mode = $('#consensus_mode') + var $form_consensus_mode = $('#form_consensus_mode'); + + $consensus_plugin.empty(); + $cluster_size.empty(); + + var value = $(this).val(); + if (value == '0.6.0') { + $('#consensus_plugin_0_6 option').each(function() { + var $option = $(this); + $consensus_plugin.append(''); + }); + $('#cluster_sizes_0_6 option').each(function() { + var $option = $(this); + $cluster_size.append(''); + }); + } else { + $form_consensus_mode.hide(); + $('#consensus_plugin_1_0 option').each(function() { + var $option = $(this); + $consensus_plugin.append(''); + }); + $('#cluster_sizes_1_0 option').each(function() { + var $option = $(this); + $cluster_size.append(''); + }); + } + }); + $('.table_sorted').DataTable( {} ); diff --git a/src/themes/basic/templates/cluster_info.html b/src/themes/basic/templates/cluster_info.html index 38a1ddb8c..fdd4866e8 100644 --- a/src/themes/basic/templates/cluster_info.html +++ b/src/themes/basic/templates/cluster_info.html @@ -8,7 +8,7 @@

Chain Information

Id
{{item.id}}
Name
{{item.name}}
- {% if item.consensus_plugin== consensus_plugins[0] %} + {% if item.consensus_plugin== consensus_plugins[0] or item.consensus_plugin== consensus_plugins[2]%}
Consensus
{{item.consensus_plugin}}
{% else %}
Consensus
{{item.consensus_plugin}}/{{ item.consensus_mode }}
diff --git a/src/themes/basic/templates/clusters.html b/src/themes/basic/templates/clusters.html index 089efea8c..15cef7075 100644 --- a/src/themes/basic/templates/clusters.html +++ b/src/themes/basic/templates/clusters.html @@ -49,7 +49,7 @@ {{ item.name }} - {% if item.consensus_plugin== consensus_plugins[0] %} + {% if item.consensus_plugin== consensus_plugins[0] or item.consensus_plugin== consensus_plugins[2] %} {{ item.consensus_plugin }} {% else %} {{ item.consensus_plugin }}/{{ item.consensus_mode }} @@ -184,7 +184,7 @@ {{ item.name }} {{ item.user_id }} - {% if item.consensus_plugin== consensus_plugins[0] %} + {% if item.consensus_plugin== consensus_plugins[0] or item.consensus_plugin== consensus_plugins[2] %} {{ item.consensus_plugin }} {% else %} {{ item.consensus_plugin }}/{{ item.consensus_mode }} @@ -301,7 +301,7 @@ {{ item.name }} - {% if item.consensus_plugin== consensus_plugins[0] %} + {% if item.consensus_plugin== consensus_plugins[0] or item.consensus_plugin== consensus_plugins[2] %} {{ item.consensus_plugin }} {% else %} {{ item.consensus_plugin }}/{{ item.consensus_mode }} diff --git a/src/themes/basic/templates/layout.html b/src/themes/basic/templates/layout.html index 292083614..3e937b3f0 100644 --- a/src/themes/basic/templates/layout.html +++ b/src/themes/basic/templates/layout.html @@ -194,28 +194,56 @@ {% endif %} + {% if fabric_version|length > 0 %} +
+ + +
+ {% endif %} {% if cluster_sizes|length > 0 %}
+ +
{% endif %} - {% if consensus_plugins|length > 0 %}
+ + @@ -373,6 +401,5 @@ - - \ No newline at end of file + diff --git a/src/themes/react/static/js/routes/cluster/active/ClusterModal.js b/src/themes/react/static/js/routes/cluster/active/ClusterModal.js index 655faedc2..55f02246c 100644 --- a/src/themes/react/static/js/routes/cluster/active/ClusterModal.js +++ b/src/themes/react/static/js/routes/cluster/active/ClusterModal.js @@ -103,7 +103,7 @@ class ClusterModal extends React.Component { {getFieldDecorator('size', { - initialValue: 4, + initialValue: 7, rules: [ { required: true, @@ -113,11 +113,12 @@ class ClusterModal extends React.Component { })()} {getFieldDecorator('consensus_plugin', { - initialValue: 'noops', + initialValue: 'solo', rules: [ { required: true, @@ -127,6 +128,8 @@ class ClusterModal extends React.Component { })()} {pluginType === 'pbft' &&