获取所有木偶类参数

时间:2016-12-16 06:26:23

标签: puppet

我想避免在我见过的大多数木偶示例中使用的大量重复内容:

class foo(
    String arg1 = '',
    String arg2 = '',
    ...
){
    if arg1 != '' {
        ...
    }
    if arg2...
}

更加务实的事情,如

class foo(
    String arg1 = '',
    String arg2 = ''
){
    # $@ is like $@ in POSIX shell
    $@.each {|k, v| if k[v] != '' { contain $v } }
}

1 个答案:

答案 0 :(得分:1)

我所知道的构造等同于$@,所以我建议将所有数据放入哈希而不是单独的参数。没有对正在执行的参数进行任何验证,因此类型Hash[Enum['network', 'mail', '...'], String]的单个参数将与许多固定的String参数完全相同,即

class foo(
    String $pre_class,
    Hash[Enum['network', 'mail'], String] $classes = {},
){

由于您甚至不需要密钥,因此使用哈希的所有内容就足够了。 values()stdlib函数。

contain(values($classes))
Class[$pre_class] -> Class[values($classes)]

如果您需要删除空值,请使用filter() function

$filtered_classes = $classes.filter |$type_name, $class_name| { $class_name != '' }

我应该补充一点,我不认为给定的课程是一个非常典型的课程。它是一个简介模块,设计得非常通用且可重复使用 - 可能是一个更典型的本地编写的配置文件模块,在这种程度上可以配置类名作为参数值,并且会更难编码行为。