Class: ChefApply::Action::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/chef_apply/action/base.rb

Overview

Derive new Actions from Action::Base “target_host” is a TargetHost that the action is being applied to. May be nil

if the action does not require a target.

“config” is hash containing any options that your command may need

Implement perform_action to perform whatever action your class is intended to do. Run time will be captured via telemetry and categorized under “:action” with the unqualified class name of your Action.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config = {}) ⇒ Base

Returns a new instance of Base.



34
35
36
37
38
39
# File 'lib/chef_apply/action/base.rb', line 34

def initialize(config = {})
  c = config.dup
  @target_host = c.delete :target_host
  # Remaining options are for child classes to make use of.
  @config = c
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



32
33
34
# File 'lib/chef_apply/action/base.rb', line 32

def config
  @config
end

#target_hostObject (readonly)

Returns the value of attribute target_host.



32
33
34
# File 'lib/chef_apply/action/base.rb', line 32

def target_host
  @target_host
end

Instance Method Details

#nameObject



58
59
60
# File 'lib/chef_apply/action/base.rb', line 58

def name
  self.class.name.split("::").last
end

#notify(action, *args) ⇒ Object



66
67
68
69
70
71
# File 'lib/chef_apply/action/base.rb', line 66

def notify(action, *args)
  return if @notification_handler.nil?

  ChefApply::Log.debug("[#{self.class.name}] Action: #{action}, Action Data: #{args}")
  @notification_handler.call(action, args) if @notification_handler
end

#perform_actionObject

Raises:

  • (NotImplemented)


62
63
64
# File 'lib/chef_apply/action/base.rb', line 62

def perform_action
  raise NotImplemented
end

#run(&block) ⇒ Object

Raises:

  • (@error)


41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/chef_apply/action/base.rb', line 41

def run(&block)
  @notification_handler = block
  Telemeter.timed_action_capture(self) do

    perform_action
  rescue StandardError => e
    # Give the caller a chance to clean up - if an exception is
    # raised it'll otherwise get routed through the executing thread,
    # providing no means of feedback for the caller's current task.
    notify(:error, e)
    @error = e

  end
  # Raise outside the block to ensure that the telemetry capture completes
  raise @error unless @error.nil?
end