我在清单上有以下代码:
$shutdown_script = '/etc/init.d/puppet-report-shutdown'
file { 'shutdown-script':
ensure => present,
path => $shutdown_script,
owner => 'root',
group => 'root',
mode => '0755',
source => 'puppet:///modules/puppet_agent/puppet-report-shutdown.sh'
}
exec { 'chkconfig':
command => "chkconfig --add ${shutdown_script}",
require => File['shutdown-script']
}
exec代码失败,因为找不到脚本:
`Error: Failed to apply catalog: Validation of Exec[chkconfig] failed: 'chkconfig --add /etc/init.d/puppet-report-shutdown' is not qualified and no path was specified. Please qualify the command or specify a path. at /etc/puppet/environments/dev02/modules/puppet_agent/manifests/init.pp:50
文件资源未创建,但我无法找到原因。我尝试使用--debug
运行代理,但那里没有任何用处(至少在我的知识方面):
Debug: /File[shutdown-script]/seluser: Found seluser default 'system_u' for /etc/init.d/puppet-report-shutdown
Debug: /File[shutdown-script]/selrole: Found selrole default 'object_r' for /etc/init.d/puppet-report-shutdown
Debug: /File[shutdown-script]/seltype: Found seltype default 'initrc_exec_t' for /etc/init.d/puppet-report-shutdown
Debug: /File[shutdown-script]/selrange: Found selrange default 's0' for /etc/init.d/puppet-report-shutdown
任何帮助将不胜感激。 感谢
答案 0 :(得分:2)
这里实际上存在一些问题,但让我们按顺序进行讨论。
ensure => file
file
资源应指定ensure
file
而不是现在。这更具体地指示了Puppet节点上file
的类型和内容应该是什么:
file { 'shutdown-script':
ensure => file,
path => $shutdown_script,
owner => 'root',
group => 'root',
mode => '0755',
source => 'puppet:///modules/puppet_agent/puppet-report-shutdown.sh'
}
command => "/sbin/chkconfig --add ${shutdown_script}"
exec
资源要么需要命令的完整路径,要么可以指定具有path
属性的查找路径。在这种情况下,最简单的解决方案是提供完整路径:
exec { 'chkconfig':
command => "/sbin/chkconfig --add ${shutdown_script}",
require => File['shutdown-script']
}
这实际上是你的根本原因。该文件未创建,因为Puppet代理从未实际应用您的目录,因为您有编译错误:
错误:无法应用目录:Exec [chkconfig]的验证失败:' chkconfig --add /etc/init.d/puppet-report-shutdown'不合格,没有指定路径。请限定命令或指定路径。 at /etc/puppet/environments/dev02/modules/puppet_agent/manifests/init.pp:50
service
您可以使用exec
资源中的enable
属性添加并启用该服务,而不是使用service
添加服务。我还建议将require
元参数更改为subscribe
,否则系统服务管理员将不会选择您对服务脚本的更改。使用subscribe
,如果脚本发生更改,Puppet将指示系统识别并重新配置服务。这也是您当前exec
资源的问题。
service { 'puppet-report-shutdown':
enable => true,
subscribe => File['shutdown-script'],
}
答案 1 :(得分:1)
错误消息清楚地说明了问题。
Puppet需要命令为“either fully qualified or a search path for the command must be provided”。
要么像这样完全符合你的命令:
command => "/usr/sbin/chkconfig --add ${shutdown_script}",
或指定一些这样的路径(通常当你不确定命令所在的位置时):
path => [ '/bin', '/sbin', '/usr/bin', '/usr/sbin' ],