]> xenbits.xensource.com Git - libvirt.git/commitdiff
libvirtd: systemd: add special target for system shutdown
authorNikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
Fri, 14 Oct 2016 07:13:48 +0000 (10:13 +0300)
committerMaxim Nestratov <mnestratov@virtuozzo.com>
Wed, 23 Nov 2016 08:13:53 +0000 (11:13 +0300)
It is already discussed in "[RFC] daemon: remove hardcode dep on libvirt-guests" [1].

Mgmt can use means to save/restore domains on system shutdown/boot other than
libvirt-guests.service. Thus we need to specify appropriate ordering dependency between
libvirtd, domains and save/restore service. This patch takes approach suggested
in RFC and introduces a systemd target, so that ordering can be built next way:

libvirtd -> domain -> virt-guest-shutdown.target -> save-restore.service.

This way domains are decoupled from specific shutdown service via intermediate
target.

[1] https://www.redhat.com/archives/libvir-list/2016-September/msg01353.html

daemon/Makefile.am
daemon/virt-guest-shutdown.target [new file with mode: 0644]
libvirt.spec.in
src/util/virsystemd.c
tools/libvirt-guests.service.in

index 927d16fe7147f4ca597e62f2dddb87ff251904a3..463db6ee6327a896c515dde65d81a162e19b2d42 100644 (file)
@@ -67,6 +67,7 @@ EXTRA_DIST =                                          \
        libvirt.rules                                   \
        libvirtd.sasl                                   \
        libvirtd.service.in                             \
+       virt-guest-shutdown.target              \
        libvirtd.sysconf                                \
        libvirtd.sysctl                                 \
        libvirtd.aug                                    \
@@ -456,8 +457,11 @@ install-init-systemd: install-sysconfig libvirtd.service
        $(MKDIR_P) $(DESTDIR)$(SYSTEMD_UNIT_DIR)
        $(INSTALL_DATA) libvirtd.service \
          $(DESTDIR)$(SYSTEMD_UNIT_DIR)/libvirtd.service
+       $(INSTALL_DATA) virt-guest-shutdown.target \
+         $(DESTDIR)$(SYSTEMD_UNIT_DIR)/virt-guest-shutdown.target
 
 uninstall-init-systemd: uninstall-sysconfig
+       rm -f $(DESTDIR)$(SYSTEMD_UNIT_DIR)/virt-guest-shutdown.target
        rm -f $(DESTDIR)$(SYSTEMD_UNIT_DIR)/libvirtd.service
        rmdir $(DESTDIR)$(SYSTEMD_UNIT_DIR) || :
 else ! LIBVIRT_INIT_SCRIPT_SYSTEMD
diff --git a/daemon/virt-guest-shutdown.target b/daemon/virt-guest-shutdown.target
new file mode 100644 (file)
index 0000000..bf87652
--- /dev/null
@@ -0,0 +1,3 @@
+[Unit]
+Description=Libvirt guests shutdown
+Documentation=http://libvirt.org
index 5e4a3b7ac653565f78a7b6e1e98f40802bd19fad..4f35313a20cc5b89ba563559424a46c2d64fcd62 100644 (file)
@@ -1589,6 +1589,7 @@ exit 0
 
 %if %{with_systemd}
 %{_unitdir}/libvirtd.service
+%{_unitdir}/virt-guest-shutdown.target
 %{_unitdir}/virtlogd.service
 %{_unitdir}/virtlogd.socket
 %{_unitdir}/virtlockd.service
index 0219db6ec4430dfd8e4384324ff05b97eb308fbc..7ec3eee2b9174423d90f69ca0a2fee4fa05360c1 100644 (file)
@@ -370,7 +370,7 @@ int virSystemdCreateMachine(const char *name,
                               3,
                               "Slice", "s", slicename,
                               "After", "as", 1, "libvirtd.service",
-                              "Before", "as", 1, "libvirt-guests.service") < 0)
+                              "Before", "as", 1, "virt-guest-shutdown.target") < 0)
             goto cleanup;
 
         if (error.level == VIR_ERR_ERROR) {
@@ -411,7 +411,7 @@ int virSystemdCreateMachine(const char *name,
                               3,
                               "Slice", "s", slicename,
                               "After", "as", 1, "libvirtd.service",
-                              "Before", "as", 1, "libvirt-guests.service") < 0)
+                              "Before", "as", 1, "virt-guest-shutdown.target") < 0)
             goto cleanup;
     }
 
index 02e67471db0bc529f3be1f84053f553053bfb189..64a4c1129baed10b49b5e30df8117135490682a8 100644 (file)
@@ -1,9 +1,11 @@
 [Unit]
 Description=Suspend/Resume Running libvirt Guests
 Wants=libvirtd.service
+Requires=virt-guest-shutdown.target
 After=network.target
 After=time-sync.target
 After=libvirtd.service
+After=virt-guest-shutdown.target
 Documentation=man:libvirtd(8)
 Documentation=http://libvirt.org