[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