From: Nikolay Shirokovskiy Date: Fri, 14 Oct 2016 07:13:48 +0000 (+0300) Subject: libvirtd: systemd: add special target for system shutdown X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=01079727fe29dfeafac751a07e564e0d6bb53389;p=libvirt.git libvirtd: systemd: add special target for system shutdown 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 --- diff --git a/daemon/Makefile.am b/daemon/Makefile.am index 927d16fe71..463db6ee63 100644 --- a/daemon/Makefile.am +++ b/daemon/Makefile.am @@ -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 index 0000000000..bf876527b5 --- /dev/null +++ b/daemon/virt-guest-shutdown.target @@ -0,0 +1,3 @@ +[Unit] +Description=Libvirt guests shutdown +Documentation=http://libvirt.org diff --git a/libvirt.spec.in b/libvirt.spec.in index 5e4a3b7ac6..4f35313a20 100644 --- a/libvirt.spec.in +++ b/libvirt.spec.in @@ -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 diff --git a/src/util/virsystemd.c b/src/util/virsystemd.c index 0219db6ec4..7ec3eee2b9 100644 --- a/src/util/virsystemd.c +++ b/src/util/virsystemd.c @@ -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; } diff --git a/tools/libvirt-guests.service.in b/tools/libvirt-guests.service.in index 02e67471db..64a4c1129b 100644 --- a/tools/libvirt-guests.service.in +++ b/tools/libvirt-guests.service.in @@ -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