厨师定制资源卫士

时间:2016-07-06 14:35:13

标签: chef chef-recipe chef-zero

我有一个自定义资源(在我的cookbook' s / 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

效果很好 - 但行动始终&#34;执行&#34;所以当资源保护和powershell脚本没有执行时,我会更新&#34; x资源更新&#34;在log / output到chef-client run。

如何在自定义资源中正确保护?

更新:食谱包含

 dsc_class "/install/dsc/MyDscResource.ps1"

1 个答案:

答案 0 :(得分:1)

powershell_script与所有其他execute样式资源一样,它始终运行命令/ script / whatever,并依赖于外层not_ifonly_if子句。在这种情况下,您可以将它们放在食谱代码中的dsc_class资源实例上。