Module: Blender::SchedulerDSL
Instance Method Summary
collapse
-
#add_handler(handler) ⇒ Object
(also: #register_handler)
-
#append_task(type, task) ⇒ Object
-
#ask(msg, echo = false) ⇒ Object
-
#build_task(name, type) ⇒ Object
-
#concurrency(value) ⇒ Object
-
#config(type, opts = {}) ⇒ Object
(also: #init)
-
#driver(type, opts = {}) {|config| ... } ⇒ Object
-
#ignore_failure(value) ⇒ Object
-
#lock(opts = {}) ⇒ Object
-
#lock_options(driver, opts = {}) ⇒ Object
-
#log_level(level) ⇒ Object
-
#members(hosts) ⇒ Object
-
#on(event_type, &block) ⇒ Object
-
#ruby_task(name, &block) ⇒ Object
-
#scp_download(name, &block) ⇒ Object
-
#scp_upload(name, &block) ⇒ Object
-
#shell_task(name, &block) ⇒ Object
(also: #task)
-
#ssh_task(name, &block) ⇒ Object
-
#strategy(strategy) ⇒ Object
Methods included from Discovery
#build_discovery, #old_search, #search, #search_with_config
#camelcase, #symbolize
Instance Method Details
#add_handler(handler) ⇒ Object
Also known as:
register_handler
67
68
69
|
# File 'lib/blender/scheduler/dsl.rb', line 67
def add_handler(handler)
events.register(handler)
end
|
#append_task(type, task) ⇒ Object
91
92
93
94
95
96
97
98
99
100
101
|
# File 'lib/blender/scheduler/dsl.rb', line 91
def append_task(type, task)
Log.debug("Appended task:#{task.name}")
klass = Blender::Driver.const_get(camelcase(type.to_s).to_sym)
if task.driver.nil?
opts = {}
opts.merge!(Blender::Configuration[type]) unless Blender::Configuration[type].empty?
opts.merge!(task.driver_opts)
task.use_driver(driver(type, opts))
end
@tasks << task
end
|
#ask(msg, echo = false) ⇒ Object
52
53
54
|
# File 'lib/blender/scheduler/dsl.rb', line 52
def ask(msg, echo = false)
HighLine.new.ask(msg){|q| q.echo = echo}
end
|
#build_task(name, type) ⇒ Object
83
84
85
86
87
88
89
|
# File 'lib/blender/scheduler/dsl.rb', line 83
def build_task(name, type)
task_klass = Blender::Task.const_get(camelcase(type.to_s).to_sym)
driver_klass = Blender::Driver.const_get(camelcase(type.to_s).to_sym)
task = task_klass.new(name)
task.members(metadata[:members]) unless metadata[:members].empty?
task
end
|
#concurrency(value) ⇒ Object
150
151
152
|
# File 'lib/blender/scheduler/dsl.rb', line 150
def concurrency(value)
@metadata[:concurrency] = value
end
|
#config(type, opts = {}) ⇒ Object
Also known as:
init
42
43
44
|
# File 'lib/blender/scheduler/dsl.rb', line 42
def config(type, opts = {})
Blender::Configuration[type].merge!(opts)
end
|
#driver(type, opts = {}) {|config| ... } ⇒ Object
56
57
58
59
60
61
62
63
64
65
|
# File 'lib/blender/scheduler/dsl.rb', line 56
def driver(type, opts = {})
klass_name = camelcase(type.to_s).to_sym
config = symbolize(opts.merge(events: events))
yield config if block_given?
begin
Blender::Driver.const_get(klass_name).new(config)
rescue NameError => e
raise UnknownDriver, e.message
end
end
|
#ignore_failure(value) ⇒ Object
154
155
156
|
# File 'lib/blender/scheduler/dsl.rb', line 154
def ignore_failure(value)
@metadata[:ignore_failure] = value
end
|
#lock(opts = {}) ⇒ Object
167
168
169
170
171
172
173
174
175
176
177
|
# File 'lib/blender/scheduler/dsl.rb', line 167
def lock(opts = {})
options = lock_properties.dup.merge(opts)
if options[:driver]
lock_klass = Lock.const_get(camelcase(options[:driver]).to_sym)
lock_klass.new(name, options[:driver_options]).with_lock do
yield if block_given?
end
else
yield if block_given?
end
end
|
#lock_options(driver, opts = {}) ⇒ Object
162
163
164
165
|
# File 'lib/blender/scheduler/dsl.rb', line 162
def lock_options(driver, opts = {})
@lock_properties[:driver] = driver
@lock_properties[:driver_options].merge!(opts.dup)
end
|
#log_level(level) ⇒ Object
48
49
50
|
# File 'lib/blender/scheduler/dsl.rb', line 48
def log_level(level)
Blender::Log.level = level
end
|
#members(hosts) ⇒ Object
158
159
160
|
# File 'lib/blender/scheduler/dsl.rb', line 158
def members(hosts)
@metadata[:members] = hosts
end
|
#on(event_type, &block) ⇒ Object
73
74
75
76
77
78
79
80
81
|
# File 'lib/blender/scheduler/dsl.rb', line 73
def on(event_type, &block)
add_handler(
Class.new(Handlers::Base) do
define_method(event_type) do |*args|
block.call(args)
end
end.new
)
end
|
#ruby_task(name, &block) ⇒ Object
110
111
112
113
114
|
# File 'lib/blender/scheduler/dsl.rb', line 110
def ruby_task(name, &block)
task = build_task(name, :ruby)
task.instance_eval(&block) if block_given?
append_task(:ruby, task)
end
|
#scp_download(name, &block) ⇒ Object
133
134
135
136
137
138
|
# File 'lib/blender/scheduler/dsl.rb', line 133
def scp_download(name, &block)
task = build_task(name, :scp)
task.instance_eval(&block) if block_given?
task.direction = :download
append_task(:scp, task)
end
|
#scp_upload(name, &block) ⇒ Object
126
127
128
129
130
131
|
# File 'lib/blender/scheduler/dsl.rb', line 126
def scp_upload(name, &block)
task = build_task(name, :scp)
task.instance_eval(&block) if block_given?
task.direction = :upload
append_task(:scp, task)
end
|
#shell_task(name, &block) ⇒ Object
Also known as:
task
103
104
105
106
107
108
|
# File 'lib/blender/scheduler/dsl.rb', line 103
def shell_task(name, &block)
task = build_task(name, :shell_out)
task.members(['localhost'])
task.instance_eval(&block) if block_given?
append_task(:shell_out, task)
end
|
#ssh_task(name, &block) ⇒ Object
116
117
118
119
120
121
122
123
124
|
# File 'lib/blender/scheduler/dsl.rb', line 116
def ssh_task(name, &block)
task = build_task(name, :ssh)
task.instance_eval(&block) if block_given?
if task.metadata[:concurrency] == 1
append_task(:ssh, task)
else
append_task(:ssh_multi, task)
end
end
|
#strategy(strategy) ⇒ Object
140
141
142
143
144
145
146
147
148
|
# File 'lib/blender/scheduler/dsl.rb', line 140
def strategy(strategy)
klass_name = camelcase(strategy.to_s).to_sym
begin
@scheduling_strategy = Blender::SchedulingStrategy.const_get(klass_name).new
@scheduling_strategy.freeze
rescue NameError => e
raise UnknownSchedulingStrategy, e.message
end
end
|