From b38262f858077f8f57781d60e4439ad07b0be0ab Mon Sep 17 00:00:00 2001
From: Steven Armstrong <steven@icarus.ethz.ch>
Date: Mon, 31 Oct 2011 16:07:33 +0100
Subject: [PATCH] implement reading initial manifest from stdin

Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
---
 bin/cdist | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/bin/cdist b/bin/cdist
index ffda3e42..4d9cd8a2 100755
--- a/bin/cdist
+++ b/bin/cdist
@@ -60,7 +60,7 @@ def commandline():
          help='Change cdist home (default: .. from bin directory)',
          action='store')
     parser['configinstall'].add_argument('-i', '--initial-manifest', 
-         help='Path to a cdist manifest',
+         help='Path to a cdist manifest or \'-\' to read from stdin.',
          dest='manifest', required=False)
     parser['configinstall'].add_argument('-p', '--parallel',
          help='Operate on multiple hosts in parallel',
@@ -104,6 +104,17 @@ def configinstall(args, mode):
     import multiprocessing
     import time
 
+    initial_manifest_tempfile = None
+    if args.manifest == '-':
+        # read initial manifest from stdin
+        import tempfile
+        handle, initial_manifest_temp_path = tempfile.mkstemp(prefix='cdist.stdin.')
+        with os.fdopen(handle, 'w') as fd:
+            fd.write(sys.stdin.read())
+        args.manifest = initial_manifest_temp_path
+        import atexit
+        atexit.register(lambda: os.remove(initial_manifest_temp_path))
+
     try:
         process = {}
         failed_hosts = []