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"]

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/gu
>>>>>> ides/templating.html#referencing-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%
>>>>> 40googlegroups.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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to