diff options
Diffstat (limited to 'lib/chef')
-rw-r--r-- | lib/chef/provider/windows_task.rb | 36 | ||||
-rw-r--r-- | lib/chef/resource/windows_task.rb | 9 |
2 files changed, 31 insertions, 14 deletions
diff --git a/lib/chef/provider/windows_task.rb b/lib/chef/provider/windows_task.rb index dca0156d9c..d2d7397352 100644 --- a/lib/chef/provider/windows_task.rb +++ b/lib/chef/provider/windows_task.rb @@ -229,8 +229,7 @@ class Chef current_resource.frequency_modifier != new_resource.frequency_modifier || current_resource.frequency != new_resource.frequency || current_resource.idle_time != new_resource.idle_time || - random_delay_updated? || - execution_time_limit_updated? || + random_delay_updated? || execution_time_limit_updated? || (new_resource.start_day && new_resource.start_day != "N/A" && start_day_updated?) || (new_resource.start_time && new_resource.start_time != "N/A" && start_time_updated?) begin @@ -243,18 +242,35 @@ class Chef false end + # Comparing random_delay values using ISO8601::Duration object Ref: https://github.com/arnau/ISO8601/blob/master/lib/iso8601/duration.rb#L18-L23 + # di = ISO8601::Duration.new(65707200) + # ds = ISO8601::Duration.new('P65707200S') + # dp = ISO8601::Duration.new('P2Y1MT2H') + # di == dp # => true + # di == ds # => true def random_delay_updated? - return false if current_resource.random_delay.nil? && new_resource.random_delay.nil? - return true if new_resource.random_delay.nil? - current_resource.random_delay = 0 if current_resource.random_delay.nil? - ISO8601::Duration.new(current_resource.random_delay) != ISO8601::Duration.new(new_resource.random_delay) + if new_resource.random_delay.nil? + false + elsif current_resource.random_delay.nil? && new_resource.random_delay == 'PT0S' # when user sets random_dealy to 0 sec + false + elsif current_resource.random_delay.nil? && new_resource.random_delay != nil + true + else + ISO8601::Duration.new(current_resource.random_delay) != ISO8601::Duration.new(new_resource.random_delay) + end end + # Comparing execution_time_limit values using Ref: https://github.com/arnau/ISO8601/blob/master/lib/iso8601/duration.rb#L18-L23 def execution_time_limit_updated? - return false if current_resource.execution_time_limit.nil? && new_resource.execution_time_limit.nil? - return true if new_resource.execution_time_limit.nil? - current_resource.execution_time_limit = 0 if current_resource.execution_time_limit.nil? - ISO8601::Duration.new(current_resource.execution_time_limit) != ISO8601::Duration.new(new_resource.execution_time_limit) + if new_resource.execution_time_limit.nil? + false + elsif current_resource.execution_time_limit.nil? && new_resource.execution_time_limit == 'PT0S' # when user sets random_dealy to 0 sec + false + elsif current_resource.execution_time_limit.nil? && new_resource.execution_time_limit != nil + true + else + ISO8601::Duration.new(current_resource.execution_time_limit) != ISO8601::Duration.new(new_resource.execution_time_limit) + end end def start_day_updated? diff --git a/lib/chef/resource/windows_task.rb b/lib/chef/resource/windows_task.rb index 5ab5715ccf..6784f71f1d 100644 --- a/lib/chef/resource/windows_task.rb +++ b/lib/chef/resource/windows_task.rb @@ -205,11 +205,12 @@ class Chef end end - # Convert the number of seconds to an ISO8601 duration format - # @see http://tools.ietf.org/html/rfc2445#section-4.3.6 - # @param [Integer] seconds The amount of seconds for this duration + # Converts the number of seconds to an ISO8601 duration format + # Ref : https://github.com/arnau/ISO8601/blob/master/lib/iso8601/duration.rb#L18-L23 + # dur = ISO8601::Duration.new(65707200) + # dur => 'P65707200S' def sec_to_dur(seconds) - dur = seconds.to_i == 0 ? nil : ISO8601::Duration.new(seconds.to_i).to_s + dur = ISO8601::Duration.new(seconds.to_i).to_s end end |