class Chef::Resource::Execute
Attributes
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.
Public Class Methods
Source
# File lib/chef/resource/execute.rb, line 583 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 || []).uniq end
Source
# File lib/chef/resource/execute.rb, line 510 def initialize(name, run_context = nil) super @command = name @default_guard_interpreter = :execute @is_guard_interpreter = false end
Calls superclass method
Chef::Resource::new
Source
# File lib/chef/resource/execute.rb, line 579 def self.set_guard_inherited_attributes(*inherited_attributes) @class_inherited_attributes = inherited_attributes end
Public Instance Methods
Source
# File lib/chef/resource/execute.rb, line 598 def after_created validate_identity_platform(user, password, domain, elevated) identity = qualify_user(user, password, domain) domain(identity[:domain]) user(identity[:user]) end
post resource creation validation
@return [void]
Source
# File lib/chef/resource/execute.rb, line 625 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.is_a?(String) && ((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.is_a?(String) && 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
Source
# File lib/chef/resource/execute.rb, line 605 def validate_identity_platform(specified_user, password = nil, specified_domain = nil, elevated = false) if 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