web-dev-qa-db-fra.com

Puppet / Facter "Impossible de récupérer le fait fqdn": Comment corriger ou contourner?

J'apprends les marionnettes et j'essaye de les expérimenter sur un VM à la maison. Je n'utilise pas encore de serveur de marionnettes, je fais juste tourner les choses localement. Cela fonctionne bien, mais chaque fois que je courir puppet apply ..., J'obtiens un délai de plusieurs secondes, après quoi il affiche le message

warning: Could not retrieve fact fqdn

Je suppose que le message est lié au retard, et je veux m'en débarrasser (le retard - je peux vivre avec le message). La recherche d'une solution semble indiquer qu'elle est en quelque sorte liée aux recherches DNS, mais je ne trouve vraiment rien d'autre à ce sujet, ce qui semble surprenant. Tout ce que je veux, c'est pouvoir appliquer rapidement des manifestes dans mon vm pour pouvoir expérimenter. Comment puis-je accélérer les choses?

Mise à jour: Je ne vois aucune information supplémentaire dans la sortie de débogage, mais cela ressemble à ceci:

$ puppet apply -dv puppet-1.pp 
warning: Could not retrieve fact fqdn
debug: Failed to load library 'rubygems' for feature 'rubygems'
debug: Failed to load library 'selinux' for feature 'selinux'
debug: Puppet::Type::File::ProviderMicrosoft_windows: feature Microsoft_windows is missing
...

Mise à jour: J'ai ajouté la balise "Ruby" car la marionnette a si peu d'adeptes. Si cela n'appartient pas à Ruby, ou si vous connaissez une meilleure étiquette, faites-le moi savoir.

Mettre à jour à nouveau: Ayant appris un peu plus sur les marionnettes, je comprends maintenant que ce message provient du composant appelé "Facter" qui flaire les "faits" sur le système sur lequel Puppet fonctionne. J'ai trouvé quelques options de configuration et joué avec "" certname " , " node_name " and " node_name_value " , mais je n'ai pas pu obtenir le délai s'en aller. Est-ce que quelqu'un sait spécifiquement comment dire à Facter d'ignorer le fqdn ou comment rendre Facter capable de trouver le fqdn sur un Ubuntu 11.10 vm?

Progression:

$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.1.1

C'est mon routeur, qui exécute Dnsmasq via Tomato.

$ Dig -x 192.168.1.129 192.168.1.1

; <<>> Dig 9.7.3 <<>> -x 192.168.1.129 192.168.1.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21838
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;129.1.168.192.in-addr.arpa.    IN  PTR

;; ANSWER SECTION:
129.1.168.192.in-addr.arpa. 0   IN  PTR desk-vm-ubuntu-beta.

;; Query time: 14 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Sun Oct 16 17:47:47 2011
;; MSG SIZE  rcvd: 77

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27462
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;192.168.1.1.           IN  A

;; ANSWER SECTION:
192.168.1.1.        0   IN  A   192.168.1.1

;; Query time: 11 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Sun Oct 16 17:47:47 2011
;; MSG SIZE  rcvd: 45

strace m'a conduit à arp, qui bloquait pendant 5 secondes et appelé deux fois pour chaque facter:

$ time arp -a
? (10.0.2.2) at 52:54:00:12:35:02 [ether] on eth0

real    0m5.127s
user    0m0.004s
sys     0m0.016s

J'ai changé le VM de NAT réseau en ponté, afin qu'il ait maintenant une IP sur le réseau, et arp retourne immédiatement maintenant. (Je ne suis pas un gourou du réseautage, donc je ne sais pas pourquoi cela a fonctionné, mais cela semblait une chose raisonnable à essayer.) Mais facter prend toujours environ 4-5 secondes au total pour s'exécuter et signale toujours "Impossible récupérer le fait fqdn ". facter -d montre plusieurs occurrences de "la valeur pour le domaine est toujours nulle", jusqu'à la fin. Je pense que quelque chose ne va toujours pas.

