-
Notifications
You must be signed in to change notification settings - Fork 0
/
automatisation.py
157 lines (133 loc) · 3.15 KB
/
automatisation.py
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
import libvirt as lv
import sys
import time
import subprocess as p
import argparse
def usage():
print('usage : vmtool --function [optional] <arguments>')
print("--startall : Start all virtual machines and network,then connect by ssh\
\n--stopall : Stop all running virtual network and machines\
\n--stop or --start <domain_names> [one or more separated by space] , kill or run domain")
try:
arg = sys.argv[1]
except:
usage()
#return ip adresses of active vm in the bridge <net>
def fetch_adress(net):
connec = -1
adresses = []
while connec ==-1:
arp = str(p.check_output("arp -e", shell=True))
connec = arp.rfind(net)
res = str(arp).split("\\n")
for line in res:
if line.rfind(net) > -1:
adresses.append(line[0:16].rstrip())
return(adresses)
def netstart(netname):
network = conn.networkLookupByName(netname)
if network.isActive():
print("/!\\",netname,"already active")
return 0
network.create()
if network.isActive():
print("[+] ",netname," is on")
return network.bridgeName()
else:
print("network")
def netstop(netname):
try:
network = conn.networkLookupByName(netname)
except:
print("no virtual network named ",netname)
return
if network.isActive():
network.destroy()
print("[-] ",netname,"destroyed")
else:
print(" Network already off")
def vmstart(vmname):
try:
vm = conn.lookupByName(vmname)
except:
return
if vm.isActive():
print('/!\\',vmname,'is already running')
return 0
else:
vm.create()
if vm.isActive():
print("[+] ",vmname,' started')
def vmstop(vmname):
try:
vm = conn.lookupByName(vmname)
except:
return
if vm.isActive():
vm.destroy()
print("[-] ",vmname,"turned off")
else:
print("/!\\ ",vmname," is already off")
def startall():
global conn
bridge = netstart('vnet2')
domainNames = conn.listDefinedDomains()
if len(domainNames) == 0:
print('All Vm already are in running status')
for vm in domainNames:
n = vmstart(vm)
n_vm = len(domainNames)
adresses = []
while len(adresses) != n_vm:
adresses = fetch_adress(bridge)
for rhost in adresses:
print("connecting to ",rhost)
p.Popen("gnome-terminal -- ssh root@"+rhost,stdout=p.PIPE,stderr=None,shell=True)
#+" \'./run\'"
def stopall():
netstop('vnet2')
vmstop('debian2')
vmstop('debian1')
def listactive():
global conn
domainNames=[]
domainIDs = conn.listDomainsID()
if domainIDs == None:
print('Failed to get a list of domain IDs',file = sys.stderr)
if len(domainIDs) != 0:
for domainID in domainIDs:
domain = conn.lookupByID(domainID)
domainNames.append(domain.name())
if len(domainNames) == 0:
print("No active domain")
else:
for vm_name in domainNames:
print(" ",vm_name)
conn = lv.open('qemu:///system')
if conn == None :
print("failed to connect to qemu")
sys.exit()
if len (sys.argv)==2:
if arg == "--startall":
startall()
print("\n")
elif arg == "--stopall":
stopall()
elif arg == "--listactive":
listactive()
else:
usage()
if len(sys.argv)>=3:
try:
arg = sys.argv[2:]
except:
print("error")
sys.exit()
if sys.argv[1]=="--stop":
for vm in arg:
vmstop(vm)
elif sys.argv[1]=="--start":
for vm in arg:
vmstart(vm)
else:
usage()