dom0: add VM rename support (#371)
This commit is contained in:
parent
134af81b3b
commit
c0c64ecdc5
@ -404,6 +404,44 @@ class QubesVm(object):
|
||||
|
||||
self.netvm_vm = netvm_vm
|
||||
|
||||
def pre_rename(self, new_name):
|
||||
pass
|
||||
|
||||
def set_name(self, name):
|
||||
if self.is_running():
|
||||
raise QubesException("Cannot change name of running VM!")
|
||||
|
||||
self.pre_rename(name)
|
||||
|
||||
new_conf = "%s/%s.conf" % (self.dir_path, name)
|
||||
if os.path.exists(self.conf_file):
|
||||
os.rename(self.conf_file, "%s/%s.conf" % (self.dir_path, name))
|
||||
old_dirpath = self.dir_path
|
||||
new_dirpath = os.path.dirname(self.dir_path) + '/' + name
|
||||
os.rename(old_dirpath, new_dirpath)
|
||||
self.dir_path = new_dirpath
|
||||
old_name = self.name
|
||||
self.name = name
|
||||
if self.private_img is not None:
|
||||
self.private_img = self.private_img.replace(old_dirpath, new_dirpath)
|
||||
if self.root_img is not None:
|
||||
self.root_img = self.root_img.replace(old_dirpath, new_dirpath)
|
||||
if self.volatile_img is not None:
|
||||
self.volatile_img = self.volatile_img.replace(old_dirpath, new_dirpath)
|
||||
if self.conf_file is not None:
|
||||
self.conf_file = new_conf.replace(old_dirpath, new_dirpath)
|
||||
if self.appmenus_templates_dir is not None:
|
||||
self.appmenus_templates_dir = self.appmenus_templates_dir.replace(old_dirpath, new_dirpath)
|
||||
if self.icon_path is not None:
|
||||
self.icon_path = self.icon_path.replace(old_dirpath, new_dirpath)
|
||||
if self.kernels_dir is not None:
|
||||
self.kernels_dir = self.kernels_dir.replace(old_dirpath, new_dirpath)
|
||||
|
||||
self.post_rename(old_name)
|
||||
|
||||
def post_rename(self, old_name):
|
||||
pass
|
||||
|
||||
def is_template(self):
|
||||
return isinstance(self, QubesTemplateVm)
|
||||
|
||||
@ -1302,6 +1340,16 @@ class QubesTemplateVm(QubesVm):
|
||||
def remove_appmenus(self):
|
||||
subprocess.check_call ([qubes_appmenu_remove_cmd, self.name, "vm-templates"])
|
||||
|
||||
def pre_rename(self, new_name):
|
||||
self.remove_appmenus()
|
||||
|
||||
def post_rename(self, old_name):
|
||||
self.create_appmenus(False)
|
||||
|
||||
old_dirpath = os.path.dirname(self.dir_path) + '/' + old_name
|
||||
self.clean_volatile_img = self.clean_volatile_img.replace(old_dirpath, self.dir_path)
|
||||
self.rootcow_img = self.rootcow_img.replace(old_dirpath, self.dir_path)
|
||||
|
||||
def remove_from_disk(self):
|
||||
if dry_run:
|
||||
return
|
||||
@ -1815,6 +1863,12 @@ class QubesAppVm(QubesVm):
|
||||
self.remove_appmenus()
|
||||
super(QubesAppVm, self).remove_from_disk()
|
||||
|
||||
def pre_rename(self, new_name):
|
||||
self.remove_appmenus()
|
||||
|
||||
def post_rename(self, old_name):
|
||||
self.create_appmenus(False)
|
||||
|
||||
|
||||
class QubesVmCollection(dict):
|
||||
"""
|
||||
|
@ -276,6 +276,17 @@ def set_kernelopts(vms, vm, args):
|
||||
|
||||
return True
|
||||
|
||||
def set_name(vms, vm, args):
|
||||
if len (args) != 1:
|
||||
print >> sys.stderr, "Missing new name!"
|
||||
return False
|
||||
|
||||
if args[0] == vm.name:
|
||||
return False
|
||||
vm.set_name(args[0])
|
||||
return True
|
||||
|
||||
|
||||
properties = {
|
||||
"updateable": set_updateable,
|
||||
"nonupdateable": set_nonupdateable,
|
||||
@ -288,6 +299,7 @@ properties = {
|
||||
"template" : set_template,
|
||||
"vcpus" : set_vcpus,
|
||||
"kernelopts": set_kernelopts,
|
||||
"name": set_name,
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user