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.