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
|
#!/usr/bin/python3
#coding: UTF-8
import optparse
import os
from shared import *
# vars
iscsiTargetIp='10.0.0.1'
iscsiDate='2011-04'
defaultImage='/root/vserver-template-v2.tar.bz2'
# configure known options
usage = "usage: %prog VMNAME IP [options]"
parser = optparse.OptionParser(usage=usage)
parser.add_option("-s", "--size", dest="size", default=defaultDiskSize,
help="SIZE of vm root disk", metavar="SIZE")
parser.add_option("-v", "--verbose", dest="verbose",
action="store_true", default=False,
help="should I do output")
(options, args) = parser.parse_args()
# check if required args are given
if len(args) < 1:
parser.print_usage()
logErr("a vm-name must be given!")
sys.exit(2)
elif len(args) > 1:
parser.print_usage()
logErr("to many arguments given!")
sys.exit(2)
vmName = parseVmName(args[0])
ip, ipLastBlock = parseIp(args[1])
iscsiLunId = 'iqn.' + iscsiDate + '.de.spline:' + vmName
vmConfigDir = '/tmp/etc/vservers/' + vmName
pl = ProgressLogger(9)
lf = openLogFile(sys.argv[0] + "-" + vmName)
cmds = [
[ 'iscsiadm', '-m', 'discovery', '-t', 'st', '-p', iscsiTargetIp ],
# maybe i schould grep if, the device was in the output
# 10.0.0.1:3260,1 iqn.2011-04.de.spline:<name>
[ 'iscsiadm', '-m', 'node', '-T', iscsiLunId, iscsiTargetIp, '--login' ],
[ 'mkdir', '/vservers/' + vmName ],
[ 'mount', '/dev/disk/by-label/' + vmName, '/vservers/' + vmName +],
[ 'vserver', vmName, 'build',
'-m', 'template',
'--interface', 'eth0:' + ip + '/25',
'--initstyle', 'sysv',
'--context', str(ipLastBlock)
'--hostname', vmName,
'--',
'--template', defaultImage,
'-d', 'debian' ],
[ 'umount', '/vservers/' + vmName ],
[ 'vserver', vmName, 'start' ]
]
pl.start('discover iscsi luns')
execute(cmds[0],lf)
pl.done()
pl.start('log in to iscsi lun ' + iscsiTargetIp)
execute(cmds[1],lf)
pl.done()
pl.start('create vserver folder')
execute(cmds[2],lf)
pl.done()
pl.start('create vserver ( this may take some time)')
execute(cmds[3],lf)
pl.done()
def writeFile(path,content):
try:
fd = os.open(path)
os.write(fd,content)
os.close(fd)
expect:
pl.start('configure iscsi lun for vm')
# iscsi meta-daten im vserver-etc verzeichnis hinzufuegen
os.mkdir(vmConfigDir + '/iscsi/')
writeFile(vmConfigDir + '/iscsi/portal',iscsiTargetIp + '\n')
writeFile(vmConfigDir + '/iscsi/target',iscsiLunId + '\n')
pl.done()
pl.start('configure fstab')
# die dem vserver zugehörige disk erstmal unmounten und dann in die fstab des vservers einfuegen, damit
# sie beim starten benutzt wird
with open(vmConfigDir + '/fstab', 'rw') as fstab:
fstab.writelines(['/dev/disk/by-label/ ' + vmName + ' / ext4 defaults,relatime 0 1'] + fstab.readlines())
fstab.close()
pl.done()
pl.start('configure ipv6 address')
# ipv6 adresse muss noch manuell hinzugefuegt werden, die ipv4 wurde durch --interface beim vserver build erstellt
# vermutlich ist das eine dmz maschine, daher der prefix BABE
os.mkdir(vmConfigDir + '/interfaces/1')
writeFile(vmConfigDir + '/interfaces/1/prefix', '64\n')
writeFile(vmConfigDir + '/interfaces/1/dev', 'eth0\n')
pl.done()
pl.start('configure marks')
# neue (2011-04) vserver-utils mit "mark" benutzen, damit zB automatisch distributions-spezifische updates gefahren
# werden können - falls das nicht gewuenschst ist, koennen 2. und 3. übersprungen werden
os.mkdir(vmConfigDir + '/apps/init')
writeFile(vmConfigDir + '/apps/init/mark', 'pang\ndebian\nauto-update\n')
pl.done()
pl.start('umount disk')
execute(cmds[4],lf)
pl.done()
pl.start('start vserver')
execute(cmds[5],lf)
pl.done()
logInfo("your vserver is up and running!")
logInfo("you might enter it by: vserver " + vmName + ' enter')
sys.exit(0)
|