Puppet / Facter "impossible de récupérer le fait fqdn": comment réparer ou contourner?

J'apprends à propos de puppet et j'essaie de l'expérimenter sur une machine virtuelle à la maison. Je n'utilise pas encore de serveur puppet, je fais juste tourner les choses localement. Cela fonctionne bien, mais chaque fois que je cours puppet apply ..., j'ai 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). Googler pour une solution semble indiquer qu'il est en quelque sorte lié aux recherches DNS, mais je ne peux pas vraiment trouver autre chose à ce sujet, ce qui semble surprenant. Tout ce que je veux, c'est pouvoir appliquer rapidement des manifestes dans ma machine virtuelle afin que je puisse expérimenter. Comment puis-je accélérer les choses?

Update: 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
...

Update: j'ai ajouté la balise "ruby" parce que puppet a si peu d'adeptes. Si cela n'appartient pas à ruby, ou si vous connaissez une meilleure étiquette pour cela, faites le moi savoir.

Mettre à jour à nouveau: Ayant appris un peu plus sur puppet, je comprends maintenant que ce message provient du composant appelé "Facter" qui renifle les "faits" sur le système sur lequel Puppet fonctionne. J'ai trouvé quelques options de configuration et joué avec "certname", "node_name" et "node_name_value" , mais je n'ai pas pu obtenir le délai pour disparaître. 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 de la vm?

Progrès:

$ 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é la VM de réseau NAT à ponté, de sorte qu'il a maintenant une adresse 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 encore prend environ 4-5 secondes au total à exécuter et signale toujours "impossible de récupérer le nom de domaine complet des faits". facter -d montre plusieurs occurrences de "valeur pour le nom de domaine est toujours nul", tout le chemin à la fin. Je suis en train de penser à quelque chose n'est pas encore tout à fait droit.

46
demandé sur John 2011-10-16 00:06:02

6 réponses

Puisque puppet utilise le fait fqdn pour déterminer le nœud sous 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 puppet.

Si le "plusieurs secondes" est très proche de 5 secondes exactement, il est très probable que votre configuration DNS soit rompue avec un seul serveur DNS défectueux répertorié. Ce qui est dans/etc / resolv.conf? Que se passe-t-il si vous exécutez dig -x $HOSTIP $DNSSERVERIP avec le premier serveur de noms listé dans resolv.conf?

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

Exactement ce qui se passe dépendra de quelle version de facter vous avez, quel système D'exploitation, et peut - être aussi ce que vous avez exactement installé. J'appelle /bin/hostname, uname (etc) et faire des recherches DNS sont tout à fait probables. Vous pouvez toujours utiliser strace -t facter fqdn pour voir ce qui prend le temps (recherchez le écart dans les horodatages)

De tout ce que vous avez décrit, il semble que le problème soit que puppet/facter veut vraiment avoir un nom de domaine et que vous n'en avez pas, vous avez juste un nom d'hôte nu.

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

33
répondu freiheit 2011-10-16 23:58:11

J'ai eu la même erreur lors de l'exécution de puppet sur ma machine domestique (Xubuntu). Ce qui a fonctionné pour moi était de changer la deuxième ligne de file /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 retourne box.example.com au lieu de box, et la marionnette est heureux.

26
répondu Teemu Leisti 2012-04-08 16:45:01

Ajouter

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

À mon Vagrantfile fixé pour moi.

23
répondu shredding 2013-11-16 22:37:00

FQDN signifie "nom de domaine complet". Dans un domaine Windows (ou un autre domaine similaire basé sur LDAP), par exemple, il s'agirait du nom de votre domaine réseau, tel que "organisation".interne " - le domaine auquel vos ordinateurs et serveurs sont joints, et le domaine qui contient vos groupes réseau et 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 mon deviner.

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

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

5
répondu jefflunt 2011-10-15 21:18:11

Ajouter cette ligne dans /etc/resolv.conf

domain abc.com

Exécutez à nouveau facter fqdn

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

4
répondu Kit Ho 2013-11-15 07:11:03

Un autre moyen possible de contourner est de passer outre le fait.

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

FACTER_fqdn=box.example.com facter

Sur Windows ce serait

SET FACTER_fqdn=box.example.com
facter fqdn
3
répondu ferventcoder 2013-08-05 20:01:12