def _check_host(self): # print '_check_host' # 这是能从openstack 平台获取的信息 # 检查每一台主机的服务状态 host_data = nova.host_data() for item in host_data['services']: # 处理状态对比数据库信息 self._check_db(item)
def __init__(self): self.host_data = nova.host_data()
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)