Puppet自定义递归目录同步

Puppet自定义递归目录同步

我正在尝试在 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_apphost_1包含DIR_1DIR_5,但不包含DIR_7DIR_2DIR_3DIR_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 实现了它

相关内容