Module: Panoramix

Defined in:
lib/panoramix/mpi.rb,
lib/panoramix/plugin/s3.rb,
lib/panoramix/plugin/cfn.rb,
lib/panoramix/plugin/env.rb,
lib/panoramix/plugin/git.rb,
lib/panoramix/plugin/base.rb,
lib/panoramix/plugin/wget.rb,
lib/panoramix/tasks/actions.rb,
lib/panoramix/panoramix_core.rb,
lib/panoramix/tasks/task_mpi.rb,
lib/panoramix/plugin/docker_up.rb,
lib/panoramix/tasks/global_tasks.rb,
lib/panoramix/plugin/docker_image.rb,
lib/panoramix/plugin/docker_image_base.rb

Defined Under Namespace

Modules: Plugin, Tasks Classes: MPI

Constant Summary collapse

TIMESTAMP =
Hash.new

Class Method Summary collapse

Class Method Details

.define_action_task(name, desctiption, instance, action, prerequisites) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/panoramix/panoramix_core.rb', line 44

def define_action_task(name, desctiption, instance, action, prerequisites)
  if instance.respond_to? action.name
    Rake.application.last_description = desctiption
    Rake::Task.define_task "#{name}:#{action.name.to_s}" do |t|
      run_custom_task(instance, action.name)
    end

    # This must be fixed. Bad code quality!!
    if action.name == "vars"
      t = Rake::Task["#{name}:#{action.name.to_s}"]
      t.enhance prerequisites
    end

    action.addTask("#{name}:#{action.name.to_s}", instance.class)
  end
end

.define_task(name, prerequisites, description, block = nil) ⇒ Object



61
62
63
64
65
# File 'lib/panoramix/panoramix_core.rb', line 61

def define_task(name, prerequisites, description, block=nil)
  Rake.application.last_description = description
  Rake::MultiTask.define_task({name => prerequisites}, &block) if ENV["ALLOW_MULTI"]
  Rake::Task.define_task({name => prerequisites}, &block) unless ENV["ALLOW_MULTI"]
end

.define_tasks(name, descriptions, instance, prerequisites, block = nil) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/panoramix/panoramix_core.rb', line 67

def define_tasks(name, descriptions, instance, prerequisites, block=nil)
  action = Proc.new do |t|
    run_task(t, instance, block) if block
    run_task(t, instance) unless block
    Panoramix::TIMESTAMP["#{t.scope.first}:#{name}"] = instance.timestamp
  end

  define_task(name, prerequisites, descriptions[:main], action)

  Panoramix::Tasks::Actions.each do |act|
    define_action_task(name, descriptions[act.name.to_sym], instance, act, prerequisites)
  end
end

.global_timestamps(prerequisites, scope) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/panoramix/panoramix_core.rb', line 6

def global_timestamps(prerequisites, scope)
  timestamps = prerequisites.map do |p|
    any_task = Rake::Task.tasks.any? { |t| t.name == p }
    if( any_task && (Rake::Task[p].class == Rake::FileTask))
      Rake::Task[p].timestamp
    else
      Panoramix::TIMESTAMP["#{scope}:#{p}"]
    end
  end

  # Remove nil values (fe: Directory tasks)
  timestamps.compact
end

.run_custom_task(instance, name) ⇒ Object



35
36
37
38
39
40
41
42
# File 'lib/panoramix/panoramix_core.rb', line 35

def run_custom_task(instance, name)
  method = instance.method(name.to_sym)
  begin
    method.call
  rescue Panoramix::Plugin::ValidationError => e
    puts "Validation error: #{e.message}".red
  end
end

.run_task(task, instance, block = nil) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/panoramix/panoramix_core.rb', line 20

def run_task(task, instance, block=nil)
  if instance.needed? global_timestamps(task.prerequisites, task.scope.first)
    begin
      block.call(instance) if block
      instance.run_default unless block
    rescue Panoramix::Plugin::DockerUpExceptionError => e
      puts "Error: #{e.message}".red
      puts "Exiting program...".red
      exit(1)
    end
  else
    puts "task #{task} not needed"
  end
end

.validation_error(instance, error) ⇒ Object



81
82
83
# File 'lib/panoramix/panoramix_core.rb', line 81

def validation_error(instance, error)
  puts "#{instance.class.name.split("::").last} validation error \n\t#{error.gsub("\n", "\n\t").red}"
end