Hello, I am in the process of "trying out" Puppet, and so far, it is going really well, and I can see a clear line of how we can use it internally. I do have one question though with regard to the using the onlyif parameter of the exec command (as per here http://docs.puppetlabs.com/references/latest/type.html#exec). Ideally, what I would like to do is to only run a PowerShell exec command, if a web page doesn''t currently exist on the server (i.e. the PowerShell script is responsible for deploying the Web Pages (into SharePoint in this case) and I only want to run this step, if these pages don''t already exist. To that end, I have done something like this: onlyif => ''$webRequest = [System.Net.WebRequest]::Create("http://some-url.test.aspx"); $webRequest.UseDefaultCredentials = $true; try { if([int]$webRequest.GetResponse().StatusCode -eq "200") { exit 0; } else { exit 1; } } catch [System.Net.WebException] { exit 1; }'' Which, at the command line, has the correct result. However, when I try to run this, I get an error saying that $webRequest is not recognised. Which leads me to think that using variables within the onlyif is not supported. Is that correct? If so, what is the best approach for doing this, or am I going up the wrong path? Thanks in advance! Gary -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to puppet-users+unsubscribe@googlegroups.com. To post to this group, send email to puppet-users@googlegroups.com. Visit this group at http://groups.google.com/group/puppet-users?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
On Monday, April 15, 2013 9:14:21 AM UTC-5, Gary Park wrote:> > Hello, > > I am in the process of "trying out" Puppet, and so far, it is going really > well, and I can see a clear line of how we can use it internally. > > I do have one question though with regard to the using the onlyif > parameter of the exec command (as per here > http://docs.puppetlabs.com/references/latest/type.html#exec). > > Ideally, what I would like to do is to only run a PowerShell exec command, > if a web page doesn''t currently exist on the server (i.e. the PowerShell > script is responsible for deploying the Web Pages (into SharePoint in this > case) and I only want to run this step, if these pages don''t already exist. > To that end, I have done something like this: > > onlyif => ''$webRequest = [System.Net.WebRequest]::Create(" > http://some-url.test.aspx"); $webRequest.UseDefaultCredentials = $true; > try { if([int]$webRequest.GetResponse().StatusCode -eq "200") { exit 0; } > else { exit 1; } } catch [System.Net.WebException] { exit 1; }'' > > Which, at the command line, has the correct result. However, when I try > to run this, I get an error saying that $webRequest is not recognised. >Puppet invokes the specified command directly, not via the [standard | Power] shell, so whether that works at the (some) command line is irrelevant.> > Which leads me to think that using variables within the onlyif is not > supported. Is that correct? If so, what is the best approach for doing > this, or am I going up the wrong path? > >No, that''s not correct. I suppose you expect ''$webRequest'' to be meaningful to (and the whole command sequence to be executed by) PowerShell, but you haven''t told Puppet to run it via PowerShell. Instead, you''ve told Puppet to execute a command named literally ''$webRequest''. Refer to the docs on the Exec type''s "windows" provider for information and examples of how to make this sort of thing work: docs.puppetlabs.com/references/3.1.latest/type.html#exec . What they say about the ''command'' parameter applies equally to ''onlyif''. John -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to puppet-users+unsubscribe@googlegroups.com. To post to this group, send email to puppet-users@googlegroups.com. Visit this group at http://groups.google.com/group/puppet-users?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
Hello, Thanks for getting back to me. I think I forgot to mention, I am using this: http://forge.puppetlabs.com/joshcooper/powershell Does this "change" how the onlyif parameter interprets what it is provided? Thanks Gary On Tuesday, April 16, 2013 3:54:19 PM UTC+1, jcbollinger wrote:> > > On Monday, April 15, 2013 9:14:21 AM UTC-5, Gary Park wrote: >> >> Hello, >> >> I am in the process of "trying out" Puppet, and so far, it is going >> really well, and I can see a clear line of how we can use it internally. >> >> I do have one question though with regard to the using the onlyif >> parameter of the exec command (as per here >> http://docs.puppetlabs.com/references/latest/type.html#exec). >> >> Ideally, what I would like to do is to only run a PowerShell exec >> command, if a web page doesn''t currently exist on the server (i.e. the >> PowerShell script is responsible for deploying the Web Pages (into >> SharePoint in this case) and I only want to run this step, if these pages >> don''t already exist. To that end, I have done something like this: >> >> onlyif => ''$webRequest = [System.Net.WebRequest]::Create(" >> http://some-url.test.aspx"); $webRequest.UseDefaultCredentials = $true; >> try { if([int]$webRequest.GetResponse().StatusCode -eq "200") { exit 0; } >> else { exit 1; } } catch [System.Net.WebException] { exit 1; }'' >> >> Which, at the command line, has the correct result. However, when I try >> to run this, I get an error saying that $webRequest is not recognised. >> > > > Puppet invokes the specified command directly, not via the [standard | > Power] shell, so whether that works at the (some) command line is > irrelevant. > > > >> >> Which leads me to think that using variables within the onlyif is not >> supported. Is that correct? If so, what is the best approach for doing >> this, or am I going up the wrong path? >> >> > > No, that''s not correct. I suppose you expect ''$webRequest'' to be > meaningful to (and the whole command sequence to be executed by) > PowerShell, but you haven''t told Puppet to run it via PowerShell. Instead, > you''ve told Puppet to execute a command named literally ''$webRequest''. > Refer to the docs on the Exec type''s "windows" provider for information and > examples of how to make this sort of thing work: > docs.puppetlabs.com/references/3.1.latest/type.html#exec . What they say > about the ''command'' parameter applies equally to ''onlyif''. > > > John > >-- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to puppet-users+unsubscribe@googlegroups.com. To post to this group, send email to puppet-users@googlegroups.com. Visit this group at http://groups.google.com/group/puppet-users?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
On Tue, Apr 16, 2013 at 1:29 PM, Gary Park <gep316@gmail.com> wrote:> Hello, > > Thanks for getting back to me. > > I think I forgot to mention, I am using this: > > http://forge.puppetlabs.com/joshcooper/powershell > > Does this "change" how the onlyif parameter interprets what it is provided? >yes it should. the onlyif and unless parameters should be interpreted the same was the command parameter.> > Thanks > > Gary > > On Tuesday, April 16, 2013 3:54:19 PM UTC+1, jcbollinger wrote: > >> >> >> On Monday, April 15, 2013 9:14:21 AM UTC-5, Gary Park wrote: >>> >>> Hello, >>> >>> I am in the process of "trying out" Puppet, and so far, it is going >>> really well, and I can see a clear line of how we can use it internally. >>> >>> I do have one question though with regard to the using the onlyif >>> parameter of the exec command (as per here http://docs.puppetlabs.** >>> com/references/latest/type.**html#exec<http://docs.puppetlabs.com/references/latest/type.html#exec> >>> ). >>> >>> Ideally, what I would like to do is to only run a PowerShell exec >>> command, if a web page doesn''t currently exist on the server (i.e. the >>> PowerShell script is responsible for deploying the Web Pages (into >>> SharePoint in this case) and I only want to run this step, if these pages >>> don''t already exist. To that end, I have done something like this: >>> >>> onlyif => ''$webRequest = [System.Net.WebRequest]::**Create(" >>> http://some-url.test.**aspx <http://some-url.test.aspx>"); $webRequest.* >>> *UseDefaultCredentials = $true; try { if([int]$webRequest.**GetResponse().StatusCode >>> -eq "200") { exit 0; } else { exit 1; } } catch [System.Net.WebException] { >>> exit 1; }'' >>> >>> Which, at the command line, has the correct result. However, when I try >>> to run this, I get an error saying that $webRequest is not recognised. >>> >> >> >> Puppet invokes the specified command directly, not via the [standard | >> Power] shell, so whether that works at the (some) command line is >> irrelevant. >> >> >> >>> >>> Which leads me to think that using variables within the onlyif is not >>> supported. Is that correct? If so, what is the best approach for doing >>> this, or am I going up the wrong path? >>> >>> >> >> No, that''s not correct. I suppose you expect ''$webRequest'' to be >> meaningful to (and the whole command sequence to be executed by) >> PowerShell, but you haven''t told Puppet to run it via PowerShell. Instead, >> you''ve told Puppet to execute a command named literally ''$webRequest''. >> Refer to the docs on the Exec type''s "windows" provider for information and >> examples of how to make this sort of thing work: docs.puppetlabs.com/** >> references/3.1.latest/type.**html#exec<http://docs.puppetlabs.com/references/3.1.latest/type.html#exec>. What they say about the ''command'' parameter applies equally to ''onlyif''. >> >> >> John >> >> -- > You received this message because you are subscribed to the Google Groups > "Puppet Users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to puppet-users+unsubscribe@googlegroups.com. > To post to this group, send email to puppet-users@googlegroups.com. > Visit this group at http://groups.google.com/group/puppet-users?hl=en. > For more options, visit https://groups.google.com/groups/opt_out. > > >-- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to puppet-users+unsubscribe@googlegroups.com. To post to this group, send email to puppet-users@googlegroups.com. Visit this group at http://groups.google.com/group/puppet-users?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
Hello, Thanks for all the information so far. Looks like I have got this working. I think that there was a couple things at play, most notable the use of double quotes in the onlyif command. I replaced these with \'' and that seemed to help get things moving. Thanks again! Gary On Wednesday, April 17, 2013 12:57:25 AM UTC+1, Justin Stoller wrote:> > > > > On Tue, Apr 16, 2013 at 1:29 PM, Gary Park <gep...@gmail.com <javascript:> > > wrote: > >> Hello, >> >> Thanks for getting back to me. >> >> I think I forgot to mention, I am using this: >> >> http://forge.puppetlabs.com/joshcooper/powershell >> >> Does this "change" how the onlyif parameter interprets what it is >> provided? >> > > yes it should. the onlyif and unless parameters should be interpreted the > same was the command parameter. > >> >> Thanks >> >> Gary >> >> On Tuesday, April 16, 2013 3:54:19 PM UTC+1, jcbollinger wrote: >> >>> >>> >>> On Monday, April 15, 2013 9:14:21 AM UTC-5, Gary Park wrote: >>>> >>>> Hello, >>>> >>>> I am in the process of "trying out" Puppet, and so far, it is going >>>> really well, and I can see a clear line of how we can use it internally. >>>> >>>> I do have one question though with regard to the using the onlyif >>>> parameter of the exec command (as per here http://docs.puppetlabs.** >>>> com/references/latest/type.**html#exec<http://docs.puppetlabs.com/references/latest/type.html#exec> >>>> ). >>>> >>>> Ideally, what I would like to do is to only run a PowerShell exec >>>> command, if a web page doesn''t currently exist on the server (i.e. the >>>> PowerShell script is responsible for deploying the Web Pages (into >>>> SharePoint in this case) and I only want to run this step, if these pages >>>> don''t already exist. To that end, I have done something like this: >>>> >>>> onlyif => ''$webRequest = [System.Net.WebRequest]::**Create(" >>>> http://some-url.test.**aspx <http://some-url.test.aspx>"); $webRequest. >>>> **UseDefaultCredentials = $true; try { if([int]$webRequest.**GetResponse().StatusCode >>>> -eq "200") { exit 0; } else { exit 1; } } catch [System.Net.WebException] { >>>> exit 1; }'' >>>> >>>> Which, at the command line, has the correct result. However, when I >>>> try to run this, I get an error saying that $webRequest is not recognised. >>>> >>> >>> >>> Puppet invokes the specified command directly, not via the [standard | >>> Power] shell, so whether that works at the (some) command line is >>> irrelevant. >>> >>> >>> >>>> >>>> Which leads me to think that using variables within the onlyif is not >>>> supported. Is that correct? If so, what is the best approach for doing >>>> this, or am I going up the wrong path? >>>> >>>> >>> >>> No, that''s not correct. I suppose you expect ''$webRequest'' to be >>> meaningful to (and the whole command sequence to be executed by) >>> PowerShell, but you haven''t told Puppet to run it via PowerShell. Instead, >>> you''ve told Puppet to execute a command named literally ''$webRequest''. >>> Refer to the docs on the Exec type''s "windows" provider for information and >>> examples of how to make this sort of thing work: docs.puppetlabs.com/** >>> references/3.1.latest/type.**html#exec<http://docs.puppetlabs.com/references/3.1.latest/type.html#exec>. What they say about the ''command'' parameter applies equally to ''onlyif''. >>> >>> >>> John >>> >>> -- >> You received this message because you are subscribed to the Google Groups >> "Puppet Users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to puppet-users...@googlegroups.com <javascript:>. >> To post to this group, send email to puppet...@googlegroups.com<javascript:> >> . >> Visit this group at http://groups.google.com/group/puppet-users?hl=en. >> For more options, visit https://groups.google.com/groups/opt_out. >> >> >> > >-- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to puppet-users+unsubscribe@googlegroups.com. To post to this group, send email to puppet-users@googlegroups.com. Visit this group at http://groups.google.com/group/puppet-users?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
Hi Gary, On Wed, Apr 17, 2013 at 4:55 AM, Gary Park <gep316@gmail.com> wrote:> Hello, > > Thanks for all the information so far. > > Looks like I have got this working. I think that there was a couple > things at play, most notable the use of double quotes in the onlyif command. > > I replaced these with \'' and that seemed to help get things moving. >Since powershell variables are referenced using `$varname`, when they are used in double-quoted strings, they need to be escaped, otherwise puppet will think it''s one of its variables. So you''ll need to do: onlyif => "\$webRequest ..." If you are not doing any variable interpolation, then it''s best to use a single quoted string: onlyif => ''$webRequest ..." Josh -- Josh Cooper Developer, Puppet Labs *Join us at PuppetConf 2013, August 22-23 in San Francisco - * http://bit.ly/pupconf13* **Register now and take advantage of the Early Bird discount - save 25%!* -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to puppet-users+unsubscribe@googlegroups.com. To post to this group, send email to puppet-users@googlegroups.com. Visit this group at http://groups.google.com/group/puppet-users?hl=en. For more options, visit https://groups.google.com/groups/opt_out.