厨师自定义资源守卫



我有一个自定义资源(在我的说明书的/resources 文件夹中一个名为 dsc_class.rb 的文件)。基本上,这是一种轻松调用 DSC 类资源的方法,无需安装它并使用完整的 DSC 引擎。

resource_name :dsc_class
default_action :create
property :file_name, kind_of: String, required: true, name_property: true
action :create do  
  powershell_script file_name do
    cwd ::File.dirname(file_name)
    code <<-EOH
    gc "#{file_name}" -Raw | iex
    $o = New-Object #{file_name.split('/').last.split('.').first}
    $o.Set()
    EOH
    not_if <<-EOH
    gc "#{file_name}" -Raw | iex
    $o = New-Object #{file_name.split('/').last.split('.').first}
    o.Test()
    EOH
  end
end

效果很好 - 但操作总是"执行",所以当资源防护和 powershell 脚本不执行时,我在 chef-client 运行的日志/输出中得到"x 资源更新"。

如何在自定义资源中适当地保护?

更新:食谱包含

 dsc_class "/install/dsc/MyDscResource.ps1"

powershell_script就像所有其他execute式资源一样,它总是运行命令/脚本/任何东西,并依赖于外部级别的not_ifonly_if子句。在这种情况下,您可以将这些放在配方代码中的dsc_class资源实例上。

最新更新