在 Puppet 中使用导出资源时避免声明 if 正则表达式语句

在 Puppet 中使用导出资源时避免声明 if 正则表达式语句

避免手动添加主机

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 工作“如预期”。事实上,我原本以为它不会导入任何内容。

相关内容