예제 #1
0
 def test_cc_get_inner_ip_by_module_id(self):
     mock_get_client_by_user.success = True
     self.assertEqual(
         utils.cc_get_inner_ip_by_module_id(username='******',
                                            biz_cc_id=789,
                                            module_id_list=[]),
         [{
             'host': {
                 'bk_host_innerip': '1.0.0.1',
                 'bk_host_outerip': '1.0.0.1',
                 'bk_host_name': '1.0.0.1',
                 'bk_host_id': 1,
                 'bk_cloud_id': {
                     'bk_obj_name': '',
                     'id': '0',
                     'bk_obj_id': 'plat',
                     'bk_obj_icon': '',
                     'bk_inst_id': 0,
                     'bk_inst_name': 'default area'
                 }
             },
             'module': [{
                 'bk_module_id': 2,
                 'bk_module_name': 'test2'
             }]
         }])
     mock_get_client_by_user.success = False
     self.assertEqual(
         utils.cc_get_inner_ip_by_module_id(username='******',
                                            biz_cc_id=789,
                                            module_id_list=[]), [])
예제 #2
0
def cc_format_module_hosts(username, biz_cc_id, module_id_list,
                           supplier_account):
    module_host_list = cc_get_inner_ip_by_module_id(username, biz_cc_id,
                                                    module_id_list,
                                                    supplier_account)
    module_host_dict = {}
    for item in module_host_list:
        for module in item['module']:
            if module_host_dict.get('module_%s' % module['bk_module_id']):
                module_host_dict['module_%s' % module['bk_module_id']].append({
                    'id':
                    '%s_%s' %
                    (module['bk_module_id'], item['host']['bk_host_innerip']),
                    'label':
                    item['host']['bk_host_innerip']
                })
            else:
                module_host_dict['module_%s' % module['bk_module_id']] = [{
                    'id':
                    '%s_%s' %
                    (module['bk_module_id'], item['host']['bk_host_innerip']),
                    'label':
                    item['host']['bk_host_innerip']
                }]
    return module_host_dict
예제 #3
0
    def get_value(self):
        var_ip_picker = self.value
        username = self.pipeline_data['executor']
        project_id = self.pipeline_data['project_id']
        project = Project.objects.get(id=project_id)
        bk_biz_id = project.bk_biz_id if project.from_cmdb else ''
        bk_supplier_account = supplier_account_for_project(project_id)

        produce_method = var_ip_picker['var_ip_method']
        if produce_method == 'custom':
            custom_value = var_ip_picker['var_ip_custom_value']
            data = cc_get_ips_info_by_str(username, bk_biz_id, custom_value)
            ip_list = data['ip_result']
            data = ','.join([ip['InnerIP'] for ip in ip_list])
        else:
            ip_pattern = re.compile(ip_re)
            module_id_list = var_ip_picker['var_ip_tree']
            module_inst_id_list = []
            tree_ip_list = []
            for custom_id in module_id_list:
                try:
                    ip_or_module_id = custom_id.split('_')[-1]
                    if ip_pattern.match(ip_or_module_id):
                        # select certain ip
                        tree_ip_list.append(ip_or_module_id)
                    else:
                        # select whole module
                        module_inst_id_list.append(int(ip_or_module_id))
                except Exception:
                    logger.warning(
                        'ip_picker module ip transit failed: {origin}'.format(
                            origin=custom_id))

            # query cc to get module's ip list and filter tree_ip_list
            host_list = cc_get_inner_ip_by_module_id(username, bk_biz_id,
                                                     module_inst_id_list,
                                                     bk_supplier_account)
            cc_ip_list = cc_get_ips_info_by_str(
                username, bk_biz_id, ','.join(tree_ip_list))['ip_result']
            select_ip = set()

            for host_info in host_list:
                select_ip.add(host_info['host']['bk_host_innerip'])

            for ip_info in cc_ip_list:
                select_ip.add(ip_info['InnerIP'])

            data = ','.join(list(set(select_ip)))

        return data