問題:属性が「true」の場合にのみ実行するchefステートメントがあります。しかし、それは毎回実行されます。
予想される動作: When default[: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
Guards その実行Rubyはブロック{}
で囲む必要があります。
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
が必要かどうかを確認します
また、文字列引用符で他のデータを補間する必要がない限り、(source
の)プレーン変数名を使用します。
これはRuby条件付きです。したがって、not_if
にブロックを使用する必要があります。
only_if { node[:QuickBase_Legacy_Stack][:dotNetFx4_Install]=='true' }
(追加された{}
に注意してください)。複数行の条件にdo..end
構文を使用することもできます。
only_if do
node[:QuickBase_Legacy_Stack][:dotNetFx4_Install]=='true'
end
最後に、値がString "true"
であり、値true
ではないことを確認してください(違いを参照)。 Rubyでは、true
はブール値(false
と同様)ですが、"true"
は文字列("foo"
と同様)true
=かどうかを確認します= "true"
はfalse
を返します。