diff --git a/src/kiwi/subcommands/utils/dockercommand.py b/src/kiwi/subcommands/utils/dockercommand.py index 34cf42a..d0426bd 100644 --- a/src/kiwi/subcommands/utils/dockercommand.py +++ b/src/kiwi/subcommands/utils/dockercommand.py @@ -33,27 +33,28 @@ def _update_kwargs(config, args, **kwargs): class DockerCommand(Executable): - __requires_root = None + __has_tried = False def __init__(self, exe_name): super().__init__(exe_name) - if DockerCommand.__requires_root is None: + if not DockerCommand.__has_tried: try: Executable('docker').run( ['ps'], check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL ) - DockerCommand.__requires_root = False + DockerCommand.__has_tried = True + except subprocess.CalledProcessError: - DockerCommand.__requires_root = True + raise PermissionError("Cannot access docker, please get into the docker group or run as root!") def run(self, config, args, process_args, **kwargs): kwargs = _update_kwargs(config, args, **kwargs) # equivalent to 'super().run' but agnostic of nested class construct return super().__getattr__("run")( - process_args, config, DockerCommand.__requires_root, + process_args, config, **kwargs ) @@ -61,6 +62,6 @@ class DockerCommand(Executable): kwargs = _update_kwargs(config, args, **kwargs) return super().__getattr__("run_less")( - process_args, config, DockerCommand.__requires_root, + process_args, config, **kwargs ) diff --git a/src/kiwi/subcommands/utils/executable.py b/src/kiwi/subcommands/utils/executable.py index e1116ad..4b7fecb 100644 --- a/src/kiwi/subcommands/utils/executable.py +++ b/src/kiwi/subcommands/utils/executable.py @@ -42,37 +42,34 @@ class Executable: def __init__(self, exe_name): self.__exe_path = _find_exe_file(exe_name) - def __build_cmd(self, args, requires_root=False, **kwargs): + def __build_cmd(self, args, **kwargs): cmd = [self.__exe_path, *args] - if requires_root: - self.__exe_path = [_find_exe_file("sudo"), self.__exe_path] - logging.debug(f"Executable cmd{cmd}, kwargs{kwargs}") return cmd - def run(self, process_args, config=None, requires_root=False, **kwargs): + def run(self, process_args, config=None, **kwargs): kwargs = _update_kwargs(config, **kwargs) return subprocess.run( - self.__build_cmd(process_args, requires_root, **kwargs), + self.__build_cmd(process_args, **kwargs), **kwargs ) - def Popen(self, process_args, config=None, requires_root=False, **kwargs): + def Popen(self, process_args, config=None, **kwargs): kwargs = _update_kwargs(config, **kwargs) return subprocess.Popen( - self.__build_cmd(process_args, requires_root, **kwargs), + self.__build_cmd(process_args, **kwargs), **kwargs ) - def run_less(self, process_args, config=None, requires_root=False, **kwargs): + def run_less(self, process_args, config=None, **kwargs): kwargs['stdout'] = subprocess.PIPE kwargs['stderr'] = subprocess.DEVNULL process = self.Popen( - process_args, config, requires_root, + process_args, config, **kwargs )