Пример #1
0
    def avi_json_bakery(self, config):
        """ Here we make json cakes for avi """
        LOG.info('Config Conversion mappings started')

        # getting meta tags from super class
        meta = self.meta(self.tenant, '17.1')
        meta = json.dumps(meta)[1:-1]

        # filling the jinja template to get avi conig json
        config_content = Environment(loader=FileSystemLoader(
            template_loc)).get_template(template_name).render(
                config=config, meta=meta, tenant=self.tenant)

        # wrting the ouput to json
        with open(self.out_loc + sep + "config.json", 'w') as file_handler:
            file_handler.write(config_content)
        LOG.info('File Generation Completed')

        # Reading from the output
        with open(self.out_loc + sep + "config.json", 'r') as reader:
            output = json.load(reader)

        converted_obj = dict()
        for gslb in output.get('GslbService', []):
            converted_obj.update({gslb['name']: gslb})

        # finally creating the excel sheet
        workbook = xlsxwriter.Workbook(self.out_loc + sep +
                                       'Conversion_status.xlsx')
        worksheet = workbook.add_worksheet()

        # Write some data headers.
        bold = workbook.add_format({'bold': True})
        skip = workbook.add_format({'font_color': 'red'})
        not_supported = workbook.add_format({'font_color': 'red'})
        success = workbook.add_format({'font_color': 'green'})
        partial = workbook.add_format({'font_color': 'blue'})
        missing = workbook.add_format({'font_color': 'orange'})

        worksheet.write('A1', 'Type', bold)
        worksheet.write('B1', 'Name', bold)
        worksheet.write('C1', 'Status', bold)
        worksheet.write('D1', 'Skipped Settings', bold)
        worksheet.write('E1', 'Indirect Mappings', bold)
        worksheet.write('F1', 'Not Applicable', bold)
        worksheet.write('G1', 'User Ignore', bold)
        worksheet.write('H1', 'Overall Skip', bold)
        worksheet.write('I1', 'Avi Status', bold)

        worksheet.set_default_row(30)
        worksheet.set_column(2, 0, 60)

        # getting excel dict
        excel_dict = get_excel_dict()

        row = 1
        col = 0
        partial_count = 0
        skip_count = 0
        success_count = 0
        failed_count = 0
        not_supported_count = 0
        hang_count = 0
        total_count = 0

        for key in excel_dict:
            total_count += 1
            if excel_dict[key].get('status', []) == 'success':
                success_count += 1
            elif excel_dict[key].get('status', []) == 'not_supported':
                not_supported_count += 1
            elif excel_dict[key].get('status', []) == 'skip':
                skip_count += 1
            elif excel_dict[key].get('status', []) == 'partial':
                partial_count += 1
            elif excel_dict[key].get('status', []) == 'hang':
                hang_count += 1
            worksheet.write(row, col, str(excel_dict[key]['type']).strip())
            worksheet.write(row, col + 1, str(excel_dict[key]['name']).strip())

            if excel_dict[key]['status'] == 'success':
                worksheet.write(row, col + 2,
                                excel_dict[key]['status'].strip(), success)
            elif excel_dict[key]['status'] == 'skip' or\
                    excel_dict[key]['status'] == 'failed':
                worksheet.write(row, col + 2,
                                excel_dict[key]['status'].strip(), skip)
            elif excel_dict[key]['status'] == 'partial':
                worksheet.write(row, col + 2,
                                excel_dict[key]['status'].strip(), partial)
            elif excel_dict[key]['status'] == 'not_supported':
                worksheet.write(row, col + 2,
                                excel_dict[key]['status'].strip(),
                                not_supported)
            elif excel_dict[key]['status'] == 'hang':
                worksheet.write(row, col + 2, "Incomplete Configuration", skip)

            worksheet.write(row, col + 5, str(excel_dict[key]['na']))
            worksheet.write(row, col + 3, str(excel_dict[key]['skipped']))

            if excel_dict[key]['rule'] == 'no_rule':
                worksheet.write(row, col + 8, "NA", success)
            else:
                worksheet.write(
                    row, col + 8,
                    "Refer Parent Rule: " + str(excel_dict[key]['rule']),
                    success)

            # Filling  Avi Objects Column
            if excel_dict[key].get('avi_status', []) == 'no member' or\
                    excel_dict[key].get('avi_status', []) == 'no domain':
                worksheet.write(
                    row, col + 8, excel_dict[key]['avi_msg'].strip() +
                    " for " + excel_dict[key]['name'], missing)
            elif excel_dict[key]['type'] == 'dns rule' and\
                    excel_dict[key]['name'] in converted_obj.keys():
                worksheet.write(row, col + 8,
                                str(converted_obj[excel_dict[key]['name']]),
                                success)

            row = row + 1

        set_total_stats('skip', skip_count)
        set_total_stats('fail', failed_count)
        set_total_stats('success', success_count)
        set_total_stats('partial', partial_count)
        set_total_stats('not_supported', not_supported_count)

        set_total_stats('total', total_count)

        # printing  stats
        stats = get_total_stats()
        print("===========================")
        print("==========Report ==========")
        print("===========================")
        for key in stats:
            print("%s: %s" % (key, stats[key]))
