资源属性可以依赖于文件存在吗?

Can resource attributes depend on file-presence?

我正在编写一个模块,它将在我们的网络上提供镜像 yum 存储库。单个服务器将托管提供给其他主机(和它自己)的镜像。

我有一个先有鸡还是先有蛋的问题 -- 第一次下载可能暂时不会发生,但是,如果我在镜像脚本完成第一次下载之前启用一个新的存储库 运行,由于 yum-failures,我无法安装任何软件包。但稍后需要启用它...

我的 yumrepo-资源的 enabled 属性是否取决于 "${repodir}/repodata/repomd.xml" 在 Puppet-运行 时是否存在?

我想到了 inline_template,但它 运行 在 Puppet 服务器上,而不是客户端上。留在 Puppet 本身(没有自定义功能)的同时还能做其他事情吗?

也许,该属性可以通过 Exec 是否发生来触发——然后我可以使 Exec 以具有 creates 属性的文件存在为条件?

我们还在 Puppet-3.7.5 这里...谢谢!

I thought of inline_template, but it runs on [the] server, not [the] client.

我不明白为什么这是个问题。您要评估的条件并不特定于客户;相反,它是具有站点范围意义的网络(镜像服务器)上特定机器的 属性。据我所知,在编目编译过程中对母版进行评估应该不会出现任何固有问题。

这对您来说是个好消息,因为所有托管 属性 值都是在目录构建期间确定的。无法表达间接或待评估的 属性 值。如果您想将从目标节点提取的信息合并到其目录中,那么您必须从事实(可能是自定义事实)中收集该信息,或者管理该信息。

想到了两种解决问题的方法:

  1. 您可以使用 generate() 函数(在主服务器上)到 运行 命令来确定特定镜像是否准备就绪。如果 master 没有 运行 在托管镜像的同一台机器上,那么这需要一些机制让 master 远程询问镜像主机。

  2. 您可以在镜像主机上使用自定义事实来报告哪些存储库存在并准备就绪,并根据该信息,将其 export为所有节点收集适当的 Yumrepo 资源,包括节点本身。