56 lines
1.3 KiB
Python
56 lines
1.3 KiB
Python
from pprint import pprint
|
|
|
|
from config import 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('nic', []):
|
|
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/parsed_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').get('PORT'))
|
|
|
|
# Get all disks attached with VM
|
|
pprint(vms.get(VM_ID).get('disk'))
|
|
|
|
# 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()
|