]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
{domain, network}_conf: disable autostart when deleting config
authorMichael Chapman <mike@very.puzzling.org>
Wed, 11 Mar 2015 02:20:28 +0000 (13:20 +1100)
committerCole Robinson <crobinso@redhat.com>
Tue, 28 Apr 2015 15:06:39 +0000 (11:06 -0400)
Undefining a running, autostarted domain removes the autostart link, but
dom->autostart is not cleared. If the domain is subsequently redefined,
libvirt thinks it is already autostarted and will not create the link
even if requested:

  # virsh dominfo example | grep Autostart
  Autostart:      enable

  # ls /etc/libvirt/qemu/autostart/example.xml
  /etc/libvirt/qemu/autostart/example.xml

  # virsh undefine example
  Domain example has been undefined

  # virsh define example.xml
  Domain example defined from example.xml

  # virsh dominfo example | grep Autostart
  Autostart:      enable

  # virsh autostart example
  Domain example marked as autostarted

  # ls /etc/libvirt/qemu/autostart/example.xml
  ls: cannot access /etc/libvirt/qemu/autostart/example.xml: No such file or directory

This commit ensures dom->autostart is cleared whenever the config and
autostart link (if present) are removed.

The bridge network driver cleared this flag itself in networkUndefine.
This commit moves this into virNetworkDeleteConfig for symmetry with
virDomainDeleteConfig, and to ensure it is not missed in future network
drivers.

Signed-off-by: Michael Chapman <mike@very.puzzling.org>
(cherry picked from commit a6ec4f472d585c0ab3df42b98926fb8c6893d6e4)

src/conf/domain_conf.c
src/conf/network_conf.c
src/network/bridge_driver.c

index 4ff26d5e04ba14429db3805fcbe258ddc503d3d8..245d017dfda82c2a8fb2a6c0894077736dbf9ebc 100644 (file)
@@ -20882,6 +20882,7 @@ virDomainDeleteConfig(const char *configDir,
 
     /* Not fatal if this doesn't work */
     unlink(autostartLink);
+    dom->autostart = 0;
 
     if (unlink(configFile) < 0 &&
         errno != ENOENT) {
index 0f4fc1edbc1c9d42b84a7ae93f97e9d1f13470c9..9fb20cedda74957baf8db383fb6eaf95902c2aa8 100644 (file)
@@ -3040,6 +3040,7 @@ int virNetworkDeleteConfig(const char *configDir,
 
     /* Not fatal if this doesn't work */
     unlink(autostartLink);
+    net->autostart = 0;
 
     if (unlink(configFile) < 0) {
         virReportSystemError(errno,
index 5f02f7fa39023df2fc8c4cef22d25ab21ba35c34..bfca55ca22975fb7619be26392b7dcc40af90a79 100644 (file)
@@ -3084,7 +3084,6 @@ networkUndefine(virNetworkPtr net)
                                driver->networkAutostartDir,
                                network) < 0)
         goto cleanup;
-    network->autostart = 0;
 
     event = virNetworkEventLifecycleNew(network->def->name,
                                         network->def->uuid,