Issue #14343 has been updated by konrad rzentarzewski.

it's hard to replicate now, as i've already patched our puppetmasters - it 
started with upgrade to 2.7.14 (it was a long weekend, so we found that 
manifests are not compiling after return - this pretty much isolates the cause 
to the upgrade).

puppet apply was ok before patching, i've checked that.

we're running puppetlabs rpms, passenger 3.0.8 and ruby:

    <0>root@punch(1)~$ /usr/local/bin/ruby -v
    ruby 1.8.7 (2011-02-18 patchlevel 334) [x86_64-linux], MBARI 0x6770, Ruby 
Enterprise Edition 2011.03
    <0>root@punch(2)~$ /usr/local/bin/gem list --local
    *** LOCAL GEMS ***
    abstract (1.0.0)
    actionmailer (3.0.10)
    actionpack (3.0.10)
    activemodel (3.0.10)
    activerecord (3.0.10)
    activeresource (3.0.10)
    activesupport (3.0.10)
    arel (2.0.10)
    builder (2.1.2)
    bundler (1.0.22)
    cgi_multipart_eof_fix (2.5.0)
    daemon_controller (0.2.6)
    daemons (1.1.8, 1.0.10)
    erubis (2.6.6)
    eventmachine (0.12.10)
    fastthread (1.0.7)
    ffi (0.5.4)
    gem_plugin (0.2.3)
    hoe (2.3.3)
    hpricot (0.8.2)
    i18n (0.6.0, 0.5.0)
    json (1.6.5, 1.2.0)
    json_pure (1.2.0)
    mail (2.2.19)
    mechanize (0.9.3)
    mime-types (1.17.2)
    multi_json (1.1.0)
    mysql (2.8.1)
    mysql2 (0.3.11)
    nokogiri (1.4.0)
    passenger (3.0.8, 2.2.7)
    polyglot (0.3.3)
    postgres (0.7.9.2008.01.28)
    rack (1.2.5, 1.0.0)
    rack-mount (0.6.14)
    rack-test (0.5.7)
    rails (3.0.10)
    railties (3.0.10)
    rake (0.8.7)
    rdoc (3.12)
    rmagick (2.12.2, 2.1.0)
    rspec (1.2.9)
    rubyforge (2.0.3)
    rufus-scheduler (2.0.3)
    semver (1.0.1)
    sqlite3-ruby (1.2.5)
    stomp (1.2.0, 1.1.3)
    stompserver (0.9.9)
    thor (0.14.6)
    treetop (1.4.10)
    tzinfo (0.3.32)
    will_paginate (2.3.11)

the error was appearing in (aparently random) parts of manifests on some of the 
hosts only.

    (master1)
    149 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 
400 on SERVER: Puppet::Parser::AST::Variable failed with error NoMethodError: 
undefined method `twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/cluster/manifests/init.pp:204 on node XXXX
    150 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 
400 on SERVER: Puppet::Parser::AST::Variable failed with error NoMethodError: 
undefined method `twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/cluster/manifests/init.pp:204 on node XXXX
    151 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 
400 on SERVER: Failed to parse template nagios/nrpe-ibm-ds35xx.erb: undefined 
method `twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/nagios/manifests/init.pp:2817 on node XXXX
    151 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 
400 on SERVER: Failed to parse template nagios/nrpe-ibm-ds35xx.erb: undefined 
method `twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/nagios/manifests/init.pp:2817 on node XXXX
    150 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 
400 on SERVER: Failed to parse template nagios/nrpe-ibm-ds35xx.erb: undefined 
method `twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/nagios/manifests/init.pp:2817 on node XXXX
    147 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 
400 on SERVER: Failed to parse template nagios/nrpe-ibm-ds35xx.erb: undefined 
method `twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/nagios/manifests/init.pp:2817 on node XXXX
    150 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 
400 on SERVER: Puppet::Parser::AST::Variable failed with error NoMethodError: 
undefined method `twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/cluster/manifests/init.pp:204 on node XXXX

    (master2)
    150 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 
400 on SERVER: Puppet::Parser::AST::Variable failed with error NoMethodError: 
undefined method `twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/cluster/manifests/init.pp:204 on node XXXX
    150 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 
