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" <cag...@10ur.org> Signed-off-by: Serge Hallyn <serge.hal...@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 ------------------------------------------------------------------------------ See everything from the browser to the database with AppDynamics Get end-to-end visibility with application monitoring from AppDynamics Isolate bottlenecks and diagnose root cause in seconds. Start your free trial of AppDynamics Pro today! http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk _______________________________________________ Lxc-devel mailing list Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel