2015-08-12 1 views
0

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 ou service)
  • 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 ...

+0

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. –

+0

@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

+0

Votre mise à jour 4 devrait être étendue à une réponse que je suppose. –

Répondre

0

Cela s'est avéré être un problème SELinux. J'ai finalement trouvé ce message d'erreur

SELinux is preventing /usr/bin/ruby from read access 
on the file /var/www/cobbler/pub/hosts-foo.txt . 

qui m'a conduit aux règles de audit2allow je avais besoin d'appliquer pour permettre la marionnette d'accéder à mes fichiers cordonniers.