Марионетка: не уполномочен позвонить найти
Я использую Puppet 2.7.26, потому что это то, что предоставляет пакет redhat.
Я пытаюсь обслуживать файлы, которые НЕ хранятся в каких-либо кукольных модулях. Файлы хранятся в другом месте на марионеточном сервере, и мне нужно их обслужить.
У меня есть это в моем /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,
}
Я получаю эту ошибку
err: /Stage[main]/Etchostfile/File[foo]: не удалось оценить: ошибка 400 на сервере SERVER: не авторизован для поиска в /file_metadata/files/hosts-foo.txt с {:links=>"manage"} Не удалось получить метаданные файла для puppet:///files/hosts-foo.txt: Ошибка 400 на сервере SERVER: не авторизован для вызова поиска в /file_metadata/files/hosts-foo.txt с {:links=>"manage"} по адресу /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.
С SELinux "навязывание" на мастера, service puppetmaster restart
и я получаю ошибку.
Я изменяю 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
) - на что был установлен SELinux при запуске сервиса
- на что установлен SELinux при запуске агента.
Чем ближе я становлюсь, тем больше смущаюсь.
ОБНОВЛЕНИЕ 4
Я думаю, что нашел это. Как только я начал изучать SELinux, я обнаружил изменения в политике, которые мне нужно было сделать (разрешив ruby / puppet доступ к файлам сапожника), и теперь он, похоже, работает...
2 ответа
Это оказалось проблемой SELinux. Я в конце концов нашел это сообщение об ошибке
SELinux is preventing /usr/bin/ruby from read access
on the file /var/www/cobbler/pub/hosts-foo.txt .
что привело меня к правилам audit2allow, которые я должен был применить, чтобы позволить puppet получить доступ к моим файлам сапожника.
Я получал эту ошибку с кукольным сервером на Ubuntu 20.
Ошибка: /Stage[main]/Dvod_tocr/File[/install/wine-data.tar.gz]: не удалось оценить: не удалось получить метаданные файла для puppet:///extra_files/wine-data.tar.gz: ошибка 500 на СЕРВЕРЕ: Ошибка сервера: Не разрешено вызывать поиск в /file_metadata/extra_files/wine-data.tar.gz с помощью {:rest=>"extra_files/wine-data.tar.gz", :links=>"manage" , :checksum_type=>"sha256", :source_permissions=>"игнорировать"}
Мой файл fileserver.conf находился в неправильном месте. Правильное расположение для этой версии puppet и в Ubuntu 20 — /etc/puppetlabs/puppet/fileserver.conf.