puppet 在所有服务器上执行远程脚本

puppet 在所有服务器上执行远程脚本

如何在所有 Puppet 客户端上执行 Python 脚本。

我已经为要执行的脚本添加了一个类

class curp {
       exec { "/usr/src/scripts/curp.py": }
}

并将其包含在 nodes.pp 中

但是当我在远程客户端上执行时,它说找不到文件???

#client:# /usr/sbin/puppetd --test --server=puppetmasterserver
notice: //chkconfig/Package[vsftpd]/ensure: created
err: //curp/Exec[/usr/src/scripts/curp.py]/returns: change from notrun to 0 failed: Could not `find executable /usr/src/scripts/curp.py`

更多版本:

我已经通过创建文件服务器修复了配置问题,

class curp {
       file { '/opt/files/curp.py':
          ensure => present,
          owner => 'root',
          group => 'root',
          mode => '0755',
          source => 'puppet:///modules/files/curp.py',
       }
       exec { '/opt/files/curp.py': require => File['/opt/files/curp.py'] }

}

但是脚本由于依赖关系而失败,我在日志中的其他任何地方都找不到与它相关的内容......

err: //curp/File[/opt/files/curp.py]: Failed to retrieve current state of resource: Could not retrieve information from source(s) puppet:///modules/files/curp.py at /etc/puppet/manifests/templates.pp:114
notice: //curp/Exec[/opt/files/curp.py]: Dependency file[/opt/files/curp.py] has 1 failures
warning: //curp/Exec[/opt/files/curp.py]: Skipping because of failed dependencies

有任何想法吗?

解决:

问题是 /opt/files 在客户端服务器上不存在,当远程目录可用时它才能工作

答案1

错误:

无法检索资源的当前状态:无法从源检索信息

意味着 puppet 无法从 puppetmaster 检索文件。第二个错误是因为如果无法检索文件,它就不会尝试执行该文件。

我认为当你学习傀儡时你会发现这个页面很有用:http://bitcube.co.uk/content/puppet-errors-explained 您在此处遇到的错误是该页面上最上面的错误。它还包含有关 puppet 期望文件所在的位置的更多信息。URL 不一定与文件系统路径直接匹配。

一般来说,调试错误信息时,先修复第一个错误信息。后面的错误信息往往是由前面的错误信息引起的。

答案2

您应该使用推荐的目录结构,如下所示:

|-- environments
|   |-- development
|   |   `-- modules
|   `-- testing
|       `-- modules
|-- manifests
|   |-- defines
|   |   `-- netinstall.pp
|   |-- nodes.pp
|   `-- site.pp
|-- modules
|   |-- python
|   |   |-- files
|   |   |-- manifests
|   |   `-- templates

将您的课程放入modules/python/manifestscurp.py放入,然后像下面这样modules/python/files使用:source

source => 'puppet:///modules/python/curp.py',

答案3

您必须添加文件声明:

文件 { “curp”:名称 => “/usr/src/scripts/curp.py”,确保 => 文件,源 => “puppet:///modules/your_module/curp.py” }

类 curp { exec { "/usr/src/scripts/curp.py": } require => {File["curp"]}, }

这意味着语句 File 将把文件发送到所有使用该模块的 puppet 节点。

相关内容