47
Ryan Stewart

Comme marionnette utilise le fait fqdn pour déterminer le nœud sur lequel il s'exécute, il peut ne pas être possible de l'exécuter s'il ne peut pas être déterminé. Compte tenu de ce que vous décrivez, la chose la plus simple à déboguer est facter fqdn au lieu de votre ligne de commande fantoche.

Si les "plusieurs secondes" sont très proches d'exactement 5 secondes, il est très probable que votre configuration DNS soit rompue avec un seul mauvais serveur DNS répertorié. Que contient /etc/resolv.conf? Que se passe-t-il si vous exécutez Dig -x $HOSTIP $DNSSERVERIP avec le premier serveur de noms répertorié dans resolv.conf?

Si vous regardez dans facter/fqdn.rb vous pouvez voir exactement ce que le facter essaie de faire pour résoudre le fqdn. Dans la version que j'ai la plus pratique, elle utilise facter/hostname.rb et facter/domainname.rb qui appelle le code de facter/util/resolution.rb.

Ce qui se passera dépendra de la version de Facter que vous possédez, du système d'exploitation et éventuellement de la version exacte que vous avez installée. Appeler /bin/hostname, uname (etc) et faire des recherches DNS sont tous très probables. Vous pouvez toujours utiliser strace -t facter fqdn pour voir ce qui prend du temps (recherchez l'écart dans les horodatages)

D'après tout ce que vous avez décrit, il semble que le problème est que la marionnette/facter veut vraiment avoir un nom de domaine et vous n'en avez pas, vous avez juste un nom d'hôte nu.

Ajouter domain example.com à /etc/resolv.conf devrait faire l'affaire. Fonctionnement hostname foo.example.com devrait également faire l'affaire (mais devra être appliqué de nouveau). Les solutions permanentes dépendent de la configuration exacte du système d'exploitation.

33
freiheit

J'ai eu la même erreur lors de l'exécution de marionnettes sur ma machine domestique (Xubuntu). Ce qui a fonctionné pour moi, c'était de changer la deuxième ligne de fichier /etc/hosts. Les deux premières lignes avant le changement:

127.0.0.1   localhost
127.0.1.1   box

Et après le changement:

127.0.0.1   localhost
127.0.1.1   box.example.com box

Maintenant, la commande hostname -f Retour box.example.com au lieu de box, et la marionnette est contente.

26
Teemu Leisti

Ajouter

  config.vm.hostname = "vagrant.example.com"

à mon Vagrantfile l'a corrigé pour moi.

23
shredding

FQDN signifie "nom de domaine complet". Dans un domaine Windows (ou un autre domaine LDAP similaire), par exemple, ce serait le nom de votre domaine réseau, tel que "organization.internal" - le domaine auquel vos ordinateurs et serveurs sont joints et le domaine qui contient vos groupes réseau et vos comptes d'utilisateurs.

Donc, il a probablement eu du mal à obtenir le fqdn pour une authentification nécessaire pour effectuer le reste des étapes de configuration, serait ma supposition.

http://en.wikipedia.org/wiki/Fully_qualified_domain_name

Il est possible que vous obteniez une meilleure réponse sur ServerFault, car la gestion du système/de la configuration traverse également leur domaine.

5
jefflunt

ajoutez cette ligne dans /etc/resolv.conf

domain abc.com

exécuter à nouveau facter fqdn

Fqdn nécessite un nom de domaine, qui peut-être manquant dans votre ubu12 fraîchement installé

4
Kit Ho

Une autre façon possible de contourner le problème est de passer outre le fait.

http://www.puppetcookbook.com/posts/override-a-facter-fact.html

FACTER_fqdn=box.example.com facter

Sous Windows, ce serait

SET FACTER_fqdn=box.example.com
facter fqdn
3
ferventcoder