def main()

in scripts/build_storage.py [0:0]


def main():
    parser = argparse.ArgumentParser(description='Build EBS storage config')
    parser.add_argument('-config', dest="config",metavar="FILE",required = True,
                              help='JSON containing master storage config')
    parser.add_argument('-ismaster', dest="ismaster",metavar="INT",required = True,
                              help='Is this master node or not ?')
    parser.add_argument('-hostcount', dest="hostcount",metavar="INT",required = True,
                              help='Total Hostcount?')
    parser.add_argument('-which', dest="which",metavar="STRING",required = True,
                              help='Which Storage? [backup,hana_data,hana_log,shared,usr_sap,media]')
    parser.add_argument('-instance_type', dest="instance_type",metavar="STRING",required = True,
                              help='Which instance_type?')
    parser.add_argument('-storage_type', dest="storage_type",metavar="STRING",required = True,
                              help='Which storage_type?')

    args = parser.parse_args()

    config = args.config
    ismaster = int(args.ismaster)
    hostcount = int(args.hostcount)
    which = args.which
    instance_type = args.instance_type
    storage_type = args.storage_type


    if not os.path.isfile(config):
        print('Storage config file ' + config + ' Invalid!')
        print('ERROR: Cannot build storage')
        return

    if ismaster != 1 and which == 'backup':
        print('Backup storage valid only on HANA master')
        print('WARNING: Did not build backup storage on worker')
        return

    if ismaster != 1 and which == 'shared':
        print('Shared storage valid only on HANA master')
        print('WARNING: Did not build shared storage on worker')
        return
    if ismaster != 1 and which == 'media':
        print('Media storage valid only on HANA master')
        print('WARNING: Did not build shared storage on worker')
        return

    with open(config) as f:
        config_json = json.loads(f.read())

    if which == 'backup':
        drives = get_backup_drives(config_json,hostcount,instance_type,storage_type)
        for d in drives:
            device = d['device']
            io_type = storage_type
            size = d['size'].replace("G","")
            tag = 'SAP-HANA-Backup'
            create_attach_ebs(device,io_type,size,tag,None)
            if os.path.isfile(nvme_device_id):
                nvme_device = open(nvme_device_id, 'r').read().rstrip()
                d['device'] = '"'+nvme_device+'"'
        create_backup_volgrp(drives)
        stripe_backup_vol(drives)
        return

    if which == 'hana_data':
        drives = config_json['hana_data']['master_worker'][instance_type][storage_type]['drives']
        stripe = config_json['hana_data']['master_worker'][instance_type][storage_type]['stripe']
        for d in drives:
            device = d['device']
            io_type = storage_type
            piops = None
            if 'piops' in d:
                piops = d['piops']
            size = d['size'].replace("G","")
            tag = 'HANA-Data'
            create_attach_ebs(device,io_type,size,tag,piops)
            if os.path.isfile(nvme_device_id):
                nvme_device = open(nvme_device_id, 'r').read().rstrip()
                d['device'] = '"'+nvme_device+'"'
        create_hanadata_volgrp(drives)
        count = len(drives)
        stripe_hanadata_vol(stripe,count)
        return

    if which == 'hana_log':
        drives = config_json['hana_log']['master_worker'][instance_type][storage_type]['drives']
        stripe = config_json['hana_log']['master_worker'][instance_type][storage_type]['stripe']
        for d in drives:
            device = d['device']
            io_type = storage_type
            piops = None
            if 'piops' in d:
                piops = d['piops']
            size = d['size'].replace("G","")
            tag = 'HANA-Log'
            create_attach_ebs(device,io_type,size,tag,piops)
            if os.path.isfile(nvme_device_id):
                nvme_device = open(nvme_device_id, 'r').read().rstrip()
                d['device'] = '"'+nvme_device+'"'
        create_hanalog_volgrp(drives)
        count = len(drives)
        stripe_hanalog_vol(stripe,count)
        return

    if which == 'shared':
        drives = config_json['shared']['master'][instance_type][storage_type]['drives']
        if len(drives) == 1:
            for d in drives:
                device = d['device']
                io_type = storage_type
                size = d['size'].replace("G","")
                tag = 'SAP-HANA-Shared'
                piops = None
                if 'piops' in d:
                    piops = d['piops']
                create_attach_single_ebs(device,io_type,size,tag,piops)
                if os.path.isfile(nvme_device_id):
                    device = open(nvme_device_id, 'r').read().rstrip()
                else:
                    device = drives[0]['device'].replace('/dev/s','/dev/xv')
                mkfs_cmd = ' mkfs.xfs -f ' + device + ' -L HANA_SHARE '
                exe_cmd(mkfs_cmd)
                print(mkfs_cmd)
        else:
            for d in drives:
                device = d['device']
                io_type = storage_type
                size = d['size'].replace("G","")
                tag = 'SAP-HANA-Shared'
                piops = None
                if 'piops' in d:
                    piops = d['piops']
                create_attach_ebs(device,io_type,size,tag,piops)
                if os.path.isfile(nvme_device_id):
                    nvme_device = open(nvme_device_id, 'r').read().rstrip()
                    d['device'] = '"'+nvme_device+'"'
            create_hanashared_volgrp(drives)
            stripe_hanashared_vol(drives)
        return

    if which == 'usr_sap':
        if ismaster == 1:
            drives = config_json['usr_sap']['master'][instance_type][storage_type]['drives']
        else:
            drives = config_json['usr_sap']['worker'][instance_type][storage_type]['drives']
        for d in drives:
            device = d['device']
            io_type = storage_type
            size = d['size'].replace("G","")
            tag = 'SAP-HANA-USR-SAP'
            piops = None
            if 'piops' in d:
                piops = d['piops']
            create_attach_single_ebs(device,io_type,size,tag,piops)
            if os.path.isfile(nvme_device_id):
                device = open(nvme_device_id, 'r').read().rstrip()
            else:
                device = drives[0]['device'].replace('/dev/s','/dev/xv')
        mkfs_cmd = 'mkfs.xfs -f ' + device + ' -L USR_SAP '
        exe_cmd(mkfs_cmd)
        print(mkfs_cmd)
        return

    if which == 'media':
        if ismaster == 1:
            drives = config_json['media']['master'][storage_type]['drives']
        for d in drives:
            device = d['device']
            io_type = storage_type
            size = d['size'].replace("G","")
            tag = 'SAP-HANA-MEDIA'
            piops = None
            if 'piops' in d:
                piops = d['piops']
            create_attach_single_ebs(device,io_type,size,tag,piops)
            if os.path.isfile(nvme_device_id):
                device = open(nvme_device_id, 'r').read().rstrip()
            else:
                device = drives[0]['device'].replace('/dev/s','/dev/xv')
        mkfs_cmd = 'mkfs.xfs -f ' + device + ' -L HANA_MEDIA '
        exe_cmd(mkfs_cmd)
        print(mkfs_cmd)
        return