为什么傀儡会排除一个文件资源没有错误?

最奇怪的事情发生在这个木偶运行(使用Puppet Apply ),它让我困惑。 我尝试了我平常的渠道find解决办法,但是我找不到任何关于这个主题的内容。 我很抱歉如此冗长,我只是不想留下任何东西:\

我的课

 class c2c::profile::app::logio::stage_support { # Log.io plugin # Create plugin directories exec { "create_codec_dir": command => "/bin/mkdir --parents /etc/logstash/plugins/logstash/codecs --mode=0775", creates => '/etc/logstash/plugins/logstash/codecs', } # Install plugin file { "logio_plugin_file": # update: added in response to a serverfault comment ensure => file, path => '/etc/logstash/plugins/logstash/codecs/logio.rb', mode => '0775', owner => 'root', group => 'root', source => 'puppet:///modules/c2c/logstash/logio_codec.rb', require => Exec['create_codec_dir'], notify => Service['logstash'], } } 

..和我的Puppet运行是跳过logio_plugin_file指令(或者,不pipe什么原因,不复制文件)。

日志,等等

debugging日志是相当大的,不想粘贴整个事情,所以这里是在Puppet运行提到'logio_plugin_file'的每一行,但我会很乐意提供更多,如果需要的话。

 Debug: /File[logio_plugin_file]/seluser: Found seluser default 'system_u' for /etc/logstash/plugins/logstash/codecs/logio.rb Debug: /File[logio_plugin_file]/selrole: Found selrole default 'object_r' for /etc/logstash/plugins/logstash/codecs/logio.rb Debug: /File[logio_plugin_file]/seltype: Found seltype default 'etc_t' for /etc/logstash/plugins/logstash/codecs/logio.rb Debug: /File[logio_plugin_file]/selrange: Found selrange default 's0' for /etc/logstash/plugins/logstash/codecs/logio.rb .. Debug: /File[logio_plugin_file]/require: requires Exec[create_codec_dir] Debug: /File[logio_plugin_file]/notify: subscribes to Service[logstash] .. Debug: /File[logio_plugin_file]: Autorequiring File[logstash_codec_plugins] 

/var/lib/puppet/state/last_run_report.yaml

术语“logio_plugin_file”仅作为两个Puppet::Util::Log条目的一部分提及,并且不存在File[logio_plugin_file]条目。

以下是这两个条目的快速片段:

 - !ruby/object:Puppet::Util::Log level: !ruby/sym debug time: 2013-12-06 17:30:38.009095 +00:00 tags: - debug - file - logio_plugin_file - class ... (25 more ) ... line: 41 source: /File[logio_plugin_file]/require file: /tmp/vagrant-puppet/modules-0/c2c/manifests/profile/app/logio/stage_support.pp message: "requires Exec[create_codec_dir]" .. further down, mostly the same except .. message: "subscribes to Service[logstash]" 

奇诡

这个文件包含在一个大的目录中,有几十个或几百个其他的类,但是奇怪的是,如果我直接使用一个快速testing清单(也使用puppet apply )来包含这个类,它就像一个魅力一样。 (虽然我必须删除服务要求)

 node default { class { 'c2c::profile::app::logio::stage_support': } } 

..我得到这个在我的输出..

 Notice: /File[logio_plugin_file]/ensure: defined content as '{md5}41d00952843b8159b95ce4fcd8015cda' 

..和这个在last_run_report.yaml ..

 File[logio_plugin_file]: !ruby/object:Puppet::Resource::Status resource: File[logio_plugin_file] file: /tmp/vagrant-puppet/modules-0/c2c/manifests/profile/app/logio/stage_support.pp line: 40 evaluation_time: 0.023071 change_count: 1 out_of_sync_count: 1 ... 

附加点,信息和testing

  • 我只是添加了Notify => Service['logstash'] ,这种行为发生之前,我这样做。
  • 没有错误发出
  • 我在stage_support类中添加了一些notify{}调用,以确保它正确地包含在目录中,并且是。
  • Exec['create_codec_dir']正在创build我的目录
  • 我试着改变path参数logio2.rb来查看是否类
  • 我试图从另一个资源需要File['logio_plugin_file'] 。 所需资源已运行,但未创build文件。
  • 更新:我试图减less我的文件types调用,只包括title加上ensurepathsource ,没有任何效果。
  • 更新:我试着重命名资源,(例如logio_plugin_file_x ),这没有帮助。

     [root@dev ~]# puppet --version 3.2.3 [root@dev ~]# facter --version 1.7.2 [root@dev ~]# cat /etc/redhat-release CentOS release 6.4 (Final) 

重要的提示

这个问题出现在我进行代码重组的最后,所以这几乎是可以肯定的,但我无法解决这个问题。

任何帮助深表感谢!

正如所料,这个问题的根源很简单,但我仍然不明白为什么木偶没有提出这样的错误:

profile / logstash.pp 🙁其他地方)

 file { 'logstash_plugin_sub': path => '/etc/logstash/plugins/logstash', ensure => 'directory', owner => 'root', group => 'root', mode => '0775', require => [ File['logstash_plugin_sub'] ] } 

请注意require中的循环引用: File['logstash_plugin_sub'] -> File['logstash_plugin_sub']

由此产生的行为是非常奇怪的,我发现使用这个testing的问题:

 file { "logio_plugin_file_a": path => '/etc/logstash/logio.rb', source => 'puppet:///modules/c2c/logstash/logio_codec.rb', } file { "logio_plugin_file_b": path => '/etc/logstash/plugins/logio.rb', source => 'puppet:///modules/c2c/logstash/logio_codec.rb', } file { "logio_plugin_file_c": path => '/etc/logstash/plugins/logstash/logio.rb', source => 'puppet:///modules/c2c/logstash/logio_codec.rb', } file { "logio_plugin_file_d": path => '/etc/logstash/plugins/logstash/codecs/logio.rb', source => 'puppet:///modules/c2c/logstash/logio_codec.rb', } 

这个想法主要是尝试将我的文件添加到树中更深和更深的位置。 这个想法是由于能够改变我原来的例子的path而获得成功的。

所以,创build了以下内容:

 /etc/logstash/logio.rb /etc/logstash/plugins/logio.rb 

但是这两个更深的资源被跳过了,所以我知道我的问题集中在/etc/logstash/plugins/logstash 。 经仔细检查,我find了循环参考。

希望这可以帮助一个人,并感谢Shane Madden的时间。