检查文件是否存在的 Puppet 模块
Puppet module that checks to see if a file exists
由于在 Puppet 中没有简单的方法来检查代理上是否存在文件,我正在尝试编写一个模块来执行此检查。但是,它没有按预期工作。我做了以下事情:
- 在模块文件夹中,执行
puppet module generate root-mymodule
- 在
mymodule/manifests/file_check.pp
..
..
if defined(File["/tmp/test_file"]) {
..
..
然而,这并没有达到我想要的效果。显然它只检查文件是否在目录中定义。我如何让它实际检查文件是否存在?
Since there is no easy way in Puppet to check whether a file exists on
the agent, I am attempting to write a module that performs this check.
使用主/代理安排时,无法在目录构建期间测试客户端是否存在任意文件。目录构建发生在 master 上;在此过程中无法从代理处获取更多信息。相反,如果您使用的是 puppet apply
,那么您可以使用 generate
函数,但这是一个陷阱,等待稍后尝试将您的代码移至 master 的人。
if defined(File["/tmp/test_file"]) {
[...] does not achieve what I want it to. Apparently it only
checks if the file is defined in the catalog.
是的,这就是 defined()
所做的。实际上,比这更糟糕的是:defined()
只能测试该特定 File
资源的声明是否已 已经 被评估。它无法告诉您稍后可能会在同一目录构建中评估的该资源的声明 运行。由于清单评估顺序难以预测,defined
比无用还糟糕:它 危险 。不要使用它。
How do I get it to
actually check if the file exists ?
我假设您想及时执行这样的检查,以使用结果来影响目录构建。这就是 facts 的用途。 Puppet 提供 multiple approaches to defining and distributing your own facts。对于像测试特定文件是否存在这样简单的事情,我建议使用 "external fact" 方法而不是 "custom fact" 方法。
但是您还应该重新考虑您的前提,这显然是一种通用机制,用于编译时测试代理上是否存在任意文件,这将是一件有用的事情。事实上,这样的测试很少有用。 Puppet 有更好的方法来处理大多数任务,否则您可能会使用这样的东西,而大多数剩余的任务通常最好根本不要完成。如果你想要这个特定的东西,那么我邀请你就那个特定的东西提出一个新问题。
由于在 Puppet 中没有简单的方法来检查代理上是否存在文件,我正在尝试编写一个模块来执行此检查。但是,它没有按预期工作。我做了以下事情:
- 在模块文件夹中,执行
puppet module generate root-mymodule
- 在
mymodule/manifests/file_check.pp
.. .. if defined(File["/tmp/test_file"]) { .. ..
然而,这并没有达到我想要的效果。显然它只检查文件是否在目录中定义。我如何让它实际检查文件是否存在?
Since there is no easy way in Puppet to check whether a file exists on the agent, I am attempting to write a module that performs this check.
使用主/代理安排时,无法在目录构建期间测试客户端是否存在任意文件。目录构建发生在 master 上;在此过程中无法从代理处获取更多信息。相反,如果您使用的是 puppet apply
,那么您可以使用 generate
函数,但这是一个陷阱,等待稍后尝试将您的代码移至 master 的人。
if defined(File["/tmp/test_file"]) {
[...] does not achieve what I want it to. Apparently it only checks if the file is defined in the catalog.
是的,这就是 defined()
所做的。实际上,比这更糟糕的是:defined()
只能测试该特定 File
资源的声明是否已 已经 被评估。它无法告诉您稍后可能会在同一目录构建中评估的该资源的声明 运行。由于清单评估顺序难以预测,defined
比无用还糟糕:它 危险 。不要使用它。
How do I get it to actually check if the file exists ?
我假设您想及时执行这样的检查,以使用结果来影响目录构建。这就是 facts 的用途。 Puppet 提供 multiple approaches to defining and distributing your own facts。对于像测试特定文件是否存在这样简单的事情,我建议使用 "external fact" 方法而不是 "custom fact" 方法。
但是您还应该重新考虑您的前提,这显然是一种通用机制,用于编译时测试代理上是否存在任意文件,这将是一件有用的事情。事实上,这样的测试很少有用。 Puppet 有更好的方法来处理大多数任务,否则您可能会使用这样的东西,而大多数剩余的任务通常最好根本不要完成。如果你想要这个特定的东西,那么我邀请你就那个特定的东西提出一个新问题。