鉴于令人困惑的错误消息:
错误:无法从远程服务器检索目录:错误400开启 SERVER:重复声明:文件[/etc/logstash/conf.d]已经存在 在文件中声明 /var/lib/puppet/envs/SYS_15378/modules/logstash/manifests/config.pp at 第54行;无法重新声明 /var/lib/puppet/envs/SYS_15378/modules/logstash/manifests/config.pp:54 在节点foo.bar.com上
问题:
注意:
有问题的一行是关闭括号:
file { "${logstash::params::config_dir}":
ensure => directory,
owner => root,
group => root,
mode => '0755',
purge => true,
}
,其中
class logstash::params {
$config_dir = '/etc/logstash/conf.d'
...
}
答案 0 :(得分:4)
定义的类型不应声明公共资源,这意味着不是从define
实例$name
派生的。
在您的示例中,该目录是您define
的许多实例所需的资源。因此应该转移到(也许是专门的)班级。
class logstash::config_dir {
file { "${logstash::params::config_dir}":
ensure => directory,
owner => root,
group => root,
mode => '0755',
purge => true,
}
}
在define
中,您只需
include logstash::config_dir
多次包括一个类没有问题,并且正好解决了这个问题(等等)。
答案 1 :(得分:1)
这可能意味着你要包含两次文件。您是否在任何地方都包含了两次logstash模块?你有意将它包含两次,但配置目的地不同。如果您不小心使用相同的配置目录将其包含两次,那么您将收到错误。
答案 2 :(得分:0)
如果您将清单目录中的现有文件复制到另一个名称(供参考),但保留" .pp"后缀,Puppet将尝试再次包含它,并会抱怨重复。尝试重命名为" .pp_OLD"
答案 3 :(得分:0)
使用create_resource()时,我也会遇到同样的问题。
当您想像循环一样多次运行“ file {}”块时,会发生此错误。
在创建“文件{}”块的多个副本时,我们必须确保文件块的名称是唯一的,即
文件{“文件名”:.....}
如果重复相同的名称,则会出现上述错误。
在您的情况下,某些值“ $ {logstash :: params :: config_dir}”必须重复两次。