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
init(type, opts = {})
Alias for: config
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
register_handler(handler)
Alias for: add_handler
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
task(name, &block)
Alias for: shell_task