我正在尝试在 Puppet 中实现自定义递归目录同步资源。我需要执行的操作如下。
我有一个 YAML 文件,其中包含主机名列表和每个主机名内应存在的目录列表,例如/var/lib/my_app
目录(deployment.yml
):
host_1:
- DIR_1
- DIR_5
host_5:
- DIR_7
host_6:
- DIR_2
- DIR_3
- DIR_9
在主服务器上,我有一个包含所有这些DIR_*
子目录的目录。每个子目录包含一些文件。我试图实现的是根据 同步所有节点deployment.yml
,以便/var/lib/my_app
仅host_1
包含DIR_1
和DIR_5
,但不包含DIR_7
、DIR_2
、DIR_3
、DIR_9
等等。
我尝试使用文件类型的忽略变量来执行此操作,但如果我从deployment.yml中删除目录,这不会从节点中删除目录。我尝试编写一个自定义函数来删除它们,但它似乎在我的清单中不起作用。我也想实现一个自定义类型,但它似乎太复杂了。
我将非常感激对此的任何帮助。
答案1
查看文件类型的“purge”参数。您可以在 /var/lib/my_app 的文件资源中设置该参数。
来自“puppet describe file”的片段:
- **purge**
Whether unmanaged files should be purged. This option only makes
sense when managing directories with `recurse => true`.
* When recursively duplicating an entire directory with the `source`
attribute, `purge => true` will automatically purge any files
that are not in the source directory.
* When managing files in a directory as individual resources,
setting `purge => true` will purge any files that aren't being
specifically managed.
If you have a filebucket configured, the purged files will be uploaded,
but if you do not, this will destroy data. Valid values are `true`,
`false`.
答案2
我最终用 Ruby DSL 实现了它