避免手动添加主机
class::define { [
'host1.domain',
'host2.domain'
]:
attribute => 'hello',
attribute2 => 'world'
}
class::define { [
'host3.domaintwo',
'host4.domaintwo'
]:
attribute => 'apple',
attribute2 => 'orange'
}
通过使用导出的资源:
if $fqdn =~ /^.*\.domain$/ {
@@class::define { $fqdn:
attribute => 'hello',
attribute2 => 'world',
tag => 'test'
}
}
if $fqdn =~ /^.*\.domaintwo$/ {
@@class::define { $fqdn:
attribute => 'apple',
attribute2 => 'orange',
tag => 'test2'
}
}
Class::define <<| tag == 'test' and tag == 'test2' |>>
按预期工作。
问题
是否可以省略 if 语句以获得相同的结果?
答案1
通过使导出无条件,您将引发冲突,因为清单现在声明了导出的资源
Class::Define[$fqdn]
两次(具有不同的属性)。
您可以通过允许将 FQDN 作为属性值传递而不是期望它是资源标题来避免这种情况。
@@class::other_define {
"hello-$fqdn":
fqdn => $fqdn,
attribute => 'hello',
attribute2 => 'world',
tag => 'test';
"fruit-$fqdn":
fqdn => $fqdn,
attribute => 'apple',
attribute2 => 'orange',
tag => 'test2';
}
只要确保仍然使用资源标题中的事实fqdn
,以便不同代理的出口不会发生冲突。
另外,我不确定你为什么选择不同的标签,以及为什么只导入具有两个都tags 工作“如预期”。事实上,我原本以为它不会导入任何内容。