问题:我有一个厨师说明,只有当属性为“true”时才应该运行.但它每次都运行.
预期行为:默认情况下,[:QuickBase_Legacy_Stack] [:dotNetFx4_Install] =“false”不应该安装dotnet4.
实际行为:无论属性设置为什么,都会安装dotnet4.
我的代码:
default[:QuickBase_Legacy_Stack][:dotNetFx4_Install] = "false"
食谱文件:
windows_package "dotnet4" do only_if node[:QuickBase_Legacy_Stack][:dotNetFx4_Install]=='true' source "#{node[:QuickBase_Legacy_Stack][:dotNetFx4_URL]}" installer_type :custom action :install options "/quiet /log C:\\chef\\installLog4.txt /norestart /skipmsuinstall" end
解决方法
运行Ruby的
Guards必须封装在块{}中,否则Chef将尝试在默认解释器(通常是bash)中运行字符串.
windows_package "dotnet4" do only_if { node[:QuickBase_Legacy_Stack][:dotNetFx4_Install] == 'true' } source node[:QuickBase_Legacy_Stack][:dotNetFx4_URL] installer_type :custom action :install options "/quiet /log C:\\chef\\installLog4.txt /norestart /skipmsuinstall" end
检查是否需要布尔值true而不是“true”
另外,使用plain变量名(对于源),除非您需要使用字符串引用来插入其他数据.