我有一组带有
等端口的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方法用于数组。不幸的是,该解决方案需要未来的木偶解析器,这不是一个可用的要求。
第三个想法是使用自定义函数而不是已定义的类型。这样可行,但由于自定义函数必须在整个环境中独一无二,因此会很糟糕。
还有其他可能的解决方案吗?