]> git.apps.os.sepia.ceph.com Git - teuthology.git/commitdiff
Fix daemon-helper argument parsing. 328/head
authorWarren Usui <warren.usui@inktank.com>
Mon, 15 Sep 2014 18:05:14 +0000 (11:05 -0700)
committerWarren Usui <warren.usui@inktank.com>
Tue, 16 Sep 2014 22:07:35 +0000 (15:07 -0700)
Fixes: 8700
Signed-off-by: Warren Usui <warren.usui@inktank.com>
teuthology/task/daemon-helper

index ca0bbb0c6ff9e47897d6c3b1f1b52f02740e4bfe..dbb3258d603476d644e3b6fb2a8f5f17ccad8e53 100755 (executable)
@@ -13,7 +13,8 @@ When EOF is seen on stdin, the child process is killed.
 
 When the child process exits, this helper exits too.
 
-usage: daemon-helper <signal> [--kill-group] [nostdin] command...
+Usage:
+    daemon-helper <signal> [--kill-group] [nostdin] COMMAND ...
 """
 
 import fcntl
@@ -23,32 +24,44 @@ import signal
 import struct
 import subprocess
 import sys
-
+from argparse import ArgumentParser
+
+parser = ArgumentParser(epilog=
+    'The remaining parameters are the command to be run.  If these\n' +
+    'parameters start wih nostdin, then no stdin input is expected.')
+parser.add_argument('signal')
+parser.add_argument('--kill-group', action='store_true', 
+                    help='kill all processes in the group')
+parser.add_argument('--nostdin', action='store_true', 
+                    help='no stdin input expected')
+parsed, args = parser.parse_known_args()
 end_signal = signal.SIGKILL
-if sys.argv[1] == "term":
+if parsed.signal == 'term':
     end_signal = signal.SIGTERM
+group = parsed.kill_group
+nostdin = parsed.nostdin
+skip_nostdin = 0
+try:
+    if args[0] == 'nostdin':
+        nostdin = True
+        skip_nostdin = 1
+except IndexError:
+    print 'No command specified'
+    sys.exit(1)
 
-cmd_start = 2
-
-group = False
-if sys.argv[cmd_start] == "--kill-group":
-    group = True
-    cmd_start += 1
-
-nostdin = False
-if sys.argv[cmd_start] == "nostdin":
-    nostdin = True
-    cmd_start += 1
 
 proc = None
 if nostdin:
+    if len(args) - skip_nostdin == 0:
+        print 'No command specified'
+        sys.exit(1)
     proc = subprocess.Popen(
-        args=sys.argv[cmd_start:],
+        args=args[skip_nostdin:],
         )
 else:
     with file('/dev/null', 'rb') as devnull:
         proc = subprocess.Popen(
-            args=sys.argv[cmd_start:],
+            args=args,
             stdin=devnull,
             preexec_fn=os.setsid,
             )