问题
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