Esempio n. 1
0
def cp_config_efs(yaml_path):
    # Find efs pod
    pods = settings.k8s.find_pod(namespace="default", keyword="test-efs")
    if not pods:
        return hiss.hiss('cannot find tiller pod')

    # Create folder config
    exec_command = [
        '/bin/bash', '-c',
        'mkdir -p %s/promconfig' % (settings.EFS_ROOT)
    ]
    result_create_folder = settings.k8s.exec_pod(podName=pods[0],
                                                 namespace="default",
                                                 command=exec_command)
    if result_create_folder.success == False:
        return hiss.hiss('cannot remove folders in %s' % pods[0])

    # Copy to efs pod
    target_file = '%s/promconfig/prometheus.yml' % settings.EFS_ROOT
    if not settings.k8s.cp_to_pod(podName=pods[0],
                                  namespace='default',
                                  source=yaml_path,
                                  target=target_file):
        return hiss.hiss('connot copy test chaincode to pod %s' % pods[0])

    return True
Esempio n. 2
0
 def make_port_forward(self, podName, namespace, ports):
     try:
         resp = self.coreApi.connect_get_namespaced_pod_portforward(
             name=podName, namespace=namespace, ports=ports)
         return resp
     except ApiException as e:
         hiss.hiss(
             "Exception when calling CoreV1Api->connect_post_namespaced_pod_portforward: %s\n" % e)
Esempio n. 3
0
def get_working_orgs_domain():
    orgs = settings.PEER_ORGS.split(' ')
    if len(orgs) > 1:
        hiss.hiss('Function is still develop')
    domain = util.get_domain(orgs[0])
    settings.k8s.prereqs(domain)

    return [orgs[0], domain]
Esempio n. 4
0
 def find_stateful_set(self, namespace, keyword):
     mypods = []
     try:
         ret = self.appsApi.list_namespaced_stateful_set(namespace)
         for item in ret.items:
             if keyword in item.metadata.name:
                 mypods.append(item.metadata.name)
     except ApiException as e:
         hiss.hiss("Exception when calling Api: %s\n" % e)
     return mypods
Esempio n. 5
0
 def find_pvc(self, namespace, keyword):
     list_pvc = []
     try:
         ret = self.coreApi.list_namespaced_persistent_volume_claim(namespace)
         for item in ret.items:
             if keyword in item.metadata.name:
                 list_pvc.append(item.metadata.name)
     except ApiException as e:
         hiss.hiss("Exception when calling Api: %s\n" % e)
     return list_pvc
Esempio n. 6
0
 def cp_to_pod(self, podName, namespace, source, target):
     if os.path.exists(source):
         sourcePath = source
         if os.path.isdir(sourcePath):
             sourcePath = '%s/.' % source
         cmd = 'kubectl cp %s -n %s %s:%s' % (sourcePath, namespace, podName, target)
         copyResult = os.system(cmd)
         if copyResult != 0:
             return hiss.hiss('cannot copy to pod')
     else:
         return hiss.hiss('file/folder \'%s\' does not exists' % source)
     return True
Esempio n. 7
0
def setup_ica(ica_org):

    # Get domain ica to create namespace
    ica_domain = util.get_domain(ica_org)
    if not ica_domain:
        return hiss.hiss('Fail to get domain of %s ' % ica_org)

    # Create temp folder & namespace
    settings.k8s.prereqs(ica_domain)

    ica_name = 'ica-%s' % ica_org

    rca_host = settings.EXTERNAL_RCA_ADDRESSES
    if not settings.EXTERNAL_RCA_ADDRESSES:
        rca_host = '%s.%s' % (settings.RCA_NAME, settings.RCA_ORG)

    k8s_template_file = '%s/ica/fabric-deployment-ica.yaml' % util.get_k8s_template_path()
    dict_env = {
        'ORG': ica_org,
        'ICA_NAME': ica_name,
        'ICA_DOMAIN': ica_domain,
        'RCA_NAME': settings.RCA_NAME,
        'RCA_HOST': rca_host,
        'EFS_SERVER': settings.EFS_SERVER,
        'EFS_PATH': settings.EFS_PATH,
        'EFS_EXTEND': settings.EFS_EXTEND
    }
    settings.k8s.apply_yaml_from_template(
        namespace=ica_domain, k8s_template_file=k8s_template_file, dict_env=dict_env)
Esempio n. 8
0
 def delete_persistent_volume_claim(self, name, namespace):
     try:
         api_response = self.coreApi.delete_namespaced_persistent_volume_claim(name=name, namespace=namespace)
         return util.Result(success=True, data=api_response)
     except ApiException as e:
         err_msg = "Exception when calling CoreV1Api->delete_namespaced_persistent_volume_claim: %s\n" % e
         return util.Result(success=hiss.hiss(err_msg), msg=err_msg)
