[libvirt] [PATCH v3 23/48] interface: introduce virtinterfaced daemon

Daniel P. Berrangé posted 48 patches 6 years, 6 months ago
There is a newer version of this series
[libvirt] [PATCH v3 23/48] interface: introduce virtinterfaced daemon
Posted by Daniel P. Berrangé 6 years, 6 months ago
The virtinterfaced daemon will be responsible for providing the interface API
driver functionality. The interface driver is still loaded by the main
libvirtd daemon at this stage, so virtinterfaced must not be running at
the same time.

Reviewed-by: Andrea Bolognani <abologna@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
 .gitignore                              |  4 ++
 libvirt.spec.in                         |  8 ++++
 src/interface/Makefile.inc.am           | 62 +++++++++++++++++++++++++
 src/interface/virtinterfaced.service.in | 24 ++++++++++
 4 files changed, 98 insertions(+)
 create mode 100644 src/interface/virtinterfaced.service.in

diff --git a/.gitignore b/.gitignore
index 4101bb4564..c361d87868 100644
--- a/.gitignore
+++ b/.gitignore
@@ -120,6 +120,9 @@
 /src/admin/admin_server_dispatch_stubs.h
 /src/esx/*.generated.*
 /src/hyperv/*.generated.*
+/src/interface/test_virtinterfaced.aug
+/src/interface/virtinterfaced.aug
+/src/interface/virtinterfaced.conf
 /src/libvirt*.def
 /src/libvirt.syms
 /src/libvirt_access.syms
@@ -175,6 +178,7 @@
 /src/util/virkeycodetable*.h
 /src/util/virkeynametable*.h
 /src/virt-aa-helper
+/src/virtinterfaced
 /src/virtlockd
 /src/virtlogd
 /src/virtnetworkd
diff --git a/libvirt.spec.in b/libvirt.spec.in
index 52a671d908..b4fab26ea4 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -1609,6 +1609,14 @@ exit 0
 %ghost %{_sysconfdir}/libvirt/nwfilter/*.xml
 
 %files daemon-driver-interface
+%config(noreplace) %{_sysconfdir}/libvirt/virtinterfaced.conf
+%{_datadir}/augeas/lenses/virtinterfaced.aug
+%{_datadir}/augeas/lenses/tests/test_virtinterfaced.aug
+%{_unitdir}/virtinterfaced.service
+%{_unitdir}/virtinterfaced.socket
+%{_unitdir}/virtinterfaced-ro.socket
+%{_unitdir}/virtinterfaced-admin.socket
+%attr(0755, root, root) %{_sbindir}/virtinterfaced
 %{_libdir}/%{name}/connection-driver/libvirt_driver_interface.so
 
 %files daemon-driver-network
diff --git a/src/interface/Makefile.inc.am b/src/interface/Makefile.inc.am
index 339a92786b..4c989bebec 100644
--- a/src/interface/Makefile.inc.am
+++ b/src/interface/Makefile.inc.am
@@ -41,4 +41,66 @@ libvirt_driver_interface_la_LIBADD += $(UDEV_LIBS)
 libvirt_driver_interface_la_SOURCES += $(INTERFACE_DRIVER_UDEV_SOURCES)
 endif WITH_UDEV
 libvirt_driver_interface_la_LIBADD += ../gnulib/lib/libgnu.la
+
+sbin_PROGRAMS += virtinterfaced
+
+nodist_conf_DATA += interface/virtinterfaced.conf
+augeas_DATA += interface/virtinterfaced.aug
+augeastest_DATA += interface/test_virtinterfaced.aug
+CLEANFILES += interface/virtinterfaced.aug
+
+virtinterfaced_SOURCES = $(REMOTE_DAEMON_SOURCES)
+virtinterfaced_CFLAGS = \
+       $(REMOTE_DAEMON_CFLAGS) \
+       -DDAEMON_NAME="\"virtinterfaced\"" \
+       -DMODULE_NAME="\"interface\"" \
+       $(NULL)
+virtinterfaced_LDFLAGS = $(REMOTE_DAEMON_LD_FLAGS)
+virtinterfaced_LDADD = $(REMOTE_DAEMON_LD_ADD)
+
+SYSTEMD_UNIT_FILES += \
+	virtinterfaced.service \
+	virtinterfaced.socket \
+	virtinterfaced-ro.socket \
+	virtinterfaced-admin.socket \
+	$(NULL)
+SYSTEMD_UNIT_FILES_IN += \
+	interface/virtinterfaced.service.in \
+	$(NULL)
+
+VIRTINTERFACED_UNIT_VARS = \
+	$(VIRTD_UNIT_VARS) \
+	-e 's|[@]name[@]|Libvirt interface|g' \
+	-e 's|[@]service[@]|virtinterfaced|g' \
+	-e 's|[@]sockprefix[@]|virtinterfaced|g' \
+	$(NULL)
+
+virtinterfaced.service: interface/virtinterfaced.service.in $(top_builddir)/config.status
+	$(AM_V_GEN)sed $(VIRTINTERFACED_UNIT_VARS) < $< > $@-t && mv $@-t $@
+
+virtinterface%.socket: remote/libvirt%.socket.in $(top_builddir)/config.status
+	$(AM_V_GEN)sed $(VIRTINTERFACED_UNIT_VARS) < $< > $@-t && mv $@-t $@
+
+interface/virtinterfaced.conf: remote/libvirtd.conf.in
+	$(AM_V_GEN)sed \
+		-e '/[@]CUT_ENABLE_IP[@]/,/[@]END[@]/d' \
+		-e 's/[@]DAEMON_NAME[@]/virtinterfaced/' \
+		< $^ > $@
+
+interface/virtinterfaced.aug: remote/libvirtd.aug.in
+	$(AM_V_GEN)$(SED) \
+		-e '/[@]CUT_ENABLE_IP[@]/,/[@]END[@]/d' \
+		-e 's/[@]DAEMON_NAME[@]/virtinterfaced/' \
+		-e 's/[@]DAEMON_NAME_UC[@]/Virtinterfaced/' \
+		$< > $@
+
+interface/test_virtinterfaced.aug: remote/test_libvirtd.aug.in \
+		interface/virtinterfaced.conf $(AUG_GENTEST)
+	$(AM_V_GEN)$(AUG_GENTEST) interface/virtinterfaced.conf \
+		$(srcdir)/remote/test_libvirtd.aug.in | \
+		$(SED) -e '/[@]CUT_ENABLE_IP[@]/,/[@]END[@]/d' \
+		-e 's/[@]DAEMON_NAME[@]/virtinterfaced/' \
+		-e 's/[@]DAEMON_NAME_UC[@]/Virtinterfaced/' \
+		> $@ || rm -f $@
+
 endif WITH_INTERFACE
diff --git a/src/interface/virtinterfaced.service.in b/src/interface/virtinterfaced.service.in
new file mode 100644
index 0000000000..ff3a611d16
--- /dev/null
+++ b/src/interface/virtinterfaced.service.in
@@ -0,0 +1,24 @@
+[Unit]
+Description=Virtualization interface daemon
+Conflicts=libvirtd.service
+Requires=virtinterfaced.socket
+Requires=virtinterfaced-ro.socket
+Requires=virtinterfaced-admin.socket
+After=network.target
+After=dbus.service
+After=apparmor.service
+After=local-fs.target
+Documentation=man:libvirtd(8)
+Documentation=https://libvirt.org
+
+[Service]
+Type=notify
+ExecStart=@sbindir@/virtinterfaced --timeout 120
+ExecReload=/bin/kill -HUP $MAINPID
+Restart=on-failure
+
+[Install]
+WantedBy=multi-user.target
+Also=virtinterfaced.socket
+Also=virtinterfaced-ro.socket
+Also=virtinterfaced-admin.socket
-- 
2.21.0

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v3 23/48] interface: introduce virtinterfaced daemon
Posted by Christophe de Dinechin 6 years, 6 months ago
Daniel P. Berrangé writes:

> The virtinterfaced daemon will be responsible for providing the interface API
> driver functionality. The interface driver is still loaded by the main
> libvirtd daemon at this stage, so virtinterfaced must not be running at
> the same time.
>
> Reviewed-by: Andrea Bolognani <abologna@redhat.com>
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
>  .gitignore                              |  4 ++
>  libvirt.spec.in                         |  8 ++++
>  src/interface/Makefile.inc.am           | 62 +++++++++++++++++++++++++
>  src/interface/virtinterfaced.service.in | 24 ++++++++++
>  4 files changed, 98 insertions(+)
>  create mode 100644 src/interface/virtinterfaced.service.in
>
> diff --git a/.gitignore b/.gitignore
> index 4101bb4564..c361d87868 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -120,6 +120,9 @@
>  /src/admin/admin_server_dispatch_stubs.h
>  /src/esx/*.generated.*
>  /src/hyperv/*.generated.*
> +/src/interface/test_virtinterfaced.aug
> +/src/interface/virtinterfaced.aug
> +/src/interface/virtinterfaced.conf
>  /src/libvirt*.def
>  /src/libvirt.syms
>  /src/libvirt_access.syms
> @@ -175,6 +178,7 @@
>  /src/util/virkeycodetable*.h
>  /src/util/virkeynametable*.h
>  /src/virt-aa-helper
> +/src/virtinterfaced
>  /src/virtlockd
>  /src/virtlogd
>  /src/virtnetworkd
> diff --git a/libvirt.spec.in b/libvirt.spec.in
> index 52a671d908..b4fab26ea4 100644
> --- a/libvirt.spec.in
> +++ b/libvirt.spec.in
> @@ -1609,6 +1609,14 @@ exit 0
>  %ghost %{_sysconfdir}/libvirt/nwfilter/*.xml
>
>  %files daemon-driver-interface
> +%config(noreplace) %{_sysconfdir}/libvirt/virtinterfaced.conf
> +%{_datadir}/augeas/lenses/virtinterfaced.aug
> +%{_datadir}/augeas/lenses/tests/test_virtinterfaced.aug
> +%{_unitdir}/virtinterfaced.service
> +%{_unitdir}/virtinterfaced.socket
> +%{_unitdir}/virtinterfaced-ro.socket
> +%{_unitdir}/virtinterfaced-admin.socket
> +%attr(0755, root, root) %{_sbindir}/virtinterfaced
>  %{_libdir}/%{name}/connection-driver/libvirt_driver_interface.so
>
>  %files daemon-driver-network
> diff --git a/src/interface/Makefile.inc.am b/src/interface/Makefile.inc.am
> index 339a92786b..4c989bebec 100644
> --- a/src/interface/Makefile.inc.am
> +++ b/src/interface/Makefile.inc.am
> @@ -41,4 +41,66 @@ libvirt_driver_interface_la_LIBADD += $(UDEV_LIBS)
>  libvirt_driver_interface_la_SOURCES += $(INTERFACE_DRIVER_UDEV_SOURCES)
>  endif WITH_UDEV
>  libvirt_driver_interface_la_LIBADD += ../gnulib/lib/libgnu.la
> +
> +sbin_PROGRAMS += virtinterfaced
> +
> +nodist_conf_DATA += interface/virtinterfaced.conf
> +augeas_DATA += interface/virtinterfaced.aug
> +augeastest_DATA += interface/test_virtinterfaced.aug
> +CLEANFILES += interface/virtinterfaced.aug
> +
> +virtinterfaced_SOURCES = $(REMOTE_DAEMON_SOURCES)
> +virtinterfaced_CFLAGS = \
> +       $(REMOTE_DAEMON_CFLAGS) \
> +       -DDAEMON_NAME="\"virtinterfaced\"" \
> +       -DMODULE_NAME="\"interface\"" \
> +       $(NULL)
> +virtinterfaced_LDFLAGS = $(REMOTE_DAEMON_LD_FLAGS)
> +virtinterfaced_LDADD = $(REMOTE_DAEMON_LD_ADD)
> +
> +SYSTEMD_UNIT_FILES += \
> +	virtinterfaced.service \
> +	virtinterfaced.socket \
> +	virtinterfaced-ro.socket \
> +	virtinterfaced-admin.socket \
> +	$(NULL)
> +SYSTEMD_UNIT_FILES_IN += \
> +	interface/virtinterfaced.service.in \
> +	$(NULL)
> +
> +VIRTINTERFACED_UNIT_VARS = \
> +	$(VIRTD_UNIT_VARS) \
> +	-e 's|[@]name[@]|Libvirt interface|g' \
> +	-e 's|[@]service[@]|virtinterfaced|g' \
> +	-e 's|[@]sockprefix[@]|virtinterfaced|g' \
> +	$(NULL)
> +
> +virtinterfaced.service: interface/virtinterfaced.service.in $(top_builddir)/config.status
> +	$(AM_V_GEN)sed $(VIRTINTERFACED_UNIT_VARS) < $< > $@-t && mv $@-t $@
> +
> +virtinterface%.socket: remote/libvirt%.socket.in $(top_builddir)/config.status
> +	$(AM_V_GEN)sed $(VIRTINTERFACED_UNIT_VARS) < $< > $@-t && mv $@-t $@
> +
> +interface/virtinterfaced.conf: remote/libvirtd.conf.in
> +	$(AM_V_GEN)sed \
> +		-e '/[@]CUT_ENABLE_IP[@]/,/[@]END[@]/d' \
> +		-e 's/[@]DAEMON_NAME[@]/virtinterfaced/' \
> +		< $^ > $@
> +
> +interface/virtinterfaced.aug: remote/libvirtd.aug.in
> +	$(AM_V_GEN)$(SED) \
> +		-e '/[@]CUT_ENABLE_IP[@]/,/[@]END[@]/d' \
> +		-e 's/[@]DAEMON_NAME[@]/virtinterfaced/' \
> +		-e 's/[@]DAEMON_NAME_UC[@]/Virtinterfaced/' \
> +		$< > $@
> +
> +interface/test_virtinterfaced.aug: remote/test_libvirtd.aug.in \
> +		interface/virtinterfaced.conf $(AUG_GENTEST)
> +	$(AM_V_GEN)$(AUG_GENTEST) interface/virtinterfaced.conf \
> +		$(srcdir)/remote/test_libvirtd.aug.in | \
> +		$(SED) -e '/[@]CUT_ENABLE_IP[@]/,/[@]END[@]/d' \
> +		-e 's/[@]DAEMON_NAME[@]/virtinterfaced/' \
> +		-e 's/[@]DAEMON_NAME_UC[@]/Virtinterfaced/' \
> +		> $@ || rm -f $@
> +
>  endif WITH_INTERFACE
> diff --git a/src/interface/virtinterfaced.service.in b/src/interface/virtinterfaced.service.in
> new file mode 100644
> index 0000000000..ff3a611d16
> --- /dev/null
> +++ b/src/interface/virtinterfaced.service.in
> @@ -0,0 +1,24 @@
> +[Unit]
> +Description=Virtualization interface daemon
> +Conflicts=libvirtd.service
> +Requires=virtinterfaced.socket
> +Requires=virtinterfaced-ro.socket
> +Requires=virtinterfaced-admin.socket
> +After=network.target
> +After=dbus.service
> +After=apparmor.service
> +After=local-fs.target
> +Documentation=man:libvirtd(8)

Provide its own man page?

> +Documentation=https://libvirt.org
> +
> +[Service]
> +Type=notify
> +ExecStart=@sbindir@/virtinterfaced --timeout 120
> +ExecReload=/bin/kill -HUP $MAINPID
> +Restart=on-failure
> +
> +[Install]
> +WantedBy=multi-user.target
> +Also=virtinterfaced.socket
> +Also=virtinterfaced-ro.socket
> +Also=virtinterfaced-admin.socket
> --
> 2.21.0

Reviewed-by: Christophe de Dinechin <dinechin@redhat.com>

--
Cheers,
Christophe de Dinechin (IRC c3d)

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list