def createyamlforneworgs(self, id, peer_orgs): ins = modelv2.BlockchainNetwork.objects.get(id=id) host = ins.host consensus_type = ins.consensus_type fabric_version = ins.fabric_version peer_org_dicts = [] orderer_org_dicts = [] filepath = file_define.commad_create_path(id) print("filepath = {}".format(filepath)) for org_id in peer_orgs: peer_org_dict = org_handler().schema(org_handler().get_by_id(org_id)) peer_org_dicts.append(peer_org_dict) #logger.info(" before function file_define.commad_create_path,and path is") # create filepath with network_id at path FABRIC_DIR fileorgpath = '{}/{}'.format(filepath,org_id) os.system('mkdir -p {}/crypto-config/peerOrganizations/'.format(fileorgpath)) #logger.info(" after function file_define.commad_create_path,and path is {}".format(filepath)) if host.type == 'docker': # create crypto-config.yaml file at filepath file_define.dump_crypto_config_yaml_file(fileorgpath, peer_org_dicts, orderer_org_dicts) # create configtx.yaml file file_define.dump_configtx_yaml_file(fileorgpath, consensus_type, peer_org_dicts, orderer_org_dicts, fabric_version) else: # create crypto-config.yaml file at filepath file_define.dump_crypto_config_yaml_file_k8s(fileorgpath, peer_org_dicts, orderer_org_dicts) # create configtx.yaml file file_define.dump_configtx_yaml_file_k8s(fileorgpath, consensus_type, peer_org_dicts, orderer_org_dicts, fabric_version) try: # change work dir to '/opt' origin_dir = os.getcwd() os.chdir(fileorgpath) print(os.getcwd()) os.system("export FABRIC_CFG_PATH=$PWD") mspid = '{}MSP'.format(peer_org_dict['name'][0:1].upper()+peer_org_dict['name'][1:]) orgname = peer_org_dict['name'] org_domain = peer_org_dict['domain'] orgdir = '{}.{}'.format(orgname,org_domain) #call("/opt/fabric_tools/v1_1/cryptogen generate --config=%s/crypto-config.yaml" % fileorgpath, shell=True) os.system('cp -r {}/crypto-config/peerOrganizations/{} {}/crypto-config/peerOrganizations/'.format(filepath, orgdir, fileorgpath)) call("/opt/fabric_tools/v1_1/configtxgen -printOrg %s > ../channel-artifacts/%s.json" % (mspid, orgname), shell=True) os.chdir(origin_dir) os.system('rm -r {}'.format(fileorgpath)) except: error_msg = 'create certificate or genesis block failed!' raise Exception(error_msg) return self._schema(ins)
def createyamlforneworgs(self, id, peer_orgs, orderer_orgs): ins = modelv2.BlockchainNetwork.objects.get(id=id) filepath = file_define.commad_create_path(id) print("filepath = {}".format(filepath)) for org_id in peer_orgs: peer_org_dict = org_handler().schema( org_handler().get_by_id(org_id)) fileorgpath = '{}/{}'.format(filepath, org_id) os.system('mkdir -p {}/crypto-config/peerOrganizations/'.format( fileorgpath)) try: # change work dir to '/opt' origin_dir = os.getcwd() os.chdir(fileorgpath) print(os.getcwd()) os.system("export FABRIC_CFG_PATH=$PWD") mspid = '{}MSP'.format(peer_org_dict['name'][0:1].upper() + peer_org_dict['name'][1:]) orgname = peer_org_dict['name'] org_domain = peer_org_dict['domain'] orgdir = '{}.{}'.format(orgname, org_domain) #call("/opt/fabric_tools/v1_1/cryptogen generate --config=%s/crypto-config.yaml" % fileorgpath, shell=True) os.system( 'cp -r {}/crypto-config/peerOrganizations/{} {}/crypto-config/peerOrganizations/' .format(filepath, orgdir, fileorgpath)) os.system('cp -r {}/configtx.yaml {}/'.format( filepath, fileorgpath)) call( "/opt/fabric_tools/v1_4/configtxgen -printOrg %s > ../channel-artifacts/%s.json" % (mspid, orgname), shell=True) os.chdir(origin_dir) os.system('rm -r {}'.format(fileorgpath)) except: error_msg = 'create certificate or genesis block failed!' raise Exception(error_msg) if orderer_orgs != None: org_id = orderer_orgs[0] orderer_org_dict = org_handler().schema( org_handler().get_by_id(org_id)) fileorgpath = '{}/{}'.format(filepath, org_id) os.system('mkdir -p {}/crypto-config/ordererOrganizations/'.format( fileorgpath)) try: # change work dir to '/opt' origin_dir = os.getcwd() os.chdir(fileorgpath) print(os.getcwd()) os.system("export FABRIC_CFG_PATH=$PWD") mspid = '{}Org'.format(orderer_org_dict['name'][0:1].upper() + orderer_org_dict['name'][1:]) orgname = orderer_org_dict['name'] org_domain = orderer_org_dict['domain'] orgdir = '{}'.format(org_domain) #call("/opt/fabric_tools/v1_1/cryptogen generate --config=%s/crypto-config.yaml" % fileorgpath, shell=True) os.system( 'cp -r {}/crypto-config/ordererOrganizations/{} {}/crypto-config/ordererOrganizations/' .format(filepath, orgdir, fileorgpath)) os.system('cp -r {}/configtx.yaml {}/'.format( filepath, fileorgpath)) call( "/opt/fabric_tools/v1_4/configtxgen -printOrg %s > ../channel-artifacts/%s.json" % (mspid, orgname), shell=True) os.chdir(origin_dir) os.system('rm -r {}'.format(fileorgpath)) except: error_msg = 'create certificate or genesis block failed!' raise Exception(error_msg) return self._schema(ins)
def addpeertonetwork(self, id, peer_org, peers_num): ins = modelv2.BlockchainNetwork.objects.get(id=id) host = ins.host fabric_version = ins.fabric_version name = ins.name peer_org_dict = org_handler().schema(org_handler().get_by_id(peer_org)) db_type = ins.db_type couchdb_enabled = False if db_type == 'couchdb': couchdb_enabled = True ### get fabric service ports peer_num = peers_num peer_org_dict['peerNum'] += peers_num if couchdb_enabled is True: request_host_port_num = peer_num * PEER_NODE_HOSTPORT_NUM + \ peer_num * COUCHDB_NODE_HOSTPORT_NUM else: request_host_port_num = peer_num * PEER_NODE_HOSTPORT_NUM request_host_ports = self.find_free_start_ports( request_host_port_num, host) if len(request_host_ports) != request_host_port_num: error_msg = "no enough ports for network service containers" logger.error(error_msg) raise Exception(error_msg) # logger.info(" before function file_define.commad_create_path,and path is") # create filepath with network_id at path FABRIC_DIR filepath = file_define.commad_create_path(id) print("filepath = {}".format(filepath)) # logger.info(" after function file_define.commad_create_path,and path is {}".format(filepath)) # create crypto-config.yaml file at filepath file_define.update_crypto_file_for_addpeers(filepath, peer_org_dict, peers_num) try: # change work dir to '/opt' origin_dir = os.getcwd() os.chdir(filepath) print(os.getcwd()) # create certificates call( "/opt/fabric_tools/v1_4/cryptogen extend --config=%s/crypto-config.yaml" % filepath, shell=True) os.chdir(origin_dir) # os.system('rm -r {}'.format(fileorgpath)) except: error_msg = 'create certificate or genesis block failed!' raise Exception(error_msg) try: sk_file = '' org_name = peer_org_dict['name'] org_domain = peer_org_dict['domain'] org_fullDomain_name = '.'.join([org_name, org_domain]) ca_dir = '/opt/fabric/{net_dir}/crypto-config/peerOrganizations/{org_fullDomain_name}/ca/'. \ format(net_dir=id, org_fullDomain_name=org_fullDomain_name) for f in os.listdir(ca_dir): # find out sk! if f.endswith("_sk"): sk_file = f peer_org_dict['sk_file'] = sk_file except: error_msg = 'create_userdashboard failed!.' raise Exception(error_msg) # use network model to get? # network models only have org ids, no details needed network_config = { 'id': id, 'name': name, 'fabric_version': fabric_version, 'peer_org_dict': peer_org_dict, 'peer_num': peers_num, 'db_type': db_type } t = Thread(target=self._update_network_for_addpeers, args=(network_config, request_host_ports)) t.start() return self._schema(ins)
def addorgtonetwork(self, id, peer_orgs, orderer_orgs): ins = modelv2.BlockchainNetwork.objects.get(id=id) host = ins.host consensus_type = ins.consensus_type fabric_version = ins.fabric_version name = ins.name peer_org_dicts = [] orderer_org_dicts = [] peer_orgs_temp = ins.peer_orgs orderer_orgs_temp = ins.orderer_orgs if peer_orgs != None: for org_id in peer_orgs: peer_org_dict = org_handler().schema( org_handler().get_by_id(org_id)) peer_org_dicts.append(peer_org_dict) peer_orgs_temp.append(org_id) if orderer_orgs != None: org_id = orderer_orgs orderer_org_dict = org_handler().schema( org_handler().get_by_id(org_id)) orderer_org_dicts.append(orderer_org_dict) orderer_orgs_temp.append(org_id) db_type = ins.db_type couchdb_enabled = False if db_type == 'couchdb': couchdb_enabled = True ### get fabric service ports peer_org_num = len(peer_org_dicts) peer_num = 0 orderer_num = 0 for org in peer_org_dicts: peer_num += org['peerNum'] for org in orderer_org_dicts: orderer_num += len(org['ordererHostnames']) if couchdb_enabled is True: request_host_port_num = peer_org_num * CA_NODE_HOSTPORT_NUM + \ peer_num * PEER_NODE_HOSTPORT_NUM + \ peer_num * COUCHDB_NODE_HOSTPORT_NUM + \ orderer_num * ORDERER_NODE_HOSTPORT_NUM else: request_host_port_num = peer_org_num * CA_NODE_HOSTPORT_NUM + \ peer_num * PEER_NODE_HOSTPORT_NUM + \ orderer_num * ORDERER_NODE_HOSTPORT_NUM request_host_ports = self.find_free_start_ports( request_host_port_num, host) if len(request_host_ports) != request_host_port_num: error_msg = "no enough ports for network service containers" logger.error(error_msg) raise Exception(error_msg) #logger.info(" before function file_define.commad_create_path,and path is") # create filepath with network_id at path FABRIC_DIR filepath = file_define.commad_create_path(id) print("filepath = {}".format(filepath)) #logger.info(" after function file_define.commad_create_path,and path is {}".format(filepath)) # create crypto-config.yaml file at filepath file_define.update_crypto_config_yaml_file(filepath, peer_org_dicts, orderer_org_dicts) # create configtx.yaml file file_define.update_dump_configtx_yaml_file(filepath, peer_org_dicts, orderer_org_dicts, request_host_ports) try: # change work dir to '/opt' origin_dir = os.getcwd() os.chdir(filepath) print(os.getcwd()) # create certificates call( "/opt/fabric_tools/v1_4/cryptogen extend --config=%s/crypto-config.yaml" % filepath, shell=True) os.chdir(origin_dir) #os.system('rm -r {}'.format(fileorgpath)) except: error_msg = 'create certificate or genesis block failed!' raise Exception(error_msg) self.createyamlforneworgs(id, peer_orgs, orderer_orgs) self.sys_channelInfo_update(id, peer_org_dicts) ins.update(set__peer_orgs=peer_orgs_temp) self.sys_channelOrderer_update(id, orderer_org_dicts, request_host_ports) ins.update(set__orderer_orgs=orderer_orgs_temp) try: # create fabric-ca-server-config.yaml file file_define.fabric_ca_config_files(id, fabric_version, CELLO_MASTER_FABRIC_DIR, peer_org_dicts) except: error_msg = 'create fabric_ca_config_files failed!.' raise Exception(error_msg) # use network model to get? # network models only have org ids, no details needed network_config = { 'id': id, 'name': name, 'fabric_version': fabric_version, 'orderer_org_dicts': orderer_org_dicts, 'peer_org_dicts': peer_org_dicts, 'consensus_type': consensus_type, 'db_type': db_type, 'host': host } t = Thread(target=self._update_network, args=(network_config, request_host_ports)) t.start() return self._schema(ins)
def create(self, id, name, description, fabric_version, orderer_orgs, peer_orgs, host, consensus_type, db_type, create_ts): peer_org_dicts = [] orderer_org_dicts = [] for org_id in peer_orgs: peer_org_dict = org_handler().schema( org_handler().get_by_id(org_id)) # blocakchain_network_id非空,表明该组织已添加到其他nework中 if peer_org_dict['blockchain_network_id']: error_msg = ': this org has been added by another network!' raise Exception(error_msg) peer_org_dicts.append(peer_org_dict) for org_id in orderer_orgs: orderer_org_dict = org_handler().schema( org_handler().get_by_id(org_id)) if orderer_org_dict['blockchain_network_id']: error_msg = ': this org has been added by another network!' raise Exception(error_msg) orderer_org_dicts.append(orderer_org_dict) network = modelv2.BlockchainNetwork(id=id, name=name, description=description, fabric_version=fabric_version, orderer_orgs=orderer_orgs, peer_orgs=peer_orgs, host=host, consensus_type=consensus_type, db_type=db_type, create_ts=create_ts, status="creating") network.save() order_orgs_domain = [] for each in orderer_org_dicts: if each['domain'] not in order_orgs_domain: order_orgs_domain.append(each['domain']) else: network.delete() error_msg = ': orderer\'s domain in one network can not be same!' raise Exception(error_msg) couchdb_enabled = False if db_type == 'couchdb': couchdb_enabled = True ### get fabric service ports peer_org_num = len(peer_org_dicts) peer_num = 0 orderer_num = 0 # zsh修改,原本在_create_network中,为组织增加network信息,前调到这里 for org in peer_org_dicts: peer_num += org['peerNum'] org_obj = modelv2.Organization.objects.get(id=org['id']) org_obj.update(set__network=network) for org in orderer_org_dicts: orderer_num += len(org['ordererHostnames']) org_obj = modelv2.Organization.objects.get(id=org['id']) org_obj.update(set__network=network) if couchdb_enabled is True: request_host_port_num = peer_org_num * CA_NODE_HOSTPORT_NUM + \ peer_num * PEER_NODE_HOSTPORT_NUM + \ peer_num * COUCHDB_NODE_HOSTPORT_NUM + \ orderer_num * ORDERER_NODE_HOSTPORT_NUM else: request_host_port_num = peer_org_num * CA_NODE_HOSTPORT_NUM + \ peer_num * PEER_NODE_HOSTPORT_NUM + \ orderer_num * ORDERER_NODE_HOSTPORT_NUM request_host_ports = self.find_free_start_ports( request_host_port_num, host) if len(request_host_ports) != request_host_port_num: error_msg = "no enough ports for network service containers" logger.error(error_msg) raise Exception(error_msg) # create persistent volume path for peer and orderer node # TODO : code here logger.info( " before function file_define.commad_create_path,and path is") # create public.key or private.key isExist = file_define.creat_secret_key_files() if not isExist: logger.error( " after function file_define.creat_secret_key_files, and it is {} " .format(isExist)) # create filepath with network_id at path FABRIC_DIR filepath = file_define.commad_create_path(id) print("filepath = {}".format(filepath)) logger.info( " after function file_define.commad_create_path,and path is {}". format(filepath)) # create crypto-config.yaml file at filepath file_define.dump_crypto_config_yaml_file(filepath, peer_org_dicts, orderer_org_dicts) # create configtx.yaml file file_define.dump_configtx_yaml_file(filepath, consensus_type, peer_org_dicts, orderer_org_dicts, fabric_version, request_host_ports) # create channel-artifacts path blockGenesis_filepath = '{}{}/channel-artifacts'.format( CELLO_MASTER_FABRIC_DIR, id) try: os.system('mkdir -p {}'.format(blockGenesis_filepath)) except: error_msg = 'blockGenesis_filepath file create failed.' # raise FileOperaterFailed(error_msg) try: fabric_version_dir = fabric_version.replace('.', '_') # change work dir to '/opt' # origin_dir = os.getcwd() os.chdir(filepath) # print(os.getcwd()) # create certificates call([ "/opt/fabric_tools/{}/cryptogen".format(fabric_version_dir), "generate", "--config=./crypto-config.yaml" ]) # create genesis.block and channel configuration blocks call([ "/opt/fabric_tools/{}/configtxgen".format(fabric_version_dir), "-profile", "TwoOrgsOrdererGenesis", "-outputBlock", "./channel-artifacts/genesis.block" ]) # call(["/opt/configtxgen","-profile","TwoOrgsChannel","-outputCreateChannelTx","./channel-artifacts/channel.tx","-channelID","mychannel"]) # call(["/opt/configtxgen","-profile","TwoOrgsChannel","-outputAnchorPeersUpdate","./channel-artifacts/Org1MSPanchors.tx",\ # "-channelID","mychannel","-asOrg","Org1MSP"]) # call(["/opt/configtxgen","-profile","TwoOrgsChannel","-outputAnchorPeersUpdate","./channel-artifacts/Org2MSPanchors.tx",\ # "-channelID","mychannel","-asOrg","Org2MSP"]) # change back # for k8s orderer node to use genesis.block shutil.copy( '{}/genesis.block'.format(blockGenesis_filepath), '{}{}/crypto-config/ordererOrganizations/'.format( CELLO_MASTER_FABRIC_DIR, id)) # os.chdir(origin_dir) except Exception as e: error_msg = 'create certificate or genesis block failed!' self.remove_network(network) raise Exception(error_msg) try: # create fabric-ca-server-config.yaml file file_define.fabric_ca_config_files(id, fabric_version, CELLO_MASTER_FABRIC_DIR, peer_org_dicts) except: error_msg = 'create fabric_ca_config_files failed!.' self.remove_network(network) raise Exception(error_msg) # use network model to get? # no. network models only have org ids, no details needed network_config = { 'id': id, 'name': name, 'fabric_version': fabric_version, 'orderer_org_dicts': orderer_org_dicts, 'peer_org_dicts': peer_org_dicts, 'consensus_type': consensus_type, 'db_type': db_type, 'host': host } t = Thread(target=self._create_network, args=(network_config, request_host_ports)) t.start() return self._schema(network)