假设我在一个节点上有一个exec资源,该节点创建一个名称在运行时确定的文件。我可以完全访问正在运行的脚本,脚本知道它正在创建的文件的名称。
在Puppet中,最好不使用那么多原始ruby,如何使用在File或Package资源中创建的此文件的名称?
据我所知,有些人提到过使用自定义事实。但是,如果我打算多次使用相同的脚本,我如何将事实隔离在正确的范围内?
答案 0 :(得分:1)
这可能比看起来更难。
通常,事实是从代理获取信息到主服务器的好方法。使用Facter 2.x
,事实可以采用数组或哈希值来容纳您希望传达的多个文件名。
但是,清单可以从不依赖于在exec
(或任何)资源同步期间确定的值。这是因为在目录应用阶段评估资源。清单编译完成后,此阶段开始。代理使用完整的目录。在编译甚至开始之前收集事实信息。因此清单必须能够完全依赖于编译器开始评估之前存在的信息。
请注意,如果您使用puppet apply
而不是master / agent,则会有所不同。
我可以看到两种方式来解决这个问题。
exec
资源完成所有必需的工作。这可能是也可能不可行。两者都可能不理想。
另一种选择是重新考虑您的模型,以便首先不需要动态生成文件名。如果不了解您的具体问题/情况,我无法对可行性发表评论。