]> git.ipfire.org Git - people/ms/nitsi.git/blame - src/nitsi/virtual_environ.py
Format the name in the log file always with the same length
[people/ms/nitsi.git] / src / nitsi / virtual_environ.py
CommitLineData
ab759374
JS
1#!/usr/bin/python3
2
2fa4467d 3from nitsi.machine import machine
ab759374 4
2fa4467d 5from nitsi.network import network
ab759374
JS
6
7import os
8import configparser
7005787e 9import libvirt
1ed8ca9f
JS
10import logging
11
12logger = logging.getLogger("nitsi.virtual_environ")
ab759374
JS
13
14# Should return all vms and networks in a list
15# and should provide the path to the necessary xml files
16class virtual_environ():
17 def __init__(self, path):
1ed8ca9f 18 self.log = logger.getChild(os.path.basename(os.path.abspath(path)))
ab759374
JS
19 try:
20 self.path = os.path.abspath(path)
21 except BaseException as e:
22 self.log.error("Could not get absolute path")
23
24 self.log.debug(self.path)
25
26 self.settings_file = "{}/settings".format(self.path)
27 if not os.path.isfile(self.settings_file):
28 self.log.error("No such file: {}".format(self.settings_file))
29
30 self.log.debug(self.settings_file)
31 self.config = configparser.ConfigParser()
32 self.config.read(self.settings_file)
33 self.name = self.config["DEFAULT"]["name"]
34 self.machines_string = self.config["DEFAULT"]["machines"]
35 self.networks_string = self.config["DEFAULT"]["networks"]
36
37 self.machines = []
38 for machine in self.machines_string.split(","):
39 self.machines.append(machine.strip())
40
41 self.networks = []
42 for network in self.networks_string.split(","):
43 self.networks.append(network.strip())
44
45 self.log.debug(self.machines)
46 self.log.debug(self.networks)
47
fc35cba1
JS
48 # Number of characters of the longest machine name
49 self._longest_machine_name = 0
50
7005787e
JS
51 self.uri = self.config["DEFAULT"]["uri"]
52
53 try:
54 self.con = libvirt.open(self.uri)
55 except BaseException as error:
56 self.log.error("Could not connect to: {}".format(self.uri))
57
58 self.log.debug("Connected to: {}".format(self.uri))
59
ab759374
JS
60 def get_networks(self):
61 networks = {}
62 for _network in self.networks:
63 self.log.debug(_network)
7005787e 64 networks.setdefault(_network, network(self.con, os.path.normpath(self.path + "/" + self.config[_network]["xml_file"])))
ab759374
JS
65 return networks
66
67 def get_machines(self):
68 machines = {}
69 for _machine in self.machines:
70 self.log.debug(_machine)
71 machines.setdefault(_machine, machine(
7005787e 72 self.con,
ab759374
JS
73 os.path.normpath(self.path + "/" + self.config[_machine]["xml_file"]),
74 os.path.normpath(self.path + "/" + self.config[_machine]["snapshot_xml_file"]),
75 self.config[_machine]["image"],
76 self.config[_machine]["root_uid"],
77 self.config[_machine]["username"],
78 self.config[_machine]["password"]))
79
80 return machines
81
82 @property
83 def machine_names(self):
84 return self.machines
85
86 @property
87 def network_names(self):
fc35cba1
JS
88 return self.networks
89
90 @property
91 def longest_machine_name(self):
92 if self._longest_machine_name:
93 return self._longest_machine_name
94 else:
95 for _machine in self.machines:
96 if len(_machine) > self._longest_machine_name:
97 self._longest_machine_name = len(_machine)
98
99 return self._longest_machine_name