During major Chef Client version upgrades, some instructions need to be changed based on the version of the Chef Client. For example, upgrading from version 12 to version 13, the “windows_task” resource requires a different action to make changes to existing scheduled tasks.
To call a Chef resource in your cookbook, you need another resource to call from. If you execute the notifies command by itself you get the error message:
NoMethodError
————-
undefined method `declared_key’ for “….[…]”:String
In this example, we call the “windows_task” resource to delay the execution of the chef-client by two hours to give enough time for the server configuration to complete. In Chef version 12 we need to set the action to “:change”, in Chef version 13, it needs to be “:create”.
if ( Chef::VERSION.to_f >= 13.0 ) puts "Version 13.0 or higher" ruby_block "call delay chef-client" do block do # Do nothing, "block do" has to be here end notifies :create, "windows_task[delay chef-client]", :immediately end else puts "Before version 13.0" ruby_block "call delay chef-client" do block do # Do nothing, "block do" has to be here end notifies :change, "windows_task[delay chef-client]", :immediately end end future_time = Time.now.utc + 7200 # Offset is in seconds: 2 hour delay new_start_day = future_time.strftime('%m/%d/%Y') new_start_time = future_time.strftime('%H:%M') windows_task 'delay chef-client' do task_name 'chef-client' start_day new_start_day start_time new_start_time action :nothing guard_interpreter :powershell_script only_if "(Get-ScheduledTask | Where-Object {$_.TaskName -eq 'chef-client'}).TaskName.Length -gt 0" end