[lxc-devel] [PATCH] lxc_create: add outfile option
Serge Hallyn
serge.hallyn at ubuntu.com
Thu Jul 11 19:48:21 UTC 2013
lxc-create ... -o -
will send template output to standard output (the old default).
lxc-create ... without any -o will hide template output.
lxc-create -o /tmp/xxx will send template output to the file
/tmp/xxx.
Reported-by: "S.Çağlar Onur" <caglar at 10ur.org>
Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
---
src/lxc/arguments.h | 2 +-
src/lxc/lxc_create.c | 22 ++++++++++++++++++++++
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/src/lxc/arguments.h b/src/lxc/arguments.h
index 3d1df70..6ab88fc 100644
--- a/src/lxc/arguments.h
+++ b/src/lxc/arguments.h
@@ -81,7 +81,7 @@ struct lxc_arguments {
char *fstype;
unsigned long fssize;
char *lvname, *vgname;
- char *zfsroot, *lowerdir, *dir;
+ char *zfsroot, *lowerdir, *dir, *outfile;
/* remaining arguments */
char *const *argv;
diff --git a/src/lxc/lxc_create.c b/src/lxc/lxc_create.c
index 6d8ca01..32805f4 100644
--- a/src/lxc/lxc_create.c
+++ b/src/lxc/lxc_create.c
@@ -68,6 +68,7 @@ static int my_parser(struct lxc_arguments* args, int c, char* arg)
case '3': args->fssize = get_fssize(arg); break;
case '4': args->zfsroot = arg; break;
case '5': args->dir = arg; break;
+ case '6': args->outfile = arg; break;
}
return 0;
}
@@ -82,6 +83,7 @@ static const struct option my_longopts[] = {
{"fssize", required_argument, 0, '3'},
{"zfsroot", required_argument, 0, '4'},
{"dir", required_argument, 0, '5'},
+ {"outfile", required_argument, 0, '6'},
LXC_COMMON_OPTIONS
};
@@ -134,6 +136,9 @@ Options :\n\
--fssize=SIZE Create filesystem of size SIZE\n\
(Default: 1G))\n\
--dir=DIR Place rootfs directory under DIR\n\
+ --outfile=FILE Print template output to FILE\n\
+ Use '-' to indicate stdout\n\
+ If unspecified, output is hidden\n\
--zfsroot=PATH Create zfs under given zfsroot\n\
(Default: tank/lxc))\n",
.options = my_longopts,
@@ -228,6 +233,23 @@ int main(int argc, char *argv[])
if (strcmp(my_args.bdevtype, "_unset") == 0)
my_args.bdevtype = NULL;
+
+ /* redirect output if requested */
+ if (!my_args.outfile) {
+ close(0); close(1); close(2);
+ open("/dev/zero", O_RDONLY);
+ open("/dev/null", O_RDWR);
+ open("/dev/null", O_RDWR);
+ } else if (strcmp(my_args.outfile, "-") != 0) {
+ mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP;
+ close(0); close(1); close(2);
+ open("/dev/zero", O_RDONLY);
+ if (open(my_args.outfile, O_RDWR | O_CREAT, mode) < 0 ||
+ open(my_args.outfile, O_RDWR) < 0) {
+ SYSERROR("Error opening %s\n", my_args.outfile);
+ exit(1);
+ }
+ }
if (!c->create(c, my_args.template, my_args.bdevtype, &spec, &argv[optind])) {
ERROR("Error creating container %s", c->name);
lxc_container_put(c);
--
1.7.9.5
More information about the lxc-devel
mailing list