千家信息网

运维开发里的数据动态获取和自动补录

发表于:2024-10-21 作者:千家信息网编辑
千家信息网最后更新 2024年10月21日,vm_info_dict = virtual_machine_info.objects.get(ip=vm_ip_addr) print(vm_info_dict) if vm_info_dict !
千家信息网最后更新 2024年10月21日运维开发里的数据动态获取和自动补录vm_info_dict = virtual_machine_info.objects.get(ip=vm_ip_addr) print(vm_info_dict) if vm_info_dict != None: physical_server_ip = vm_info_dict.hostip device_info_dict = physical_server_info.objects.get(ip=physical_server_ip) phy_contain_vms = virtual_machine_info.objects.filter(hostip=physical_server_ip) else: token = gettoken('xxxxx', 'xxxxx') vm_info_dict=getresponse('https://xxxxx/API/v1/GetServerInfo/'+vm_ip_addr, token) physical_server_ip = vm_info_dict.get("hostip") print(physical_server_ip) device_info_dict=getresponse('https://xxxxxx/API/v1/GetDeviceInfo/'+physical_server_ip, token)

整体的思路就是通过Django API获取虚拟机信息,如果不存在就通过API去访问获取。

这个问题看起来比较奇怪,按照错误的思路,应该是在exception的异常捕获部门来处理,这么做确实是可以的,但是如果要扩展逻辑,异常处理的逻辑就会越来越重,感觉怪怪的。

所以反复测试,也算是明白了,使用get的方式去获取数据,如果获取不到就会抛错,个人感觉这个接口还是不太友好,可以换一种方式,比如filter来实现,因为从表结构能够定位到这是一个主键或者唯一性索引。

所以代码的部分根据count的方式来做了调整,然后在这个基础上又做了改进,即如果在本地的数据库中不存在,则访问接口得到数据库,把数据库下沉到本地,整个过程对于我们使用是透明的,也算是一种比较友好的交互方式。

vm_info_dict_exists = virtual_machine_info.objects.filter(ip=vm_ip_addr).count() if vm_info_dict_exists >= 1:vm_info_dict = virtual_machine_info.objects.get(ip=vm_ip_addr) print(vm_info_dict) physical_server_ip = vm_info_dict.hostip device_info_dict = physical_server_info.objects.get(ip=physical_server_ip)phy_contain_vms = virtual_machine_info.objects.filter(hostip=physical_server_ip)return_dict["device_info_dict"] = device_info_dictreturn_dict["vm_info_dict"] = vm_info_dictreturn_dict["phy_contain_vms"] = phy_contain_vms else:token = gettoken('xxxx', 'xxxxxx')vm_info_dict = getresponse('https://xxxxxx/API/v1/GetServerInfo/' + vm_ip_addr, token)physical_server_ip = vm_info_dict.get("hostip") print(physical_server_ip) device_info_dict = getresponse('https://xxxxxxxAPI/v1/GetDeviceInfo/' + physical_server_ip, token)return_dict["device_info_dict"] = device_info_dictreturn_dict["vm_info_dict"] = vm_info_dictvm_info = virtual_machine_info()......vm_info.memo = vm_info_dict.get("memo")vm_info.save()phy_exists = physical_server_info.objects.filter(ip=vm_info.hostip).count() if phy_exists == 0:phy_info = physical_server_info()phy_exists = physical_server_info.objects.filter(ip=vm_info.hostip).count() if phy_exists == 0:phy_info = physical_server_info()phy_info.update_date = device_info_dict.get("update_date")......phy_info.memo = device_info_dict.get("memo")phy_info.save()phy_contain_vms = virtual_machine_info.objects.filter(hostip=vm_info.hostip)return_dict["phy_contain_vms"] = phy_contain_vms

后续准备对这些信息做更进一步的改进,能够实现元数据的增量刷新,即数据发生变化的时候我会调用接口刷新数据到本地,否则还是保持不变。

0