コード例 #1
0
ファイル: nova.py プロジェクト: zhaogaolong/oneFinger
 def _check_host(self):
     # print '_check_host'
     # 这是能从openstack 平台获取的信息
     # 检查每一台主机的服务状态
     host_data = nova.host_data()
     for item in host_data['services']:
         # 处理状态对比数据库信息
         self._check_db(item)
コード例 #2
0
ファイル: nova.py プロジェクト: zhaogaolong/oneFinger
 def __init__(self):
     self.host_data = nova.host_data()
コード例 #3
0
    def add_nova_host(self):
        # data = nova_hosts.host_list()

        data = nova_hosts.host_data()
        # 创建主机列表
        host_list = []

        # 创建主机db对象列表
        host_db_list = {}
        for item in data['services']:
            if item['host'] in host_list:
                continue
            else:
                host_list.append(item['host'])
                host_db_list[item['host']] = asset_models.Host.objects.get(hostname=item['host'])

        # pdb.set_trace()
        # 定义角色的服务,稍后根据不同规划不同的角色
        manager_binary = ['nova-consoleauth', 'nova-scheduler', 'nova-conductor', 'nova-cert']
        compute_binary = ['nova-compute']

        nova_manager_obj = openstack_models.NovaManagerServiceStatus()

        # 开始分类啦
        # print data['services']
        manager_db_dic = {}
        compute_db_dic = {}
        for item in data['services']:
            if item['binary'] in manager_binary:
                if openstack_models.NovaManagerServiceStatus.objects.filter(
                        host_id=host_db_list[item['host']].id):
                    # 判断该记录是否存在,如果存在就继续下次循环
                    continue
                if not item['host'] in manager_db_dic:
                    # 监测该主机名是否在字典中,如果没有添加该主机,添加一个ForeignKey的host_id
                    manager_db_dic[item['host']] = {}
                    manager_db_dic[item['host']]['host_id'] = host_db_list[item['host']].id
                binary_name_status = '%s_status' % '_'.join(item['binary'].split('-'))
                binary_enabled = 'enabled_%s' % '_'.join(item['binary'].split('-'))
                # print binary_name_status
                # print binary_enabled

                if item['status'] == 'enabled':
                    # 数据库中存储的是布尔值
                    binary_enabled_status = 1
                else:
                    # 数据库中存储的是布尔值
                    binary_enabled_status = 0
                manager_db_dic[item['host']][binary_name_status] = item['state']
                manager_db_dic[item['host']][binary_enabled] = binary_enabled_status

                # print binary_name_status, type(binary_name_status)
                # print binary_enabled, type(binary_enabled)
                # print 'start if hostname: %s' % item['host']

            elif item['binary'] in compute_binary:
                if openstack_models.NovaComputeServiceStatus.objects.filter(
                        host_id=host_db_list[item['host']].id):
                    continue
                if not item['host'] in compute_db_dic:
                    compute_db_dic[item['host']] = {}
                    compute_db_dic[item['host']]['host_id'] = host_db_list[item['host']].id

                binary_name_status = '%s_status' % '_'.join(item['binary'].split('-'))
                binary_enabled = 'enabled_%s' % '_'.join(item['binary'].split('-'))
                # print binary_name_status, type(binary_name_status)
                # print binary_enabled, type(binary_enabled)
                if item['status'] == 'enabled':
                    binary_enabled_status = 1
                else:
                    binary_enabled_status = 0
                # pdb.set_trace()
                compute_db_dic[item['host']][binary_name_status] = item['state']
                compute_db_dic[item['host']][binary_enabled] = binary_enabled_status

        # print manager_db_dic
        # print 'compute_db_dic', compute_db_dic


        if not asset_models.Group.objects.filter(name='Manager'):
            asset_models.Group.objects.create(name='Manager',
                                              remark='Openstack Manager Group'
                                              )

        if not asset_models.Group.objects.filter(name='Compute'):
            asset_models.Group.objects.create(name='Compute',
                                              remark='Openstack Compute Group'
                                              )


        # 把数据存储到数据库中
        for k, v in manager_db_dic.items():
            print 'k--->', k
            print 'v--->', v
            if not openstack_models.NovaManagerServiceStatus.objects.filter(
                    host_id=asset_models.Host.objects.get(hostname=k).id):

                # 把数据存储到数据库中
                openstack_models.NovaManagerServiceStatus.objects.create(**v)

                # 把主机添加相应的组中
                group_obj = asset_models.Group.objects.get(name='Manager')
                manager_obj = asset_models.Host.objects.get(hostname=k)
                manager_obj.host_group.add(group_obj)
                manager_obj.save()
                content = 'Add Nova Manager %s ' % k
                event_nova.nova_info(k, content)

        log_info = 'Add Nova Compute Service to DB %s IP'
        log.info(log_info)

        # print(compute_db_dic)
        for k, v in compute_db_dic.items():
            # print k
            # print v
            if not openstack_models.NovaComputeServiceStatus.objects.filter(
                    host_id=asset_models.Host.objects.get(hostname=k).id):
                openstack_models.NovaComputeServiceStatus.objects.create(**v)

                group_obj = asset_models.Group.objects.get(name='Compute')
                compute_obj = asset_models.Host.objects.get(hostname=k)
                compute_obj.host_group.add(group_obj)
                compute_obj.save()

                # 触发事件日志
                content = 'Add Nova Compute %s ' % k
                event_nova.nova_info(k, content)

                # openstack_models.Host.objects.update_or_create(
                #     host_group_id=openstack_models.Group.objects.get(name='Compute').id)


        log_info = 'Add Nova Compute Service to DB %s IP'
        log.info(log_info)