如果还指定了邮件列表,则无法使用 Puppet 安装 mailman

如果还指定了邮件列表,则无法使用 Puppet 安装 mailman
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 的默认提供程序”。它似乎认为这是清单中的错误,因为它会完全中止并且不应用任何配置。因此,它不会处理“package { 'mailman': ... }”指令,这意味着它不会安装 mailman。我需要注释掉 maillist 指令,然后应用配置以便安装 mailman,然后取消注释并重新应用。但这并不令人满意。

我怎样才能做得更好?

答案1

Puppet 2.7.8 中已修复此问题#6907允许在运行期间安装或同步提供程序(需指定正常的依赖项)。请参阅2.7.8 发行说明也。

您应该发现它修复了这种情况,允许您在同一运行期间为邮件列表提供程序安装 Mailman 依赖项。

答案2

你可以做的一件简单的事情就是创建一个定制事实这将报告您的系统上是否安装了 mailman。只需根据二进制文件的存在返回 true 或 false 即可。

然后只需向您的清单添加一个条件。

if (true = $gotmailman)
{
    maillist { 'mailman':
      ensure      => 'present',
      admin       => $admin,
      description => 'Site list',
      password    => $master_password,
      require     => Package['mailman'],
    }
}

相关内容