def channel_tx(opts, verbose=False): peer_namespace = get_namespace(opts, opts['peers']['msp']) # Change to blockchain materials directory chdir(opts['core']['dir_config']) # Create Channel Tx channel_file = '{channel}.tx'.format(channel=opts['peers']['channel_name']) if not path.exists(channel_file): # Channel transaction creation and storage execute( 'configtxgen -profile {channel_profile} -channelID {channel} -outputCreateChannelTx {channel_file}' .format(channel_profile=opts['peers']['channel_profile'], channel=opts['peers']['channel_name'], channel_file=channel_file), verbose=verbose) else: print('{channel}.tx already exists'.format( channel=opts['peers']['channel_name'])) # Create the channel transaction secret secret_from_file(secret=opts['peers']['secret_channel'], namespace=peer_namespace, key=channel_file, filename=channel_file, verbose=verbose) # Return to original directory chdir(PWD)
def genesis_block(opts): """Create and save Genesis Block to K8S. Args: opts (dict): Nephos options dict. """ ord_namespace = get_namespace(opts, opts["orderers"]["msp"]) # Change to blockchain materials directory chdir(opts["core"]["dir_config"]) # Create the genesis block genesis_key = "genesis.block" genesis_file = join(opts["core"]["dir_crypto"], genesis_key) if not exists(genesis_file): # Genesis block creation and storage execute( f"configtxgen -profile OrdererGenesis -outputBlock {genesis_file}", ) else: logging.info(f"{genesis_file} already exists") # Create the genesis block secret secret_from_file( secret=opts["orderers"]["secret_genesis"], namespace=ord_namespace, key=genesis_key, filename=genesis_file, ) # Return to original directory chdir(PWD)
def genesis_block(opts, verbose=False): """Create and save Genesis Block to K8S. Args: opts (dict): Nephos options dict. verbose (bool) Verbosity. False by default. """ ord_namespace = get_namespace(opts, opts["orderers"]["msp"]) # Change to blockchain materials directory chdir(opts["core"]["dir_config"]) # Create the genesis block genesis_key = "genesis.block" genesis_file = join(opts["core"]["dir_crypto"], genesis_key) if not exists(genesis_file): # Genesis block creation and storage execute( "configtxgen -profile OrdererGenesis -outputBlock {genesis_file}". format(genesis_file=genesis_file), verbose=verbose, ) else: print("{} already exists".format(genesis_file)) # Create the genesis block secret secret_from_file( secret=opts["orderers"]["secret_genesis"], namespace=ord_namespace, key=genesis_key, filename=genesis_file, verbose=verbose, ) # Return to original directory chdir(PWD)
def deploy_composer(opts, upgrade=False, verbose=False): """Deploy Hyperledger Composer on K8S. We use the hl-composer Helm chart as a basis to deploying Composer on K8S. Please note that Composer is unmaintained and may eventually be deprecated from this repository as we migrate to raw Fabric. Args: opts (dict): Nephos options dict. upgrade (bool): Do we upgrade the deployment? False by default. verbose (bool): Verbosity. False by default. """ peer_namespace = get_namespace(opts, opts["peers"]["msp"]) # Ensure BNA exists secret_from_file( secret=opts["composer"]["secret_bna"], namespace=peer_namespace, verbose=verbose ) composer_connection(opts, verbose=verbose) # Start Composer if not upgrade: helm_install( opts["core"]["chart_repo"], "hl-composer", opts["composer"]["name"], peer_namespace, pod_num=3, config_yaml="{dir}/hl-composer/{release}.yaml".format( dir=opts["core"]["dir_values"], release=opts["composer"]["name"] ), verbose=verbose, ) else: # TODO: Implement upgrade: set $CA_USERNAME and $CA_PASSWORD pass
def channel_tx(opts): """Create and save Channel Transaction to K8S. Args: opts (dict): Nephos options dict. """ peer_namespace = get_namespace(opts, opts["peers"]["msp"]) # Change to blockchain materials directory chdir(opts["core"]["dir_config"]) # Create Channel Tx channel_key = f"{opts['peers']['channel_name']}.tx" channel_file = join(opts["core"]["dir_crypto"], channel_key) if not exists(channel_file): # Channel transaction creation and storage execute( f"configtxgen -profile {opts['peers']['channel_profile']} -channelID {opts['peers']['channel_name']} -outputCreateChannelTx {channel_file}", ) else: logging.info(f"{channel_file} already exists") # Create the channel transaction secret secret_from_file( secret=opts["peers"]["secret_channel"], namespace=peer_namespace, key=channel_key, filename=channel_file, ) # Return to original directory chdir(PWD)
def channel_tx(opts, verbose=False): """Create and save Channel Transaction to K8S. Args: opts (dict): Nephos options dict. verbose (bool) Verbosity. False by default. """ peer_namespace = get_namespace(opts, opts["peers"]["msp"]) # Change to blockchain materials directory chdir(opts["core"]["dir_config"]) # Create Channel Tx channel_key = "{channel}.tx".format(channel=opts["peers"]["channel_name"]) channel_file = join(opts["core"]["dir_crypto"], channel_key) if not exists(channel_file): # Channel transaction creation and storage execute( "configtxgen -profile {channel_profile} -channelID {channel} -outputCreateChannelTx {channel_file}".format( channel_profile=opts["peers"]["channel_profile"], channel=opts["peers"]["channel_name"], channel_file=channel_file, ), verbose=verbose, ) else: print("{} already exists".format(channel_file)) # Create the channel transaction secret secret_from_file( secret=opts["peers"]["secret_channel"], namespace=peer_namespace, key=channel_key, filename=channel_file, verbose=verbose, ) # Return to original directory chdir(PWD)
def test_secret_from_file(self, mock_secret_read, mock_secret_create, mock_input_files, mock_open): mock_secret_read.side_effect = ApiException() secret_from_file("a_secret", "a-namespace") mock_secret_read.assert_called_once() mock_secret_create.assert_called_once() mock_input_files.assert_called_once() mock_open.assert_not_called()
def crypto_secret(secret_name, namespace, file_path, key, verbose=False): secret_files = glob(path.join(file_path, '*')) if len(secret_files) != 1: raise Exception('We should only find one file in this directory') secret_from_file(secret=secret_name, namespace=namespace, key=key, filename=secret_files[0], verbose=verbose)
def test_secret_from_file_define(self, mock_secret_read, mock_secret_create, mock_input_files, mock_open): mock_secret_read.side_effect = ApiException() secret_from_file('a_secret', 'a-namespace', filename='./some_file.txt') mock_secret_read.assert_called_once() mock_secret_create.assert_called_once() mock_input_files.assert_not_called() mock_open.assert_called_once()
def deploy_composer(opts, upgrade=False, verbose=False): """Deploy Hyperledger Composer on K8S. We use the hl-composer Helm chart as a basis to deploying Composer on K8S. Please note that Composer is unmaintained and may eventually be deprecated from this repository as we migrate to raw Fabric. Args: opts (dict): Nephos options dict. upgrade (bool): Do we upgrade the deployment? False by default. verbose (bool): Verbosity. False by default. """ peer_namespace = get_namespace(opts, opts["peers"]["msp"]) # Ensure BNA exists secret_from_file(secret=opts["composer"]["secret_bna"], namespace=peer_namespace, verbose=verbose) composer_connection(opts, verbose=verbose) # Start Composer version = get_version(opts, "hl-composer") config_yaml = "{dir}/hl-composer/{release}.yaml".format( dir=opts["core"]["dir_values"], release=opts["composer"]["name"]) if not upgrade: extra_vars = helm_extra_vars(version=version, config_yaml=config_yaml) helm_install( opts["core"]["chart_repo"], "hl-composer", opts["composer"]["name"], peer_namespace, extra_vars=extra_vars, verbose=verbose, ) else: preserve = (HelmPreserve( peer_namespace, "{}-hl-composer-rest".format(opts["composer"]["name"]), "COMPOSER_APIKEY", "rest.config.apiKey", ), ) extra_vars = helm_extra_vars(version=version, config_yaml=config_yaml, preserve=preserve) helm_upgrade( opts["core"]["chart_repo"], "hl-composer", opts["composer"]["name"], extra_vars=extra_vars, verbose=verbose, ) helm_check("hl-composer", opts["composer"]["name"], peer_namespace, pod_num=3)
def upgrade_network(opts, verbose=False): """Upgrade Hyperledger Composer network. Args: opts (dict): Nephos options dict. verbose (bool): Verbosity. False by default. """ peer_namespace = get_namespace(opts, opts["peers"]["msp"]) secret_from_file( secret=opts["composer"]["secret_bna"], namespace=peer_namespace, verbose=verbose ) # Set up the PeerAdmin card hlc_cli_ex = get_helm_pod(peer_namespace, "hlc", "hl-composer", verbose=verbose) bna, _ = hlc_cli_ex.execute("ls /hl_config/blockchain_network") bna_name, bna_rem = bna.split("_") bna_version, _ = bna_rem.split(".bna") peer_msp = opts["peers"]["msp"] bna_admin = opts["msps"][peer_msp]["org_admin"] res, _ = hlc_cli_ex.execute( "composer network ping --card {bna_admin}@{bna_name}".format( bna_admin=bna_admin, bna_name=bna_name ) ) curr_version = (res.split("Business network version: ")[1]).split()[0] print(curr_version) if curr_version != bna_version: hlc_cli_ex.execute( ( "composer network install --card PeerAdmin@hlfv1 " + "--archiveFile /hl_config/blockchain_network/{bna}" ).format(bna=bna) ) hlc_cli_ex.execute( ( "composer network upgrade " + "--card PeerAdmin@hlfv1 " + "--networkName {bna_name} --networkVersion {bna_version}" ).format(bna_name=bna_name, bna_version=bna_version) ) res, _ = hlc_cli_ex.execute( "composer network ping --card {bna_admin}@{bna_name}".format( bna_admin=bna_admin, bna_name=bna_name ) ) curr_version = (res.split("Business network version: ")[1]).split()[0] print("Upgraded to {version}".format(version=curr_version))
def crypto_secret(secret_name, namespace, file_path, key): """Create a crypto-material secret. Args: secret_name (str): Name of secret. namespace (str): Namespace for secret to be located. file_path (str): Path to file we want to store as a secret. key (str): Key (file) name of secret we want to store as a secret. """ secret_files = glob(path.join(file_path, "*")) if len(secret_files) != 1: raise Exception("We should only find one file in this directory") secret_from_file( secret=secret_name, namespace=namespace, key=key, filename=secret_files[0] )
def genesis_block(opts, verbose=False): ord_namespace = get_namespace(opts, opts['orderers']['msp']) # Change to blockchain materials directory chdir(opts['core']['dir_config']) # Create the genesis block if not path.exists('genesis.block'): # Genesis block creation and storage execute( 'configtxgen -profile OrdererGenesis -outputBlock genesis.block', verbose=verbose) else: print('genesis.block already exists') # Create the genesis block secret secret_from_file(secret=opts['orderers']['secret_genesis'], namespace=ord_namespace, key='genesis.block', filename='genesis.block', verbose=verbose) # Return to original directory chdir(PWD)
def deploy_composer(opts, upgrade=False, verbose=False): peer_namespace = get_namespace(opts, opts['peers']['msp']) # Ensure BNA exists secret_from_file(secret=opts['composer']['secret_bna'], namespace=peer_namespace, verbose=verbose) composer_connection(opts, verbose=verbose) # Start Composer if not upgrade: helm_install(opts['core']['chart_repo'], 'hl-composer', opts['composer']['name'], peer_namespace, pod_num=3, config_yaml='{dir}/hl-composer/{release}.yaml'.format( dir=opts['core']['dir_values'], release=opts['composer']['name']), verbose=verbose) else: # TODO: Implement upgrade: set $CA_USERNAME and $CA_PASSWORD pass