class Chef::Resource::Execute
Attributes
is_guard_interpreter[RW]
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
guard_inherited_attributes(*inherited_attributes)
click to toggle source
# File lib/chef/resource/execute.rb, line 109 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
new(name, run_context = nil)
click to toggle source
Calls superclass method
Chef::Resource::new
# File lib/chef/resource/execute.rb, line 42 def initialize(name, run_context = nil) super @command = name @backup = 5 @default_guard_interpreter = :execute @is_guard_interpreter = false end
set_guard_inherited_attributes(*inherited_attributes)
click to toggle source
# File lib/chef/resource/execute.rb, line 105 def self.set_guard_inherited_attributes(*inherited_attributes) @class_inherited_attributes = inherited_attributes end
Public Instance Methods
after_created()
click to toggle source
post resource creation validation
@return [void]
# File lib/chef/resource/execute.rb, line 124 def after_created validate_identity_platform(user, password, domain, elevated) identity = qualify_user(user, password, domain) domain(identity[:domain]) user(identity[:user]) end
qualify_user(specified_user, password = nil, specified_domain = nil)
click to toggle source
# File lib/chef/resource/execute.rb, line 151 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
validate_identity_platform(specified_user, password = nil, specified_domain = nil, elevated = false)
click to toggle source
# File lib/chef/resource/execute.rb, line 131 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