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_build.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