Class: Chef::Resource::Execute
- Inherits:
-
Chef::Resource
- Object
- Chef::Resource
- Chef::Resource::Execute
- Defined in:
- lib/chef/resource/execute.rb
Overview
Use the execute resource to execute a single command. Commands that are executed with this resource are (by their nature) not idempotent, as they are typically unique to the environment in which they are run. Use not_if and only_if to guard this resource for idempotence.
Direct Known Subclasses
Constant Summary
Constants inherited from Chef::Resource
Instance Attribute Summary collapse
-
#is_guard_interpreter ⇒ Object
The ResourceGuardInterpreter wraps a resource’s guards in another resource.
Attributes inherited from Chef::Resource
#allowed_actions, #cookbook_name, #declared_type, #default_guard_interpreter, #elapsed_time, #enclosing_provider, #params, #recipe_name, #resource_initializing, #run_context, #source_line, #updated
Class Method Summary collapse
- .guard_inherited_attributes(*inherited_attributes) ⇒ Object
- .set_guard_inherited_attributes(*inherited_attributes) ⇒ Object
Instance Method Summary collapse
- #after_created ⇒ Object
- #command(arg = nil) ⇒ Object
- #creates(arg = nil) ⇒ Object
- #cwd(arg = nil) ⇒ Object
- #environment(arg = nil) ⇒ Object (also: #env)
- #group(arg = nil) ⇒ Object
-
#initialize(name, run_context = nil) ⇒ Execute
constructor
A new instance of Execute.
- #live_stream(arg = nil) ⇒ Object
- #qualify_user(specified_user, password = nil, specified_domain = nil) ⇒ Object
- #returns(arg = nil) ⇒ Object
- #timeout(arg = nil) ⇒ Object
- #umask(arg = nil) ⇒ Object
- #validate_identity_platform(specified_user, password = nil, specified_domain = nil, elevated = false) ⇒ Object
Methods inherited from Chef::Resource
action, #action, #action=, action_class, allowed_actions, allowed_actions=, #as_json, #before_notifications, #cookbook_version, #current_value, #current_value_does_not_exist!, #custom_exception_message, custom_resource?, #customize_exception, declare_action_class, #declared_key, default_action, default_action=, #defined_at, #delayed_action, #delayed_notifications, #events, from_hash, from_json, #guard_interpreter, #identity, identity_attr, identity_property, #ignore_failure, #immediate_notifications, inherited, #inspect, is_custom_resource!, json_create, load_current_value, #load_from, #lookup_provider_constant, #method_missing, #name, #node, #not_if, #notifies, #notifies_before, #notifies_delayed, #notifies_immediately, #only_if, #provider, #provider=, #provider_for_action, provides, provides?, remove_canonical_dsl, #resolve_notification_references, resource_for_node, resource_matching_short_name, #resource_name, resource_name, resource_name=, #resources, #retries, #retry_delay, #run_action, #sensitive, #should_skip?, sorted_descendants, #source_line_file, #source_line_number, state_attrs, #state_for_resource_reporter, #subscribes, #to_hash, #to_json, #to_s, #to_text, #updated?, #updated_by_last_action, #updated_by_last_action?, use_automatic_resource_name, #validate_action, #validate_resource_spec!, #value_to_text
Methods included from Mixin::Provides
#provided_as, #provides, #provides?
Methods included from Mixin::DescendantsTracker
#descendants, descendants, direct_descendants, #direct_descendants, find_descendants_by_name, #find_descendants_by_name, #inherited, store_inherited
Methods included from Mixin::ConvertToClassName
#constantize, #convert_to_class_name, #convert_to_snake_case, #filename_to_qualified_string, #normalize_snake_case_name, #snake_case_basename
Methods included from Mixin::Deprecation
#deprecated_attr, #deprecated_attr_reader, #deprecated_attr_writer, #deprecated_ivar
Methods included from Mixin::Properties
included, #property_is_set?, #reset_property
Methods included from Mixin::ParamsValidate
#lazy, #set_or_return, #validate
Methods included from Mixin::ShellOut
#a_to_s, #clean_array, #shell_out, #shell_out!, #shell_out_compact, #shell_out_compact!, #shell_out_compact_timeout, #shell_out_compact_timeout!, #shell_out_with_systems_locale, #shell_out_with_systems_locale!
Methods included from Mixin::PathSanity
#enforce_path_sanity, #sanitized_path
Methods included from Mixin::PowershellOut
#powershell_out, #powershell_out!
Methods included from Mixin::WindowsArchitectureHelper
#assert_valid_windows_architecture!, #disable_wow64_file_redirection, #forced_32bit_override_required?, #is_i386_process_on_x86_64_windows?, #node_supports_windows_architecture?, #node_windows_architecture, #restore_wow64_file_redirection, #valid_windows_architecture?, #with_os_architecture, #wow64_architecture_override_required?, #wow64_directory
Methods included from DSL::PlatformIntrospection
#docker?, #platform?, #platform_family?, #value_for_platform, #value_for_platform_family
Methods included from DSL::RebootPending
Methods included from DSL::RegistryHelper
#registry_data_exists?, #registry_get_subkeys, #registry_get_values, #registry_has_subkeys?, #registry_key_exists?, #registry_value_exists?
Methods included from DSL::DataQuery
#data_bag, #data_bag_item, #search
Methods included from EncryptedDataBagItem::CheckEncrypted
Constructor Details
#initialize(name, run_context = nil) ⇒ Execute
Returns a new instance of Execute.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/chef/resource/execute.rb', line 40 def initialize(name, run_context = nil) super @command = name @backup = 5 @creates = nil @cwd = nil @environment = nil @group = nil @returns = 0 @timeout = nil @user = nil @umask = nil @default_guard_interpreter = :execute @is_guard_interpreter = false @live_stream = false end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Chef::Resource
Instance Attribute Details
#is_guard_interpreter ⇒ Object
The ResourceGuardInterpreter wraps a resource’s guards in another resource. That inner resource needs to behave differently during (for example) why_run mode, so we flag it here. For why_run mode we still want to execute the guard resource even if we are not executing the wrapping resource. Only execute resources (and subclasses) can be guard interpreters.
36 37 38 |
# File 'lib/chef/resource/execute.rb', line 36 def is_guard_interpreter @is_guard_interpreter end |
Class Method Details
.guard_inherited_attributes(*inherited_attributes) ⇒ Object
145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/chef/resource/execute.rb', line 145 def self.guard_inherited_attributes(*inherited_attributes) # Similar to patterns elsewhere, return attributes from this # class and superclasses as a form of inheritance ancestor_attributes = [] if superclass.respond_to?(:guard_inherited_attributes) ancestor_attributes = superclass.guard_inherited_attributes end ancestor_attributes.concat(@class_inherited_attributes ? @class_inherited_attributes : []).uniq end |
.set_guard_inherited_attributes(*inherited_attributes) ⇒ Object
141 142 143 |
# File 'lib/chef/resource/execute.rb', line 141 def self.set_guard_inherited_attributes(*inherited_attributes) @class_inherited_attributes = inherited_attributes end |
Instance Method Details
#after_created ⇒ Object
157 158 159 160 161 162 |
# File 'lib/chef/resource/execute.rb', line 157 def after_created validate_identity_platform(user, password, domain, elevated) identity = qualify_user(user, password, domain) domain(identity[:domain]) user(identity[:user]) end |
#command(arg = nil) ⇒ Object
65 66 67 68 69 70 71 |
# File 'lib/chef/resource/execute.rb', line 65 def command(arg = nil) set_or_return( :command, arg, :kind_of => [ String, Array ] ) end |
#creates(arg = nil) ⇒ Object
73 74 75 76 77 78 79 |
# File 'lib/chef/resource/execute.rb', line 73 def creates(arg = nil) set_or_return( :creates, arg, :kind_of => [ String ] ) end |
#cwd(arg = nil) ⇒ Object
81 82 83 84 85 86 87 |
# File 'lib/chef/resource/execute.rb', line 81 def cwd(arg = nil) set_or_return( :cwd, arg, :kind_of => [ String ] ) end |
#environment(arg = nil) ⇒ Object Also known as: env
89 90 91 92 93 94 95 |
# File 'lib/chef/resource/execute.rb', line 89 def environment(arg = nil) set_or_return( :environment, arg, :kind_of => [ Hash ] ) end |
#group(arg = nil) ⇒ Object
99 100 101 102 103 104 105 |
# File 'lib/chef/resource/execute.rb', line 99 def group(arg = nil) set_or_return( :group, arg, :kind_of => [ String, Integer ] ) end |
#live_stream(arg = nil) ⇒ Object
107 108 109 110 111 112 |
# File 'lib/chef/resource/execute.rb', line 107 def live_stream(arg = nil) set_or_return( :live_stream, arg, :kind_of => [ TrueClass, FalseClass ]) end |
#qualify_user(specified_user, password = nil, specified_domain = nil) ⇒ Object
184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
# File 'lib/chef/resource/execute.rb', line 184 def qualify_user(specified_user, password = nil, specified_domain = nil) domain = specified_domain user = specified_user if specified_user.nil? && ! specified_domain.nil? raise ArgumentError, "The domain `#{specified_domain}` was specified, but no user name was given" end # if domain is provided in both username and domain if specified_user && ((specified_user.include? '\\') || (specified_user.include? "@")) && specified_domain raise ArgumentError, "The domain is provided twice. Username: `#{specified_user}`, Domain: `#{specified_domain}`. Please specify domain only once." end if ! specified_user.nil? && specified_domain.nil? # Splitting username of format: Domain\Username domain_and_user = user.split('\\') if domain_and_user.length == 2 domain = domain_and_user[0] user = domain_and_user[1] elsif domain_and_user.length == 1 # Splitting username of format: Username@Domain domain_and_user = user.split("@") if domain_and_user.length == 2 domain = domain_and_user[1] user = domain_and_user[0] elsif domain_and_user.length != 1 raise ArgumentError, "The specified user name `#{user}` is not a syntactically valid user name" end end end if ( password || domain ) && user.nil? raise ArgumentError, "A value for `password` or `domain` was specified without specification of a value for `user`" end { domain: domain, user: user } end |
#returns(arg = nil) ⇒ Object
114 115 116 117 118 119 120 |
# File 'lib/chef/resource/execute.rb', line 114 def returns(arg = nil) set_or_return( :returns, arg, :kind_of => [ Integer, Array ] ) end |
#timeout(arg = nil) ⇒ Object
122 123 124 125 126 127 128 |
# File 'lib/chef/resource/execute.rb', line 122 def timeout(arg = nil) set_or_return( :timeout, arg, :kind_of => [ Integer, Float ] ) end |
#umask(arg = nil) ⇒ Object
57 58 59 60 61 62 63 |
# File 'lib/chef/resource/execute.rb', line 57 def umask(arg = nil) set_or_return( :umask, arg, :kind_of => [ String, Integer ] ) end |
#validate_identity_platform(specified_user, password = nil, specified_domain = nil, elevated = false) ⇒ Object
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
# File 'lib/chef/resource/execute.rb', line 164 def validate_identity_platform(specified_user, password = nil, specified_domain = nil, elevated = false) if node[:platform_family] == "windows" if specified_user && password.nil? raise ArgumentError, "A value for `password` must be specified when a value for `user` is specified on the Windows platform" end if elevated && !specified_user && !password raise ArgumentError, "`elevated` option should be passed only with `username` and `password`." end else if password || specified_domain raise Exceptions::UnsupportedPlatform, "Values for `domain` and `password` are only supported on the Windows platform" end if elevated raise Exceptions::UnsupportedPlatform, "Value for `elevated` is only supported on the Windows platform" end end end |