On Wed, Oct 15, 2014 at 10:39 AM, Paul Ponzeka <[email protected]> wrote:

> Hopefully this is my last question.  How do i get the variable that passes
> through to powershell to be a proper array?  The reason is that i need to
> run a foreach loop on it, but it sees the variable as one long item instead
> of multiples if its configured as such:
>
> $forwarders = ["1.1.1.1","2.2.2.2"]
>

You could pass a string with a known delimiter and use that to split into
an array. There are probably other options for this as well, but I'm not
sure a ruby array is going to directly transfer to a posh array.



>
>
> On Monday, October 13, 2014 1:48:46 PM UTC-4, Paul Ponzeka wrote:
>>
>> Josh, your a god among men.  Thank you so much.  It was the literal
>> string for the variable that resolved it.
>>
>> On Monday, October 13, 2014 1:05:39 PM UTC-4, Josh Cooper wrote:
>>>
>>> Hi Paul,
>>>
>>> On Mon, Oct 13, 2014 at 7:15 AM, Paul Ponzeka <[email protected]> wrote:
>>>
>>>> Thanks for this rob.  I still cannot get the variable to pass into the
>>>> script.  Now i have the *setdnsforwarders.ps1.erb* template,
>>>>
>>>
>>> Note puppet doesn't care what the file extension is, so long as the
>>> template('path/to/file') refers to the correct file.
>>>
>>>
>>>> and here is the complete copy of what is in the template:
>>>>
>>>> $outside = <%= scope['dnsforwarders'] %>
>>>> $outside | out-file C:\output.log -append
>>>>
>>>
>>>>
>>>> I've also tried the following:
>>>>
>>>>
>>>> <%= scope.lookupvar('@dnsforwarders') %> | out-file C:\output.log
>>>> -append
>>>>
>>>
>>> Variables in the current scope can be accessed directly as <%=
>>> @dnsforwarders %>, as opposed to the variable named "@dnsforwarders"
>>>
>>>
>>>> <%= scope.lookupvar('windows_dns::forwarders') %> | out-file
>>>> C:\output.log -append
>>>>
>>>
>>> I think the pipeline construct isn't doing what you would expect. I
>>> think you need to quote the ERB snippet, so that powershell sees a literal
>>> string:
>>>
>>> '<%= scope.lookupvar('windows_dns::forwarders') %>' | out-file
>>> C:\output.log -append
>>>
>>>
>>>> <%= scope.lookupvar('windows_dns::config') %> | out-file C:\output.log
>>>> -append
>>>>
>>>
>>>> Each time the output.log file is blank.
>>>>
>>>
>>>> Here is my windows_dns::config file:
>>>>
>>>> class windows_dns::config {
>>>>
>>>> case $kernelmajversion {
>>>> 6.3: {
>>>>                         $forwarder_execute =
>>>> 'windows_dns/setdnsforwarders.ps1.erb'
>>>> $forwarder_check = 'windows_dns/checkdnsforwarders.ps1'
>>>> $dnsforwarders = $windows_dns::forwarders
>>>>
>>>>                 }
>>>> 6.1: {
>>>>                         $forwarder_execute =
>>>> 'windows_dns/setdnsforwarders_legacy.ps1'
>>>> $forwarder_check = 'windows_dns/checkdnsforwarders_legacy.ps1'
>>>>
>>>>                 }
>>>>                 }
>>>>
>>>> exec { 'forwarderscreate':
>>>>
>>>> command => template ($forwarder_execute),
>>>> #unless => template ($forwarder_check),
>>>> provider => powershell,
>>>> logoutput => true,
>>>>
>>>> }
>>>>
>>>
>>>> And here is where the variable is originally defined in the
>>>> windows_dns::init.pp
>>>>
>>>> class windows_dns(
>>>>
>>>> $forwarders = '1.1.1.1'
>>>>
>>>> ) {
>>>>    anchor { 'windows_dns::begin': } ->
>>>>    class{'windows_dns::install': } ->
>>>>    class{'windows_dns::config': } ->
>>>>    class{'windows_dns::service': } ->
>>>>    anchor { 'windows_dns::end': }
>>>>
>>>> }
>>>>
>>>
>>> If you are using a recent version of puppet, you don't need the anchor
>>> pattern. See https://docs.puppetlabs.com/puppet/latest/reference/lang_
>>> containment.html
>>>
>>>
>>>>
>>>> Any help would be amazing to get the variable to pass
>>>>
>>>
>>> Here's an example using an inline template that works correctly. Note I
>>> have to escape the backslash c:\\output.log due to the double quoted
>>> string. You won't need to do that if the template is in an external file:
>>>
>>> class windows_dns::config {
>>>   $dnsforwarder = "www.example.com"
>>>
>>>   exec { 'command':
>>>     command   => inline_template("'<%= scope['dnsforwarder'] %>' |
>>> out-file c:\\output.log -append"),
>>>     logoutput => true,
>>>     provider  => powershell
>>>   }
>>> }
>>>
>>> include windows_dns::config
>>>
>>> C:\>puppet apply powershell.pp
>>> Notice: Compiled catalog for win-agent in environment production in 0.11
>>> seconds
>>> Notice: /Stage[main]/Windows_dns::Config/Exec[command]/returns:
>>> executed successfully
>>> Notice: Finished catalog run in 1.09 seconds
>>>
>>> Note this will create a UTF-16LE encoded file with a byte-order mark.
>>> You may want to specify the encoding of the file you're writing to.
>>>
>>>
>>>> On Friday, October 10, 2014 5:28:06 PM UTC-4, Rob Reynolds wrote:
>>>>>
>>>>>
>>>>>
>>>>> On Thu, Oct 9, 2014 at 4:18 PM, Paul Ponzeka <[email protected]>
>>>>> wrote:
>>>>>
>>>>>> Thanks josh, so in my template file setdnsforwarders.ps1 is this the
>>>>>> correct syntax?
>>>>>>
>>>>>
>>>>> setdnsforwarders.ps1.erb
>>>>>
>>>>>
>>>>>>
>>>>>> $outside = <%= scope['dnsforwarders'] %>
>>>>>> $outside | out-file C:\output.log -append
>>>>>>
>>>>>>
>>>>>> On Thursday, October 9, 2014 4:52:04 PM UTC-4, Josh Cooper wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Thu, Oct 9, 2014 at 12:59 PM, Juan Andres Ramirez <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>> Example:
>>>>>>>>
>>>>>>>> I have my script on powershell in the next path
>>>>>>>>
>>>>>>>> in Puppet:
>>>>>>>>
>>>>>>>> define some::module() {
>>>>>>>>    $script = "\\\\server1\\shared\\script.ps1
>>>>>>>>
>>>>>>>>     exec { "Executing a script":
>>>>>>>>           command => "powershell.exe -ExecutionPolicy ByPass -File
>>>>>>>> ${script} ${param1}",
>>>>>>>>           unless      => "powershell.exe -ExecutionPolicy ByPass
>>>>>>>> -command \"here any command on powershell \""
>>>>>>>> }
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Thursday, October 9, 2014 4:22:14 PM UTC-3, Paul Ponzeka wrote:
>>>>>>>>
>>>>>>>>> I am using Puppet installed with the powershell module.  I am
>>>>>>>>> struggling with how to pass a puppet variable through to powershell.  
>>>>>>>>> For
>>>>>>>>> instance I have the following in my module *init.pp* file:
>>>>>>>>>
>>>>>>>>> class windows_dns(
>>>>>>>>>
>>>>>>>>> $forwarders = '1.1.1.1'
>>>>>>>>>
>>>>>>>>> ) {
>>>>>>>>>    anchor { 'windows_dns::begin': } ->
>>>>>>>>>    class{'windows_dns::install': } ->
>>>>>>>>>    class{'windows_dns::config': } ->
>>>>>>>>>    class{'windows_dns::service': } ->
>>>>>>>>>    anchor { 'windows_dns::end': }
>>>>>>>>>
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Then in my *config.pp* file I have:
>>>>>>>>>
>>>>>>>>> class windows_dns::config {
>>>>>>>>>
>>>>>>>>> case $kernelmajversion {
>>>>>>>>> 6.3: {
>>>>>>>>>                         $forwarder_execute =
>>>>>>>>> 'windows_dns/setdnsforwarders.ps1'
>>>>>>>>> $forwarder_check = 'windows_dns/checkdnsforwarders.ps1'
>>>>>>>>> $dnsforwarders = $windows_dns::forwarders
>>>>>>>>>
>>>>>>>>>                 }
>>>>>>>>> 6.1: {
>>>>>>>>>                         $forwarder_execute =
>>>>>>>>> 'windows_dns/setdnsforwarders_legacy.ps1'
>>>>>>>>> $forwarder_check = 'windows_dns/checkdnsforwarders_legacy.ps1'
>>>>>>>>>
>>>>>>>>>                 }
>>>>>>>>>                 }
>>>>>>>>>
>>>>>>>>> exec { 'forwarderscreate':
>>>>>>>>>
>>>>>>>>> command => template ($forwarder_execute),
>>>>>>>>> unless => template ($forwarder_check),
>>>>>>>>> provider => powershell,
>>>>>>>>> logoutput => true,
>>>>>>>>>
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> I have stored as a template in the manifest a powershell script
>>>>>>>>> file as:
>>>>>>>>>
>>>>>>>>> $dnsforwarders | out-file C:\test.log
>>>>>>>>>
>>>>>>>>> I obviously want to use a more complex output.  I tried adding a
>>>>>>>>> parameter to the top of my powershell script but dont understand how 
>>>>>>>>> to
>>>>>>>>> pass that as an option to puppet.
>>>>>>>>>
>>>>>>>>> The variable passes through fine.  I tested by changing the
>>>>>>>>> command to *command=> template ($dnsforwarders)* and i of course
>>>>>>>>> got an error from puppet about it not being able to find the template 
>>>>>>>>> named
>>>>>>>>> *1.1.1.1* in the manifest.  I just dont know how to pass this
>>>>>>>>> through to the shell.
>>>>>>>>>
>>>>>>>>  --
>>>>>>>> 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 [email protected].
>>>>>>>> To view this discussion on the web visit
>>>>>>>> https://groups.google.com/d/msgid/puppet-users/c62b8af5-4890
>>>>>>>> -4a84-905e-63e7b6132e13%40googlegroups.com
>>>>>>>> <https://groups.google.com/d/msgid/puppet-users/c62b8af5-4890-4a84-905e-63e7b6132e13%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>>> .
>>>>>>>>
>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> I would recommend using the powershell provider as you were doing.
>>>>>>> In your powershell script 'windows_dns/setdnsforwarders.ps1',
>>>>>>> resolve parameters using ERB syntax found in
>>>>>>> https://docs.puppetlabs.com/guides/templating.html#referenci
>>>>>>> ng-variables, something like:
>>>>>>>
>>>>>>> <%= scope['dnsforwarders'] %>
>>>>>>>
>>>>>>> Josh
>>>>>>>
>>>>>>> --
>>>>>>> Josh Cooper
>>>>>>> Developer, Puppet Labs
>>>>>>>
>>>>>>  --
>>>>>> 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 [email protected].
>>>>>> To view this discussion on the web visit https://groups.google.com/d/
>>>>>> msgid/puppet-users/961dd225-1159-48fe-a9bf-c727bf094b74%40goog
>>>>>> legroups.com
>>>>>> <https://groups.google.com/d/msgid/puppet-users/961dd225-1159-48fe-a9bf-c727bf094b74%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Rob Reynolds
>>>>> Developer, Puppet Labs
>>>>>
>>>>>   --
>>>> 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 [email protected].
>>>> To view this discussion on the web visit https://groups.google.com/d/
>>>> msgid/puppet-users/d23ddc00-af07-462d-9a99-1a9d668bce32%
>>>> 40googlegroups.com
>>>> <https://groups.google.com/d/msgid/puppet-users/d23ddc00-af07-462d-9a99-1a9d668bce32%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>
>>>
>>> --
>>> Josh Cooper
>>> Developer, Puppet Labs
>>>
>>  --
> 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 [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/puppet-users/1a20cb93-4698-4e1e-8ed9-6a990e5b5e7e%40googlegroups.com
> <https://groups.google.com/d/msgid/puppet-users/1a20cb93-4698-4e1e-8ed9-6a990e5b5e7e%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Rob Reynolds
Developer, Puppet Labs

*Join us at **PuppetConf 2015, October 5-9 in Portland, OR - *
http://2015.puppetconf.com/
*Register early to save 40%!*

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/CAMJiBK6RYtMCOFRdy3Pex_3wxw0%3Dh6LwFWr%3D-yX_NBEU5cAZBQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to