package { 'mailman': ensure => installed, require => Package['exim4'], } maillist { 'mailman': ensure => 'present', admin => $admin, description => 'Site list', password => $master_password, require => Package['mailman'], }
如果没有安装“mailman”软件包,puppet会抱怨“找不到maillist的默认提供者”。 它似乎认为这是在清单中的错误,因为它完全中止,不适用于任何configuration。 因此,它不处理“package {'mailman':…}”指令,这意味着它不会安装mailman。 我需要注释掉maillist指令,然后应用configuration,以便安装mailman,然后取消注释并重新应用。 但这并不令人满意。
我怎样才能以更好的方式做到这一点?
在Puppet 2.7.8中有一个修复,对于问题#6907 ,它使运行期间可以安装或同步提供程序(在正常的依赖关系被指定的情况下)。 请参阅2.7.8发行说明 。
您应该发现它修复了这种情况,允许您在同一运行期间为maillist提供程序安装Mailman依赖项。
你可以做的一件简单的事情是创build一个自定义的事实 ,将报告如果邮件安装在您的系统。 只要事实根据二进制文件的存在返回true或false。
然后,只需添加一个条件到你的清单。
if (true = $gotmailman) { maillist { 'mailman': ensure => 'present', admin => $admin, description => 'Site list', password => $master_password, require => Package['mailman'], } }