使用 Bolt 检查目标机器上的文件是否存在

Check file existence on target machine using Bolt

查看 Bolt 文档,我没有找到如何使用 Puppet 计划检查远程计算机上文件是否存在。

可以使用 get_resources,但问题是它需要在远程机器上安装 Puppet 代理,这是我暂时想避免的事情。

另一种方法是使用带有 run_command 的 shell 脚本,这可能是我处理这个问题的方法。

还有其他想法吗?

这里是 Bolt 开发人员,很高兴看到您在这里提出问题!我实际上认为 run_command 对于这个用例很可能比 get_resources 更有效,所有其他条件都相同。不确定你是否使用 Windows、*nix 或两者,但假设 *nix 我想​​你会想要类似的东西:

plan myplan(
  TargetSpec $targets
) {
  # test -f will return 0 if the file exists, 1 if it does not
  $result_set = run_command("test -f /path/to/file", $targets, '_catch_errors' => true)

  # Maybe you want to write the file if it doesn't exist:
  upload_file('./myfile', '/path/to/file', $result_set.error_set.targets)
  
  # This will be the list of targets the file does exist on:
  run_task('mytask', $result_set.ok_set.targets)
}

没有比这更好或更“原生”的方法来检查远程系统上的文件是否存在了。 file::exist 计划功能仅适用于本地机器,因为它在 Bolt 中使用与我们用于查找模块、Bolt 配置等相同的文件查找器。但该文件查找器在远程系统上不可用。