Избегайте добавления хоста вручную
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 для получения того же результата?
Сделав экспорт безусловным, вы спровоцируете конфликт, потому что в манифесте теперь объявляется экспортируемый ресурс.
Class::Define[$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
фактически в заголовках ресурсов, так что экспорт от разных агентов не будет конфликтовать.
Кстати, я не уверен, почему вы выбираете разные теги и почему импортируете только ресурсы, у которых есть обе теги работают «как положено». Фактически, я ожидал, что это ничего не импортирует.