[英]Puppet: “Could not find class” hiccups *often* once after manifest/module changes
我不知道这是一个错误还是某种滥用/配置错误。 希望有人能帮忙。 谢谢!
如果我更改模块或清单目录中的文件,通常会导致错误,主要是以下几种
在节点上找不到类
在节点上找不到定义类
当更改人偶模块/清单时会发生这些错误-但仅发生一次。 如果发生这种情况,受影响的人偶代理将使用其缓存的目录一次。 下次这些代理请求目录时,它将完美无缺地进行编译,并且所有内容都将像魅力一样工作 –所有错误都消失了。 问题是我们的代理商目录很大。 他们的目录运行可能需要一分钟以上的时间,因此应用更改所花费的时间将加倍,最多需要2分钟甚至3分钟。
通常,模块/清单的更改是通过“ git pull”执行的。 但是通过简单的“触摸”操作很容易重现这些错误消息。 这是一些有趣的日志观察及其[共性]。 是的,它们总是出现在三胞胎中。 修改后很少有根本没有这样的问题。
>触摸/opt/xxx/dev/puppet/manifests/site.pp
[often] puppet-master[12498]: Could not find class <class> for <node> on <node>
[often] puppet-master[12498]: Could not find class <class> for <node> on <node>
[often] puppet-master[12498]: Could not find class <class> for <node> on <node>
>触摸/opt/xxx/dev/puppet/puppet.conf
[often] puppet-master[12498]: Could not find class <class> for <node> on <node>
[often] puppet-master[12498]: Could not find class <class> for <node> on <node>
[often] puppet-master[12498]: Could not find class <class> for <node> on <node>
[sometimes] puppet-master[12498]: Cannot find definition Class on node <node>
[sometimes] puppet-master[12498]: Cannot find definition Class on node <node>
[sometimes] puppet-master[12498]: Cannot find definition Class on node <node>
[rare] puppet-master[12498]: Puppet::Parser::AST::Resource failed with error ArgumentError: Invalid resource type <own custom type> at <class file> on node <node>
[rare] puppet-master[12498]: Puppet::Parser::AST::Resource failed with error ArgumentError: Invalid resource type <own custom type> at <class file> on node <node>
[rare] puppet-master[12498]: Puppet::Parser::AST::Resource failed with error ArgumentError: Invalid resource type <own custom type> at <class file> on node <node>
>触摸/opt/xxx/dev/puppet/modules/dispatcher/manifests/init.pp
[often] puppet-master[12498]: Could not find class <class not even part of module dispatcher> for <node not even affected by module dispatcher> on <node not even...>
[often] puppet-master[12498]: Could not find class <class not even part of module dispatcher> for <node not even affected by module dispatcher> on <node not even...>
[often] puppet-master[12498]: Could not find class <class not even part of module dispatcher> for <node not even affected by module dispatcher> on <node not even...>
受影响的类和节点似乎是随机选择的。
运行环境:
> ll /etc/puppet
lrwxrwxrwx 1 root root 34 Mar 7 10:01 auth.conf -> /opt/xxx/dev/puppet/auth.conf
lrwxrwxrwx 1 root root 38 Mar 7 10:01 autosign.conf -> /opt/xxx/dev/puppet/autosign.conf
lrwxrwxrwx 1 root root 40 Mar 7 10:01 fileserver.conf -> /opt/xxx/dev/puppet/fileserver.conf
lrwxrwxrwx 1 root root 36 Mar 7 10:01 puppet.conf -> /opt/xxx/dev/puppet/puppet.conf
> ls -A /opt/xxx/dev/puppet/
auth.conf autosign.conf fileserver.conf .git .gitignore manifests modules .project puppet.conf scripts
> cat /etc/puppet/puppet.conf # on puppetmaster
[main]
logdir = /var/log/puppet
rundir = /var/run/puppet
ssldir = $vardir/ssl
modulepath = /opt/xxx/dev/puppet/modules
manifestdir = /opt/xxx/dev/puppet/manifests
manifest = /opt/xxx/dev/puppet/manifests/site.pp
[agent]
classfile = $vardir/classes.txt
localconfig = $vardir/localconfig
server = <puppetmaster host>
report = true
splaylimit = 0
runinterval = 30
[master]
certname=<puppetmaster host>
reports = http,log
reportdir = /var/lib/puppet/reports/upload
reporturl = http://<puppetmaster host>:3000/reports
> cat /opt/xxx/dev/puppet/manifests/site.pp
import 'nodes.pp'
$puppetserver = <puppetmaster host>
> rpm -qa | egrep "puppet|ruby"
rubygem-rake-0.8.7-2.1.el6.noarch
ruby-mysql-2.8.2-1.el6.x86_64
libselinux-ruby-2.0.94-5.3.el6.x86_64
puppet-3.1.0-1.el6.noarch
rubygem-fastthread-1.0.7-2.el6.x86_64
rubygem-mongrel-1.1.5-3.el6.x86_64
ruby-1.8.7.352-7.el6_2.x86_64
ruby-irb-1.8.7.352-7.el6_2.x86_64
ruby-augeas-0.4.1-1.el6.x86_64
ruby-shadow-1.4.1-13.el6.x86_64
puppetlabs-release-6-6.noarch
rubygems-1.3.7-1.el6.noarch
puppet-server-3.1.0-1.el6.noarch
rubygem-gem_plugin-0.2.3-3.el6.noarch
rubygem-daemons-1.0.10-2.el6.noarch
puppet-dashboard-1.2.22-1.el6.noarch
ruby-libs-1.8.7.352-7.el6_2.x86_64
ruby-rdoc-1.8.7.352-7.el6_2.x86_64
rubygem-json-1.4.6-1.el6.x86_64
切换到Apache / Passenger / Rack解决方案(并转储WEBrick)似乎可以解决此问题。 附加信息: http : //projects.puppetlabs.com/issues/19642
我重命名了Puppet模块/类时发生了这种情况,结果是:
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find class foo for example on node myhost.example.com
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run
我让Puppet在Apache + Foreman上与Passenger一起使用,所以我发现的解决方案是让httpd和foreman-proxy重新启动:
sudo service httpd restart
sudo service foreman-proxy restart
另外,如果您使用的是git或svn之类的代码版本控制系统(应该是:)),请确保确实将更新推送到了puppet master。 换句话说,检查您的模块是否确实存在于Puppet所寻找的位置,例如/etc/puppet/modules/foo
。 我已经绊了几次。
在我的情况下,这是puppet master上的语言环境问题(我的某些清单包含本地化注释),因此Puppet 3.8静默无法编译它们。
在控制台中检查locale
命令的输出(不应抱怨任何内容)。
我通过运行sudo dpkg-reconfigure locales
并将下一行插入/etc/default/locale
来修复它:
LC_ALL="ru_RU.UTF-8"
LANG="ru_RU.UTF-8"
LANGUAGE="ru_RU:ru:en"
另外我正在将apache2与乘客一起使用来运行Puppet master,因此我还需要从以下位置替换/etc/init.d/apache2
的下一个字符串:
ENV="env -i LANG=C PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
至:
ENV="env -i LANG=ru_RU.UTF-8 LC_ALL=ru_RU.UTF-8 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
事实证明,在C语言环境下启动的Ruby认为所有文件都采用ASCII编码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.