Class: Chef::Resource::Execute
- Inherits:
-
Chef::Resource
- Object
- Chef::Resource
- Chef::Resource::Execute
- Defined in:
- lib/chef/resource/execute.rb
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.
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/chef/resource/execute.rb', line 37 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.
33 34 35 |
# File 'lib/chef/resource/execute.rb', line 33 def is_guard_interpreter @is_guard_interpreter end |
Class Method Details
.guard_inherited_attributes(*inherited_attributes) ⇒ Object
141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/chef/resource/execute.rb', line 141 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
137 138 139 |
# File 'lib/chef/resource/execute.rb', line 137 def self.set_guard_inherited_attributes(*inherited_attributes) @class_inherited_attributes = inherited_attributes end |
Instance Method Details
#after_created ⇒ Object
153 154 155 156 157 158 |
# File 'lib/chef/resource/execute.rb', line 153 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
62 63 64 65 66 67 68 |
# File 'lib/chef/resource/execute.rb', line 62 def command(arg = nil) set_or_return( :command, arg, :kind_of => [ String, Array ] ) end |
#creates(arg = nil) ⇒ Object
70 71 72 73 74 75 76 |
# File 'lib/chef/resource/execute.rb', line 70 def creates(arg = nil) set_or_return( :creates, arg, :kind_of => [ String ] ) end |
#cwd(arg = nil) ⇒ Object
78 79 80 81 82 83 84 |
# File 'lib/chef/resource/execute.rb', line 78 def cwd(arg = nil) set_or_return( :cwd, arg, :kind_of => [ String ] ) end |
#environment(arg = nil) ⇒ Object Also known as: env
86 87 88 89 90 91 92 |
# File 'lib/chef/resource/execute.rb', line 86 def environment(arg = nil) set_or_return( :environment, arg, :kind_of => [ Hash ] ) end |
#group(arg = nil) ⇒ Object
96 97 98 99 100 101 102 |
# File 'lib/chef/resource/execute.rb', line 96 def group(arg = nil) set_or_return( :group, arg, :kind_of => [ String, Integer ] ) end |
#live_stream(arg = nil) ⇒ Object
104 105 106 107 108 109 |
# File 'lib/chef/resource/execute.rb', line 104 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
180 181 182 183 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 |
# File 'lib/chef/resource/execute.rb', line 180 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
111 112 113 114 115 116 117 |
# File 'lib/chef/resource/execute.rb', line 111 def returns(arg = nil) set_or_return( :returns, arg, :kind_of => [ Integer, Array ] ) end |
#timeout(arg = nil) ⇒ Object
119 120 121 122 123 124 125 |
# File 'lib/chef/resource/execute.rb', line 119 def timeout(arg = nil) set_or_return( :timeout, arg, :kind_of => [ Integer, Float ] ) end |
#umask(arg = nil) ⇒ Object
54 55 56 57 58 59 60 |
# File 'lib/chef/resource/execute.rb', line 54 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
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
# File 'lib/chef/resource/execute.rb', line 160 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 |