[chef] RE: Re: Re: NOT_IF and ONLY_IF validation problem.


Chronological Thread 
  • From: Adam Edwards < >
  • To:
  • Subject: [chef] RE: Re: Re: NOT_IF and ONLY_IF validation problem.
  • Date: Wed, 20 Aug 2014 09:09:17 -0700

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,

 

 

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.

§