以下 Puppet 清单用于安装二进制文件和 systemd 服务描述文件、将二进制文件作为服务启动以及在二进制文件或服务描述发生变化时重新启动服务。
class my_module::my_service {
file { '/usr/local/bin/my_service':
notify => Service['my_service'],
owner => root,
group => root,
mode => '500',
ensure => present,
source => 'puppet:///modules/my_module/my_service',
}
file { '/lib/systemd/system/my_service.service':
notify => Service['my_service'],
owner => root,
group => root,
mode => '400',
ensure => present,
source => 'puppet:///modules/my_module/my_service.service',
}
service { 'my_service':
require => [ File['/usr/local/bin/my_service'],
File['/lib/systemd/system/my_service.service'] ],
enable => true,
ensure => running,
provider => systemd,
}
}
当我尝试应用它时,收到以下错误消息:
Warning: /Stage[main]/My_module::My_service/File[/usr/local/bin/my_service]:
Skipping because of failed dependencies
Notice: /Stage[main]/My_module::My_service/File[/lib/systemd/system/my_service.service]:
Dependency User[root] has failures: true
Warning: /Stage[main]/My_module::My_service/File[/lib/systemd/system/my_service.service]:
Skipping because of failed dependencies
Notice: /Stage[main]/My_module::My_service/Service[my_service]:
Dependency User[root] has failures: true
Warning: /Stage[main]/My_module::My_service/Service[my_service]:
Skipping because of failed dependencies
此清单中的依赖关系User[root]
出现在何处?我该如何解决由此产生的问题?(在我看来,即使 sfile
的引用导致了对这个特殊用户的 root
隐式依赖,无论如何也应该已经存在。)User[root]
答案1
您无法真正避免这种隐式关系。您的目录会尝试管理 root 用户,如果失败,Puppet 将拒绝接触依赖资源。
User[root]
您首先应该找出资源失败的原因(这当然是一个重大的危险信号),或者如果可能的话,停止管理该资源(管理这个帐户通常确实是毫无意义的)。
答案2
根本原因是我puppet agent -f
从非特权帐户运行。添加sudo
解决了这个问题。