Source code for spython.instance.cmd.start

# Copyright (C) 2017-2022 Vanessa Sochat.

# This Source Code Form is subject to the terms of the
# Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed
# with this file, You can obtain one at http://mozilla.org/MPL/2.0/.


from spython.logger import bot


[docs]def start( self, image=None, name=None, args=None, sudo=False, sudo_options=None, options=None, capture=False, singularity_options=None, environ=None, quiet=True, ): """start an instance. This is done by default when an instance is created. Parameters ========== image: optionally, an image uri (if called as a command from Client) name: a name for the instance sudo: if the user wants to run the command with sudo capture: capture output, default is False. With True likely to hang. args: arguments to provide to the instance (supported Singularity 3.1+) singularity_options: a list of options to provide to the singularity client quiet: Do not print verbose output. options: a list of tuples, each an option to give to the start command [("--bind", "/tmp"),...] USAGE: singularity [...] instance.start [...] <container path> <instance name> """ from spython.utils import run_command, check_install check_install() # If name provided, over write robot (default) if name is not None: self.name = name # If an image isn't provided, we have an initialized instance if image is None: # Not having this means it was called as a command, without an image if not hasattr(self, "_image"): bot.exit("Please provide an image, or create an Instance first.") image = self._image cmd = self._init_command(["instance", "start"], singularity_options) # Set options and args args = args or self.args options = options or self.options # Add options, if they are provided if not isinstance(options, list): options = [] if options is None else options.split(" ") # Assemble the command! cmd = cmd + options + [image, self.name] # If arguments are provided if args is not None: if not isinstance(args, list): args = [args] cmd = cmd + args # Print verbose output if not (quiet or self.quiet): bot.info(" ".join(cmd)) # Save the options and cmd, if the user wants to see them later self.options = options self.args = args self.cmd = cmd output = run_command( cmd, sudo=sudo, sudo_options=sudo_options, quiet=True, capture=capture, environ=environ, ) if output["return_code"] == 0: self._update_metadata() else: message = "%s : return code %s" % (output["message"], output["return_code"]) bot.error(message) return self