Пример #2
0
def config_converter(file_name):
    """ The conversion from parsed output goes here """

    # trying to access the parser function on the fly and load the data
    # to a local variable
    parsed_output, excel_dict = parser(file_name)

    # top to button approach huh !!!
    # 1. Create a combined json with internal depencies
    # 2. Put the things to avi json
    # 3. Boom !!! Smoking ...

    total_failed = 0

    LOG.info('Internal Conversion Started')
    print "Converting the Parsed output ...."

    # Holding this feature for confirmation from Sumant or Gauvrav
    # failed_checks = 3
    # for vip in parsed_output['answer vip']:
    #     if 'keepalive' in vip:
    #         print vip['keepalive']

    # sys.exit()

    # jut to parse the stuffs
    for vip in parsed_output['answer vip']:
        try:
            # print vip
            # sys.exit()
            loc = find_location(parsed_output['answer vip'], vip['answer vip'],
                                'answer vip')
            parsed_output['answer vip'][loc]['hang'] = 'n'
            try:
                excel_dict_create(vip, 'vip', 'success')
            except:
                pass
        except:
            # excel_dict_create(vip, 'vip', 'failed')
            print vip

    future = 0
    # passing source-address-list
    for source in parsed_output['source-address-list']:
        # print source
        future += 1
        try:
            # print source['source-address-list']
            loc = find_location(parsed_output['source-address-list'],
                                source['source-address-list'],
                                'source-address-list')
            parsed_output['source-address-list'][loc]['hang'] = 'n'
            # print parsed_output['source-address-list'][loc]['hang']
            excel_dict_create(source, 'source-address-list', 'success')
        except Exception as e:
            print "Failed for ", source
            print "Exception", str(e)
    # print "count", future
    # sys.exit()

    combined_dict = {}

    for rule in parsed_output['dns rule']:
        # parsed_output[rule['dns rule']['hang']] = 'n'
        combined_dict[rule['dns rule']] = {}

    total_iteration = len(combined_dict.keys())
    iteration = 1
    parsing_failed_count = 0

    for keys in combined_dict:
        # doing some visual
        msg = 'Converting Rule [ ' + str(
            parsed_output['dns rule'][0]['dns rule']) + ']'
        printProgressBar(iteration,
                         total_iteration,
                         msg,
                         prefix='Progress',
                         suffix='')
        iteration += 1
        # LOG.info(msg)

        for dns in parsed_output['dns rule']:
            dns_rule_name = dns['dns rule']
            loc = find_location(parsed_output['dns rule'], dns['dns rule'],
                                'dns rule')
            parsed_output['dns rule'][loc]['hang'] = 'n'

            if keys == dns['dns rule']:
                combined_dict[keys] = dns

                # for adding domain-list
                for domain in parsed_output['domain-list']:
                    if domain['domain-list'] == \
                         combined_dict[keys]['domain-list']:
                        loc = find_location(parsed_output['domain-list'],
                                            domain['domain-list'],
                                            'domain-list')
                        parsed_output['domain-list'][loc]['hang'] = 'n'
                        combined_dict[keys].update(domain)
                        # updating the excel sheet
                        excel_dict_create(domain, 'domain', 'success',
                                          dns_rule_name)

                # for adding answer-group
                # fix for clause erroring out in large files
                try:
                    for index, clause in enumerate(dns['clause']):
                        for group in parsed_output['answer-group']:
                            # print group
                            if group['answer-group'] == clause['vip-group']:
                                loc = find_location(
                                    parsed_output['answer-group'],
                                    group['answer-group'], 'answer-group')
                                parsed_output['answer-group'][loc]['hang'] \
                                                            = 'n'
                                combined_dict[keys]['clause'][index].\
                                              update(group)
                                # updating the excel dict
                                excel_dict_create(group, 'answer', 'success',
                                                  dns_rule_name)
                    excel_dict_create(dns, 'dns', 'success', dns_rule_name)
                except:
                    # updating the excel dict
                    # print "Exception ", e
                    parsing_failed_count += 1
                    excel_dict_create(dns, 'dns', 'skip', dns_rule_name)
                    LOG.debug("Parsing Failed for %s" % (dns))

                # for addign source address list
                for source in parsed_output['source-address-list']:
                    if source['source-address-list'] == \
                            combined_dict[keys]['source-address-list']:
                        loc = find_location(
                            parsed_output['source-address-list'],
                            source['source-address-list'],
                            'source-address-list')
                        parsed_output['source-address-list'][loc]['hang'] = 'n'
                        excel_dict_create(source, 'source-address-list',
                                          'success', dns_rule_name)
                        combined_dict[keys].update(source)
        # set_total_stats('fail', total_failed)

    combined_dict_temp = copy.deepcopy(combined_dict)

    no_member_count = 0

    # kicking out memeber out when they don't have any clause or domains
    for key in combined_dict:
        flag = 0
        if len(combined_dict[key].get('clause', [])) < 1:
            LOG.warning('%s of key %s is not having members' %
                        (combined_dict[key], key))
            no_member_count += 1
            # print "val is ", combined_dict[key]
            excel_dict_create(combined_dict[key], 'dns rule', 'no member')
            del combined_dict_temp[key]
        elif len(combined_dict[key].get('domain', [])) < 1:
            LOG.warning('%s of key %s is not having domains' %
                        (combined_dict[key], key))
            no_member_count += 1
            # print "val is ", combined_dict[key]
            excel_dict_create(combined_dict[key], 'dns rule', 'no domain')
            del combined_dict_temp[key]
        elif len(combined_dict[key].get('clause', [])) >= 1:
            for key1 in combined_dict[key]['clause']:
                if len(key1.get('answer-add', [])) < 1:
                    flag = 1
            if flag == 1:
                no_member_count += 1
                excel_dict_create(combined_dict[key], 'dns rule', 'no domain')
                del combined_dict_temp[key]

    # for updating hanged
    hang_count = 0
    # count = 0
    for key in parsed_output:
        for val in parsed_output[key]:
            # count += 1
            if val['hang'] == 'y':
                if (val.get(key, [])):
                    excel_dict_create(val, key, 'hang')
                    LOG.warning('%s of type %s is hanging' % (val[key], key))
                else:
                    LOG.warning('%s of no type is hanging ' % (key))
                hang_count += 1
    set_total_stats('hang', hang_count)
    set_total_stats('no_member', no_member_count)

    LOG.info('Convertor completed')
    return combined_dict_temp
