#!/usr/bin/python
#
-# $Id$
-# $URL$
import sys
import os.path
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
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)
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)
'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",
}
(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: