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

Cla*_*den 9 puppet

我有以下木偶服务:

service { "getty@ttyUSB0.service": 
    provider => systemd,
    ensure => running,
    enable => true,
}
Run Code Online (Sandbox Code Playgroud)

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

错误:/Stage[main]//Node[puppetclient]/Service[getty@ttyUSB0.service]/enable:从 false 更改为 true 失败:无法启用 getty@ttyUSB0.service:

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

ln -s /lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@ttyUSB0.service

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

Dom*_*eal 6

现在 Puppet 中的 systemd provider 只对服务enable状态使用两个命令:

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

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

$ sudo systemctl enable getty@ttyUSB0.service
Failed to issue method call: No such file or directory
Run Code Online (Sandbox Code Playgroud)

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

在我看来,您无法启用模板的新实例,这就像 systemd 中的一个空白。Fedora 中已经有BZ#752774,但评论表明它可能不会很快添加。

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