- From: Carlos Camacho <
>
- To: Adam Edwards <
>
- Cc: "
" <
>
- Subject: [chef] Re: RE: Re: Re: NOT_IF and ONLY_IF validation problem.
- Date: Fri, 22 Aug 2014 11:42:56 +0200
Hello,
After a lot of tests I'm coming back :)
This is my recipe code:
powershell_script "create_binding_"+z[:app_name] do
code "New-WebBinding -Name '"+z[:app_name]+"' -IPAddress '*' -Port
'"+z[:https_port]+"' -Protocol 'https'"
action :run
not_if "(get-webbinding -Name '"+z[:app_name]+"' -Port
'"+z[:https_port]+"').length -gt 0"
guard_interpreter :powershell_script
action :run
end
Now the execution fails and this is the chef-client ourput.
powershell_script("create_binding_Alhambra") do
action [:run]
retries 0
retry_delay 2
guard_interpreter :powershell_script
command "\"powershell.exe\" -NoLogo -NonInteractive -NoProfile
-ExecutionPolicy RemoteSigned -InputFormat None -File
\"C:/Users/CARLOS~1.CAM/AppData/Local/Temp/2/chef-script20140822-2516-1w2ge1f.ps1\""
backup 5
returns 0
code "New-WebBinding -Name 'Alhambra' -IPAddress '*' -Port '4435'
-Protocol 'https'"
interpreter "powershell.exe"
cookbook_name "frontiers_custom"
recipe_name "populator"
not_if "(get-webbinding -Name 'Alhambra' -Port '4435').length -gt 0"
end
In this case if I execute the guard "(get-webbinding -Name 'Alhambra'
-Port '4435').length -gt 0"
It returs True in the PS shell (The binding its created) but it keeps
executing the comand and it fails.
This is the error message
[2014-08-22T08:48:18+00:00] INFO: Running queued delayed notifications
before re-raising exception
Running handlers:
[2014-08-22T08:48:18+00:00] ERROR: Running exception handlers
Running handlers complete
[2014-08-22T08:48:18+00:00] ERROR: Exception handlers complete
[2014-08-22T08:48:18+00:00] FATAL: Stacktrace dumped to
c:/chef/cache/chef-stacktrace.out
Chef Client failed. 0 resources updated in 12.819917 seconds
[2014-08-22T08:48:18+00:00] FATAL:
Mixlib::ShellOut::ShellCommandFailed:
powershell_script[create_binding_Alhambra]
(frontiers_custom::populator line 112) had an error:
Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with
[0] , but received '1'
---- Begin output of "powershell.exe"
-NoLogo -NonInteractive -NoProfile -ExecutionPolicy RemoteSigned
-InputFormat None -File
"C:/Users/CARLOS~1.CAM/AppData/Local/Temp/2/chef-script20140822-2516-1w2ge1f.ps1"
----
STDOUT:
STDERR: Filename:
Error: Cannot add duplicate collection entry of type 'binding' with
combined key attributes 'protocol, bindingInformation' respectively
set to 'https, *:4435:'
---- End output of "powershell.exe"
-NoLogo -NonInteractive -NoProfile -ExecutionPolicy RemoteSigned
-InputFormat None -File
"C:/Users/CARLOS~1.CAM/AppData/Local/Temp/2/chef-script20140822-2516-1w2ge1f.ps1"
----
Ran "powershell.exe" -NoLogo -NonInteractive -NoProfile
-ExecutionPolicy RemoteSigned -InputFormat None -File "C:/Users/
This is because the guard its not working properly (Chef client
11.14.6 and Chef server 11.1.4)..
I also tested it using convert_boolean_return true but the result remains.
Adam, can you help me with this?
Thanks.
On Wed, Aug 20, 2014 at 6:09 PM, Adam Edwards
<
>
wrote:
>
Carlos, $lastexitcode does not give you the exit status of the last
>
powershell cmdlet, it gives you the last exit status of a Windows process
>
that you executed. Since get-website is a cmdlet, lastexitcode tells you
>
nothing about its success or failure. For cmdlet status, use $?, which is
>
$true if the last cmdlet succeeded, $false otherwise.
>
>
>
>
Powershell_script actually has a feature to make your scenario easy – just
>
provide a boolean expression to your guard, something like (get-website |
>
where-object { $_.name -eq 'My_Web_App' }).length > 0, which will return
>
$true if there’s a web site satisfying the query (assuming get-website
>
returns a collection with a length property) and $false otherwise.
>
>
>
>
You can read more about this capability in this documentation from
>
http://docs.getchef.com/resource_powershell_script.html -- see the excerpt
>
below:
>
>
>
>
>
>
convert_boolean_return
>
>
Use to return 0 if the last line of a command is evaluated to be true or to
>
return 1 if the last line is evaluated to be false. Default value: false.
>
>
>
>
When the guard_intrepreter common attribute is set to :powershell_script, a
>
string command will be evaluated as if this value were set to true. This is
>
because the behavior of this attribute is similar to the value of the "$?"
>
expression common in UNIX interpreters. For example, this:
>
>
>
>
powershell_script 'make_safe_backup' do
>
>
guard_interpreter :powershell_script
>
>
code 'cp ~/data/nodes.json ~/data/nodes.bak'
>
>
not_if 'test-path ~/data/nodes.bak'
>
>
end
>
>
is similar to:
>
>
>
>
bash 'make_safe_backup' do
>
>
code 'cp ~/data/nodes.json ~/data/nodes.bak'
>
>
not_if 'test -e ~/data/nodes.bak'
>
>
end
>
>
>
>
From: Seth Vargo
>
[mailto:
>
Sent: Wednesday, August 20, 2014 7:55 AM
>
To:
>
>
Subject: [chef] Re: Re: NOT_IF and ONLY_IF validation problem.
>
>
>
>
Hi Carlos,
>
>
>
>
You also posted this question on StackOverflow:
>
http://stackoverflow.com/questions/25406353/chef-not-if-and-only-if-validation-issue-in-windows-recipes.
>
>
>
>
I understand that you are trying to get the fastest answer possible, but
>
posting the same question in multiple channels, you may discourage the
>
chances of getting an answer. It gives a wry impression. Here's what I would
>
recommend:
>
>
>
>
- If you have a question and you need an answer NOW, IRC is the best bet.
>
You will get real-time communication with members of Chef and the Chef
>
community.
>
>
- If you have a question that is about process, best practice, or opinion,
>
this mailing list is probably your best bet. If you need to show code on the
>
mailing list, using a service like PasteBin or GitHub Gist can make the
>
email more readable.
>
>
- If you have a specific code example (i.e. why is this failing),
>
StackOverflow/ServerFault are usually the best.
>
>
>
>
I realize there are definitely areas for overlap, so please use your best
>
judgement.
>
>
>
>
Thanks,
>
>
Seth
>
>
>
>
On Aug 20, 2014, at 10:40 AM, Julian C. Dunn
>
<
>
>
wrote:
>
>
>
>
On Wed, Aug 20, 2014 at 8:16 AM, Carlos Camacho
>
<
>
>
wrote:
>
>
Hello!
>
>
Im runing this simple recipe block to create a web app in IIS
>
>
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
>
>
>
The problem here its that the NOT_IF part its allways 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
>
>
Now, my question is about how to return True or False in the NOT_IF
>
depending on my code return value ??
>
>
>
Use the convert_boolean_return attribute in the powershell_script
>
resource to do the right thing. See the documentation for information
>
about what that does & why.
>
>
http://docs.getchef.com/resource_powershell_script.html
>
>
I imagine that this will become the default when :guard_interpreter
>
becomes :powershell by default for powershell_script.
>
>
- Julian
>
>
--
>
[ Julian C. Dunn
>
<
>
>
* Sorry, I'm ]
>
[ WWW: http://www.aquezada.com/staff/julian * only Web 1.0 ]
>
[ gopher://sdf.org/1/users/keymaker/ * compliant! ]
>
[ PGP: 91B3 7A9D 683C 7C16 715F 442C 6065 D533 FDC2 05B9 ]
>
>
Archive powered by MHonArc 2.6.16.