Esempio n. 9
0
    def delete_stateful(self, name, namespace, delete_pvc=False):
        action = 'Delete'
        if delete_pvc == True:
            action = 'Terminate'
            read_result = self.read_stateful_set(name, namespace)
            if read_result.success == False:
                return read_result
            volume_claim_templates = read_result.data.spec.volume_claim_templates
            if volume_claim_templates != None:
                for pvt in volume_claim_templates:
                    pvt_name = pvt.metadata.name
                    list_pvc = self.find_pvc(namespace, keyword=pvt_name)
                    for pvc in list_pvc:
                        hiss.echo('Delete pvc %s ' % pvc)
                        self.delete_persistent_volume_claim(
                            name=pvc, namespace=namespace)

        try:
            body = client.V1DeleteOptions(propagation_policy='Background')
            api_response = self.appsApi.delete_namespaced_stateful_set(
                name, namespace, body=body)
            self.check_pod_status_by_keyword(keyword=name,
                                             namespace=namespace,
                                             is_delete=True)
            hiss.echo('%s stateful set %s on namespace %s success' %
                      (action, name, namespace))
            return util.Result(success=True, data=api_response)
        except ApiException as e:
            err_msg = "Exception when calling AppsV1Api->delete_namespaced_stateful_set: %s\n" % e
            return util.Result(success=hiss.hiss(err_msg), msg=err_msg)
Esempio n. 10
0
 def delete(self):
     try:
         api_response = settings.k8s.coreApi.delete_namespace(
             name=self.name)
         return api_response
     except ApiException as e:
         return hiss.hiss(
             "Exception when calling CoreV1Api->delete_namespace: %s\n" % e)
Esempio n. 11
0
def get_domain(org_name):
    orgs = settings.ORGS.split(' ')
    domains = settings.DOMAINS.split(' ')

    if org_name in orgs:
        return domains[orgs.index(org_name)]
    else:
        return hiss.hiss('org_name: %s does not exists in env file' % org_name)
Esempio n. 12
0
def create_explorer_config_in_efs(explorer_config):

    # Find efs pod
    pods = settings.k8s.find_pod(namespace="default", keyword="test-efs")
    if not pods:
        return hiss.hiss('cannot find tiller pod')

    config_path = '%s/explorer-config' % settings.EFS_ROOT
    exec_command = [
        '/bin/bash',
        '-c',
        'mkdir -p '+config_path+'; cd '+config_path+'; echo '+explorer_config+' > config.json']

    create_file = settings.k8s.exec_pod(
        podName=pods[0], namespace="default", command=exec_command)
    if create_file.success == False:
        return hiss.hiss('cannot create explorer config in %s' % pods[0])
Esempio n. 13
0
 def exec_pod(self, podName, namespace, command):
     try:
         resp = stream(self.coreApi.connect_get_namespaced_pod_exec,
                       name=podName, namespace=namespace, stderr=True, stdin=True, stdout=True, command=command)
         # return util.resultDict(success=True, msg='Success', data=resp)
         return util.Result(success=True, msg='Success', data=resp)
     except ApiException as e:
         err_msg = "Exception when calling CoreV1Api->connect_get_namespaced_pod_exec: %s\n" % e
         return util.Result(success=hiss.hiss(err_msg), msg=err_msg)
Esempio n. 14
0
 def delete_job(self, name, namespace):
     try:
         body = client.V1DeleteOptions(propagation_policy='Background')
         api_response = self.batchApi.delete_namespaced_job(name, namespace, body=body)
         hiss.echo('Delete job %s on namespace %s success' % (name, namespace))
         return util.Result(success=True, data=api_response)
     except ApiException as e:
         err_msg = "Exception when calling BatchV1Api->delete_namespaced_job: %s\n" % e
         return util.Result(success=hiss.hiss(err_msg), msg=err_msg)
Esempio n. 15
0
def delete_ica(ica_org):
    ica_name = 'ica-%s' % ica_org
    # Get domain ica to create namespace
    ica_domain = util.get_domain(ica_org)
    if not ica_domain:
        return hiss.hiss('Fail to get domain of %s ' % ica_org)

    # Delete stateful set
    return settings.k8s.delete_stateful(name=ica_name, namespace=ica_domain)
Esempio n. 16
0
 def get(self):
     try:
         list = settings.k8s.coreApi.list_namespace()
     except ApiException as e:
         return hiss.hiss("Exception when calling CoreV1Api->list_namespace: %s\n" % e)
     ns = next((x for x in list.items if x.metadata.name == self.name), None)
     if not ns:
         return False
     else:
         return ns
Esempio n. 17
0
def remove_cert():
    ## Find explorer_db pod
    pods = settings.k8s.find_pod(namespace='default', keyword="test-efs")
    if not pods:
        return hiss.hiss('cannot find tiller pod')

    remove_cert = 'rm -rf %s/*' % (settings.EFS_ROOT)
    exec_command = ['/bin/bash', '-c', '%s' % (remove_cert)]

    return settings.k8s.exec_pod(podName=pods[0],
                                 namespace='default',
                                 command=exec_command)
Esempio n. 18
0
def get_peer_external_domain(peer, index_peer):
    peers = settings.PEER_ORGS.split(' ')

    if index_peer == 0:
        ex_domains = settings.EXTERNAL_ORG_PEER0_ADDRESSES.split(' ')
    else:
        ex_domains = settings.EXTERNAL_ORG_PEER1_ADDRESSES.split(' ')

    if peer in peers:
        return ex_domains[peers.index(peer)]
    else:
        return hiss.hiss('peer: %s does not exists in env file' % peer)
