OSDN Git Service

apply autopep8
[ti2/ti2.git] / linkpair / collect / agent / libvirt_agent.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 #
4
5 __version__ = '1.1'
6
7 import re
8 import libvirt
9 from linkpair.device import Device
10 from linkpair.port import Port
11 from linkpair.collect.agent.base_agent import BaseAgent
12
13
14 class LibvirtAgent(BaseAgent):
15     '''
16     Libvirt Collector Agent
17     '''
18
19     def run(self):
20         self.pick_libvirt_configuration()
21
22     def pick_libvirt_configuration(self):
23         virt_conn = self.get_libvirt_conn()
24         for id in virt_conn.listDomainsID():
25             vm = virt_conn.lookupByID(id)
26             vmXMLDesc = minidom.parseString(vm.XMLDesc(0))
27             for iface in vmXMLDesc.getElementsByTagName("interface"):
28                 [device, bridge] = self.pick_libvirt_iface_configuration(iface)
29                 mac = iface.getElementsByTagName(
30                     "mac")[0].getAttribute("address")
31                 device = iface.getElementsByTagName(
32                     "target")[0].getAttribute("dev")
33                 bridge = self.regist_to_port2br(device, bridge)
34                 self._cu.add_linkpair(
35                     Device(str(vm.name()), Device.VM_TYPE),
36                     Device(bridge, Device.BR_TYPE),
37                     Port(device),
38                     Port(""))
39
40     def pick_libvirt_iface_configuration(self, iface):
41         ifaceType = iface.getAttribute("type")
42         bridge = ""
43         device = ""
44         if ifaceType == "network":
45             network = iface.getElementsByTagName(
46                 "source")[0].getAttribute("network")
47             netXMLDesc = minidom.parseString(
48                 virt_conn.networkLookupByName(network).XMLDesc(0))
49             bridge = netXMLDesc.getElementsByTagName(
50                 "bridge")[0].getAttribute("name")
51         elif ifaceType == "bridge":
52             bridge = iface.getElementsByTagName(
53                 "source")[0].getAttribute("bridge")
54         return [device, bridge]
55
56     def get_libvirt_conn(self):
57         if self._remote_desc is not None:
58             conn = libvirt.open("qemu+ssh://" + self._remote_desc + "/system")
59         else:
60             conn = libvirt.open("qemu:///system")
61         return conn