[lxc-devel] [PATCH] introduce lxc_config

Serge Hallyn serge.hallyn at ubuntu.com
Mon Apr 29 21:30:00 UTC 2013


Quoting Serge Hallyn (serge.hallyn at ubuntu.com):
> Quoting Serge Hallyn (serge.hallyn at ubuntu.com):
> > add vg and zfsroot options to lxc.functions and use in lxc-create
> > 
> > also make sure to drop spaces between = and variable in lxc.conf
> 
> Hm, a hunk is missing from this patch.  Ignore this one for now, I'm
> getting rid of the duplication of reading global configs in
> lxc.functions.in and replacing it with a wrapper program 'lxc_config',
> will merge that with this when I send.

[[
Eh, on second thought, the dropped part disappears anyway, so here is
the last bit as a separate patch.

Dwight or Stéphane, if one of you could review and/or ack the set at
https://github.com/hallyn/lxc/commits/s.b.clone2 (or in this thread),
I'd like to address any needed changes and push to staging.
]]

Subject: [PATCH 1/1] introduce lxc_config

It's a tiny program (exported through the api) wrapping the util.c
helpers for reading /etc/lxc/lxc.conf variables, and replaces
the kludgy shell duplication in lxc.functions.in

Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
---
 src/lxc/Makefile.am      |  4 +++-
 src/lxc/lxc.functions.in | 33 +++-----------------------------
 src/lxc/lxc_config.c     | 50 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/lxc/lxccontainer.c   | 10 ++++++++++
 src/lxc/lxccontainer.h   |  2 ++
 5 files changed, 68 insertions(+), 31 deletions(-)
 create mode 100644 src/lxc/lxc_config.c

diff --git a/src/lxc/Makefile.am b/src/lxc/Makefile.am
index fee6103..e3ff4a9 100644
--- a/src/lxc/Makefile.am
+++ b/src/lxc/Makefile.am
@@ -161,7 +161,8 @@ bin_PROGRAMS = \
 	lxc-unfreeze \
 	lxc-checkpoint \
 	lxc-restart \
-	lxc-kill
+	lxc-kill \
+	lxc-config
 
 pkglibexec_PROGRAMS = \
 	lxc-init
@@ -178,6 +179,7 @@ LDADD=liblxc.so @CAP_LIBS@ @APPARMOR_LIBS@ @SECCOMP_LIBS@
 lxc_attach_SOURCES = lxc_attach.c
 lxc_cgroup_SOURCES = lxc_cgroup.c
 lxc_checkpoint_SOURCES = lxc_checkpoint.c
+lxc_config_SOURCES = lxc_config.c
 lxc_console_SOURCES = lxc_console.c
 lxc_execute_SOURCES = lxc_execute.c
 lxc_freeze_SOURCES = lxc_freeze.c
diff --git a/src/lxc/lxc.functions.in b/src/lxc/lxc.functions.in
index 416267f..ad3d42f 100644
--- a/src/lxc/lxc.functions.in
+++ b/src/lxc/lxc.functions.in
@@ -25,33 +25,6 @@ bindir=@BINDIR@
 templatedir=@LXCTEMPLATEDIR@
 lxcinitdir=@LXCINITDIR@
 
-get_default_lxcpath() {
-	LXC_PATH=$(grep -v "^#" "$globalconf" 2>/dev/null | grep "[ \t]*lxcpath[ \t]*=") || true
-	if [ -n "$LXC_PATH" ]; then
-		echo $LXC_PATH | awk -F= '{ print $2 }'
-	else
-		echo @LXCPATH@
-	fi
-}
-
-get_default_vg() {
-	LXC_VG=$(grep -v "^#" "$globalconf" 2>/dev/null | grep "[ \t]*lvm_vg[ \t]*=") || true
-	if [ -n "$LXC_VG" ]; then
-		echo $LXC_VG | awk -F= '{ print $2 }'
-	else
-		echo "lxc"
-	fi
-}
-
-get_default_zfsroot() {
-	LXC_ZFSROOT=$(grep -v "^#" "$globalconf" 2>/dev/null | grep "[ \t]*zfsroot[ \t]*=") || true
-	if [ -n "$LXC_ZFSROOT" ]; then
-		echo $LXC_ZFSROOT | awk -F= '{ print $2 }'
-	else
-		echo "tank/lxc"
-	fi
-}
-
-lxc_path=`get_default_lxcpath`
-lxc_vg=`get_default_vg`
-lxc_zfsroot=`get_default_zfsroot`
+lxc_path=`lxc-config default_path`
+lxc_vg=`lxc-config lvm_vg`
+lxc_zfsroot=`lxc-config zfsroot`
diff --git a/src/lxc/lxc_config.c b/src/lxc/lxc_config.c
new file mode 100644
index 0000000..83621ec
--- /dev/null
+++ b/src/lxc/lxc_config.c
@@ -0,0 +1,50 @@
+#include <stdio.h>
+#include "config.h"
+#include "lxccontainer.h"
+
+struct lxc_config_items {
+	char *name;
+	const char *(*fn)(void);
+};
+
+struct lxc_config_items items[] =
+{
+	{ .name = "default_path", .fn = &lxc_get_default_config_path, },
+	{ .name = "lvm_vg", .fn = &lxc_get_default_lvm_vg, },
+	{ .name = "zfsroot", .fn = &lxc_get_default_zfs_root, },
+	{ .name = NULL, },
+};
+
+void usage(char *me)
+{
+	printf("Usage: %s -l: list all available configuration items\n", me);
+	printf("       %s item: print configuration item\n", me);
+	exit(1);
+}
+
+void list_config_items(void)
+{
+	struct lxc_config_items *i;
+
+	for (i = &items[0]; i->name; i++)
+		printf("%s\n", i->name);
+	exit(0);
+}
+
+int main(int argc, char *argv[])
+{
+	struct lxc_config_items *i;
+
+	if (argc < 2)
+		usage(argv[0]);
+	if (strcmp(argv[1], "-l") == 0)
+		list_config_items();
+	for (i = &items[0]; i->name; i++) {
+		if (strcmp(argv[1], i->name) == 0) {
+			printf("%s\n", i->fn());
+			exit(0);
+		}
+	}
+	printf("Unknown configuration item: %s\n", argv[1]);
+	return 0;
+}
diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
index ef111c0..e218407 100644
--- a/src/lxc/lxccontainer.c
+++ b/src/lxc/lxccontainer.c
@@ -1007,6 +1007,16 @@ const char *lxc_get_default_config_path(void)
 	return default_lxc_path();
 }
 
+const char *lxc_get_default_lvm_vg(void)
+{
+	return default_lvm_vg();
+}
+
+const char *lxc_get_default_zfs_root(void)
+{
+	return default_zfs_root();
+}
+
 const char *lxc_get_version(void)
 {
 	return lxc_version();
diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h
index a4be753..b6bd97c 100644
--- a/src/lxc/lxccontainer.h
+++ b/src/lxc/lxccontainer.h
@@ -122,6 +122,8 @@ int lxc_container_get(struct lxc_container *c);
 int lxc_container_put(struct lxc_container *c);
 int lxc_get_wait_states(const char **states);
 const char *lxc_get_default_config_path(void);
+const char *lxc_get_default_lvm_vg(void);
+const char *lxc_get_default_zfs_root(void);
 const char *lxc_get_version(void);
 
 #if 0
-- 
1.8.1.2





More information about the lxc-devel mailing list