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%40goog
>>>>> legroups.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/CA%2Bu97ukN1hB7x9kv5ZwpsSnTpwKzpL_%3D97jC0faU3EspJpeLOw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to