47 votes

Marionnette / Caractère "Impossible de récupérer le fait fqdn": comment réparer ou contourner?

Je suis en train d'apprendre à propos de marionnettes et d'essayer de le tester sur une VM à la maison. Je ne suis pas à l'aide d'une marionnette serveur pourtant, il suffit de choses en cours d'exécution au niveau local. Il fonctionne bien, mais chaque fois que je lance puppet apply ...,- je obtenir un délai de plusieurs secondes, après lequel il affiche le message

warning: Could not retrieve fact fqdn

Je suppose que le message est lié au retard, et je veux me débarrasser de celui-ci (le retard--je peux vivre avec le message). Googler pour trouver une solution, ce qui semble indiquer que c'est en quelque sorte lié à des recherches DNS, mais je ne peux pas vraiment trouver quelque chose d'autre, ce qui semble surprenant. Tout ce que je veux, c'est être capable d'appliquer manifeste dans ma vm rapidement afin que je puisse expérimenter. Comment puis-je accélérer les choses?

Mise à jour: je ne vois pas d'infos supplémentaires dans la sortie de débogage, mais il 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é le "ruby" de la balise parce que la marionnette a si peu d'adeptes. Si ce n'appartient pas en ruby, ou si vous connaissez une meilleure étiquette pour elle, laissez-moi savoir.

Mise à jour: après Avoir appris un peu plus sur la marionnette, je comprends maintenant que ce message est à venir à partir de la composante "Facter" renifle "faits" sur le système de la Marionnette est en cours d'exécution sur. J'ai trouvé quelques options de configuration et joué un peu avec "certname", "node_name" et "node_name_value", mais je ne pouvais pas prendre de retard à l'aller. Personne ne sait précisément comment dire Facter d'ignorer le nom de domaine complet ou comment faire Facter en mesure de trouver le nom de domaine complet sur une vm Ubuntu 11.10?

Progrès:

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

C'est mon routeur qui est en cours d'exécution Dnsmasq via la Tomate.

$ 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 à l'arp, qui a été bloqué pendant 5 secondes et l'a 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 à partir de réseaux NAT à ponté, de sorte qu'il a maintenant une adresse IP sur le réseau, et arp renvoie immédiatement à présent. (Je ne suis pas un spécialiste réseau, donc je n'ai aucune idée de pourquoi cela a fonctionné, mais il semble raisonnable de chose à essayer.) Mais facter encore faut environ 4-5 secondes au total pour exécuter et de rapports toujours "impossible de récupérer les fait fqdn". 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.

33voto

freiheit Points 2950

Depuis marionnettes utilise le nom de domaine complet fait pour déterminer le nœud qui il est, il peut ne pas être possible d'exécuter s'il ne peut pas être déterminé. Compte tenu de ce que vous décrivez, la chose la plus simple du débogage facter fqdn au lieu de vos de marionnettes de ligne de commande.

Si les "quelques secondes" est très proche de exactement 5 secondes, il est très probable que votre configuration DNS est cassé avec un simple mauvais serveur DNS sur la liste. Ce qui est dans /etc/resolv.conf? Qu'advient-il si vous exécutez dig -x $HOSTIP $DNSSERVERIP avec le premier serveur de noms répertoriés dans resolv.conf?

Si vous regardez en facter/fqdn.rb vous pouvez voir exactement ce que facter essaie de faire pour résoudre le nom de domaine complet. Dans la version que j'ai le plus pratique c'est à l'aide de facter/hostname.rb et facter/domainname.rb qui appeler du code de facter/util/resolution.rb.

Exactement ce qui se passe dépend de la version de facter vous avez, quel système d'exploitation et, éventuellement, qu'est-ce exactement que vous avez installés. Appelant /bin/hostname, uname (etc) et de faire des recherches DNS sont tous tout à fait probable. Vous pouvez toujours utiliser strace -t facter fqdn pour voir ce qui est en prenant le temps (cherchez l'écart dans les horodatages)

De tout ce que vous avez décrit, il ne sonne comme 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 nu nom d'hôte.

L'ajout d' domain example.com /etc/resolv.conf devrait faire l'affaire. L'exécution hostname foo.example.com devrait aussi faire l'affaire (mais il y aura besoin d'être ré-appliqué). Des solutions permanentes dépendent de la nature exacte de l'OS de l'installation.

26voto

Teemu Leisti Points 2606

La même erreur se produit lorsque j'exécute marionnette sur ma machine personnelle (Xubuntu). Ce qui a fonctionné pour moi a été de changer la deuxième ligne du 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 renvoie box.example.com au lieu de box et la marionnette est heureuse.

23voto

shredding Points 736

Ajouter

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

à mon Vagrantfile corrigé pour moi.

5voto

jefflunt Points 20244

Nom de domaine complet est l'acronyme de "nom de domaine pleinement qualifié". Dans un domaine Windows (ou autre semblable LDAP de domaine), par exemple, il serait le nom de votre domaine de réseau, telles que l'organisation".interne" - domaine votre ordinateurs et les serveurs y sont joints, et le domaine qui contient votre réseau de groupes et des comptes d'utilisateur.

Donc, il a probablement eu du mal à trouver le nom de domaine complet pour certains d'authentification nécessaires pour effectuer le reste de la procédure de configuration, serait je pense.

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

Il est possible que vous obtiendrez une meilleure réponse sur ServerFault, depuis que le système/gestion de la configuration traverse également des cours dans leur domaine.

4voto

Kit Ho Points 4632

ajouter cette ligne à /etc/resolv.conf

 domain abc.com
 

relancez facter fqdn

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X