Esempio n. 19
0
    def create_stateful_set(self, stsName, namespace, replicas, containers,
                            volumes, volumeClaimTemplates):
        api_version = 'apps/v1'
        kind = 'StatefulSet'

        metadata = client.V1ObjectMeta(name=stsName, namespace=namespace)

        # Build spec_selector
        spec_selector_match_labels = dict()
        spec_selector_match_labels['name'] = stsName
        spec_selector_match_labels['namespace'] = namespace
        spec_selector = client.V1LabelSelector(
            match_labels=spec_selector_match_labels)

        # Build spec_template
        spec_template_metadata_labels = dict()
        spec_template_metadata_labels['name'] = stsName
        spec_template_metadata_labels['namespace'] = namespace
        spec_template_metadata = client.V1ObjectMeta(
            labels=spec_template_metadata_labels)
        spec_template_spec = client.V1PodSpec(containers=containers,
                                              volumes=volumes)
        spec_template = client.V1PodTemplateSpec(
            metadata=spec_template_metadata, spec=spec_template_spec)

        # Build spec
        spec = client.V1StatefulSetSpec(
            service_name=stsName,
            replicas=replicas,
            selector=spec_selector,
            template=spec_template,
            volume_claim_templates=volumeClaimTemplates)

        # Build body
        body = client.V1StatefulSet(api_version=api_version,
                                    kind=kind,
                                    metadata=metadata,
                                    spec=spec)

        # Create stateful set
        try:
            api_response = self.appsApi.create_namespaced_stateful_set(
                namespace=namespace, body=body)
            print('api_response: ', api_response)
        except ApiException as e:
            return hiss.hiss(
                "Exception when calling AppsV1Api->create_namespaced_stateful_set: %s\n"
                % e)
Esempio n. 20
0
def setup_admin():

    domains = settings.ORDERER_DOMAINS.split(' ')
    if len(domains) == 0:
        domains = settings.PEER_DOMAINS.split(' ')

    # Create application artifact folder
    hiss.echo('Create application artifact folder')
    ## Find efs pod
    pods = settings.k8s.find_pod(namespace="default", keyword="test-efs")
    if not pods:
        return hiss.hiss('cannot find tiller pod')

    mkdir_cmd = ('mkdir -p ' + settings.EFS_ROOT + '/admin/artifacts;'
                 'mkdir -p ' + settings.EFS_ROOT + '/admin/crypto-path;'
                 'mkdir -p ' + settings.EFS_ROOT + '/admin/crypto-store;')

    ## Exec command
    exec_command = ['/bin/bash', '-c', '%s' % (mkdir_cmd)]

    result_get_folder = settings.k8s.exec_pod(podName=pods[0],
                                              namespace="default",
                                              command=exec_command)
    hiss.sub_echo(result_get_folder.data)

    # Create temp folder & namespace
    settings.k8s.prereqs(domains[0])
    dict_env = {
        'ORDERER_DOMAIN': domains[0],
        'EFS_SERVER': settings.EFS_SERVER,
        'EFS_PATH': settings.EFS_PATH,
        'EFS_EXTEND': settings.EFS_EXTEND,
        'PVS_PATH': settings.PVS_PATH
    }

    # Apply deployment
    k8s_template_file = '%s/admin-v1/admin-deployment.yaml' % util.get_k8s_template_path(
    )
    settings.k8s.apply_yaml_from_template(namespace=domains[0],
                                          k8s_template_file=k8s_template_file,
                                          dict_env=dict_env)

    # Apply service
    k8s_template_file = '%s/admin-v1/admin-service.yaml' % util.get_k8s_template_path(
    )
    settings.k8s.apply_yaml_from_template(namespace=domains[0],
                                          k8s_template_file=k8s_template_file,
                                          dict_env=dict_env)
Esempio n. 21
0
def setup_explorer_db():
    # Get domain
    explorer_db_namespace = get_namespace()

    # Create temp folder & namespace
    settings.k8s.prereqs(explorer_db_namespace)

    dict_env = {
        'DOMAIN': explorer_db_namespace,
        'DATABASE_PASSWORD': '******'
    }

    # Deploy explorer db sts
    explorer_db_template = '%s/explorer/explorer-db-deployment.yaml' % util.get_k8s_template_path(
    )
    settings.k8s.apply_yaml_from_template(
        namespace=explorer_db_namespace,
        k8s_template_file=explorer_db_template,
        dict_env=dict_env)

    # Deploy explorer db svc
    explorer_db_svc_template = '%s/explorer/explorer-db-service.yaml' % util.get_k8s_template_path(
    )
    settings.k8s.apply_yaml_from_template(
        namespace=explorer_db_namespace,
        k8s_template_file=explorer_db_svc_template,
        dict_env=dict_env)

    # Create tables
    ## Find explorer_db pod
    pods = settings.k8s.find_pod(namespace=explorer_db_namespace,
                                 keyword="explorer-db")
    if not pods:
        return hiss.hiss('cannot find tiller pod')

    create_tbl_cmd = 'chmod 700 /opt/createdb_new.sh; /opt/createdb_new.sh'
    exec_command = ['/bin/bash', '-c', '%s' % (create_tbl_cmd)]

    result_get_folder = settings.k8s.exec_pod(podName=pods[0],
                                              namespace=explorer_db_namespace,
                                              command=exec_command)
    hiss.sub_echo(result_get_folder.data)
