我正在运行这个简单的食谱块来在IIS中创建一个Web应用程序
powershell_script "create_site_my_site" do
code "New-webapppool -name 'My_Web_App'; New-Website -Name 'My_Web_App' -applicationpool 'My_Web_App' -Port '80' -IPAddress * -PhysicalPath 'c:\webs\My_Web_App' "
action :run
not_if "get-website | where-object { $_.name -eq 'My_Web_App' }"
end
这里的问题是NOT_IF部分一直是True
PS C:\Users\carlos>
PS C:\Users\carlos> get-website | where-object { $_.name -eq 'asdfasdfasdf' }
PS C:\Users\carlos> echo $lastexitcode
1
PS C:\Users\carlos> get-website | where-object { $_.name -eq 'My_Web_App' }
Name ID State Physical Path Bindings
---- -- ----- ------------- --------
My_Web_App 6 Stopped c:\webs\My_Web_App http *:80:
https *:443:
PS C:\Users\carlos.camacho> echo $lastexitcode
1
现在,我的问题是如何在NOT_IF中返回True或False 取决于我的代码返回值??
答案 0 :(得分:5)
powershell_script "create_site_my_site" do
guard_interpreter :powershell_script
code "New-webapppool -name 'My_Web_App'; New-Website -Name 'My_Web_App' -applicationpool 'My_Web_App' -Port '80' -IPAddress * -PhysicalPath 'c:\webs\My_Web_App' "
action :run
not_if "get-website | where-object { $_.name -eq 'My_Web_App' }"
end
您需要指定guard_interpreter :powershell_script
。注意CHEF-1943并确保guard_interpreter在警卫之前,并且不要将警卫放在一个区块内。
powershell_script documentation
关于Chef powershell提供商的一个很好的参考是this video。
仅使用IIS cookbook是另一种选择。
答案 1 :(得分:2)
你应该利用windows cookbook中的powershell_out资源。
如果输出为空,您可以检查命令的错误。
在你的情况下,这应该做:
only_if powershell_out("get-website | where-object { $_.name -eq 'My_Web_App' }").stdout.empty?
答案 2 :(得分:1)
我认为这是因为您没有告诉not_if
guard使用powershell_script
插播工具。
这有用吗?
powershell_script "create_site_my_site" do
code "New-webapppool -name 'My_Web_App'; New-Website -Name 'My_Web_App' -applicationpool 'My_Web_App' -Port '80' -IPAddress * -PhysicalPath 'c:\webs\My_Web_App' "
action :run
not_if "$(get-website | where-object { $_.name -eq 'My_Web_App' }).count -gt 0"
guard_interpreter :powershell_script
end