[libvirt] [PATCH 6/7] lxc: add driver config file lxc.conf
Daniel P. Berrange
berrange at redhat.com
Wed Oct 7 19:53:21 UTC 2009
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 :|
More information about the libvir-list
mailing list