Puppet:在参数 'require' 中找不到资源 'File[/etc/auditbeat/auditbeat.yml]'

Puppet: Could not find resource 'File[/etc/auditbeat/auditbeat.yml]' in parameter 'require'

我正在使用 Puppet 替换 Spacewalk 配置通道。 我对木偶很陌生,我正在写的 class 应该将一些文件复制到主机系统。 我的 class:

里有这个
class main_configurations {
  file { '/etc/auditbeat':
    ensure  => directory,
    path    => '/etc/auditbeat',
    require => File['/etc/auditbeat/auditbeat.yml'],
    source  => 'puppet:///modules/main_configurations/auditbeat/auditbeat.yml',
    recurse => true,
  }
}

但是当我 运行 puppet agent -t 我得到以下错误:

Error: Could not retrieve catalog from remote server: Error 500 on SERVER: Server Error: Could not find resource 'File[/etc/auditbeat/auditbeat.yml]' in parameter 'require' (file: /etc/puppetlabs/code/environments/production/modules/main_configurations/manifests/init.pp, line: 8) on node <servername>

为了完整起见,这是我的人偶服务器上的文件夹结构:

/etc/puppetlabs/code/environments/production/modules/main_configurations/files/auditbeat
/etc/puppetlabs/code/environments/production/modules/main_configurations/files/auditbeat/auditbeat.yml
/etc/puppetlabs/code/environments/production/modules/main_configurations/files/auditbeat/audit.rules.d
/etc/puppetlabs/code/environments/production/modules/main_configurations/files/auditbeat/audit.rules.d/auditbeat-rules.conf

But when I run puppet agent -t I get the following error:

Error: Could not retrieve catalog from remote server: Error 500 on SERVER: Server Error: Could not find resource 'File[/etc/auditbeat/auditbeat.yml]' in parameter 'require' (file: /etc/puppetlabs/code/environments/production/modules/main_configurations/manifests/init.pp, line: 8) on node

正如@MattSchuchard 在评论中所解释的那样,这正是它所说的:您有一个 require 参数引用资源 File[/etc/auditbeat/auditbeat.yml],但该(Puppet)资源未在任何已处理的清单文件。这构成了清单集中的不一致。它与哪些文件可从您的模块安装或哪些文件已经存在于目标上无关,也与给定一个没有此类不一致的清单集时 Puppet 可能做什么无关。

考虑到的声明:

  file { '/etc/auditbeat':
    ensure  => directory,
    path    => '/etc/auditbeat',
    require => File['/etc/auditbeat/auditbeat.yml'],
    source  => 'puppet:///modules/main_configurations/auditbeat/auditbeat.yml',
    recurse => true,
  }

我倾向于认为您至少误解了 require 元参数的含义。它是表示应用各种资源的相对顺序 的几个之一。它表示申请被声明的资源需要指定的其他资源之前已经成功申请。这肯定不是你想要的。

此外,您分配给该参数的资源引用不能用作资源声明。它不包含足够的信息来这样做。顾名思义,它是对在别处声明的资源的引用

您似乎正在尝试管理以 /etc/auditbeat 为根的子目录树以匹配模块中的树。在那种情况下,您可能想要更像这样的东西:

  file { '/etc/auditbeat':
    # no path required if it is already given by the resource title
    ensure  => 'directory',
    source  => 'puppet:///modules/main_configurations/auditbeat',
    recurse => true,
  }

主要是删除 require 参数。

请注意,该组合还将启用目标子树的清除,以便删除其中任何位置的非托管 non-directories。如果您不想要,请改用 recurse => 'remote'

您可能想要添加各种其他属性,主要与已安装文件的所有权和模式有关。如果您只想从服务器上的文件中复制部分或全部内容,那么您需要添加 source_permissions => 'use'。或者,有一些属性可以在您的清单中明确指定所有权和模式。