X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=scripts%2Fvserver_tools.py;h=be6e1c015e4ea110331784f40735f7288cf3373e;hb=c3942375b1e54b01f7bdc158bfda5447811caca0;hp=d1a8c830b3537bcb46682b6a1647225879822816;hpb=fb752dbac8f142946657f8c1c264776f61df5c20;p=infrastructure.git diff --git a/scripts/vserver_tools.py b/scripts/vserver_tools.py index d1a8c83..be6e1c0 100755 --- a/scripts/vserver_tools.py +++ b/scripts/vserver_tools.py @@ -1,7 +1,5 @@ #!/usr/bin/python # -# $Id$ -# $URL$ import sys import os.path @@ -186,16 +184,16 @@ class Ssh (Shell): class Vserver: def __init__ (self, name, dry_run=False,verbose=False): - try: - (self.name,self.hostname)=name.split("@") - except: - (self.name,self.hostname)=(name,'localhost') self.dry_run=dry_run self.verbose=verbose self._running_state=None self._xid=None self._autostart=None - self.set_hostname(self.hostname) + try: + (self.name,hostname)=name.split("@") + except: + (self.name,hostname)=(name,'localhost') + self.set_hostname(hostname) def set_hostname (self, hostname): self.hostname=hostname @@ -318,6 +316,11 @@ class Vserver: self.ok('no mask file %s'%mask_path) return result + def delete (self): + # ommitting --silent just silently returns - stdin must be closed or something + command=["vserver","--silent",self.name,"delete"] + return e2b (self.ssh.run (command)) + # renaming def rename (self, newname): target=Vserver(newname) @@ -338,27 +341,36 @@ class Vserver: result=True if currently_running: result = result and self.stop() - result = result \ - and e2b(ssh.run("mv /vservers/%(oldname)s /vservers/%(newname)s"%locals(), - message="tweaking /vservers/<>")) \ - and e2b(ssh.run("mv /etc/vservers/%(oldname)s /etc/vservers/%(newname)s"%locals(), - message="tweaking /etc/vservers/<>")) \ - and e2b(ssh.run("rm /etc/vservers/%(newname)s/run"%locals(), - message="cleaning /etc/vservers/<>/run")) \ - and e2b(ssh.run("ln -s /var/run/vservers/%(newname)s /etc/vservers/%(newname)s/run"%locals(), - message="adjusting /etc/vservers/<>/run")) \ - and e2b(ssh.run("rm /etc/vservers/%(newname)s/vdir"%locals(), - message="cleaning /etc/vservers/<>/vdir")) \ - and e2b(ssh.run("ln -s /etc/vservers/.defaults/vdirbase/%(newname)s /etc/vservers/%(newname)s/vdir"%locals(), - message="adjusting /etc/vservers/<>/vdir")) \ - and e2b(ssh.run("rm /etc/vservers/%(newname)s/cache"%locals(), - message="cleaning /etc/vservers/<>/cache")) \ - and e2b(ssh.run("ln -s /etc/vservers/.defaults/cachebase/%(newname)s /etc/vservers/%(newname)s/cache"%locals(), - message="adjusting /etc/vservers/<>/cache")) \ - and e2b(ssh.run("rm /var/run/vservers.rev/%(xid)s"%locals(), - message="cleaning /var/run/vservers.rev/<>")) \ - and e2b(ssh.run("ln -s /etc/vserver/%(newname)s /var/run/vservers.rev/%(xid)s"%locals(), - message="adjusting /var/run/vservers.rev/<>")) + result = result and e2b(ssh.run("mv /vservers/%(oldname)s /vservers/%(newname)s"%locals(), + message="tweaking /vservers/<>")) + result = result and e2b(ssh.run("mv /etc/vservers/%(oldname)s /etc/vservers/%(newname)s"%locals(), + message="tweaking /etc/vservers/<>")) + result = result and e2b(ssh.run("mv /vservers/.pkg/%(oldname)s /vservers/.pkg/%(newname)s"%locals(), + message="renaming /vservers/.pkg/<>")) + result = result and e2b(ssh.run("rm /etc/vservers/%(newname)s/run"%locals(), + message="cleaning /etc/vservers/<>/run")) + result = result and e2b(ssh.run("ln -s /var/run/vservers/%(newname)s /etc/vservers/%(newname)s/run"%locals(), + message="adjusting /etc/vservers/<>/run")) + result = result and e2b(ssh.run("rm /etc/vservers/%(newname)s/vdir"%locals(), + message="cleaning /etc/vservers/<>/vdir")) + result = result and e2b(ssh.run("ln -s /etc/vservers/.defaults/vdirbase/%(newname)s /etc/vservers/%(newname)s/vdir"%locals(), + message="adjusting /etc/vservers/<>/vdir")) + result = result and e2b(ssh.run("rm /etc/vservers/%(newname)s/cache"%locals(), + message="cleaning /etc/vservers/<>/cache")) + result = result and e2b(ssh.run("ln -s /etc/vservers/.defaults/cachebase/%(newname)s /etc/vservers/%(newname)s/cache"%locals(), + message="adjusting /etc/vservers/<>/cache")) + result = result and e2b(ssh.run("rm /var/run/vservers.rev/%(xid)s"%locals(), + message="cleaning /var/run/vservers.rev/<>")) + result = result and e2b(ssh.run("ln -s /etc/vservers/%(newname)s /var/run/vservers.rev/%(xid)s"%locals(), + message="adjusting /var/run/vservers.rev/<>")) + result = result and e2b(ssh.run("sed -i -e s,%(oldname)s,%(newname)s,g /etc/vservers/%(newname)s/name"%locals(), + message="adjusting /etc/vservers/<>/name")) + result = result and e2b(ssh.run("sed -i -e s,%(oldname)s,%(newname)s,g /etc/vservers/%(newname)s/uts/nodename"%locals(), + message="adjusting /etc/vservers/<>/uts/nodename")) + # ignore rsult + e2b(ssh.run("sed -i -e s,\\[%(oldname)s\\],\\[%(newname)s\\], /vservers/%(newname)s/root/.profile"%locals(), + message="adjusting /vservers/<>/root/.profile")) + # # refreshing target instance target=Vserver(newname,dry_run=self.dry_run,verbose=self.verbose) target.set_hostname(self.hostname) @@ -373,7 +385,8 @@ class VserverTools: 'show' : "vsname(s)\n\tdisplay status & details", 'start': "vsname(s)\n\tstart vservers", 'stop' : "vsname(s)\n\tstop vservers", - 'check' : "vsname(s)\n\tchecks the network config for a vserver", + 'check' : "vsname(s)\n\tsanity check - ip from hostname, netmask, ...", + 'delete' : "vsname(s)\n\tdelete vservers", 'rename' : "oldname newname\n\trename a vserver - both named must be local", 'migrate' : "oldname hostname@newname\n\tmigrate a vserver over to a new box\n\tnot implemented yet", } @@ -442,28 +455,34 @@ class VserverTools: (self.options,self.args) = self.parser.parse_args() - if mode=='show': + if mode == 'show': for arg in self.check_usual_args(): self.vserver(arg).show(self.options.long_format) - elif mode=='stop': + elif mode == 'stop': for arg in self.check_usual_args(): vs = self.vserver(arg) vs.stop() vs.show(True) - elif mode=='start': + elif mode == 'start': for arg in self.check_usual_args(): vs = self.vserver(arg) vs.start() vs.show(True) - elif mode=='check': + elif mode == 'check': result=True for arg in self.check_usual_args(): if not b2e(self.vserver(arg).check()): result=False return result - elif mode=='rename': + elif mode == 'delete': + result=True + for arg in self.check_usual_args(): + if not b2e(self.vserver(arg).delete()): result=False + self.vserver(arg).show(True) + return result + elif mode == 'rename': [x,y]=self.args return b2e(self.vserver(x).rename(y)) - elif mode=='migrate': + elif mode == 'migrate': print 'migrate not yet implemented' return 1 else: