def singularity_start(self): """Starts a singularity instance based on the image. """ env_vars = self.action.get('env', {}) for s in self.action.get('secrets', []): env_vars.update({s: os.environ[s]}) for e, v in self.env.items(): env_vars.update({e: v}) env_vars.update({'HOME': os.environ['HOME']}) # sets the env variables for k, v in env_vars.items(): sclient.setenv(k, v) args = self.action.get('args', None) runs = self.action.get('runs', None) ecode = None bind_list = [self.workspace, os.environ['HOME']] if runs: info = '{}[{}] singularity exec {} {}'.format( self.msg_prefix, self.action['name'], self.image_name, runs) commands = runs start = sclient.execute else: info = '{}[{}] singularity run {} {}'.format( self.msg_prefix, self.action['name'], self.image_name, args) commands = args start = sclient.run log.info(info) if not self.dry_run: output = start(self.image_name, commands, contain=True, bind=bind_list, stream=True) try: for line in output: log.action_info(line) ecode = 0 except subprocess.CalledProcessError as ex: ecode = ex.returncode else: ecode = 0 return ecode
def singularity_start(self, image): """Starts a singularity instance based on the image. """ env_vars = self.action.get('env', {}) for s in self.action.get('secrets', []): env_vars.update({s: os.environ[s]}) for e, v in self.env.items(): env_vars.update({e: v}) env_vars.update({'HOME': os.environ['HOME']}) # sets the env variables for k, v in env_vars.items(): Client.setenv(k, v) e = Client.run(image=self.generate_image_name(image), args=' '.join(self.action.get('args', '')), return_result=True) return e['return_code']