Esempio n. 22
0
    def create(self):
        # Load template file
        k8s_template_file = '%s/namespace/namespaces.yaml' % util.get_k8s_template_path(
        )
        with open(k8s_template_file, 'r') as sources:
            lines = sources.readlines()
            out_data = []

        # Replace variable
        for line in lines:
            out_line = re.sub(r'{{NAMESPACES}}', self.name, line)
            out_data.append(out_line)

        # Get current datetime (UTC)
        current_time = datetime.datetime.utcnow().replace(
            microsecond=0).isoformat().split('T')

        # Make folder temp if it not exists
        tmp_path = "%s/%s" % (util.get_temp_path(), current_time[0])
        util.make_folder(tmp_path)

        # Create yaml_path
        yaml_path = '%s/%s/%s_namespaces.yaml' % (
            util.get_temp_path(), current_time[0], current_time[1])
        # Write yaml -> yaml_path
        with open(yaml_path, "w") as sources:
            for line in out_data:
                sources.write(line)

        # Execute yaml
        with open(yaml_path) as f:
            dep = yaml.safe_load(f)
            try:
                settings.k8s.coreApi.create_namespace(body=dep)
                hiss.sub_echo('Create namespace successfully')
                return True
            except ApiException as e:
                return hiss.hiss(
                    "Exception when calling CoreV1Api->create_namespace: %s\n"
                    % e)
Esempio n. 23
0
def extract_cfg(mamba_config, dev_mode):
    hiss.echo('Extract config to default config path: %s ' %
              DEFAULT_CONFIG_PATH)
    dotenv_path = get_template_env()
    if not os.path.isdir(mamba_config):
        os.makedirs(mamba_config)
    shutil.copy(dotenv_path, DEFAULT_CONFIG_PATH)
    load_dotenv(DEFAULT_CONFIG_PATH)

    default_cluster_name = os.getenv('EKS_CLUSTER_NAME')
    default_k8s_type = os.getenv('K8S_TYPE')
    deployment_mode = os.getenv('DEPLOYMENT_ENV')

    # Input
    cluster_name = input(
        f'Cluster name ({default_cluster_name}): ') or default_cluster_name
    k8s_type = input(
        f'Kubenetes type - support eks or minikube ({default_k8s_type}): '
    ) or default_k8s_type
    if dev_mode:
        deployment_mode = 'develop'

    # Detect current environment setting
    # EFS_SERVER
    efs_server = detect_deployed_efs_server(k8s_type)
    # EFS_SERVER_ID
    efs_server_id = efs_server.split('.')[0]
    print('efs_server: ', efs_server)
    # EFS_PATH
    efs_path = detect_deployed_efs_path()
    # EFS_POD
    efs_pod = detect_deployed_efs_pod()

    if not efs_pod and k8s_type == 'eks':
        retry = 3
        while retry > 0:
            efs_server = input('EFS server (*):')
            if efs_server:
                break
            retry -= 1
        if not efs_server:
            hiss.hiss('Must specify EFS_SERVER!')
            exit()

    with open(DEFAULT_CONFIG_PATH, "r") as sources:
        lines = sources.readlines()
    with open(DEFAULT_CONFIG_PATH, "w") as sources:
        for line in lines:
            newline = re.sub(r'EKS_CLUSTER_NAME=.*',
                             f'EKS_CLUSTER_NAME=\"{cluster_name}\"', line)
            newline = re.sub(r'K8S_TYPE=.*', f'K8S_TYPE=\"{k8s_type}\"',
                             newline)

            if efs_server:
                newline = re.sub(r'EFS_SERVER=.*',
                                 f'EFS_SERVER=\"{efs_server}\"', newline)
            if efs_server_id:
                newline = re.sub(r'EFS_SERVER_ID=.*',
                                 f'EFS_SERVER_ID=\"{efs_server_id}\"', newline)
            if efs_path:
                newline = re.sub(r'EFS_PATH=.*',
                                 f'EFS_PATH=\"efs-{efs_path}\"', newline)
            if efs_pod:
                newline = re.sub(r'EFS_POD=.*', f'EFS_POD=\"{efs_pod}\"',
                                 newline)
            newline = re.sub(r'DEPLOYMENT_ENV=.*',
                             f'DEPLOYMENT_ENV=\"{deployment_mode}\"', newline)
            sources.write(newline)

    hiss.rattle("See more config in %s" % DEFAULT_CONFIG_PATH)
