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.
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.
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.
Ajouter
config.vm.hostname = "vagrant.example.com"
À mon Vagrantfile
fixé pour moi.
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.
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é
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