class Chef::Resource::WindowsTask
Constants
- SYSTEM_USERS
Attributes
enabled[RW]
exists[RW]
status[RW]
Public Instance Methods
after_created()
click to toggle source
# File lib/chef/resource/windows_task.rb, line 63 def after_created if random_delay validate_random_delay(random_delay, frequency) duration = sec_to_dur(random_delay) random_delay(duration) end if execution_time_limit unless execution_time_limit == "PT72H" # don't double convert an ISO8601 format duration raise ArgumentError, "Invalid value passed for `execution_time_limit`. Please pass seconds as an Integer (e.g. 60) or a String with numeric values only (e.g. '60')." unless numeric_value_in_string?(execution_time_limit) duration = sec_to_dur(execution_time_limit) execution_time_limit(duration) end end validate_start_time(start_time, frequency) validate_start_day(start_day, frequency) if start_day validate_user_and_password(user, password) validate_interactive_setting(interactive_enabled, password) validate_create_frequency_modifier(frequency, frequency_modifier) validate_create_day(day, frequency) if day validate_create_months(months, frequency) if months validate_idle_time(idle_time, frequency) end
Private Instance Methods
numeric_value_in_string?(val)
click to toggle source
Validate the passed value is numeric values only if it is a string
# File lib/chef/resource/windows_task.rb, line 91 def numeric_value_in_string?(val) return true if Integer(val) rescue ArgumentError false end
password_required?(user)
click to toggle source
# File lib/chef/resource/windows_task.rb, line 133 def password_required?(user) return false if user.nil? @password_required ||= !SYSTEM_USERS.include?(user.upcase) end
sec_to_dur(seconds)
click to toggle source
Converts the number of seconds to an ISO8601 duration format and returns it. Ref : github.com/arnau/ISO8601/blob/master/lib/iso8601/duration.rb#L18-L23 e.g. ISO8601::Duration.new(65707200) returns 'P65707200S'
# File lib/chef/resource/windows_task.rb, line 215 def sec_to_dur(seconds) ISO8601::Duration.new(seconds.to_i).to_s end
validate_create_day(day, frequency)
click to toggle source
# File lib/chef/resource/windows_task.rb, line 173 def validate_create_day(day, frequency) unless [:weekly, :monthly].include?(frequency) raise "day property is only valid for tasks that run monthly or weekly" end if day.is_a?(String) && day.to_i.to_s != day days = day.split(",") days.each do |d| unless ["mon", "tue", "wed", "thu", "fri", "sat", "sun", "*"].include?(d.strip.downcase) raise ArgumentError, "day property invalid. Only valid values are: MON, TUE, WED, THU, FRI, SAT, SUN and *. Multiple values must be separated by a comma." end end end end
validate_create_frequency_modifier(frequency, frequency_modifier)
click to toggle source
# File lib/chef/resource/windows_task.rb, line 144 def validate_create_frequency_modifier(frequency, frequency_modifier) # Currently is handled in create action 'frequency_modifier_allowed' line. Does not allow for frequency_modifier for once,onstart,onlogon,onidle,none # Note that 'OnEvent' is not a supported frequency. unless frequency.nil? || frequency_modifier.nil? case frequency when :minute unless frequency_modifier.to_i > 0 && frequency_modifier.to_i <= 1439 raise ArgumentError, "frequency_modifier value #{frequency_modifier} is invalid. Valid values for :minute frequency are 1 - 1439." end when :hourly unless frequency_modifier.to_i > 0 && frequency_modifier.to_i <= 23 raise ArgumentError, "frequency_modifier value #{frequency_modifier} is invalid. Valid values for :hourly frequency are 1 - 23." end when :daily unless frequency_modifier.to_i > 0 && frequency_modifier.to_i <= 365 raise ArgumentError, "frequency_modifier value #{frequency_modifier} is invalid. Valid values for :daily frequency are 1 - 365." end when :weekly unless frequency_modifier.to_i > 0 && frequency_modifier.to_i <= 52 raise ArgumentError, "frequency_modifier value #{frequency_modifier} is invalid. Valid values for :weekly frequency are 1 - 52." end when :monthly unless ("1".."12").to_a.push("FIRST", "SECOND", "THIRD", "FOURTH", "LAST", "LASTDAY").include?(frequency_modifier.to_s.upcase) raise ArgumentError, "frequency_modifier value #{frequency_modifier} is invalid. Valid values for :monthly frequency are 1 - 12, 'FIRST', 'SECOND', 'THIRD', 'FOURTH', 'LAST', 'LASTDAY'." end end end end
validate_create_months(months, frequency)
click to toggle source
# File lib/chef/resource/windows_task.rb, line 187 def validate_create_months(months, frequency) raise ArgumentError, "months property is only valid for tasks that run monthly" unless frequency == :monthly if months.is_a? String months.split(",").each do |month| unless ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC", "*"].include?(month.strip.upcase) raise ArgumentError, "months property invalid. Only valid values are: JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC and *. Multiple values must be separated by a comma." end end end end
validate_idle_time(idle_time, frequency)
click to toggle source
# File lib/chef/resource/windows_task.rb, line 198 def validate_idle_time(idle_time, frequency) if !idle_time.nil? && frequency != :on_idle raise ArgumentError, "idle_time property is only valid for tasks that run on_idle" end if idle_time.nil? && frequency == :on_idle raise ArgumentError, "idle_time value should be set for :on_idle frequency." end unless idle_time.nil? || idle_time > 0 && idle_time <= 999 raise ArgumentError, "idle_time value #{idle_time} is invalid. Valid values for :on_idle frequency are 1 - 999." end end
validate_interactive_setting(interactive_enabled, password)
click to toggle source
# File lib/chef/resource/windows_task.rb, line 138 def validate_interactive_setting(interactive_enabled, password) if interactive_enabled && password.nil? raise ArgumentError, "Please provide the password when attempting to set interactive/non-interactive." end end
validate_random_delay(random_delay, frequency)
click to toggle source
# File lib/chef/resource/windows_task.rb, line 97 def validate_random_delay(random_delay, frequency) if [:once, :on_logon, :onstart, :on_idle, :none].include? frequency raise ArgumentError, "`random_delay` property is supported only for frequency :minute, :hourly, :daily, :weekly and :monthly" end raise ArgumentError, "Invalid value passed for `random_delay`. Please pass seconds as an Integer (e.g. 60) or a String with numeric values only (e.g. '60')." unless numeric_value_in_string?(random_delay) end
validate_start_day(start_day, frequency)
click to toggle source
@todo when we drop ruby 2.3 support this should be converted to .match?() instead of =~f
# File lib/chef/resource/windows_task.rb, line 106 def validate_start_day(start_day, frequency) if [:once, :on_logon, :onstart, :on_idle, :none].include? frequency raise ArgumentError, "`start_day` property is not supported with frequency: #{frequency}" end # make sure the start_day is in MM/DD/YYYY format: http://rubular.com/r/cgjHemtWl5 raise ArgumentError, "`start_day` property must be in the MM/DD/YYYY format." unless /^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.](19|20)\d\d$/ =~ start_day end
validate_start_time(start_time, frequency)
click to toggle source
@todo when we drop ruby 2.3 support this should be converted to .match?() instead of =~
# File lib/chef/resource/windows_task.rb, line 116 def validate_start_time(start_time, frequency) if start_time raise ArgumentError, "`start_time` property is not supported with `frequency :none`" if frequency == :none raise ArgumentError, "`start_time` property must be in the HH:mm format (e.g. 6:20pm -> 18:20)." unless /^[0-2][0-9]:[0-5][0-9]$/ =~ start_time else raise ArgumentError, "`start_time` needs to be provided with `frequency :once`" if frequency == :once end end
validate_user_and_password(user, password)
click to toggle source
# File lib/chef/resource/windows_task.rb, line 127 def validate_user_and_password(user, password) if password_required?(user) && password.nil? raise ArgumentError, %q{Cannot specify a user other than the system users without specifying a password!. Valid passwordless users: 'NT AUTHORITY\SYSTEM', 'SYSTEM', 'NT AUTHORITY\LOCALSERVICE', 'NT AUTHORITY\NETWORKSERVICE', 'BUILTIN\USERS', 'USERS'} end end