#!/usr/bin/env ruby require 'rbbt/util/simpleopt' require 'rbbt/workflow' require 'rbbt/workflow/usage' require 'rbbt/hpc' require 'rbbt/hpc/orchestrate' require 'time' $slurm_options = SOPT.get <<EOF -dr--dry_run Print only the template -cj--clean_job Clean job --drbbt* Use development version of rbbt -sing--singularity Use Singularity -si--singularity_img* Singularity image to use -ug--user_group* Use alternative user group for group project directory -c--contain* Contain in directory (using Singularity) -s--sync* Contain in directory and sync jobs -e--exclusive Make exclusive use of the node -hm--highmem Make use of highmem cores -wc--wipe_container* Wipe the jobs from the contain directory -CS--contain_and_sync Contain and sync to default locations -ci--copy_image When using a container directory, copy image there -t--tail Tail the logs -BPP--batch_procpath* Save Procpath performance for batch job; specify only options -q--queue* Queue -t--task_cpus* Tasks -W--workflows* Additional workflows -tm--time* Time -OR--orchestration_rules* Orchestration rules -rmb--remove_batch_basedir Remove the SLURM working directory (command, STDIN, exit status, ...) EOF batch_system = $slurm_options.delete :batch_system batch_system ||= 'auto' HPC::BATCH_MODULE = case batch_system.to_s.downcase when 'slurm' HPC::SLURM when 'lsf' HPC::LSF when 'auto' case $previous_commands.last when 'slurm' HPC::SLURM when 'lsf' HPC::LSF else case Rbbt::Config.get(:batch_system, :batch, :batch_system, :hpc, :HPC, :BATCH).to_s.downcase when 'slurm' HPC::SLURM when 'lsf' HPC::LSF else case ENV["BATCH_SYSTEM"].to_s.downcase when 'slurm' HPC::SLURM when 'lsf' HPC::LSF end end end end raise ParameterException.new("Could not detect batch_system: #{Misc.fingerprint batch_system}") if HPC::BATCH_MODULE.nil? class Step def run(*args) if done? self.load else begin Log.debug "Issuing SLURM job for #{self.path}" HPC::BATCH_MODULE.orchestrate_job(self, SOPT::GOT_OPTIONS.merge($slurm_options)) rescue HPC::SBATCH end end end end ARGV.concat ["-W", $slurm_options[:workflows], '--detach'] if $slurm_options[:workflows] load Rbbt.share.rbbt_commands.workflow.task.find