5af0dfb7fe
OBS-URL: https://build.opensuse.org/package/show/systemsmanagement:saltstack/salt?expand=0&rev=189
128 lines
4.9 KiB
Diff
128 lines
4.9 KiB
Diff
From a782af246a2f3d4b91afee2ee847c87f71e8904b Mon Sep 17 00:00:00 2001
|
|
From: Alexander Graul <agraul@suse.com>
|
|
Date: Fri, 25 Jun 2021 13:34:38 +0200
|
|
Subject: [PATCH] Backport Thread.is_alive fix (#390)
|
|
|
|
* Change thread.isAlive() to thread.is_alive()
|
|
|
|
(cherry picked from commit b1dc0cee03896c8abad55a609805b0be6c7aaefa)
|
|
|
|
* Run pre-commit on salt/utils/timed_subprocess.py
|
|
|
|
(cherry picked from commit 178e3b83e6c21abf5d6db454c19c104ceb8bd92c)
|
|
|
|
* Fix the six removal made by pre-commit
|
|
|
|
(cherry picked from commit aaa8ca3b7f129568637799d6d49d7ad3708f73bc)
|
|
|
|
* Remove the PY2 code in salt/utils/timed_subprocess.py
|
|
|
|
(cherry picked from commit 3a702a510b965e9af1ad318c953e19114925357e)
|
|
|
|
Co-authored-by: Petr Messner <petr@leadhub.co>
|
|
Co-authored-by: Petr Messner <petr.messner@gmail.com>
|
|
---
|
|
salt/utils/timed_subprocess.py | 39 ++++++++++++++--------------------
|
|
1 file changed, 16 insertions(+), 23 deletions(-)
|
|
|
|
diff --git a/salt/utils/timed_subprocess.py b/salt/utils/timed_subprocess.py
|
|
index 5c4ac35ac3..b043a3bde2 100644
|
|
--- a/salt/utils/timed_subprocess.py
|
|
+++ b/salt/utils/timed_subprocess.py
|
|
@@ -1,8 +1,6 @@
|
|
-# -*- coding: utf-8 -*-
|
|
"""
|
|
For running command line executables with a timeout
|
|
"""
|
|
-from __future__ import absolute_import, print_function, unicode_literals
|
|
|
|
import shlex
|
|
import subprocess
|
|
@@ -10,10 +8,9 @@ import threading
|
|
|
|
import salt.exceptions
|
|
import salt.utils.data
|
|
-from salt.ext import six
|
|
|
|
|
|
-class TimedProc(object):
|
|
+class TimedProc:
|
|
"""
|
|
Create a TimedProc object, calls subprocess.Popen with passed args and **kwargs
|
|
"""
|
|
@@ -46,7 +43,7 @@ class TimedProc(object):
|
|
|
|
if self.timeout and not isinstance(self.timeout, (int, float)):
|
|
raise salt.exceptions.TimedProcTimeoutError(
|
|
- "Error: timeout {0} must be a number".format(self.timeout)
|
|
+ "Error: timeout {} must be a number".format(self.timeout)
|
|
)
|
|
if kwargs.get("shell", False):
|
|
args = salt.utils.data.decode(args, to_str=True)
|
|
@@ -59,28 +56,24 @@ class TimedProc(object):
|
|
try:
|
|
args = shlex.split(args)
|
|
except AttributeError:
|
|
- args = shlex.split(six.text_type(args))
|
|
+ args = shlex.split(str(args))
|
|
str_args = []
|
|
for arg in args:
|
|
- if not isinstance(arg, six.string_types):
|
|
- str_args.append(six.text_type(arg))
|
|
+ if not isinstance(arg, str):
|
|
+ str_args.append(str(arg))
|
|
else:
|
|
str_args.append(arg)
|
|
args = str_args
|
|
else:
|
|
- if not isinstance(args, (list, tuple, six.string_types)):
|
|
+ if not isinstance(args, (list, tuple, str)):
|
|
# Handle corner case where someone does a 'cmd.run 3'
|
|
- args = six.text_type(args)
|
|
+ args = str(args)
|
|
# Ensure that environment variables are strings
|
|
- for key, val in six.iteritems(kwargs.get("env", {})):
|
|
- if not isinstance(val, six.string_types):
|
|
- kwargs["env"][key] = six.text_type(val)
|
|
- if not isinstance(key, six.string_types):
|
|
- kwargs["env"][six.text_type(key)] = kwargs["env"].pop(key)
|
|
- if six.PY2 and "env" in kwargs:
|
|
- # Ensure no unicode in custom env dict, as it can cause
|
|
- # problems with subprocess.
|
|
- kwargs["env"] = salt.utils.data.encode_dict(kwargs["env"])
|
|
+ for key, val in kwargs.get("env", {}).items():
|
|
+ if not isinstance(val, str):
|
|
+ kwargs["env"][key] = str(val)
|
|
+ if not isinstance(key, str):
|
|
+ kwargs["env"][str(key)] = kwargs["env"].pop(key)
|
|
args = salt.utils.data.decode(args)
|
|
self.process = subprocess.Popen(args, **kwargs)
|
|
self.command = args
|
|
@@ -103,18 +96,18 @@ class TimedProc(object):
|
|
rt = threading.Thread(target=receive)
|
|
rt.start()
|
|
rt.join(self.timeout)
|
|
- if rt.isAlive():
|
|
+ if rt.is_alive():
|
|
# Subprocess cleanup (best effort)
|
|
self.process.kill()
|
|
|
|
def terminate():
|
|
- if rt.isAlive():
|
|
+ if rt.is_alive():
|
|
self.process.terminate()
|
|
|
|
threading.Timer(10, terminate).start()
|
|
raise salt.exceptions.TimedProcTimeoutError(
|
|
- "{0} : Timed out after {1} seconds".format(
|
|
- self.command, six.text_type(self.timeout),
|
|
+ "{} : Timed out after {} seconds".format(
|
|
+ self.command, str(self.timeout),
|
|
)
|
|
)
|
|
return self.process.returncode
|
|
--
|
|
2.32.0
|
|
|
|
|