Пример #3
0
    def avi_json_bakery(self, config):
        """ Here we make json cakes for avi """
        LOG.info('Config Conversion mappings started')

        # getting meta tags from super class
        meta = self.meta(self.tenant, '17.1')
        meta = (str(meta).replace('\'', '"').strip('{}'))

        # filling the jinja template to get avi conig json
        config_content = Environment(loader=FileSystemLoader(template_loc)
                         ).get_template(template_name
                         ).render(config=config, meta=meta, tenant=self.tenant)

        # wrting the ouput to json
        with open(self.out_loc + sep + "config.json", 'w') as file_handler:
            file_handler.write(config_content)
        LOG.info('File Generation Completed')

        # Reading from the output
        with open(self.out_loc + sep + "config.json", 'r') as reader:
            output = json.load(reader)
        
        # print type(output)
        # print output

        converted_obj = dict()
        for gslb in output.get('GslbService', []):
            converted_obj.update({gslb['name']: gslb })

        # print converted_obj

        # finally creating the excel sheet
        workbook = xlsxwriter.Workbook(self.out_loc + sep +
                                       'Conversion_status.xlsx')
        worksheet = workbook.add_worksheet()

        # Write some data headers.
        bold = workbook.add_format({'bold': True})
        skip = workbook.add_format({'font_color': 'red'})
        not_supported = workbook.add_format({'font_color': 'red'})
        success = workbook.add_format({'font_color': 'green'})
        partial = workbook.add_format({'font_color': 'blue'})
        missing = workbook.add_format({'font_color': 'orange'})

        worksheet.write('A1', 'Type', bold)
        worksheet.write('B1', 'Name', bold)
        worksheet.write('C1', 'Status', bold)
        worksheet.write('D1', 'Skipped Settings', bold)
        worksheet.write('E1', 'Indirect Mappings', bold)
        worksheet.write('F1', 'Not Applicable', bold)
        worksheet.write('G1', 'User Ignore', bold)
        worksheet.write('H1', 'Overall Skip', bold)
        worksheet.write('I1', 'Avi Status', bold)

        worksheet.set_default_row(30)
        worksheet.set_column(2, 0, 60)

        # getting excel dict 
        excel_dict = get_excel_dict()
        # print "\n\n Excel ", excel_dict

        row = 1
        col = 0
        partial_count = 0
        skip_count = 0
        success_count = 0
        failed_count = 0
        not_supported_count = 0
        hang_count = 0
        total_count = 0

        for key in excel_dict:
            total_count += 1
            if excel_dict[key].get('status', []) == 'success':
                success_count += 1
            elif excel_dict[key].get('status', []) == 'not_supported':
                not_supported_count += 1
            elif excel_dict[key].get('status', []) == 'skip':
                skip_count += 1
            elif excel_dict[key].get('status', []) == 'partial':
                partial_count += 1
            elif excel_dict[key].get('status', []) == 'hang':
                hang_count += 1
            # else :
            #     print "status fails", excel_dict[key]
            # print "writing "
            worksheet.write(row, col, str(excel_dict[key]['type']).strip())
            worksheet.write(row, col+1, str(excel_dict[key]['name']).strip())

            if excel_dict[key]['status'] == 'success':
                worksheet.write(row, col+2, excel_dict[key]['status'].strip(),
                                success)
            elif excel_dict[key]['status'] == 'skip' or\
                    excel_dict[key]['status'] == 'failed':
                worksheet.write(row, col+2, excel_dict[key]['status'].strip(),
                                skip)
            elif excel_dict[key]['status'] == 'partial':
                worksheet.write(row, col+2, excel_dict[key]['status'].strip(),
                                partial)
            elif excel_dict[key]['status'] == 'not_supported':
                worksheet.write(row, col+2, excel_dict[key]['status'].strip(),
                                not_supported)
            elif excel_dict[key]['status'] == 'hang':
                worksheet.write(row, col+2, "Incomplete Configuration",
                                skip)

            worksheet.write(row, col+5, str(excel_dict[key]['na']))
            worksheet.write(row, col+3, str(excel_dict[key]['skipped']))

            if excel_dict[key]['rule'] == 'no rule':
                worksheet.write(row, col+8,
                                "NA",
                                success
                                )
            else:
                worksheet.write(row, col+8,
                                "Refer Parent Rule: " + 
                                    str (excel_dict[key]['rule']),
                                success
                                )

            # Filling  Avi Objects Column
            if excel_dict[key].get('avi_status', []) == 'no member' or\
                    excel_dict[key].get('avi_status', []) == 'no domain':
                worksheet.write(row, col+8,
                                excel_dict[key]['avi_msg'].strip() +
                                " for " + excel_dict[key]['name'],
                                missing)
            elif excel_dict[key]['type'] == 'dns rule' and\
                    excel_dict[key]['name'] in converted_obj.keys():
                worksheet.write(row, col+8,
                                str(converted_obj[excel_dict[key]['name']]),
                                success
                                )

            row = row + 1

        set_total_stats('skip', skip_count)
        set_total_stats('fail', failed_count)
        set_total_stats('success', success_count)
        set_total_stats('partial', partial_count)
        set_total_stats('not_supported', not_supported_count)

        set_total_stats('total', total_count)

        # printing  stats
        stats = get_total_stats()
        print "==========================="
        print "==========Report =========="
        print "==========================="
        for key in stats:
            print "%s: %s" % (key, stats[key])
