from pprint import pprint from config import config, etcd_client def get_vm_by_ip(vms, ip, status='active'): vms_by_status = { vm_id: vm for vm_id, vm in vms.items() if vm['status'] == status } for vm_id, vm in vms_by_status.items(): vm_ips = [] for nic in vm.get('nics', []): global_ipv6 = nic.get('IP6_GLOBAL', None) local_ipv6 = nic.get('IP6_LINK', None) ipv4 = nic.get('IP', None) vm_ips += [global_ipv6, local_ipv6, ipv4] if ip in vm_ips: return {vm_id: vm} return None def main(): vm_prefix = '/opennebula/vm/' vms = { int(vm.key.split('/')[-1]): vm.value for vm in etcd_client.get_prefix(vm_prefix) } VM_ID = 10761 # One of nico's VM # Get all data related to a VM pprint(vms.get(VM_ID)) # Get host of a VM print(vms.get(VM_ID).get('host').get('name')) # Get VNC Port of a VM print(vms.get(VM_ID).get('graphics')[0].get('PORT')) # Get all disks attached with VM pprint(vms.get(VM_ID).get('disks')) # Who is owner of a VM? print(vms.get(VM_ID).get('owner').get('name')) # Get VM who has 2a0a:e5c0:0:5:0:78ff:fe11:d75f search_ungleich_ch = get_vm_by_ip(vms, '2a0a:e5c0:0:5:0:78ff:fe11:d75f') pprint(search_ungleich_ch) if __name__ == '__main__': main()