Puppet manifest has a file declaration that somehow duplicates itself

被刻印的时光 ゝ 提交于 2019-12-18 09:01:48

问题


Given the confusing error message:

err: Could not retrieve catalog from remote server: Error 400 on SERVER: Duplicate declaration: File[/etc/logstash/conf.d] is already declared in file /var/lib/puppet/envs/SYS_15378/modules/logstash/manifests/config.pp at line 54; cannot redeclare at /var/lib/puppet/envs/SYS_15378/modules/logstash/manifests/config.pp:54 on node foo.bar.com

Questions:

  • If this is really duplicating a file, how do I go about debugging it (finding the file)?
  • If not... what is this actually communicating?

Notice:

  • the duplicate declaration is on line 54
  • the file it is duplicating is defined on... line 54
  • line 54 is the same line as line 54

The line in question is the closing brace of:

file { "${logstash::params::config_dir}":
   ensure  => directory,
   owner   => root,
   group   => root,
   mode    => '0755',
   purge   => true,
}

where

class logstash::params {
 $config_dir = '/etc/logstash/conf.d'
  ...
}

回答1:


Defined types should not declare common resources, meaning such that are not derived from the define instances $name.

In your example, the directory is a resource that many instances of your define need. It should therefor move to a (perhaps dedicated) class.

class logstash::config_dir {
    file { "${logstash::params::config_dir}":
        ensure  => directory,
        owner   => root,
        group   => root,
        mode    => '0755',
        purge   => true,
    }
}

In your define, you just

include logstash::config_dir

Including a class multiple times poses no problem and solves exactly that problem (among others).




回答2:


This probably means that you're including the file twice. Do you include the logstash module twice anywhere? It's possible that you're meaning to include it twice, but with different config dirs. If you're accidentally including it twice with the same config dir, then you'll get the error.




回答3:


If you copy an existing file within your manifests directory to another name (for reference purposes) but keep the ".pp" suffix, Puppet will try to include it again and will complain about the duplication. Try renaming to ".pp_OLD"



来源:https://stackoverflow.com/questions/25858390/puppet-manifest-has-a-file-declaration-that-somehow-duplicates-itself

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!