400 on SERVER: Failed to parse template nagios/nrpe-ibm-ds35xx.erb: undefined 
method `twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/nagios/manifests/init.pp:2817 on node XXXX
    150 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 
400 on SERVER: Failed to parse template nagios/nrpe-ibm-ds35xx.erb: undefined 
method `twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/nagios/manifests/init.pp:2817 on node XXXX
    151 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 
400 on SERVER: Failed to parse template nagios/nrpe-ibm-ds35xx.erb: undefined 
method `twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/nagios/manifests/init.pp:2817 on node XXXX
    150 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 
400 on SERVER: Failed to parse template nagios/nrpe-ibm-ds35xx.erb: undefined 
method `twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/nagios/manifests/init.pp:2817 on node XXXX
    151 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 
400 on SERVER: Puppet::Parser::AST::Variable failed with error NoMethodError: 
undefined method `twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/cluster/manifests/init.pp:204 on node XXXX
    145 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 
400 on SERVER: Puppet::Parser::AST::Variable failed with error NoMethodError: 
undefined method `twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/cluster/manifests/init.pp:204 on node XXXX
    148 (//ezXXXX/Puppet) Could not retrieve catalog from remote server: Error 
400 on SERVER: Puppet::Parser::AST::Variable failed with error NoMethodError: 
undefined method `twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/cluster/manifests/init.pp:204 on node ezXXXX

    (master3)
    8 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 400 
on SERVER: Puppet::Parser::AST::Variable failed with error NoMethodError: 
undefined method `twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/cluster/manifests/init.pp:204 on node XXXX
    25 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 400 
on SERVER: Could not find any files from apache/dev30/httpd.erb, 
apache//httpd.erb, apache//httpd.erb, apache/development/httpd.erb at 
/etc/puppet/site/modules/apache/manifests/init.pp:60 on node XXXX
    147 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 
400 on SERVER: Failed to parse template nagios/nrpe-ibm-ds4700.erb: undefined 
method `twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/nagios/manifests/init.pp:2854 on node XXXX
    148 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 
400 on SERVER: Failed to parse template nagios/nrpe-ibm-ds4700.erb: undefined 
method `twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/nagios/manifests/init.pp:2854 on node XXXX

    (master4)
    14 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 400 
on SERVER: Puppet::Parser::AST::Variable failed with error NoMethodError: 
undefined method `twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/cluster/manifests/init.pp:204 on node XXXX
    15 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 400 
on SERVER: Puppet::Parser::AST::Variable failed with error NoMethodError: 
undefined method `twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/cluster/manifests/init.pp:204 on node XXXX 
    25 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 400 
on SERVER: Could not find any files from apache/dev7/httpd.erb, 
apache//httpd.erb, apache//httpd.erb, apache/development/httpd.erb at 
/etc/puppet/site/modules/apache/manifests/init.pp:60 on node XXXX
    147 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 
400 on SERVER: Failed to parse template nagios/nrpe-ibm-ds4700.erb: undefined 
method `twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/nagios/manifests/init.pp:2854 on node XXXX
    148 (//XXXX/Puppet) Could not retrieve catalog from remote server: Error 
400 on SERVER: Failed to parse template nagios/nrpe-ibm-ds4700.erb: undefined 
method `twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/nagios/manifests/init.pp:2854 on node XXXX
    
relevant parts of the manifests:

    /etc/puppet/site/modules/cluster/manifests/init.pp:204
    204          exec { "load-cluster-conf":
    205             command => "cman_tool version -r $clusterversion",
    206             refreshonly => true,
    207             subscribe => File["/etc/cluster/cluster.conf"],
    208             require => Exec["distribute-cluster-conf"],
    209          }

    /etc/puppet/site/modules/nagios/manifests/init.pp:2817
    2815              file { nrpe_ibm_ds35xx:
    2816                  path     => "/etc/nagios/nrpe.d/ds35xx.cfg",
    2817                  content  => template("nagios/nrpe-ibm-ds35xx.erb"),
    2818                  owner    => root,
    2819                  group    => root,
    2820                  mode     => 640,
    2821                  checksum => md5,
    2822                  require  => Package["nagios-nrpe"],
    2823                  notify   => Service["nrpe"],
    2824              }

    nagios/nrpe-ibm-ds35xx.erb:
    command[check_ibm_ds35xx]=/usr/local/bin/check_ds35xx.pl -n <%= 
ibm_ds_storagesubsystem_name %>

    /etc/puppet/site/modules/nagios/manifests/init.pp:2854
    2852              file { nrpe_ibm_ds4700:
    2853                  path     => "/etc/nagios/nrpe.d/ds4700.cfg",
    2854                  content  => template("nagios/nrpe-ibm-ds4700.erb"),
    2855                  owner    => root,
    2856                  group    => root,
    2857                  mode     => 640,
    2858                  checksum => md5,
    2859                  require  => Package["nagios-nrpe"],
    2860                  notify   => Service["nrpe"],
    2861              }

    nagios/nrpe-ibm-ds4700.erb:
    command[check_ibm_ds4700]=/usr/local/bin/check_ds4700.pl -n <%= 
ibm_ds_storagesubsystem_name %> -v -t array_status -t device_status -t 
logical_status -t system_status

    /etc/puppet/site/modules/apache/manifests/init.pp:60
    58          file { "httpd.conf":
    59              path    => "/etc/httpd/conf/httpd.conf",
    60              content  => template_search("apache/$hostname/httpd.erb", 
"apache/$projectname/httpd.erb", "apache/$platformname/httpd.erb", 
"apache/$site/httpd.erb"),
    61              require => [ Package["httpd"], File["/etc/httpd/conf"] ],
    62              notify  => Service["httpd"],
    63          }

    
/etc/puppet/site/modules/puppet/lib/puppet/parser/functions/template_search.rb
    Puppet::Parser::Functions::newfunction(:template_search, :type => :rvalue, 
:doc =>
    "Find first existing file and run puppet template function on it. If you 
want
    to concatenate multiple templates try var = template_search(file1,file2) +
    template_search(file3,file4) and then use var in your resources.") do |vals|
    require 'erb'
    ret = nil
    errors = Array.new
    vals.each do |file|
    debug "in :template_search find %s" % file
    ret = nil
    begin
    wrapper = Puppet::Parser::TemplateWrapper.new(self)
    wrapper.file = file
    ret = wrapper.result
    rescue Exception=>e
    if /could.not.find.template/i =~ e
    debug "in :template_search not found %s" % file
    else
    raise Puppet::ParseError, "in :template_search exception in %s: %s" % 
[file,e]
    errors.push(e)
    end
    end
    if ret
    debug "in :template_search found %s" % file
    break
    end
    end
    if ret
    ret
    else
    if errors.length > 0
    raise Puppet::ParseError, "Errors from :template function: %s" %
    errors.join(", ")
    else
    raise Puppet::ParseError, "Could not find any files from %s" %
    vals.join(", ")
    end
    end
    end
    
if you're still unable to replicate with that setup i will prepare puppetmaster 
replica without a patch on our developement env.

----------------------------------------
Bug #14343: undefined method twoscope_lookupvar while looking for top scope or 
facter variables
https://projects.puppetlabs.com/issues/14343#change-62218

Author: konrad rzentarzewski
Status: Investigating
Priority: Normal
Assignee: Andrew  Parker
Category: compiler
Target version: 
Affected Puppet version: 2.7.14
Keywords: 
Branch: 


with upgrade to 2.7.14 comes the following error from puppetmasters:

    err: Could not retrieve catalog from remote server: Error 400 on SERVER: 
Puppet::Parser::AST::Variable failed with error NoMethodError: undefined method 
`twoscope_lookupvar' for nil:NilClass at 
/etc/puppet/site/modules/[...]/init.pp:2863 on node [...]

referenced module code is just a top scope or facter variable lookup, ie.

    exec { "load-cluster-conf": command => "cman_tool version -r 
$clusterversion" }

it seems that twoscope_lookupvar is not visible in puppet classes.

the following patch fixes this behaviour.


-- 
You have received this notification because you have either subscribed to it, 
or are involved in it.
To change your notification preferences, please click here: 
http://projects.puppetlabs.com/my/account

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Bugs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-bugs?hl=en.

Reply via email to