Пример #4
0
def config_converter(file_name):
    """ The conversion from parsed output goes here """

    # trying to access the parser function on the fly and load the data
    # to a local variable
    parsed_output, excel_dict = parser(file_name)

    # top to button approach huh !!!
    # 1. Create a combined json with internal depencies
    # 2. Put the things to avi json
    # 3. Boom !!! Smoking ...

    total_failed = 0

    LOG.info('Internal Conversion Started')
    print "Converting the Parsed output ...."

    # Holding this feature for confirmation from Sumant or Gauvrav
    # failed_checks = 3
    # for vip in parsed_output['answer vip']:
    #     if 'keepalive' in vip:
    #         print vip['keepalive']

    # sys.exit()

    # jut to parse the stuffs
    for vip in parsed_output['answer vip']:
        try:
            loc = find_location(parsed_output['answer vip'],
                                vip['answer vip'],
                                'answer vip')
            parsed_output['answer vip'][loc]['hang'] = 'n'
            try:
                excel_dict_create(vip, 'vip', 'success')
            except:
                pass
        except:
            # excel_dict_create(vip, 'vip', 'failed')
            # print vip
            pass

    future = 0
    # passing source-address-list
    for source in parsed_output['source-address-list']:
        # print source
        future += 1
        try:
            # print source['source-address-list']
            loc = find_location(parsed_output['source-address-list'],
                                source['source-address-list'],
                                'source-address-list')
            parsed_output['source-address-list'][loc]['hang'] = 'n'
            # print parsed_output['source-address-list'][loc]['hang']
            excel_dict_create(source, 'source-address-list', 'success')
        except Exception as e:
            print "Failed for ", source
            print "Exception", str(e)

    combined_dict = {}

    for rule in parsed_output['dns rule']:
        combined_dict[rule['dns rule']] = {}

    total_iteration = len(combined_dict.keys())
    iteration = 1
    parsing_failed_count = 0

    for keys in combined_dict:
        # doing some visual
        msg = 'Converting Rule [ ' + \
            str(parsed_output['dns rule'][0]['dns rule']) + ']'
        printProgressBar(iteration, total_iteration, msg,
                         prefix='Progress', suffix='')
        iteration += 1

        for dns in parsed_output['dns rule']:
            dns_rule_name = dns['dns rule']
            loc = find_location(parsed_output['dns rule'], dns['dns rule'],
                                'dns rule')
            parsed_output['dns rule'][loc]['hang'] = 'n'

            if keys == dns['dns rule']:
                combined_dict[keys] = dns

                # for adding domain-list
                for domain in parsed_output['domain-list']:
                    if domain['domain-list'] == \
                            combined_dict[keys]['domain-list']:
                        loc = find_location(parsed_output['domain-list'],
                                            domain['domain-list'],
                                            'domain-list')
                        parsed_output['domain-list'][loc]['hang'] = 'n'
                        combined_dict[keys].update(domain)
                        # updating the excel sheet
                        excel_dict_create(domain, 'domain', 'success',
                                          dns_rule_name)

                # for adding answer-group
                # fix for clause erroring out in large files
                try:
                    for index, clause in enumerate(dns['clause']):
                        for group in parsed_output['answer-group']:
                            # print group
                            if group['answer-group'] == clause['vip-group']:
                                loc = find_location(
                                    parsed_output['answer-group'],
                                    group['answer-group'],
                                    'answer-group')
                                parsed_output['answer-group'][loc]['hang'] \
                                    = 'n'
                                combined_dict[keys]['clause'][index].\
                                    update(group)
                                # updating the excel dict
                                excel_dict_create(group, 'answer', 'success',
                                                  dns_rule_name)
                    excel_dict_create(dns, 'dns', 'success', dns_rule_name)
                except:
                    # updating the excel dict
                    parsing_failed_count += 1
                    excel_dict_create(dns, 'dns', 'skip', dns_rule_name)
                    LOG.debug("Parsing Failed for %s" % (dns))

                # for addign source address list
                for source in parsed_output['source-address-list']:
                    if source['source-address-list'] == \
                            combined_dict[keys]['source-address-list']:
                        loc = find_location(
                            parsed_output['source-address-list'],
                            source['source-address-list'],
                            'source-address-list')
                        parsed_output['source-address-list'][loc]['hang'] = 'n'
                        excel_dict_create(source, 'source-address-list',
                                          'success', dns_rule_name)
                        combined_dict[keys].update(source)

    combined_dict_temp = copy.deepcopy(combined_dict)

    no_member_count = 0

    # kicking out memeber out when they don't have any clause or domains
    for key in combined_dict:
        flag = 0
        if len(combined_dict[key].get('clause', [])) < 1:
            LOG.warning('%s of key %s is not having members' %
                        (combined_dict[key], key))
            no_member_count += 1
            excel_dict_create(combined_dict[key], 'dns rule', 'no member')
            del combined_dict_temp[key]
        elif len(combined_dict[key].get('domain', [])) < 1:
            LOG.warning('%s of key %s is not having domains' %
                        (combined_dict[key], key))
            no_member_count += 1
            excel_dict_create(combined_dict[key], 'dns rule', 'no domain')
            del combined_dict_temp[key]
        elif len(combined_dict[key].get('clause', [])) >= 1:
            for key1 in combined_dict[key]['clause']:
                if len(key1.get('answer-add', [])) < 1:
                    flag = 1
            if flag == 1:
                no_member_count += 1
                excel_dict_create(combined_dict[key], 'dns rule', 'no domain')
                del combined_dict_temp[key]

    # for updating hanged
    hang_count = 0
    for key in parsed_output:
        for val in parsed_output[key]:
            if val['hang'] == 'y':
                if (val.get(key, [])):
                    excel_dict_create(val, key, 'hang')
                    LOG.warning('%s of type %s is hanging' % (val[key], key))
                else:
                    LOG.warning('%s of no type is hanging ' % (key))
                hang_count += 1
    set_total_stats('hang', hang_count)
    set_total_stats('no_member', no_member_count)

    # fix for multiple az
    combined_dict_temp = remove_multiple_az(combined_dict_temp, combined_dict)

    # Temp fix for priority duplicate value
    # Assigning random priority to avoid conflict
    for key in combined_dict_temp:
        temp_priority = 0
        for row_num, row_val in enumerate(combined_dict_temp[key]['clause']):
            temp_priority += 1
            combined_dict_temp[key]['clause'][row_num]['clause'] = temp_priority

    # Fix for duplicate members on same answer-group
    # Deleting duplicate members
    key = None
    combined_dict = copy.deepcopy(combined_dict_temp)
    for key in combined_dict:
        temp_list = []
        kill = 0
        for val in combined_dict[key]['clause']:
            if val['vip-group'] in temp_list:
                kill = 1
                break
            else:
                temp_list.append(val['vip-group'])
        if kill == 1:
            del combined_dict_temp[key]

    LOG.info('Convertor completed')
    return combined_dict_temp