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 <[email protected] 
> <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 <[email protected]> 
>>> 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 [email protected].
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