Esempio n. 24
0
def update_folder():
    hiss.rattle('Update folder crt in EFS')

    # Find efs pod
    pods = settings.k8s.find_pod(namespace="default", keyword="test-efs")
    if not pods:
        return hiss.hiss('cannot find tiller pod')

    all_command = ''

    prepare_cmd = 'rm -rf %s/akc-ca-data/crypto-config-v1;' % settings.EFS_ROOT
    prepare_cmd += 'cd %s/akc-ca-data/;' % settings.EFS_ROOT
    all_command += prepare_cmd

    if settings.ORDERER_ORGS != '':
        # Build orderer command
        orderers = settings.ORDERER_ORGS.split(' ')
        orderer_cmd = ''

        for orderer in orderers:
            # Get domain
            domain = util.get_domain(orderer)
            orderer_cmd += (''
                            'mkdir -p crypto-config-v1/ordererOrganizations/' +
                            domain + '/ca;'
                            'mkdir -p crypto-config-v1/ordererOrganizations/' +
                            domain + '/msp/admincerts;'
                            'mkdir -p crypto-config-v1/ordererOrganizations/' +
                            domain + '/msp/cacerts;'
                            'mkdir -p crypto-config-v1/ordererOrganizations/' +
                            domain + '/msp/tlscacerts;'
                            'mkdir -p crypto-config-v1/ordererOrganizations/' +
                            domain + '/tlsca;'
                            'mkdir -p crypto-config-v1/ordererOrganizations/' +
                            domain + '/users/admin/msp/admincerts;'
                            'mkdir -p crypto-config-v1/ordererOrganizations/' +
                            domain + '/users/admin/msp/cacerts;'
                            'mkdir -p crypto-config-v1/ordererOrganizations/' +
                            domain + '/users/admin/msp/keystore;'
                            'mkdir -p crypto-config-v1/ordererOrganizations/' +
                            domain + '/users/admin/msp/signcerts;'
                            'mkdir -p crypto-config-v1/ordererOrganizations/' +
                            domain + '/users/admin/msp/tlscacerts;'
                            'mkdir -p crypto-config-v1/ordererOrganizations/' +
                            domain + '/users/admin/tls;'
                            '')
            for index in range(int(settings.NUM_ORDERERS)):
                orderer_cmd += (
                    ''
                    'mkdir -p crypto-config-v1/ordererOrganizations/' +
                    domain + '/orderers/orderer' + str(index) + '-' + orderer +
                    '.' + domain + '/msp/admincerts;'
                    'mkdir -p crypto-config-v1/ordererOrganizations/' +
                    domain + '/orderers/orderer' + str(index) + '-' + orderer +
                    '.' + domain + '/msp/cacerts;'
                    'mkdir -p crypto-config-v1/ordererOrganizations/' +
                    domain + '/orderers/orderer' + str(index) + '-' + orderer +
                    '.' + domain + '/msp/keystore;'
                    'mkdir -p crypto-config-v1/ordererOrganizations/' +
                    domain + '/orderers/orderer' + str(index) + '-' + orderer +
                    '.' + domain + '/msp/signcerts;'
                    'mkdir -p crypto-config-v1/ordererOrganizations/' +
                    domain + '/orderers/orderer' + str(index) + '-' + orderer +
                    '.' + domain + '/msp/tlscacerts;'
                    'mkdir -p crypto-config-v1/ordererOrganizations/' +
                    domain + '/orderers/orderer' + str(index) + '-' + orderer +
                    '.' + domain + '/tls;'
                    'cp ica-' + orderer +
                    '-ca-chain.pem crypto-config-v1/ordererOrganizations/' +
                    domain + '/orderers/orderer' + str(index) + '-' + orderer +
                    '.' + domain + '/msp/cacerts/ca.' + domain + '-cert.pem;'
                    'cp ica-' + orderer +
                    '-ca-chain.pem crypto-config-v1/ordererOrganizations/' +
                    domain + '/orderers/orderer' + str(index) + '-' + orderer +
                    '.' + domain + '/msp/tlscacerts/tlsca.' + domain +
                    '-cert.pem;'
                    'cp ica-' + orderer +
                    '-ca-chain.pem crypto-config-v1/ordererOrganizations/' +
                    domain + '/orderers/orderer' + str(index) + '-' + orderer +
                    '.' + domain + '/tls/tlsca.' + domain + '-cert.pem;'
                    'cp crypto-config/' + orderer + '.' + domain +
                    '/users/admin/msp/signcerts/cert.pem crypto-config-v1/ordererOrganizations/'
                    + domain + '/orderers/orderer' + str(index) + '-' +
                    orderer + '.' + domain + '/msp/admincerts/cert.pem;'
                    'cp crypto-config/' + orderer + '.' + domain +
                    '/orderers/orderer' + str(index) + '-' + orderer + '.' +
                    domain +
                    '/msp/signcerts/cert.pem crypto-config-v1/ordererOrganizations/'
                    + domain + '/orderers/orderer' + str(index) + '-' +
                    orderer + '.' + domain + '/msp/signcerts/;'
                    'cp crypto-config/' + orderer + '.' + domain +
                    '/orderers/orderer' + str(index) + '-' + orderer + '.' +
                    domain +
                    '/msp/keystore/*_sk crypto-config-v1/ordererOrganizations/'
                    + domain + '/orderers/orderer' + str(index) + '-' +
                    orderer + '.' + domain + '/msp/keystore/key.pem;'
                    'cp crypto-config/' + orderer + '.' + domain +
                    '/orderers/orderer' + str(index) + '-' + orderer + '.' +
                    domain +
                    '/tls/server.crt crypto-config-v1/ordererOrganizations/' +
                    domain + '/orderers/orderer' + str(index) + '-' + orderer +
                    '.' + domain + '/tls/;'
                    'cp crypto-config/' + orderer + '.' + domain +
                    '/orderers/orderer' + str(index) + '-' + orderer + '.' +
                    domain +
                    '/tls/server.key crypto-config-v1/ordererOrganizations/' +
                    domain + '/orderers/orderer' + str(index) + '-' + orderer +
                    '.' + domain + '/tls/server.key;'
                    '')
            orderer_cmd += (
                ''
                'cp ica-' + orderer +
                '-ca-chain.pem crypto-config-v1/ordererOrganizations/' +
                domain + '/ca/ca.' + domain + '-cert.pem;'
                'cp ica-' + orderer +
                '-ca-chain.pem crypto-config-v1/ordererOrganizations/' +
                domain + '/msp/cacerts/ca.' + domain + '-cert.pem;'
                'cp ica-' + orderer +
                '-ca-chain.pem crypto-config-v1/ordererOrganizations/' +
                domain + '/users/admin/msp/cacerts/ca.' + domain + '-cert.pem;'
                'cp ica-' + orderer +
                '-ca-chain.pem crypto-config-v1/ordererOrganizations/' +
                domain + '/tlsca/tlsca.' + domain + '-cert.pem;'
                'cp ica-' + orderer +
                '-ca-chain.pem crypto-config-v1/ordererOrganizations/' +
                domain + '/msp/tlscacerts/tlsca.' + domain + '-cert.pem;'
                'cp ica-' + orderer +
                '-ca-chain.pem crypto-config-v1/ordererOrganizations/' +
                domain + '/users/admin/msp/tlscacerts/tlsca.' + domain +
                '-cert.pem;'
                'cp ica-' + orderer +
                '-ca-chain.pem crypto-config-v1/ordererOrganizations/' +
                domain + '/users/admin/tls/tlsca.' + domain + '-cert.pem;'
                'cp crypto-config/' + orderer + '.' + domain +
                '/users/admin/msp/signcerts/cert.pem crypto-config-v1/ordererOrganizations/'
                + domain + '/msp/admincerts/cert.pem;'
                'cp crypto-config/' + orderer + '.' + domain +
                '/users/admin/msp/signcerts/cert.pem crypto-config-v1/ordererOrganizations/'
                + domain + '/users/admin/msp/admincerts/cert.pem;'
                'cp crypto-config/' + orderer + '.' + domain +
                '/users/admin/msp/keystore/*_sk crypto-config-v1/ordererOrganizations/'
                + domain + '/users/admin/msp/keystore/key.pem;'
                'cp crypto-config/' + orderer + '.' + domain +
                '/users/admin/msp/signcerts/cert.pem crypto-config-v1/ordererOrganizations/'
                + domain + '/users/admin/msp/signcerts/cert.pem;'
                'echo "succeed";'
                '')
        all_command += orderer_cmd

    # Build peer command
    peers = settings.PEER_ORGS.split(' ')
    peer_cmd = ''
    for peer in peers:
        # Get domain
        domain = util.get_domain(peer)
        peer_cmd += (''
                     'mkdir -p crypto-config-v1/peerOrganizations/' + domain +
                     '/ca;'
                     'mkdir -p crypto-config-v1/peerOrganizations/' + domain +
                     '/msp/admincerts;'
                     'mkdir -p crypto-config-v1/peerOrganizations/' + domain +
                     '/msp/cacerts;'
                     'mkdir -p crypto-config-v1/peerOrganizations/' + domain +
                     '/msp/tlscacerts;'
                     'mkdir -p crypto-config-v1/peerOrganizations/' + domain +
                     '/tlsca;'
                     'mkdir -p crypto-config-v1/peerOrganizations/' + domain +
                     '/users/admin/msp/admincerts;'
                     'mkdir -p crypto-config-v1/peerOrganizations/' + domain +
                     '/users/admin/msp/cacerts;'
                     'mkdir -p crypto-config-v1/peerOrganizations/' + domain +
                     '/users/admin/msp/keystore;'
                     'mkdir -p crypto-config-v1/peerOrganizations/' + domain +
                     '/users/admin/msp/signcerts;'
                     'mkdir -p crypto-config-v1/peerOrganizations/' + domain +
                     '/users/admin/msp/tlscacerts;'
                     'mkdir -p crypto-config-v1/peerOrganizations/' + domain +
                     '/users/admin/tls;'
                     '')
        for index in range(int(settings.NUM_PEERS)):
            peer_cmd += (
                ''
                'mkdir -p crypto-config-v1/peerOrganizations/' + domain +
                '/peers/peer' + str(index) + '.' + domain + '/msp/admincerts;'
                'mkdir -p crypto-config-v1/peerOrganizations/' + domain +
                '/peers/peer' + str(index) + '.' + domain + '/msp/cacerts;'
                'mkdir -p crypto-config-v1/peerOrganizations/' + domain +
                '/peers/peer' + str(index) + '.' + domain + '/msp/keystore;'
                'mkdir -p crypto-config-v1/peerOrganizations/' + domain +
                '/peers/peer' + str(index) + '.' + domain + '/msp/signcerts;'
                'mkdir -p crypto-config-v1/peerOrganizations/' + domain +
                '/peers/peer' + str(index) + '.' + domain + '/msp/tlscacerts;'
                'mkdir -p crypto-config-v1/peerOrganizations/' + domain +
                '/peers/peer' + str(index) + '.' + domain + '/tls;'
                'cp ica-' + peer +
                '-ca-chain.pem crypto-config-v1/peerOrganizations/' + domain +
                '/peers/peer' + str(index) + '.' + domain +
                '/msp/cacerts/ca.' + domain + '-cert.pem;'
                'cp ica-' + peer +
                '-ca-chain.pem crypto-config-v1/peerOrganizations/' + domain +
                '/peers/peer' + str(index) + '.' + domain +
                '/msp/tlscacerts/tlsca.' + domain + '-cert.pem;'
                'cp ica-' + peer +
                '-ca-chain.pem crypto-config-v1/peerOrganizations/' + domain +
                '/peers/peer' + str(index) + '.' + domain + '/tls/tlsca.' +
                domain + '-cert.pem;'
                'cp crypto-config/' + peer + '.' + domain +
                '/users/admin/msp/signcerts/cert.pem crypto-config-v1/peerOrganizations/'
                + domain + '/peers/peer' + str(index) + '.' + domain +
                '/msp/admincerts/cert.pem;'
                'cp crypto-config/' + peer + '.' + domain + '/peers/peer' +
                str(index) + '-' + peer + '.' + domain +
                '/msp/signcerts/cert.pem crypto-config-v1/peerOrganizations/' +
                domain + '/peers/peer' + str(index) + '.' + domain +
                '/msp/signcerts/;'
                'cp crypto-config/' + peer + '.' + domain + '/peers/peer' +
                str(index) + '-' + peer + '.' + domain +
                '/msp/keystore/*_sk crypto-config-v1/peerOrganizations/' +
                domain + '/peers/peer' + str(index) + '.' + domain +
                '/msp/keystore/key.pem;'
                'cp crypto-config/' + peer + '.' + domain + '/peers/peer' +
                str(index) + '-' + peer + '.' + domain +
                '/tls/server.crt crypto-config-v1/peerOrganizations/' +
                domain + '/peers/peer' + str(index) + '.' + domain + '/tls/;'
                'cp crypto-config/' + peer + '.' + domain + '/peers/peer' +
                str(index) + '-' + peer + '.' + domain +
                '/tls/server.key crypto-config-v1/peerOrganizations/' +
                domain + '/peers/peer' + str(index) + '.' + domain +
                '/tls/server.key;'
                '')
        peer_cmd += (
            ''
            'cp ica-' + peer +
            '-ca-chain.pem crypto-config-v1/peerOrganizations/' + domain +
            '/ca/ca.' + domain + '-cert.pem;'
            'cp ica-' + peer +
            '-ca-chain.pem crypto-config-v1/peerOrganizations/' + domain +
            '/msp/cacerts/ca.' + domain + '-cert.pem;'
            'cp ica-' + peer +
            '-ca-chain.pem crypto-config-v1/peerOrganizations/' + domain +
            '/users/admin/msp/cacerts/ca.' + domain + '-cert.pem;'
            'cp ica-' + peer +
            '-ca-chain.pem crypto-config-v1/peerOrganizations/' + domain +
            '/tlsca/tlsca.' + domain + '-cert.pem;'
            'cp ica-' + peer +
            '-ca-chain.pem crypto-config-v1/peerOrganizations/' + domain +
            '/msp/tlscacerts/tlsca.' + domain + '-cert.pem;'
            'cp ica-' + peer +
            '-ca-chain.pem crypto-config-v1/peerOrganizations/' + domain +
            '/users/admin/msp/tlscacerts/tlsca.' + domain + '-cert.pem;'
            'cp ica-' + peer +
            '-ca-chain.pem crypto-config-v1/peerOrganizations/' + domain +
            '/users/admin/tls/tlsca.' + domain + '-cert.pem;'
            'cp crypto-config/' + peer + '.' + domain +
            '/users/admin/msp/signcerts/cert.pem crypto-config-v1/peerOrganizations/'
            + domain + '/msp/admincerts/cert.pem;'
            'cp crypto-config/' + peer + '.' + domain +
            '/users/admin/msp/signcerts/cert.pem crypto-config-v1/peerOrganizations/'
            + domain + '/users/admin/msp/admincerts/cert.pem;'
            'cp crypto-config/' + peer + '.' + domain +
            '/users/admin/msp/keystore/* crypto-config-v1/peerOrganizations/' +
            domain + '/users/admin/msp/keystore/key.pem;'
            'cp crypto-config/' + peer + '.' + domain +
            '/users/admin/msp/signcerts/cert.pem crypto-config-v1/peerOrganizations/'
            + domain + '/users/admin/msp/signcerts/cert.pem;'
            '')
    all_command += peer_cmd

    # Exec command
    exec_command = ['/bin/bash', '-c', '%s' % (all_command)]

    result_get_folder = settings.k8s.exec_pod(podName=pods[0],
                                              namespace="default",
                                              command=exec_command)
    hiss.sub_echo(result_get_folder.data)
    return True
