On Thursday, May 19, 2016 at 2:36:53 PM UTC-7, Peter Huene wrote:
>
>
> On Thu, May 19, 2016 at 2:23 PM, David Karr <davidmic...@gmail.com 
> <javascript:>> wrote:
>
>> On Thursday, May 19, 2016 at 2:16:17 PM UTC-7, Peter Huene wrote:
>>>
>>> Hi David:
>>>
>>> On Thu, May 19, 2016 at 1:57 PM, David Karr <davidmic...@gmail.com> 
>>> wrote:
>>>
>>>> I'm stepping through "Learning Puppet 4", and I ran into an error 
>>>> following steps in the book, and I want to understand what went wrong 
>>>> before I report it.
>>>>
>>>> The section in question is "Using Puppet EPP Templates" in chapter 13.
>>>>
>>>> I'll work backwards from the error I'm getting, showing the relevant 
>>>> files afterwards.  Here is what I see when I apply the manifest:
>>>> [vagrant@client puppet]$ sudo puppet apply --environment test manifests
>>>> /
>>>> Warning: Unknown variable: '::puppet::common_loglevel'. at /etc/
>>>> puppetlabs/code/environments/test/modules/puppet/templates/puppet.conf.
>>>> epp:3:21
>>>> Warning: Unknown variable: 'puppet::agent_loglevel'. at /etc/puppetlabs
>>>> /code/environments/test/modules/puppet/templates/puppet.conf.epp:7:7
>>>> Warning: Unknown variable: '::puppet::server'. at /etc/puppetlabs/code/
>>>> environments/test/modules/puppet/templates/puppet.conf.epp:10:18
>>>> Warning: Unknown variable: 'puppet::apply_loglevel'. at /etc/puppetlabs
>>>> /code/environments/test/modules/puppet/templates/puppet.conf.epp:14:7
>>>> Notice: Compiled catalog for client.example.com in environment test in 
>>>> 0.04 seconds
>>>> Notice: /Stage[main]/Main/File[/etc/puppetlabs/puppet/puppet.conf]/
>>>> content: content changed '{md5}a72aadac19feefd06f10fb6b8f90c5f4' to 
>>>> '{md5}0f89a3d91b54aec8463b4a250a493f36'
>>>> Notice: /Stage[main]/Main/File[/etc/puppetlabs/puppet/puppet.conf]/
>>>> owner: owner changed 'vagrant' to 'root'
>>>> Notice: /Stage[main]/Main/File[/etc/puppetlabs/puppet/puppet.conf]/
>>>> group: group changed 'vagrant' to 'wheel'
>>>> Notice: /Stage[main]/Main/File[/etc/puppetlabs/puppet/puppet.conf]/mode
>>>> : mode changed '0664' to '0644'
>>>> Notice: Applied catalog in 0.06 seconds
>>>> [vagrant@client puppet]$ 
>>>>
>>>>
>>> Based on the warnings, it looks like the "puppet" class hasn't been 
>>> declared.  Did you `include puppet` somewhere or otherwise classify the 
>>> node to include the "puppet" class? 
>>>
>>
>> The only file in the "manifests" directory is "init.pp", which is this:
>> class puppet(
>>   # input parameters and default values for the class
>>   $version         = 'latest',
>>   $status          = 'running',
>>   $enabled         = true,
>>   $server          = 'puppet.example.com',
>>   $common_loglevel = 'warning',
>>   $agent_loglevel  = undef,
>>   $apply_loglevel  = undef,
>> ) {
>>
>>   # echo the input provided
>>   notice("Install the $version version of Puppet, ensure it's $status, 
>> and set boot time start $enabled.")
>>
>>   # install puppet-agent
>>   package { 'puppet-agent':
>>     ensure => 'latest',
>>     notify => Service['puppet'],
>>   }
>>
>>   # manage the puppet service
>>   service { 'puppet':
>>     ensure => 'running',
>>     enable => true,
>>     subscribe => Package['puppet-agent'],
>>   }
>> }
>>
>> class puppet::agent {
>> }
>>
>> file { '/etc/puppetlabs/puppet/puppet.conf':
>>   ensure => file,
>>   owner => 'root',
>>   group => 'wheel',
>>   mode  => '0644',
>> #  source => 'puppet:///modules/puppet/puppet.conf',
>>   content => epp('puppet/puppet.conf.epp'),
>> }
>>
>>
> Without including the puppet class, the evaluation of the epp function 
> here will result in those "unknown variable" warnings and they will 
> evaluate to undef (or cause an error in more recent versions of Puppet with 
> strict variable checking enabled). 
>

Ok, so it appears that if I add "include puppet" right after the body of 
the "puppet" class, it processes the template without undefined variable 
references.  That just seems odd.  Is that really what I need to do?
 

>  
>
>>  
>>
>>>  
>>>
>>>> The template in question, right from the book, is this:
>>>>
>>>> # Generated by Puppet EPP template processor
>>>> [master]
>>>>     log_level = <%= $::puppet::common_loglevel %>
>>>>
>>>> # This is used by "puppet agent"
>>>> [agent]
>>>> <% if $puppet::agent_loglevel != undef { -%>
>>>>     log_level = <%= $::puppet::agent_loglevel %>
>>>> <% } -%>
>>>>     server = <%= $::puppet::server %>
>>>>
>>>> # This is used for "puppet apply"
>>>> [user]
>>>> <% if $puppet::apply_loglevel != undef { -%>
>>>>     log_level = <%= $::puppet::apply_loglevel %>
>>>> <% } -%>
>>>>
>>>>
>>>> Likely the most important piece to see now is the part of the "init.pp" 
>>>> manifest that declares the parameters being referenced here:
>>>>
>>>> class puppet(
>>>>   $version         = 'latest',
>>>>   $status          = 'running',
>>>>   $enabled         = true,
>>>>   
>>>>
>>>>
>>>> *$server          = 'puppet.example.com <http://puppet.example.com>',  
>>>> $common_loglevel = 'warning',  $agent_loglevel  = undef,  $apply_loglevel  
>>>> = undef,*
>>>> ) {
>>>>
>>>>
>>>> I imagine the syntax of the variable references in the EPP file have to 
>>>> be slightly different, but I have no idea what it should be.
>>>>
>>>
>>> The EPP is fine; the code inside an EPP <% %> is expected to be valid 
>>> Puppet code.
>>>  
>>>
>>>>
>>>> I also find it curious that the error messages print the name of the 
>>>> variable differently for different messages, sometimes prefixed with "::" 
>>>> and sometimes not.  Any background that would explain that?
>>>>
>>>
>>> When a variable name has a leading "::" it forces a lookup in the 
>>> top-scope.  An example where it would be needed is when you have a 
>>> top-scoped variable and a local variable of the same name; a leading "::" 
>>> would ensure that the top-scope variable is used and not the local variable.
>>>
>>
>> Perhaps I wasn't clear.  All the variable references in the template use 
>> the same syntax, using the "$::puppet" prefix, yet half of the error 
>> messages refer to the "::" prefix, and half of them do not.
>>
>
> The compiler emits the warning based on the variable's name as it was 
> specified in the source.  The EPP template you've pasted contains two 
> variable references, $puppet::agent_loglevel and $puppet::apply_loglevel, 
> in the "if" conditionals that are not prefixed with "::", which is why you 
> do not see the leading "::" in the warnings.
>
> The places where these two variables are actually prefixed with "::" are 
> never evaluated because the variables evaluate to undef and the 
> conditionals evaluate to false.
>

Yeah, sorry.  I missed that.  Now that I have the class properly included 
(still seems odd that I have to declare it and also "include" it), I see 
that the template processing produces the same result for all of these 
references with or without the "::" prefix.  From your explanation, I see 
that that's just because there are no potential conflicts. 

-- 
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+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/2ed6950d-124f-4baf-8d0a-d878832ede4d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to