根据这puppet labs 文章,我可以从 shell 脚本创建自定义事实。
我创建了一个返回单个事实的 bash 脚本,它被打包在 modules facts.d 目录中。该模块通过 ENC 类包含在目标系统上。当由目标上的 puppet 代理调用时,它返回一个空集,当在代理上手动运行时,它会正确返回事实。该脚本在主服务器上具有执行权限,但在代理上没有。
我看到了与权限和文件类型相关的错误报告,但那是 Windows 的,应该在 Puppet 版本 3 中修复。
我究竟做错了什么?
ENC定义:
--- classes: facttest:
Shell 脚本:
#!/bin/bash echo "test_fact1=$(hostname)"
权限:
master: -rwxr-xr-x 1 root root ... modules/facttest/facts.d/testfact.sh
agent: -rw-r--r-- 1 root root ... /var/lib/puppet/facts.d/testfact.sh
代理人寄语:
Fact file /var/lib/puppet/facts.d/testfact.sh was parsed but returned an empty data set
版本信息:
Puppet master: 3.5.1 (Debian) Facter master: 2.0.1 Puppet agent: 3.6.1 (OpenSUSE) Facter agent: 2.0.1
答案1
这实际上是漏洞显然是在 Puppet 中3.6
。
顺便说一句,请注意,通常不支持使用比主代理更新的代理。