Esempio n. 25
0
def copy_scripts():
    hiss.rattle('Copy scripts to EFS')

    # Find efs pod
    pods = settings.k8s.find_pod(namespace="default", keyword="test-efs")
    if not pods:
        return hiss.hiss('cannot find tiller pod')

    # Check empty folder
    exec_command = [
        '/bin/bash', '-c',
        'test -d %s && echo "1" || echo "0"' % (settings.EFS_ROOT)
    ]

    result_get_folder = settings.k8s.exec_pod(podName=pods[0],
                                              namespace="default",
                                              command=exec_command)
    if int(result_get_folder.data) < 1:
        hiss.sub_echo('Folder %s not found. Creating...' % settings.EFS_ROOT)
        exec_command = [
            '/bin/bash', '-c',
            'mkdir -p %s/admin; mkdir -p %s/akc-ca-data' %
            (settings.EFS_ROOT, settings.EFS_ROOT)
        ]

        # Create folder in efs
        result_create_folder = settings.k8s.exec_pod(podName=pods[0],
                                                     namespace="default",
                                                     command=exec_command)
        if result_create_folder.success == False:
            return hiss.hiss('cannot create folders in %s: %s' %
                             (pods[0], result_create_folder.msg))

    # Copy config to scripts/env
    hiss.sub_echo('Copy config to scripts/env')
    config_file = os.path.abspath(os.path.join(__package__, "../config/.env"))
    env_script_File = os.path.abspath(
        os.path.join(__package__, "../blockchain/scripts/env-scripts.sh"))
    copyfile(config_file, env_script_File)

    # Remove old script folder in efs
    hiss.sub_echo('Remove old script folder in efs')
    exec_command = [
        '/bin/bash', '-c',
        'rm -rf %s/akc-ca-scripts/*' % (settings.EFS_ROOT)
    ]

    result_create_folder = settings.k8s.exec_pod(podName=pods[0],
                                                 namespace="default",
                                                 command=exec_command)
    if result_create_folder.success == False:
        return hiss.hiss('cannot remove folders in %s' % pods[0])

    # Copy scripts folder to efs
    hiss.sub_echo('Copy scripts folder to efs')
    script_path = os.path.abspath(
        os.path.join(__package__, "../blockchain/scripts"))
    if not settings.k8s.cp_to_pod(
            podName=pods[0],
            namespace='default',
            source=script_path,
            target='%s/akc-ca-scripts' % settings.EFS_ROOT):
        return hiss.hiss('connot copy scripts folder to pod %s' % pods[0])

    exec_command = [
        '/bin/bash', '-c',
        ('test -d ' + settings.EFS_ROOT + '/akc-ca-scripts/akc-ca-scripts'
         ' && mv ' + settings.EFS_ROOT + '/akc-ca-scripts/akc-ca-scripts/* ' +
         settings.EFS_ROOT + '/akc-ca-scripts || echo "ok"')
    ]

    result_create_folder = settings.k8s.exec_pod(podName=pods[0],
                                                 namespace="default",
                                                 command=exec_command)
    if result_create_folder.success == False:
        return hiss.hiss('cannot remove folders in %s' % pods[0])

    # Copy test chaincode to efs
    hiss.sub_echo('Copy test chaincode to efs')
    artifacts_path = os.path.abspath(
        os.path.join(__package__, "../blockchain/artifacts"))
    if not settings.k8s.cp_to_pod(
            podName=pods[0],
            namespace='default',
            source=artifacts_path,
            target='%s/admin/artifacts' % settings.EFS_ROOT):
        return hiss.hiss('connot copy test chaincode to pod %s' % pods[0])

    return True
