puppet - 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 重新启动...
这是一个排序/多线程问题吗?一种关系有效,另一种则无效...
解决方案
问题是跨模块依赖。其他模块中的资源与当前模块位于不同的命名空间中。因此,如果您依赖来自另一个模块的资源,您必须使用完整路径,例如,Other_module::Other_class_or_defined_type['bla']
或者require Other_module
在您init.pp
的 s 中使用以确保正确的顺序!
注意:在site.pp
你必须以正确的顺序定义资源!
推荐阅读
- .htaccess - 当 URL 有连字符和斜杠时,.htaccess 301 重定向无法正常工作
- lua - 我可以从另一个导入的 lua 脚本访问我的 lua 脚本中的变量吗?
- haskell - getArgs 字符串到 int
- google-cloud-platform - 将应用程序部署到谷歌应用程序引擎时生成错误
- apache-spark - Spark Streaming 数据集 Cassandra 连接 UnsupportedOperationChecker
- gnuplot - Gnuplot参数和数据?
- java - 我什么时候使用 BufferedInputStream?
- javascript - 使用没有 redux 的反应导航 5 时如何从另一个上下文中获取结果?
- typescript - 在 TypeScript 中为接受数字并返回字符串的函数编写类型
- python - 从通过 Python 脚本运行的 Presto 查询返回的打印标题