我有一个自定义资源(在我的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"
答案 0 :(得分:1)
powershell_script
与所有其他execute
样式资源一样,它始终运行命令/ script / whatever,并依赖于外层not_if
或only_if
子句。在这种情况下,您可以将它们放在食谱代码中的dsc_class
资源实例上。