使用 Puppet 只创建一次资源

Phi*_*lio 2 puppet

我有一个类在 puppet 文件文件夹中准备配置文件和密钥,以便其他节点可以下载它们。除了 puppet master 之外,每个其他节点都会调用一次该类。

我的问题是我只需要创建一次根目录,例如:

file { '/etc/puppet/files/root':
  ensure => directory
}
Run Code Online (Sandbox Code Playgroud)

但是,当我开始多次调用该类时,这会导致重复资源。

我知道我可以很简单地通过使用这样的东西来提供一个独特的资源标题来修复它:

file { "create-parent-dir-for-${name}":
  path => '/etc/puppet/files/rootdir',
  ensure => directory
}
Run Code Online (Sandbox Code Playgroud)

但是创建许多额外的资源来做同样的事情感觉是错误的,所以我很想知道是否有替代解决方案。

Fel*_*ank 5

这就是虚拟资源的用途。

@file { "/etc/puppet/files/rootdir": ensure => directory }
Run Code Online (Sandbox Code Playgroud)

在需要的地方,使用

realize(File["/etc/puppet/files/rootdir"])
Run Code Online (Sandbox Code Playgroud)

或者

File<| title == "/etc/puppet/files/rootdir" |>
Run Code Online (Sandbox Code Playgroud)

顺便说一句,类永远不会产生重复的声明错误。您显然在defined type. 你确实可以通过像 Petter H 在他的评论中建议的那样做来解决这个特定的问题。

class files {
    file { "/etc/puppet/files/rootdir": ensure => directory }
}

define my_cool_type($param...) {
    include files
    ... # <- only stuff that is unique to this instance of my_cool_type
}
Run Code Online (Sandbox Code Playgroud)