diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 25170f6f26..b5e6fe8132 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -20917,6 +20917,8 @@ qemuDomainRenameCallback(virDomainObjPtr vm, char *old_dom_name = NULL; char *new_dom_cfg_file = NULL; char *old_dom_cfg_file = NULL; + char *new_dom_autostart_link = NULL; + char *old_dom_autostart_link = NULL; virCheckFlags(0, ret); @@ -20937,6 +20939,21 @@ qemuDomainRenameCallback(virDomainObjPtr vm, vm->def->name))) goto cleanup; + if (vm->autostart) { + if (!(new_dom_autostart_link = virDomainConfigFile(cfg->autostartDir, + new_dom_name)) || + !(old_dom_autostart_link = virDomainConfigFile(cfg->autostartDir, + vm->def->name))) + goto cleanup; + + if (symlink(new_dom_cfg_file, new_dom_autostart_link) < 0) { + virReportSystemError(errno, + _("Failed to create symlink '%s to '%s'"), + new_dom_autostart_link, new_dom_cfg_file); + goto cleanup; + } + } + event_old = virDomainEventLifecycleNewFromObj(vm, VIR_DOMAIN_EVENT_UNDEFINED, VIR_DOMAIN_EVENT_UNDEFINED_RENAMED); @@ -20957,12 +20974,24 @@ qemuDomainRenameCallback(virDomainObjPtr vm, goto rollback; } + if (vm->autostart) { + if (virFileIsLink(old_dom_autostart_link) && + unlink(old_dom_autostart_link) < 0) { + virReportSystemError(errno, + _("Failed to delete symlink '%s'"), + old_dom_autostart_link); + goto rollback; + } + } + event_new = virDomainEventLifecycleNewFromObj(vm, VIR_DOMAIN_EVENT_DEFINED, VIR_DOMAIN_EVENT_DEFINED_RENAMED); ret = 0; cleanup: + VIR_FREE(old_dom_autostart_link); + VIR_FREE(new_dom_autostart_link); VIR_FREE(old_dom_cfg_file); VIR_FREE(new_dom_cfg_file); VIR_FREE(old_dom_name); @@ -20982,6 +21011,10 @@ qemuDomainRenameCallback(virDomainObjPtr vm, if (virFileExists(new_dom_cfg_file)) unlink(new_dom_cfg_file); + if (vm->autostart && + virFileExists(new_dom_autostart_link)) + unlink(new_dom_autostart_link); + goto cleanup; }