为什么 Puppet 找不到我定义的资源?

为什么 Puppet 找不到我定义的资源?

我在 /etc/puppet/modules/autofs/manifests/mount.pp 中有一个定义的资源(来自 pdx-cat/autofs 模块https://forge.puppetlabs.com/pdxcat/autofs)。

我在 /etc/puppet/modules/sheffield/manifests/autofs/net.pp 中有一个模块,它正在尝试使用 autofs::mount 定义的类型。

class sheffield::autofs::net {
  include ::autofs

  autofs::mount { '/net':
    map     => '',
    options => '-hosts',
  }
}

但是当客户端尝试获取目录时,我收到以下错误;

Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Puppet::Parser::AST::Resource failed with error ArgumentError: Invalid resource type autofs::mount at /etc/puppet/modules/sheffield/manifests/autofs/net.pp:7 on node rhel6test.shef.ac.uk

有什么想法吗?我认为这可能是由于无法自动加载类型而导致的问题,因为它与 sheffield::autofs 中的子类具有相同的名称 (autofs),因此我尝试将其重命名为 sheffield::auto-fs,但没有任何区别。

我尝试将 mount.pp 从 /etc/puppet/autofs/manifests 复制到 /etc/puppet/sheffield/manifests/autofs/,它确实找到了资源类型,但由于 mount.pp 中缺少大量其他依赖项而无法工作(显然,这不是解决问题的好方法)。

答案1

由于include ::autofs没有错误,您应该能够::在定义上使用相同的前缀:

class sheffield::autofs::net {
  ::autofs::mount { '/net':
    ...
  }
}

如果不起作用,则可能是模块路径或其他相关设置有错误。

include ::autofs这行实际上并不需要。 mount-define 包含所有必要的类。

答案2

我有同样的问题:自定义资源定义,类别清晰可见,在 Foreman 中列出。

对我来说,问题在于格式metadata.json错误,缺少“源”属性。如果没有其他方法可以解决问题,值得检查一下!

相关内容