Je cours marionnette 2.7.26 parce que c'est ce que le paquet redhat fournit.marionnette: Non autorisé à appeler find
J'essaie de servir des fichiers qui sont et non stockés dans des modules de marionnettes. Les fichiers sont conservés dans un autre emplacement sur le serveur de marionnettes, et c'est là que je dois les servir.
je dans mon /etc/puppet/fileserver.conf
[files]
path /var/www/cobbler/pub
allow *
Et puis-je avoir un fichier de classe comme ceci:
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',
}
}
Mais quand appelle mon noeud
class { 'etchostfile' :
hostfile => foo,
}
Je reçois cette erreur
err: /Stage[main]/Etchostfile/File[foo]: Could not evaluate: Error 400 on SERVER: Not authorized to call find on /file_metadata/files/hosts-foo.txt with {:links=>"manage"} Could not retrieve file metadata for puppet:///files/hosts-foo.txt: Error 400 on SERVER: Not authorized to call find on /file_metadata/files/hosts-foo.txt with {:links=>"manage"} at /etc/puppet/modules/etchostfile/manifests/init.pp:27
Ce poste https://viewsby.wordpress.com/2013/04/05/puppet-error-400-on-server-not-authorized-to-call-find/ indique que cela est tout ce que je dois faire. Mais je dois manquer quelque chose.
MISE À JOUR
Quand je lance le maître en mode débogage, je reçois aucune erreur.
Le maître répond ainsi:
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
et l'agent répond ainsi:
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
et le fichier est correctement installé/mis à jour. Il fonctionne donc quand le maître est en mode débogage, mais il commet des erreurs lorsque le maître est en mode standard (?). Je peux aller et venir, à l'intérieur et à l'extérieur du mode de débogage à volonté, et cela fonctionne à chaque fois en mode débogage, et il échoue à chaque fois en mode standard.
MISE À JOUR 2
Exécution puppetmasterd
de la ligne de commande, et tout fonctionne.
Exécution service puppetmaster start
ou /etc/init.d/puppetmaster start
à partir de la ligne de commande et échoue. Du moins je me rapproche.
/etc/sysconfig/puppetmaster
est entièrement mis en commentaire. Donc à partir de maintenant, je ne vois aucune différence entre le démarrage de puppetmasterd et l'utilisation du script de service.
MISE À JOUR 3
Je pense que c'est un problème SELinux.
Avec SELinux "enforcing" sur le maître, service puppetmaster restart
, et j'obtiens l'erreur.
Je change SELinux en "Permissive" sur le maître, et je reçois toujours l'erreur.
Mais maintenant que SELinux est paramétré sur Permissif, si service puppetmaster restart
, mes fichiers sont correctement traités.
Mais maintenant que cela fonctionne, je mis SELinux à la réalisation, et je reçois une autre erreur:
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
Alors je fais un service puppetmaster restart
et je suis de retour à l'erreur d'origine.
Donc, la situation change en fonction
- comment j'ai commencé le service (
puppetmasterd
ouservice
) - ce que SELinux a été mis à quand j'ai commencé le service
- ce que SELinux est réglé lorsque l'agent fonctionne.
Plus je me rapproche, plus je suis confus.
MISE À JOUR 4
Je pense que je l'ai trouvé. Une fois que j'ai commencé à regarder SELinux, j'ai trouvé les changements de politique nécessaires (permettant à ruby / marionnette d'accéder aux fichiers cobbler) et maintenant il semble fonctionner ...
La [documentation] (https://docs.puppetlabs.com/guides/file_serving.html#serving-files-from-custom-mount-points) est d'accord. Déboguez ceci en arrêtant le maître, puis en démarrant un processus autonome en utilisant 'maître marionnette --no-daemonize --verbose --debug', puis en exécutant un agent. –
@FelixFrank: mise à jour avec la sortie de débogage. TLDR: cela fonctionne en mode débogage, mais quand je sors du mode débogage, il échoue avec la même erreur. – hymie
Votre mise à jour 4 devrait être étendue à une réponse que je suppose. –