On Thu, 11 Jul 2013 14:48:21 -0500 Serge Hallyn <serge.hal...@ubuntu.com> wrote:
> 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. I like having a -o for lxc-create, but I'm not sure we should change the default of lxc-create to not show the template output. For interactive use it can be quite useful, whereas I think silent certainly makes sense for the API (which is what I think Çağlars original concern was). Maybe the API should take fds which we can dup2() onto 0,1,2 of the forked create process to handle both cases? (and would allow the API to capture the output if so desired) On a related note, I guess we should make sure that all of the templates are non-interactive, especially if we're going to give them /dev/zero for stdin. Just thought I'd mention it given that the ssh one for example was asking for a passphrase until just recently ;) > 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); ------------------------------------------------------------------------------ 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