Марионетка: не уполномочен позвонить найти

Я использую 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.

Другие вопросы по тегам