LXC add driver config file lxc.conf

* src/lxc/lxc.conf: new configuration file, 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.
* src/Makefile.am libvirt.spec.in: add the new file
* src/lxc/lxc_conf.[ch] src/lxc/lxc_driver.c: read the new log value
  from the configuration file and pass the log informations when
  starting up a container.
This commit is contained in:
Amy Griffis 2009-10-08 17:40:14 +02:00 committed by Daniel Veillard
parent c73a0c4ac9
commit 2dd44664cf
6 changed files with 67 additions and 8 deletions

View File

@ -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
@ -630,6 +633,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/

View File

@ -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
@ -431,8 +433,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
@ -462,7 +463,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

13
src/lxc/lxc.conf Normal file
View File

@ -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

View File

@ -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:

View File

@ -49,6 +49,7 @@ struct __lxc_driver {
char *autostartDir;
char *stateDir;
char *logDir;
int log_libvirtd;
int have_netns;
/* An array of callbacks */

View File

@ -949,11 +949,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);
@ -1003,7 +1005,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);
@ -1015,6 +1018,7 @@ static int lxcControllerStart(virConnectPtr conn,
VIR_FREE(filterstr);
}
if (driver->log_libvirtd) {
if (virLogGetNbOutputs() > 0) {
outputstr = virLogGetOutputs();
if (!outputstr)
@ -1022,6 +1026,11 @@ static int lxcControllerStart(virConnectPtr conn,
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(tmp);
}
ADD_ENV(NULL);
@ -1626,6 +1635,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);