On Wed, Oct 07, 2009 at 03:38:09PM -0400, Amy Griffis wrote: > 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); > ACK Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list