puppet - 检查文件是否存在的 Puppet 模块
问题描述
由于 Puppet 中没有简单的方法来检查代理上是否存在文件,因此我正在尝试编写一个执行此检查的模块。但是,它没有按预期工作。我做了以下事情:
- 在模块文件夹中,执行
puppet module generate root-mymodule
- 在
mymodule/manifests/file_check.pp
.. .. 如果定义(文件[“/tmp/test_file”]){ .. ..
但是,这并没有达到我想要的效果。显然它只检查文件是否在目录中定义。如何让它实际检查文件是否存在?
解决方案
由于 Puppet 中没有简单的方法来检查代理上是否存在文件,因此我正在尝试编写一个执行此检查的模块。
在使用主/代理安排时,无法在目录构建期间测试客户端是否存在任意文件。目录构建发生在主服务器上;在此过程中,无法从代理处获得其他信息。相反,如果您正在使用,puppet apply
那么您可以使用该generate
功能,但这是一个等待咬人的陷阱,该人后来试图将您的代码移动到主机。
if defined(File["/tmp/test_file"]) {
[...] 没有达到我想要的效果。显然它只检查文件是否在目录中定义。
是的,就是defined()
这样。实际上,它比这更糟糕:defined()
只能测试该特定File
资源的声明是否已经被评估。它无法告诉您稍后可能在同一目录构建运行中评估的该资源的声明。由于清单评估顺序难以预测,defined
因此比无用更糟糕:它很危险。不要使用它。
如何让它实际检查文件是否存在?
我想您想及时执行这样的检查以使用结果来影响目录构建。这就是事实的目的。Puppet 提供了多种方法来定义和分发您自己的事实。对于像测试特定文件是否存在这样简单的事情,我建议使用“外部事实”方法而不是“自定义事实”方法。
但是您还应该重新考虑您的前提,这显然是一种通用机制,用于编译时测试代理上是否存在任意文件将是有用的。事实上,这样的测试很少有用。Puppet 有更好的方法来处理大多数任务,否则你可能会使用这样的东西,而剩下的大多数任务通常最好根本不做。如果你想要这个特定的东西,那么我邀请你就那个特定的东西提出一个新问题。
推荐阅读
- python - pygame中的全屏模式是全黑的
- json - 在jq读取查询中使用变量
- pytorch - pytorch conv2d的源码在哪里?
- entity-framework - 如何从asp.net核心中的数据库中按降序获取数据
- mysql - 带有选择子查询的更新查询和带有内部联接的更新查询之间的区别
- oracle12c - ORA-04024: 在尝试互斥锁定游标时检测到自死锁而没有问题的 SQL 计划基线
- python - 如何在python程序中使用概率
- reactjs - 如何在 React 中渲染组件而不将其放入 render() 方法中?
- python - 计算熊猫中无关紧要的行数
- flutter - 如何在有状态小部件中编辑最终对象