package { 'mailman':
ensure => installed,
require => Package['exim4'],
}
maillist { 'mailman':
ensure => 'present',
admin => $admin,
description => 'Site list',
password => $master_password,
require => Package['mailman'],
}
Если пакет «mailman» не был установлен, марионетка сообщает, что «не удалось найти поставщика по умолчанию для почтовой службы». Похоже, он считает это ошибкой в манифесте, потому что он полностью прерывается и не применяет никаких настроек. В результате он не обрабатывает директиву package {'mailman': ...}, что означает, что он не устанавливает mailman. Мне нужно закомментировать директиву maillist, затем применить конфигурацию, чтобы был установлен mailman, затем раскомментировать и повторно применить. Но это не удовлетворительно.
Как мне сделать это лучше?
В Puppet 2.7.8 было исправление проблемы # 6907 который позволяет установить или синхронизировать поставщика во время выполнения, в котором он используется (при условии указания обычных зависимостей). Увидеть Примечания к выпуску 2.7.8 слишком.
Вы должны обнаружить, что это исправляет этот случай, позволяя установить зависимость Mailman для поставщика рассылки во время того же запуска.
Вы можете сделать одну простую вещь - создать заказной факт который сообщит, установлен ли в вашей системе mailman. Просто сделайте так, чтобы факт вернул истину или ложь в зависимости от наличия двоичного файла.
Затем просто добавьте условие в свой манифест.
if (true = $gotmailman)
{
maillist { 'mailman':
ensure => 'present',
admin => $admin,
description => 'Site list',
password => $master_password,
require => Package['mailman'],
}
}