4

我不知道这是一个错误还是某种滥用/错误配置。希望有人可以提供帮助。谢谢!

如果我更改模块或清单目录中的文件,这通常会导致错误,主要是以下几种

  • 在节点上找不到类

  • 在节点上找不到定义类

当 puppet 模块/清单更改时会发生这些错误 - 但它只发生一次。如果发生这种情况,受影响的 puppet 代理将使用他们的缓存目录一次。下次这些代理请求目录时,它会完美编译,一切都会像魅力一样工作——所有错误都消失了。问题是我们有大型目录的代理。他们的目录运行可能需要超过一分钟,因此应用更改所需的时间将加倍,最多需要 2 甚至 3 分钟。

通常模块/清单的更改由“git pull”执行。但是通过简单的“触摸”操作很容易重现这些错误信息。这里有一些有趣的日志观察和它们的[共性]。是的 AFAICS 他们总是以三胞胎出现。很少发生修改后根本没有这样的问题。

> 触摸 /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
4

3 回答 3

1

切换到 Apache/Passenger/Rack 解决方案(并转储 WEBrick)似乎可以解决这个问题。附加信息:http ://projects.puppetlabs.com/issues/19642

于 2013-03-18T16:11:23.670 回答
1

当我重命名 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

我在 Apache + Foreman上为 Passenger 服务了 Puppet ,所以我找到的解决方案是重新启动 httpd 和 foreman-proxy:

sudo service httpd restart
sudo service foreman-proxy restart

此外,如果您使用代码版本控制系统(应该是 :)),如 git 或 svn,请确保您确实将更新推送到 puppet master。换句话说,检查您的模块是否确实存在于 Puppet 正在寻找它的位置,例如/etc/puppet/modules/foo. 我已经为此绊倒了几次。

于 2013-04-17T13:23:46.130 回答
0

就我而言,这是 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 编码。

于 2016-08-31T09:39:13.057 回答