puppet:为什么没有创建文件资源?

时间:2017-09-13 11:02:40

标签: puppet

我在清单上有以下代码:

  $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

任何帮助将不胜感激。 感谢

2 个答案:

答案 0 :(得分:2)

这里实际上存在一些问题,但让我们按顺序进行讨论。

  1. ensure => file
  2. 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'                                                                                        
    }
    
    1. command => "/sbin/chkconfig --add ${shutdown_script}"
    2. 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

      1. service
      2. 您可以使用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' ],