#!/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("-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) < 2: parser.print_usage() logErr("a vm-name and ip must be given!") sys.exit(2) elif len(args) > 2: 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:' vmConfigDir = '/etc/vservers/' + vmName exe = Executor([ ExecRecepie('discover iscsi luns', [ 'iscsiadm', '-m', 'discovery', '-t', 'st', '-p', iscsiTargetIp ]), ExecRecepie('log in to iscsi lun ' + iscsiTargetIp, [ 'iscsiadm', '-m', 'node', '-T', iscsiLunId, iscsiTargetIp, '--login' ]), # maybe i schould grep if, the device was in the output # 10.0.0.1:3260,1 iqn.2011-04.de.spline: ExecRecepie('create vserver folder', [ 'mkdir', '/vservers/' + vmName ]), ExecRecepie('mount vserver directory', [ 'mount', '/dev/disk/by-label/' + vmName, '/vservers/' + vmName]), ExecRecepie('create vserver ( this may take some time)', [ 'vserver', vmName, 'build', '-m', 'template', '--interface', 'eth0:' + ip + '/25', '--initstyle', 'sysv', '--context', str(ipLastBlock), '--hostname', vmName, '--', '--template', defaultImage, '-d', 'debian' ]), # iscsi meta-daten im vserver-etc verzeichnis hinzufuegen ConfigRecepie('configure iscsi lun for vm', vmConfigDir + '/iscsi', { 'portal' : iscsiTargetIp + '\n', 'target' : iscsiLunId + '\n' }), FstabRecepie('configure fstab', vmConfigDir + '/fstab','/dev/disk/by-label/ ' + vmName), # die dem vserver zugehörige disk erstmal unmounten und dann in die fstab des vservers einfuegen, damit # sie beim starten benutzt wird ConfigRecepie('configure ipv6 address', vmConfigDir + '/interfaces/1', { 'ip' : '2001:6f8:1c3c:babe::' + str(ipLastBlock) +':1', 'prefix': '64\n', 'dev': 'eth0\n' }), # 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 ConfigRecepie('configure marks', vmConfigDir + '/apps/init', { 'mark' : 'pang\ndebian\nauto-update\n'}), ExecRecepie('umount disk', [ 'umount', '/vservers/' + vmName ]), ExecRecepie('start vserver', [ 'vserver', vmName, 'start' ]) ]) exe.do() logInfo("your vserver is up and running!") logInfo("you might enter it by: vserver " + vmName + ' enter') sys.exit(0)