2017-04-18 75 views
0

内声明我有一个清单日伪它创建了一个类,里面坐了另一个类:如何添加,如果一个木偶类创建

class profiles::common::wlsdomains { 
    class {"wlsdomain": 
      applications  => hiera('wlsapplications', ""), 
      crontab   => hiera_hash('crontab', ""), 
      generateWlsdomain => hiera('generatewlsdomain'), # This line needs changing 
    } 
} 

到目前为止好。现在,问题是最后一行。我只想在某些条件下将“generateWlsdomain”设置为“hiera('generatewlsdomain')”。这是需要一个“if”语句进来,我想更换符合这样的事情:

if $::generate == "true" { 
    generatewlsdomain => "true" 
} 
elsif $::generate == "false" { 
    # Do nothing; leave generatewlsdomain unset 
} 
else { # If $::generate is neither "true" nor "false", then get a value from Hiera 
    generateWlsdomain => hiera('generatewlsdomain'), 
} 

换句话说,我想主要是看$ ::产生决定该如何做,但如果未设置$ :: generate,则使用Hiera的值作为备份。

但是,有些东西告诉我,我不能用这个代码块替换现有的行,因为现有的行是逗号分隔的列表的一部分,它不仅仅是它自己的通用代码行。

万一它很重要,这是在RedHat机器上运行。

回答

1

如果您不想设置关键字undef作为值,这会使Puppet使用默认值generateWlsdomain

利用这一点,设置的generateWlsdomain值的变量:

if $::generate == "true" { 
    $generatewlsdomain = "true" 
} 
elsif $::generate == "false" { 
    $generatewlsdomain = undef # Do nothing; leave generatewlsdomain unset 
} 
else { # If $::generate is neither "true" nor "false", then get a value from Hiera 
    $generatewlsdomain = hiera('generatewlsdomain') 
} 

或位更紧凑,采用a selector测试$::generate值并设置$generatewlsdomain其结果:

$generatewlsdomain = $::generate ? { 
    "true" => "true", 
    "false" => undef, # Do nothing; leave generatewlsdomain unset 
    default => hiera('generatewlsdomain'), # If neither "true" nor "false", then get a value from Hiera 
} 

和将其传递到现有类别声明中:

class {"wlsdomain": 
    applications  => hiera('wlsapplications', ""), 
    crontab   => hiera_hash('crontab', ""), 
    generateWlsdomain => $generatewlsdomain, 
} 
+0

这看起来很有趣,谢谢!现在尝试... – Enfors

+0

它确实工作,谢谢! – Enfors