Updated for API change. Add a config file for the lxc driver, based on existing qemu.conf. There is currently one tunable "log_with_libvirtd" that controls whether an lxc controller will log only to the container log file, or whether it will honor libvirtd's log output configuration. This provides a way to have libvirtd and its children log to a single file. The default is to log to the container log file. --- libvirt.spec.in | 6 ++++++ src/Makefile.am | 9 +++++++-- src/lxc/lxc.conf | 13 +++++++++++++ src/lxc/lxc_conf.c | 24 ++++++++++++++++++++++++ src/lxc/lxc_conf.h | 1 + src/lxc/lxc_driver.c | 22 ++++++++++++++++------ 6 files changed, 67 insertions(+), 8 deletions(-) create mode 100644 src/lxc/lxc.conf diff --git a/libvirt.spec.in b/libvirt.spec.in index da3b2a7..725ef60 100644 --- a/libvirt.spec.in +++ b/libvirt.spec.in @@ -550,6 +550,9 @@ rm -rf $RPM_BUILD_ROOT%{_datadir}/doc/libvirt-%{version} %if ! %{with_qemu} rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu.conf %endif +%if ! %{with_lxc} +rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/lxc.conf +%endif %if %{with_libvirtd} chmod 0644 $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/libvirtd @@ -627,6 +630,9 @@ fi %if %{with_qemu} %config(noreplace) %{_sysconfdir}/libvirt/qemu.conf %endif +%if %{with_lxc} +%config(noreplace) %{_sysconfdir}/libvirt/lxc.conf +%endif %dir %{_datadir}/libvirt/ diff --git a/src/Makefile.am b/src/Makefile.am index f3d4559..73bbb70 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -32,6 +32,8 @@ lib_LTLIBRARIES = libvirt.la moddir = $(libdir)/libvirt/drivers mod_LTLIBRARIES = +confdir = $(sysconfdir)/libvirt +conf_DATA = # These files are not related to driver APIs. Simply generic # helper APIs for various purposes @@ -425,8 +427,7 @@ libvirt_driver_qemu_la_LDFLAGS += -module -avoid-version endif libvirt_driver_qemu_la_SOURCES = $(QEMU_DRIVER_SOURCES) -confdir = $(sysconfdir)/libvirt/ -conf_DATA = qemu/qemu.conf +conf_DATA += qemu/qemu.conf augeasdir = $(datadir)/augeas/lenses augeas_DATA = qemu/libvirtd_qemu.aug @@ -456,7 +457,11 @@ if WITH_DRIVER_MODULES libvirt_driver_lxc_la_LDFLAGS = -module -avoid-version endif libvirt_driver_lxc_la_SOURCES = $(LXC_DRIVER_SOURCES) + +conf_DATA += lxc/lxc.conf + endif +EXTRA_DIST += lxc/lxc.conf if WITH_UML if WITH_DRIVER_MODULES diff --git a/src/lxc/lxc.conf b/src/lxc/lxc.conf new file mode 100644 index 0000000..7a5066f --- /dev/null +++ b/src/lxc/lxc.conf @@ -0,0 +1,13 @@ +# Master configuration file for the LXC driver. +# All settings described here are optional - if omitted, sensible +# defaults are used. + +# By default, log messages generated by the lxc controller go to the +# container logfile. It is also possible to accumulate log messages +# from all lxc controllers along with libvirtd's log outputs. In this +# case, the lxc controller will honor either LIBVIRT_LOG_OUTPUTS or +# log_outputs from libvirtd.conf. +# +# This is disabled by default, uncomment below to enable it. +# +# log_with_libvirtd = 1 diff --git a/src/lxc/lxc_conf.c b/src/lxc/lxc_conf.c index fef60ba..de059bd 100644 --- a/src/lxc/lxc_conf.c +++ b/src/lxc/lxc_conf.c @@ -30,6 +30,7 @@ #include "lxc_conf.h" #include "nodeinfo.h" #include "virterror_internal.h" +#include "conf.h" #include "logging.h" @@ -90,6 +91,10 @@ no_memory: int lxcLoadDriverConfig(lxc_driver_t *driver) { + char *filename; + virConfPtr conf; + virConfValuePtr p; + /* Set the container configuration directory */ if ((driver->configDir = strdup(LXC_CONFIG_DIR)) == NULL) goto no_memory; @@ -98,6 +103,25 @@ int lxcLoadDriverConfig(lxc_driver_t *driver) if ((driver->logDir = strdup(LXC_LOG_DIR)) == NULL) goto no_memory; + if ((filename = strdup(SYSCONF_DIR "/libvirt/lxc.conf")) == NULL) + goto no_memory; + + /* Avoid error from non-existant or unreadable file. */ + if (access (filename, R_OK) == -1) + return 0; + conf = virConfReadFile(filename, 0); + if (!conf) + return 0; + + p = virConfGetValue(conf, "log_with_libvirtd"); + if (p) { + if (p->type != VIR_CONF_LONG) + VIR_WARN0("lxcLoadDriverConfig: invalid setting: log_with_libvirtd"); + else + driver->log_libvirtd = p->l; + } + + virConfFree(conf); return 0; no_memory: diff --git a/src/lxc/lxc_conf.h b/src/lxc/lxc_conf.h index 15402d8..6e4c855 100644 --- a/src/lxc/lxc_conf.h +++ b/src/lxc/lxc_conf.h @@ -49,6 +49,7 @@ struct __lxc_driver { char *autostartDir; char *stateDir; char *logDir; + int log_libvirtd; int have_netns; /* An array of callbacks */ diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 0780666..91dad7c 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -837,11 +837,13 @@ static int lxcControllerStart(virConnectPtr conn, char *filterstr; char *outputstr; char *tmp; + int log_level; pid_t child; int status; fd_set keepfd; char appPtyStr[30]; const char *emulator; + lxc_driver_t *driver = conn->privateData; FD_ZERO(&keepfd); @@ -891,7 +893,8 @@ static int lxcControllerStart(virConnectPtr conn, lenv[lenvc++] = envval; \ } while (0) - if (virAsprintf(&tmp, "LIBVIRT_DEBUG=%d", virLogGetDefaultPriority()) < 0) + log_level = virLogGetDefaultPriority(); + if (virAsprintf(&tmp, "LIBVIRT_DEBUG=%d", log_level) < 0) goto no_memory; ADD_ENV(tmp); @@ -903,12 +906,18 @@ static int lxcControllerStart(virConnectPtr conn, VIR_FREE(filterstr); } - if (virLogGetNbOutputs() > 0) { - outputstr = virLogGetOutputs(); - if (!outputstr) + if (driver->log_libvirtd) { + if (virLogGetNbOutputs() > 0) { + outputstr = virLogGetOutputs(); + if (!outputstr) + goto no_memory; + ADD_ENV_PAIR("LIBVIRT_LOG_OUTPUTS", outputstr); + VIR_FREE(outputstr); + } + } else { + if (virAsprintf(&tmp, "LIBVIRT_LOG_OUTPUTS=%d:stderr", log_level) < 0) goto no_memory; - ADD_ENV_PAIR("LIBVIRT_LOG_OUTPUTS", outputstr); - VIR_FREE(outputstr); + ADD_ENV(tmp); } ADD_ENV(NULL); @@ -1514,6 +1523,7 @@ static int lxcStartup(int privileged) virEventAddTimeout(-1, lxcDomainEventFlush, lxc_driver, NULL)) < 0) goto cleanup; + lxc_driver->log_libvirtd = 0; /* by default log to container logfile */ lxc_driver->have_netns = lxcCheckNetNsSupport(); rc = virCgroupForDriver("lxc", &lxc_driver->cgroup, privileged, 1); -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list