Class: Chef::Resource::Conditional
- Inherits:
-
Object
- Object
- Chef::Resource::Conditional
show all
- Includes:
- Mixin::ShellOut
- Defined in:
- lib/chef/resource/conditional.rb
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
apply_default_env, maybe_add_timeout, #shell_out, #shell_out!
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
Returns the value of attribute block.
44
45
46
|
# File 'lib/chef/resource/conditional.rb', line 44
def block
@block
end
|
#command ⇒ Object
Returns the value of attribute command.
42
43
44
|
# File 'lib/chef/resource/conditional.rb', line 42
def command
@command
end
|
#command_opts ⇒ Object
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
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
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
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
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
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?
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
|