]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Uses a common subprocess popen function
authorGary Kotton <gkotton@redhat.com>
Sun, 23 Sep 2012 08:34:33 +0000 (08:34 +0000)
committerGary Kotton <gkotton@redhat.com>
Sun, 23 Sep 2012 08:45:31 +0000 (08:45 +0000)
Fixes bug 1053381

Change-Id: I8a89ba8d4f03094fcc581981044582c95d1300bb

bin/quantum-rootwrap
quantum/agent/linux/utils.py
quantum/common/utils.py
quantum/tests/unit/test_rootwrap.py

index 96939ae2ff2de4a7cf813e558e96b7443c0013e4..6b997330960a15a4321adb36cbc0c71c1a5fc357 100755 (executable)
 import ConfigParser
 import os
 import signal
-import subprocess
 import sys
 
+from quantum.common import utils
+
 
 RC_UNAUTHORIZED = 99
 RC_NOCOMMAND = 98
 RC_BADCONFIG = 97
 
 
-def _subprocess_setup():
-    # Python installs a SIGPIPE handler by default. This is usually not what
-    # non-Python subprocesses expect.
-    signal.signal(signal.SIGPIPE, signal.SIG_DFL)
-
-
 if __name__ == '__main__':
     # Split arguments, require at least a command
     execname = sys.argv.pop(0)
@@ -87,12 +82,11 @@ if __name__ == '__main__':
     filters = wrapper.load_filters(filters_path)
     filtermatch = wrapper.match_filter(filters, userargs)
     if filtermatch:
-        obj = subprocess.Popen(filtermatch.get_command(userargs),
-                               stdin=sys.stdin,
-                               stdout=sys.stdout,
-                               stderr=sys.stderr,
-                               preexec_fn=_subprocess_setup,
-                               env=filtermatch.get_environment(userargs))
+        obj = utils.subprocess_popen(filtermatch.get_command(userargs),
+                                     stdin=sys.stdin,
+                                     stdout=sys.stdout,
+                                     stderr=sys.stderr,
+                                     env=filtermatch.get_environment(userargs))
         obj.wait()
         sys.exit(obj.returncode)
 
index e8f3b716708ee86ad235f0d7bd2db9dc376ecf5f..0d11aa0c07f5eb3713de05034b3fa35d8ae82322 100644 (file)
@@ -27,14 +27,10 @@ import struct
 
 from eventlet.green import subprocess
 
-
-LOG = logging.getLogger(__name__)
+from quantum.common import utils
 
 
-def _subprocess_setup():
-    # Python installs a SIGPIPE handler by default. This is usually not what
-    # non-Python subprocesses expect.
-    signal.signal(signal.SIGPIPE, signal.SIG_DFL)
+LOG = logging.getLogger(__name__)
 
 
 def execute(cmd, root_helper=None, process_input=None, addl_env=None,
@@ -47,10 +43,11 @@ def execute(cmd, root_helper=None, process_input=None, addl_env=None,
     env = os.environ.copy()
     if addl_env:
         env.update(addl_env)
-    obj = subprocess.Popen(cmd, shell=False, stdin=subprocess.PIPE,
-                           stdout=subprocess.PIPE, stderr=subprocess.PIPE,
-                           preexec_fn=_subprocess_setup,
-                           env=env)
+    obj = utils.subprocess_popen(cmd, shell=False,
+                                 stdin=subprocess.PIPE,
+                                 stdout=subprocess.PIPE,
+                                 stderr=subprocess.PIPE,
+                                 env=env)
 
     _stdout, _stderr = (process_input and
                         obj.communicate(process_input) or
index 313ee2af16dabfd755dc5025b818f591181895ad..f57fafca8434703787cee04cc3b3fa164932fb7a 100644 (file)
 import logging
 import os
 import signal
-import subprocess
 import uuid
 
+from eventlet.green import subprocess
+
 from quantum.openstack.common import cfg
-from quantum.openstack.common.exception import ProcessExecutionError
 
 TIME_FORMAT = "%Y-%m-%dT%H:%M:%SZ"
 
@@ -120,3 +120,16 @@ def find_config_file(options, config_file):
 def str_uuid():
     """Return a uuid as a string"""
     return str(uuid.uuid4())
+
+
+def _subprocess_setup():
+    # Python installs a SIGPIPE handler by default. This is usually not what
+    # non-Python subprocesses expect.
+    signal.signal(signal.SIGPIPE, signal.SIG_DFL)
+
+
+def subprocess_popen(args, stdin=None, stdout=None, stderr=None, shell=False,
+                     env=None):
+    return subprocess.Popen(args, shell=shell, stdin=stdin, stdout=stdout,
+                            stderr=stderr, preexec_fn=_subprocess_setup,
+                            env=env)
index 42ab473f7f1191f901e5b091c87aa5014fa76b76..979ff20ca0a40d2dfd99729cd5d8a2f41a51c309 100644 (file)
@@ -19,6 +19,7 @@ import subprocess
 
 import unittest2 as unittest
 
+from quantum.common import utils
 from quantum.rootwrap import filters
 from quantum.rootwrap import wrapper
 
@@ -65,7 +66,7 @@ class RootwrapTestCase(unittest.TestCase):
         self.assertEqual(env.get('QUANTUM_NETWORK_ID'), 'foobar')
 
     def test_KillFilter(self):
-        p = subprocess.Popen(["/bin/sleep", "5"])
+        p = utils.subprocess_popen(["/bin/sleep", "5"])
         f = filters.KillFilter("root", "/bin/sleep", "-9", "-HUP")
         f2 = filters.KillFilter("root", "/usr/bin/sleep", "-9", "-HUP")
         usercmd = ['kill', '-ALRM', p.pid]