首页 > 解决方案 > Puppet 找不到依赖项

问题描述

关系有限制吗?

我们有几个相互依赖的 Puppet 模块(或者至少依赖于它们的包)。

我问这个是因为现在我想订阅一些服务以在依赖项更新时重新启动。

问题:

Error: Failed to apply catalog: Could not find dependency Package[shibbolethsp] for Package[httpd] at /etc/puppetlabs/code/environments/development/modules/apache/manifests/instance.pp:39

模块:

# Module someco-httpd, init.pp
package['httpd'] {
  ...
  require => Package['openssl','shibbolethsp'] # can find openssl but NOT shibbolethsp
}

# Module someco-openssl, init.pp
package['openssl'] {
  ...
}

# Module someco-shibbolethsp, init.pp
package['shibbolethsp'] {
  ...
}

该资源Package[shibbolethsp]存在,因为如果我删除包并再次运行 puppet,我可以看到它已安装,但如果我还想配置 Apache(这需要Package[shibbolethsp]正常运行)Puppet 失败。

所以资源存在,但我猜 Puppet 无法正确解决它们?如果 openssl 更新到新版本,Package[openssl] 与预期相同的关系和 Apache 重新启动...

这是一个排序/多线程问题吗?一种关系有效,另一种则无效...

标签: puppet

解决方案


问题是跨模块依赖。其他模块中的资源与当前模块位于不同的命名空间中。因此,如果您依赖来自另一个模块的资源,您必须使用完整路径,例如,Other_module::Other_class_or_defined_type['bla']或者require Other_module在您init.pp的 s 中使用以确保正确的顺序!

注意:在site.pp你必须以正确的顺序定义资源!


推荐阅读