如何在所有 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/manifests
,curp.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 节点。