diff --git a/CHANGELOG.md b/CHANGELOG.md index 91fbad0..bbf4922 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,8 @@ The client here will eventually be released as "spython" (and eventually to singularity on pypi), and the versions here will coincide with these releases. ## [master](https://github.com/singularityhub/singularity-cli/tree/master) + - add sudo_options option to Instance.start/stop and Client.execute (0.0.85) + - add environ option to Instance.start and Client.execute for passing env variables - Small bugfix for docker writer and adding pyflakes for unused imports (0.0.84) - Adding support for multistage build parsing (0.0.83) - Singularity Python does not yet support multistage builds (0.0.82) diff --git a/spython/instance/cmd/start.py b/spython/instance/cmd/start.py index 1e8ac1f..7786442 100644 --- a/spython/instance/cmd/start.py +++ b/spython/instance/cmd/start.py @@ -14,9 +14,11 @@ def start( name=None, args=None, sudo=False, + sudo_options=None, options=None, capture=False, singularity_options=None, + environ=None, ): """start an instance. This is done by default when an instance is created. @@ -77,7 +79,14 @@ def start( self.args = args self.cmd = cmd - output = run_command(cmd, sudo=sudo, quiet=True, capture=capture) + output = run_command( + cmd, + sudo=sudo, + sudo_options=sudo_options, + quiet=True, + capture=capture, + environ=environ, + ) if output["return_code"] == 0: self._update_metadata() diff --git a/spython/instance/cmd/stop.py b/spython/instance/cmd/stop.py index 1d61f4d..7bee618 100644 --- a/spython/instance/cmd/stop.py +++ b/spython/instance/cmd/stop.py @@ -8,7 +8,14 @@ from spython.logger import bot -def stop(self, name=None, sudo=False, timeout=None, singularity_options=None): +def stop( + self, + name=None, + sudo=False, + sudo_options=None, + timeout=None, + singularity_options=None, +): """stop an instance. This is done by default when an instance is created. Parameters @@ -42,7 +49,7 @@ def stop(self, name=None, sudo=False, timeout=None, singularity_options=None): instance_name = name cmd = cmd + [instance_name] - output = run_command(cmd, sudo=sudo, quiet=True) + output = run_command(cmd, sudo=sudo, sudo_options=sudo_options, quiet=True) if output["return_code"] != 0: message = "%s : return code %s" % (output["message"], output["return_code"]) diff --git a/spython/main/base/command.py b/spython/main/base/command.py index 81dcc8d..e16815b 100644 --- a/spython/main/base/command.py +++ b/spython/main/base/command.py @@ -108,6 +108,7 @@ def run_command( quiet=None, return_result=False, sudo_options=None, + environ=None, ): """run_command is a wrapper for the global run_command, checking first @@ -130,7 +131,12 @@ def run_command( quiet = self.quiet result = run_cmd( - cmd, sudo=sudo, capture=capture, quiet=quiet, sudo_options=sudo_options + cmd, + sudo=sudo, + capture=capture, + quiet=quiet, + sudo_options=sudo_options, + environ=environ, ) # If one line is returned, squash dimension diff --git a/spython/main/execute.py b/spython/main/execute.py index 28577f7..2351987 100644 --- a/spython/main/execute.py +++ b/spython/main/execute.py @@ -25,7 +25,9 @@ def execute( options=None, singularity_options=None, sudo=False, + sudo_options=None, quiet=True, + environ=None, ): """execute: send a command to a container @@ -99,9 +101,14 @@ def execute( if not stream: return self._run_command( - cmd, sudo=sudo, return_result=return_result, quiet=quiet + cmd, + sudo=sudo, + sudo_options=sudo_options, + return_result=return_result, + quiet=quiet, + environ=environ, ) - return stream_command(cmd, sudo=sudo) + return stream_command(cmd, sudo=sudo, sudo_options=sudo_options) bot.exit("Please include a command (list) to execute.") diff --git a/spython/main/instances.py b/spython/main/instances.py index 7d67dad..c206057 100644 --- a/spython/main/instances.py +++ b/spython/main/instances.py @@ -15,6 +15,7 @@ def list_instances( return_json=False, quiet=False, sudo=False, + sudo_options=None, singularity_options=None, ): """list instances. For Singularity, this is provided as a command sub @@ -53,7 +54,7 @@ def list_instances( if name is not None: cmd.append(name) - output = run_command(cmd, quiet=True, sudo=sudo) + output = run_command(cmd, quiet=True, sudo=sudo, sudo_options=sudo_options) instances = [] # Success, we have instances diff --git a/spython/utils/terminal.py b/spython/utils/terminal.py index 24d2f2a..0693620 100644 --- a/spython/utils/terminal.py +++ b/spython/utils/terminal.py @@ -149,6 +149,7 @@ def run_command( no_newline_regexp="Progess", quiet=False, sudo_options=None, + environ=None, ): """run_command uses subprocess to send a command to the terminal. If @@ -174,7 +175,8 @@ def run_command( stdout = subprocess.PIPE # Use the parent stdout and stderr - process = subprocess.Popen(cmd, stderr=subprocess.PIPE, stdout=stdout) + + process = subprocess.Popen(cmd, stderr=subprocess.PIPE, stdout=stdout, env=environ) lines = [] found_match = False diff --git a/spython/version.py b/spython/version.py index 4d9d0db..7d71657 100644 --- a/spython/version.py +++ b/spython/version.py @@ -5,7 +5,7 @@ # with this file, You can obtain one at http://mozilla.org/MPL/2.0/. -__version__ = "0.0.84" +__version__ = "0.0.85" AUTHOR = "Vanessa Sochat" AUTHOR_EMAIL = "vsochat@stanford.edu" NAME = "spython"