Esempio n. 26
0
def setup_admin(org):

    # Get domain
    domain = util.get_domain(org)

    # Get orderer information
    orderer_names = settings.ORDERER_ORGS.split(' ')
    orderer_domains = settings.ORDERER_DOMAINS.split(' ')
    if orderer_names == '' and settings.REMOTE_ORDERER_NAME != '':
        orderer_names = settings.REMOTE_ORDERER_NAME.split(' ')
        orderer_domains = settings.REMOTE_ORDERER_DOMAIN.split(' ')

    # Build endorsement config
    peer_orgs = '%s %s' % (settings.PEER_ORGS, settings.ENDORSEMENT_ORG_NAME)
    peer_domains = '%s %s' % (settings.PEER_DOMAINS,
                              settings.ENDORSEMENT_ORG_DOMAIN)
    print(peer_orgs)

    # Create application artifact folder
    hiss.echo('Create wallet folder')
    ## Find efs pod
    pods = settings.k8s.find_pod(namespace="default", keyword="test-efs")
    if not pods:
        return hiss.hiss('cannot find tiller pod')

    mkdir_cmd = ('mkdir -p ' + settings.EFS_ROOT + '/admin-v2/wallet;')

    # Exec command
    exec_command = ['/bin/bash', '-c', '%s' % (mkdir_cmd)]

    result_get_folder = settings.k8s.exec_pod(podName=pods[0],
                                              namespace="default",
                                              command=exec_command)
    hiss.sub_echo(result_get_folder.data)

    # Create temp folder & namespace
    settings.k8s.prereqs(domain)
    dict_env = {
        'ORG_NAME': org,
        'ORG_DOMAIN': domain,
        'PEER_NAMES': peer_orgs,
        'PEER_DOMAINS': peer_domains,
        'ORDERER_DOMAIN': orderer_domains[0],
        'ORGDERER_NAME': orderer_names[0],
        'EFS_SERVER': settings.EFS_SERVER,
        'EFS_PATH': settings.EFS_PATH,
        'EFS_EXTEND': settings.EFS_EXTEND,
        'PVS_PATH': settings.PVS_PATH
    }

    # Apply deployment
    k8s_template_file = '%s/admin/admin-deployment.yaml' % util.get_k8s_template_path(
    )
    settings.k8s.apply_yaml_from_template(namespace=domain,
                                          k8s_template_file=k8s_template_file,
                                          dict_env=dict_env)

    # Apply service
    k8s_template_file = '%s/admin/admin-service.yaml' % util.get_k8s_template_path(
    )
    settings.k8s.apply_yaml_from_template(namespace=domain,
                                          k8s_template_file=k8s_template_file,
                                          dict_env=dict_env)