From nobody Sun Apr 28 21:44:07 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1496172796635416.99168162939884; Tue, 30 May 2017 12:33:16 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6FA29804EE; Tue, 30 May 2017 19:33:14 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id DB12584AB5; Tue, 30 May 2017 19:33:12 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 723CF180BAF4; Tue, 30 May 2017 19:33:10 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v4UJX80x003462 for ; Tue, 30 May 2017 15:33:08 -0400 Received: by smtp.corp.redhat.com (Postfix) id D842BC4532; Tue, 30 May 2017 19:33:08 +0000 (UTC) Received: from mx1.redhat.com (ext-mx08.extmail.prod.ext.phx2.redhat.com [10.5.110.32]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C7E70784A7 for ; Tue, 30 May 2017 19:33:00 +0000 (UTC) Received: from smtp.nue.novell.com (smtp.nue.novell.com [195.135.221.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 0D49BC0B39CF for ; Tue, 30 May 2017 19:32:56 +0000 (UTC) Received: from laptop.de (mhy71-2-88-167-63-197.fbx.proxad.net [88.167.63.197]) by smtp.nue.novell.com with ESMTP (TLS encrypted); Tue, 30 May 2017 21:32:54 +0200 DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 6FA29804EE Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=suse.com Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 6FA29804EE DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 0D49BC0B39CF Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=suse.com Authentication-Results: ext-mx08.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=cbosdonnat@suse.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 0D49BC0B39CF From: =?UTF-8?q?C=C3=A9dric=20Bosdonnat?= To: libvir-list@redhat.com Date: Tue, 30 May 2017 21:32:43 +0200 Message-Id: <20170530193243.24257-1-cbosdonnat@suse.com> X-Greylist: Sender passed SPF test, Sender IP whitelisted by DNSRBL, ACL 203 matched, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Tue, 30 May 2017 19:32:57 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Tue, 30 May 2017 19:32:57 +0000 (UTC) for IP:'195.135.221.5' DOMAIN:'smtp.nue.novell.com' HELO:'smtp.nue.novell.com' FROM:'cbosdonnat@suse.com' RCPT:'' X-RedHat-Spam-Score: -1.501 (BAYES_50, RCVD_IN_DNSWL_MED, SPF_PASS) 195.135.221.5 smtp.nue.novell.com 195.135.221.5 smtp.nue.novell.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.32 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Cc: =?UTF-8?q?C=C3=A9dric=20Bosdonnat?= Subject: [libvirt] [PATCH] lxc: allow defining environment variables X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Tue, 30 May 2017 19:33:15 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" When running an application container, setting environment variables could be important. The newly introduced tag in domain configuration will allow setting environment variables to the init program. --- docs/formatdomain.html.in | 5 +++++ docs/schemas/domaincommon.rng | 10 ++++++++++ src/conf/domain_conf.c | 38 ++++++++++++++++++++++++++++++++= ++++ src/conf/domain_conf.h | 8 ++++++++ src/lxc/lxc_container.c | 5 +++++ tests/lxcxml2xmldata/lxc-initenv.xml | 30 ++++++++++++++++++++++++++++ tests/lxcxml2xmltest.c | 1 + 7 files changed, 97 insertions(+) create mode 100644 tests/lxcxml2xmldata/lxc-initenv.xml diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 07208eef8..8da50875b 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -326,6 +326,10 @@ element, if set will be used to provide an equivalent to /proc= /cmdline but will not affect init argv.

+

+ To set environment variables, use the initenv element, = one + for each variable. +

=20
 <os>
@@ -333,6 +337,7 @@
   <init>/bin/systemd</init>
   <initarg>--unit</initarg>
   <initarg>emergency.service</initarg>
+  <initenv name=3D'MYENV'>some value</initenv>
 </os>
     
=20 diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 4d9f8d1a2..695214816 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -385,6 +385,16 @@ + + + + + [a-zA-Z_]+[a-zA-Z0-9_]* + + + + + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index c7e20b8ba..89c803047 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -2799,6 +2799,9 @@ void virDomainDefFree(virDomainDefPtr def) for (i =3D 0; def->os.initargv && def->os.initargv[i]; i++) VIR_FREE(def->os.initargv[i]); VIR_FREE(def->os.initargv); + for (i =3D 0; def->os.initenv && def->os.initenv[i]; i++) + VIR_FREE(def->os.initenv[i]); + VIR_FREE(def->os.initenv); VIR_FREE(def->os.kernel); VIR_FREE(def->os.initrd); VIR_FREE(def->os.cmdline); @@ -16776,6 +16779,7 @@ virDomainDefParseBootOptions(virDomainDefPtr def, xmlNodePtr *nodes =3D NULL; xmlNodePtr oldnode; char *tmp =3D NULL; + char *name =3D NULL; int ret =3D -1; size_t i; int n; @@ -16811,6 +16815,37 @@ virDomainDefParseBootOptions(virDomainDefPtr def, } def->os.initargv[n] =3D NULL; VIR_FREE(nodes); + + if ((n =3D virXPathNodeSet("./os/initenv", ctxt, &nodes)) < 0) + goto error; + + if (VIR_ALLOC_N(def->os.initenv, n+1) < 0) + goto error; + for (i =3D 0; i < n; i++) { + if (!(name =3D virXMLPropString(nodes[i], "name"))) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("No name supplied for element"= )); + goto error; + } + + if (!nodes[i]->children || + !nodes[i]->children->content) { + virReportError(VIR_ERR_XML_ERROR, + _("No value supplied for element"), + name); + goto error; + } + + if (VIR_ALLOC(def->os.initenv[i]) < 0) + goto error; + + def->os.initenv[i]->name =3D name; + if (VIR_STRDUP(def->os.initenv[i]->value, + (const char*) nodes[i]->children->content) < 0) + goto error; + } + def->os.initenv[n] =3D NULL; + VIR_FREE(nodes); } =20 if (def->os.type =3D=3D VIR_DOMAIN_OSTYPE_XEN || @@ -24524,6 +24559,9 @@ virDomainDefFormatInternal(virDomainDefPtr def, for (i =3D 0; def->os.initargv && def->os.initargv[i]; i++) virBufferEscapeString(buf, "%s\n", def->os.initargv[i]); + for (i =3D 0; def->os.initenv && def->os.initenv[i]; i++) + virBufferAsprintf(buf, "%s\n", + def->os.initenv[i]->name, def->os.initenv[i]->va= lue); if (def->os.loader) virDomainLoaderDefFormat(buf, def->os.loader); virBufferEscapeString(buf, "%s\n", diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 83e067269..03153b972 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1820,6 +1820,13 @@ typedef enum { VIR_ENUM_DECL(virDomainIOAPIC); =20 /* Operating system configuration data & machine / arch */ +typedef struct _virDomainOSEnv virDomainOSEnv; +typedef virDomainOSEnv *virDomainOSEnvPtr; +struct _virDomainOSEnv { + char *name; + char *value; +}; + typedef struct _virDomainOSDef virDomainOSDef; typedef virDomainOSDef *virDomainOSDefPtr; struct _virDomainOSDef { @@ -1833,6 +1840,7 @@ struct _virDomainOSDef { bool bm_timeout_set; char *init; char **initargv; + virDomainOSEnvPtr *initenv; char *kernel; char *initrd; char *cmdline; diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c index af02b5460..ffafc39d7 100644 --- a/src/lxc/lxc_container.c +++ b/src/lxc/lxc_container.c @@ -246,6 +246,11 @@ static virCommandPtr lxcContainerBuildInitCmd(virDomai= nDefPtr vmDef, if (vmDef->os.cmdline) virCommandAddEnvPair(cmd, "LIBVIRT_LXC_CMDLINE", vmDef->os.cmdline= ); =20 + for (i =3D 0; vmDef->os.initenv[i]; i++) { + virCommandAddEnvPair(cmd, vmDef->os.initenv[i]->name, + vmDef->os.initenv[i]->value); + } + virBufferFreeAndReset(&buf); return cmd; } diff --git a/tests/lxcxml2xmldata/lxc-initenv.xml b/tests/lxcxml2xmldata/lx= c-initenv.xml new file mode 100644 index 000000000..933d836a2 --- /dev/null +++ b/tests/lxcxml2xmldata/lxc-initenv.xml @@ -0,0 +1,30 @@ + + jessie + e21987a5-e98e-9c99-0e35-803e4d9ad1fe + 1048576 + 1048576 + 1 + + /machine + + + exe + /sbin/sh + bar + + + destroy + restart + restart + + /usr/libexec/libvirt_lxc + + + + + + + + + + diff --git a/tests/lxcxml2xmltest.c b/tests/lxcxml2xmltest.c index 226a73d27..2a24b60b3 100644 --- a/tests/lxcxml2xmltest.c +++ b/tests/lxcxml2xmltest.c @@ -98,6 +98,7 @@ mymain(void) DO_TEST("ethernet-hostip"); DO_TEST_FULL("filesystem-root", 0, false, VIR_DOMAIN_DEF_PARSE_SKIP_OSTYPE_CHECKS); + DO_TEST("initenv"); =20 virObjectUnref(caps); virObjectUnref(xmlopt); --=20 2.12.2 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list