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

Reply via email to