我正在运行傀儡2.7.26,因为这就是redhat包提供的内容。
我正在尝试提供存储在任何puppet模块中 NOT 的文件。这些文件保存在puppet服务器上的另一个位置,这就是我需要从中提供服务的地方。
我在/etc/puppet/fileserver.conf
中有这个[files]
path /var/www/cobbler/pub
allow *
然后我有一个这样的类文件:
class etchostfile
(
$hostfile /* declare that this class has one parameter */
)
{
File
{
owner => 'root',
group => 'root',
mode => '0644',
}
file { $hostfile :
ensure => file,
source => "puppet:///files/hosts-${hostfile}.txt",
path => '/root/hosts',
}
}
但是当我的节点调用
时class { 'etchostfile' :
hostfile => foo,
}
我收到此错误
错误:/ Stage [main] / Etchostfile / File [foo]:无法评估:错误400 在SERVER上:未授权调用find /file_metadata/files/hosts-foo.txt与{:links =>“manage”}无法 检索puppet的文件元数据:///files/hosts-foo.txt:错误400开启 服务器:未授权调用查找 带有{:links =>“manage”}的/file_metadata/files/hosts-foo.txt at /etc/puppet/modules/etchostfile/manifests/init.pp:27
这篇文章 https://viewsby.wordpress.com/2013/04/05/puppet-error-400-on-server-not-authorized-to-call-find/ 表明这就是我需要做的。但我必须遗漏一些东西。
更新
当我在调试模式下运行主服务器时,我没有收到任何错误。
主人如此回应:
info: access[^/catalog/([^/]+)$]: allowing 'method' find
info: access[^/catalog/([^/]+)$]: allowing $1 access
info: access[^/node/([^/]+)$]: allowing 'method' find
info: access[^/node/([^/]+)$]: allowing $1 access
info: access[/certificate_revocation_list/ca]: allowing 'method' find
info: access[/certificate_revocation_list/ca]: allowing * access
info: access[^/report/([^/]+)$]: allowing 'method' save
info: access[^/report/([^/]+)$]: allowing $1 access
info: access[/file]: allowing * access
info: access[/certificate/ca]: adding authentication any
info: access[/certificate/ca]: allowing 'method' find
info: access[/certificate/ca]: allowing * access
info: access[/certificate/]: adding authentication any
info: access[/certificate/]: allowing 'method' find
info: access[/certificate/]: allowing * access
info: access[/certificate_request]: adding authentication any
info: access[/certificate_request]: allowing 'method' find
info: access[/certificate_request]: allowing 'method' save
info: access[/certificate_request]: allowing * access
info: access[/]: adding authentication any
info: Inserting default '/status' (auth true) ACL because none were found in '/etc/puppet/auth.conf'
info: Expiring the node cache of agent.redacted.com
info: Not using expired node for agent.redacted.com from cache; expired at Thu Aug 13 14:18:48 +0000 2015
info: Caching node for agent.redacted.com
debug: importing '/etc/puppet/modules/etchostfile/manifests/init.pp' in environment production
debug: Automatically imported etchostfile from etchostfile into production
debug: File[foo]: Adding default for selrange
debug: File[foo]: Adding default for group
debug: File[foo]: Adding default for seluser
debug: File[foo]: Adding default for selrole
debug: File[foo]: Adding default for owner
debug: File[foo]: Adding default for mode
debug: File[foo]: Adding default for seltype
notice: Compiled catalog for agent.redacted.com in environment production in 0.11 seconds
info: mount[files]: allowing * access
debug: Received report to process from agent.redacted.com
debug: Processing report from agent.redacted.com with processor Puppet::Reports::Store
并且代理人如此回应:
info: Caching catalog for agent.redacted.com
info: Applying configuration version '1439475588'
notice: /Stage[main]/Etchostfile/File[foo]/ensure: defined content as '{md5}75125a96a68a0ff0d42f91f10dca8336'
notice: Finished catalog run in 0.42 seconds
并正确安装/更新文件。
因此当主机处于调试模式时它可以工作,但是当主机处于标准(?)模式时它会发生错误。我可以随意来回进出调试模式,并且每次都在调试模式下工作,并且每次在标准模式下都会失败。
更新2
从命令行运行puppetmasterd
,一切正常。
从命令行运行service puppetmaster start
或/etc/init.d/puppetmaster start
,它失败了。所以至少我越来越近了。
/etc/sysconfig/puppetmaster
完全被注释掉了。到目前为止,我认为刚刚启动puppetmasterd和使用服务脚本之间没有任何区别。
更新3
我认为这是一个SELinux问题。
在主人service puppetmaster restart
上使用SELinux“强制执行”,我就会收到错误。
我在主人身上将SELinux更改为“Permissive”,我仍然收到错误。
但是现在SELinux被设置为Permissive,如果我service puppetmaster restart
,我的文件将得到正确的服务。
但是现在它正在运行,我将SELinux设置为Enforcing,我得到了一个不同的错误:
err: /Stage[main]/Etchostfile/File[foo]: Could not evaluate: Could not
retrieve information from environment production source(s)
puppet:///files/hosts-foo.txt at
/etc/puppet/modules/etchostfile/manifests/init.pp:27
然后我做了service puppetmaster restart
,我又回到原来的错误。
因此情况会根据
而变化puppetmasterd
或service
)越接近我就越困惑。
更新4
我想我找到了它。一旦我开始查看SELinux,我发现了我需要进行的策略更改(允许ruby / puppet访问cobbler文件),现在它似乎正在工作......
答案 0 :(得分:0)
这结果是SELinux问题。我最终发现了此错误消息
SELinux is preventing /usr/bin/ruby from read access
on the file /var/www/cobbler/pub/hosts-foo.txt .
这导致我需要申请的audit2allow规则允许puppet访问我的cobbler文件。
答案 1 :(得分:0)
我在 ubuntu 20 上使用 puppet 服务器时遇到此错误。
错误:/Stage[main]/Dvod_tocr/File[/install/wine-data.tar.gz]:无法评估:无法检索 puppet:///extra_files/wine-data.tar 的文件元数据。 gz:服务器上的错误 500:服务器错误:无权使用 {:rest=>"extra_files/wine-data.tar.gz", :links=> 在 /file_metadata/extra_files/wine-data.tar.gz 上调用 find "管理", :checksum_type=>"sha256", :source_permissions=>"忽略"}
我的 fileserver.conf 文件位于错误的位置。这个 puppet 版本和 ubuntu 20 的正确位置是 /etc/puppetlabs/puppet/fileserver.conf