-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdomiflist.py
More file actions
75 lines (56 loc) · 2.09 KB
/
domiflist.py
File metadata and controls
75 lines (56 loc) · 2.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import sys
import argparse
import importlib
import libvirt
import pprint
import xml.etree.ElementTree as ET
import virpy
import virpy.classes
import virpy.utils
'''
https://libvirt.org/html/
https://libvirt.org/html/libvirt-libvirt-interface.html
python -c 'import libvirt; help(libvirt)'
'''
def create_handler(parser):
parser.add_argument('domain')
#parser.add_argument('--inactive')
return DomiflistCommand()
class DomiflistCommand(virpy.classes.Command):
def run(self, conn, args):
obj = virpy.utils.lookupDomain(conn, args.domain)
#pprint.pprint(dir(obj))
xmlRoot = ET.fromstring(obj.XMLDesc())
def attrval(xmlObj, tag, key):
tagObj = xmlObj.find(tag)
if tagObj is None:
return None
return tagObj.attrib.get(key)
data = []
for iface in xmlRoot.findall('devices/interface'):
rec = {
'interface': attrval(iface, 'target', 'dev'),
'type': iface.attrib['type'],
'source': attrval(iface, 'source', 'network'),
'model': attrval(iface, 'model', 'type'),
'mac': attrval(iface, 'mac', 'address'),
}
if rec['source'] is None:
rec['source_bridge'] = attrval(iface, 'source', 'bridge')
rec['vlan_trunk'] = attrval(iface, 'vlan', 'trunk')
if rec['vlan_trunk'] is None:
rec['vlan_trunk'] = 'no'
else:
rec['vlans'] = []
for vlan in iface.iter('vlan'):
for tag in vlan.iter('tag'):
vlan_rec = {}
vlan_rec['id'] = tag.attrib['id']
if tag.attrib.get('nativeMode') is not None:
vlan_rec['nativeMode'] = tag.attrib.get('nativeMode')
rec['vlans'].append(vlan_rec)
for virtualport in iface.iter('virtualport'):
rec['virtualport'] = attrval(virtualport, 'parameters', 'interfaceid')
data.append(rec)
return data
# EOF