如何使用 puppet 启用 systemd 实例服务?

如何使用 puppet 启用 systemd 实例服务?

我有以下傀儡服务:

service { "[email protected]": 
    provider => systemd,
    ensure => running,
    enable => true,
}

当我尝试在客户端上应用此配置时,它会引发以下错误:

错误:/Stage[main]//Node[puppetclient]/Service[[电子邮件保护]]/enable:从 false 更改为 true 失败:无法启用[电子邮件保护]

该服务运行良好,我可以通过向 getty.target.wants 添加符号链接来确保它在系统启动时启动:

ln -s /lib/systemd/system/[电子邮件保护]/etc/systemd/system/getty.target.wants/[电子邮件保护]

当然,我可以继续从服务定义中删除“enable => true”,并在 puppet 配置中手动包含符号链接,但 puppet 不应该处理这个问题吗?我做错了什么吗?

答案1

目前 Puppet 中的 systemd 提供程序仅使用两个命令来获取服务enable状态:

  • systemctl is-enabled <unit>,检查当前启用状态的返回代码
  • systemctl enable/disable <unit>去改变它

当启用不存在的 getty@ 服务实例时,enable 命令会引发错误:

$ sudo systemctl enable [email protected]
Failed to issue method call: No such file or directory

这会导致 Puppet 中显示错误(尽管 stderr 似乎没有显示)。

在我看来,这似乎是 systemd 中的一个漏洞,导致您无法启用模板的新实例。已经有Fedora 中的 BZ#752774,但评论表明它可能不会很快被添加。

你最好提交功能要求反对 Puppet 添加专门用于启用新实例的支持。在您的功能请求中,我建议链接到Lennart 对单位实例的解释作为背景。

相关内容