如何检查是否已在puppet中声明了一组资源名称

时间:2015-10-14 08:53:51

标签: arrays puppet

我有一组带有

等端口的ip地址
$addr_port = ['1.2.3.4:88','3.4.5.6:8080']

在清单中,我确实对ip地址和端口的每个组合做了一些事情(每个主机每个组合只有一次)。因此我有一个定义的类型:

::do_something_with_each_element {$addr_port:}

但是有可能可以多次定义相同的ip地址和端口组合,因此它将是一个重复的声明。

通常可以通过以下方式防止重复声明:

$resource_name = 'my_resource'
if ! defined(Do_something_with_each_element[$resource_name]) {
   ::do_something_with_each_element {$resource_name:}
}

但如果$resource_name$addr_port之类的数组,我们会在defined函数中得到无效的参数错误。

第二种方法是将.each方法用于数组。不幸的是,该解决方案需要未来的木偶解析器,这不是一个可用的要求。

第三个想法是使用自定义函数而不是已定义的类型。这样可行,但由于自定义函数必须在整个环境中独一无二,因此会很糟糕。

还有其他可能的解决方案吗?

0 个答案:

没有答案