module Blender::SchedulerDSL
Public Instance Methods
add_handler(handler)
click to toggle source
# File lib/blender/scheduler/dsl.rb, line 69 def add_handler(handler) events.register(handler) end
Also aliased as: register_handler
append_task(type, task, driver_config = {})
click to toggle source
# File lib/blender/scheduler/dsl.rb, line 92 def append_task(type, task, driver_config = {}) Log.debug("Appended task:#{task.name}") klass = Blender::Driver.const_get(camelcase(type.to_s).to_sym) if task.driver.nil? opts = driver_config.dup opts.merge!(blender_config(type)) unless blender_config(type).empty? opts.merge!(task.driver_opts) task.use_driver(driver(type, opts)) end @tasks << task end
ask(msg, echo = false)
click to toggle source
# File lib/blender/scheduler/dsl.rb, line 54 def ask(msg, echo = false) HighLine.new.ask(msg){|q| q.echo = echo} end
blend_task(name, &block)
click to toggle source
# File lib/blender/scheduler/dsl.rb, line 141 def blend_task(name, &block) task = build_task(name, :blend) task.instance_eval(&block) if block_given? task.command.pass_configs.each do |key| task.command.config_store[key] = blender_config(key).dup end append_task(:blend, task) end
build_task(name, type)
click to toggle source
# File lib/blender/scheduler/dsl.rb, line 85 def build_task(name, type) task_klass = Blender::Task.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)
click to toggle source
# File lib/blender/scheduler/dsl.rb, line 160 def concurrency(value) @metadata[:concurrency] = value end
config(type, opts = {})
click to toggle source
# File lib/blender/scheduler/dsl.rb, line 44 def config(type, opts = {}) update_config(type, opts) end
Also aliased as: init
driver(type, opts = {}) { |config| ... }
click to toggle source
# File lib/blender/scheduler/dsl.rb, line 58 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)
click to toggle source
# File lib/blender/scheduler/dsl.rb, line 164 def ignore_failure(value) @metadata[:ignore_failure] = value end
lock(opts = {}) { || ... }
click to toggle source
# File lib/blender/scheduler/dsl.rb, line 177 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 = {})
click to toggle source
# File lib/blender/scheduler/dsl.rb, line 172 def lock_options(driver, opts = {}) @lock_properties[:driver] = driver @lock_properties[:driver_options].merge!(opts.dup) end
log_level(level)
click to toggle source
# File lib/blender/scheduler/dsl.rb, line 50 def log_level(level) Blender::Log.level = level end
members(hosts)
click to toggle source
# File lib/blender/scheduler/dsl.rb, line 168 def members(hosts) @metadata[:members] = Array(hosts) end
on(event_type, &block)
click to toggle source
# File lib/blender/scheduler/dsl.rb, line 75 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)
click to toggle source
# File lib/blender/scheduler/dsl.rb, line 111 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)
click to toggle source
# File lib/blender/scheduler/dsl.rb, line 134 def scp_download(name, &block) task = build_task(name, :scp) task.instance_eval(&block) if block_given? task.direction = :download append_task(:scp, task, blender_config(:ssh)) end
scp_upload(name, &block)
click to toggle source
# File lib/blender/scheduler/dsl.rb, line 127 def scp_upload(name, &block) task = build_task(name, :scp) task.instance_eval(&block) if block_given? task.direction = :upload append_task(:scp, task, blender_config(:ssh)) end
shell_task(name, &block)
click to toggle source
# File lib/blender/scheduler/dsl.rb, line 104 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
Also aliased as: task
ssh_task(name, &block)
click to toggle source
# File lib/blender/scheduler/dsl.rb, line 117 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, blender_config(:ssh)) end end
strategy(strategy)
click to toggle source
# File lib/blender/scheduler/dsl.rb, line 150 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