Class: Chef::Resource::Conditional
- Inherits:
-
Object
- Object
- Chef::Resource::Conditional
- Includes:
- Mixin::ShellOut
- Defined in:
- lib/chef/resource/conditional.rb
Instance Attribute Summary collapse
-
#block ⇒ Object
readonly
Returns the value of attribute block.
-
#command ⇒ Object
readonly
Returns the value of attribute command.
-
#command_opts ⇒ Object
readonly
Returns the value of attribute command_opts.
-
#positivity ⇒ Object
readonly
Returns the value of attribute positivity.
Class Method Summary collapse
- .not_if(parent_resource, command = nil, command_opts = {}, &block) ⇒ Object
- .only_if(parent_resource, command = nil, command_opts = {}, &block) ⇒ Object
Instance Method Summary collapse
- #configure ⇒ Object
-
#continue? ⇒ Boolean
this is run during convergence via Chef::Resource#run_action -> Chef::Resource#should_skip?.
- #description ⇒ Object
- #evaluate ⇒ Object
- #evaluate_block ⇒ Object
- #evaluate_command ⇒ Object
-
#initialize(positivity, parent_resource, command = nil, command_opts = {}, &block) ⇒ Conditional
constructor
A new instance of Conditional.
- #short_description ⇒ Object
- #to_text ⇒ Object
Constructor Details
#initialize(positivity, parent_resource, command = nil, command_opts = {}, &block) ⇒ Conditional
Returns a new instance of Conditional.
46 47 48 49 50 51 52 53 54 |
# File 'lib/chef/resource/conditional.rb', line 46 def initialize(positivity, parent_resource, command = nil, command_opts = {}, &block) @positivity = positivity @command, @command_opts = command, command_opts @block = block @block_given = block_given? @parent_resource = parent_resource raise ArgumentError, "only_if/not_if requires either a command or a block" unless command || block_given? end |
Instance Attribute Details
#block ⇒ Object (readonly)
Returns the value of attribute block.
44 45 46 |
# File 'lib/chef/resource/conditional.rb', line 44 def block @block end |
#command ⇒ Object (readonly)
Returns the value of attribute command.
42 43 44 |
# File 'lib/chef/resource/conditional.rb', line 42 def command @command end |
#command_opts ⇒ Object (readonly)
Returns the value of attribute command_opts.
43 44 45 |
# File 'lib/chef/resource/conditional.rb', line 43 def command_opts @command_opts end |
#positivity ⇒ Object (readonly)
Returns the value of attribute positivity.
41 42 43 |
# File 'lib/chef/resource/conditional.rb', line 41 def positivity @positivity end |
Class Method Details
.not_if(parent_resource, command = nil, command_opts = {}, &block) ⇒ Object
33 34 35 |
# File 'lib/chef/resource/conditional.rb', line 33 def self.not_if(parent_resource, command = nil, command_opts = {}, &block) new(:not_if, parent_resource, command, command_opts, &block) end |
.only_if(parent_resource, command = nil, command_opts = {}, &block) ⇒ Object
37 38 39 |
# File 'lib/chef/resource/conditional.rb', line 37 def self.only_if(parent_resource, command = nil, command_opts = {}, &block) new(:only_if, parent_resource, command, command_opts, &block) end |
Instance Method Details
#configure ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/chef/resource/conditional.rb', line 56 def configure case @command when String, Array @guard_interpreter = Chef::GuardInterpreter.for_resource(@parent_resource, @command, @command_opts) @block = nil when nil # We should have a block if we get here # Check to see if the user set the guard_interpreter on the parent resource. Note that # this error will not be raised when using the default_guard_interpreter if @parent_resource.guard_interpreter != @parent_resource.default_guard_interpreter msg = "#{@parent_resource.name} was given a guard_interpreter of #{@parent_resource.guard_interpreter}, " msg << "but not given a command as a string. guard_interpreter does not support blocks (because they just contain ruby)." raise ArgumentError, msg end @guard_interpreter = nil @command, @command_opts = nil, nil else # command was passed, but it wasn't a String raise ArgumentError, "Invalid only_if/not_if command, expected a string: #{command.inspect} (#{command.class})" end end |
#continue? ⇒ Boolean
this is run during convergence via Chef::Resource#run_action -> Chef::Resource#should_skip?
80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/chef/resource/conditional.rb', line 80 def continue? # configure late in case guard_interpreter is specified on the resource after the conditional configure case @positivity when :only_if evaluate when :not_if !evaluate else raise "Cannot evaluate resource conditional of type #{@positivity}" end end |
#description ⇒ Object
121 122 123 124 |
# File 'lib/chef/resource/conditional.rb', line 121 def description cmd_or_block = @command ? "command `#{@command}`" : "ruby block" "#{@positivity} #{cmd_or_block}" end |
#evaluate ⇒ Object
94 95 96 |
# File 'lib/chef/resource/conditional.rb', line 94 def evaluate @guard_interpreter ? evaluate_command : evaluate_block end |
#evaluate_block ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/chef/resource/conditional.rb', line 105 def evaluate_block @block.call.tap do |rv| if rv.is_a?(String) && !rv.empty? # This is probably a mistake: # not_if { "command" } sanitized_rv = @parent_resource.sensitive ? "a string" : rv.inspect Chef::Log.warn("#{@positivity} block for #{@parent_resource} returned #{sanitized_rv}, did you mean to run a command?" + (@parent_resource.sensitive ? "" : " If so use '#{@positivity} #{sanitized_rv}' in your code.")) end end end |
#evaluate_command ⇒ Object
98 99 100 101 102 103 |
# File 'lib/chef/resource/conditional.rb', line 98 def evaluate_command @guard_interpreter.evaluate rescue Chef::Exceptions::CommandTimeout Chef::Log.warn "Command '#{@command}' timed out" false end |
#short_description ⇒ Object
117 118 119 |
# File 'lib/chef/resource/conditional.rb', line 117 def short_description @positivity end |
#to_text ⇒ Object
126 127 128 129 130 131 132 |
# File 'lib/chef/resource/conditional.rb', line 126 def to_text if @command "#{positivity} \"#{@command}\"" else "#{@positivity} { #code block }" end end |