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.