webentwicklung-frage-antwort-db.com.de

Puppet / Facter "Konnte fact fqdn nicht abrufen": Wie zu beheben oder zu umgehen?

Ich lerne etwas über Puppen und versuche zu Hause, mit ihnen auf einem VM= zu experimentieren. Ich verwende noch keinen Puppenserver, sondern führe nur Dinge lokal aus. Es funktioniert in Ordnung, aber jedes Mal, wenn ich Lauf puppet apply ..., Ich erhalte eine Verzögerung von mehreren Sekunden, nach der die Nachricht angezeigt wird

warning: Could not retrieve fact fqdn

Ich gehe davon aus, dass die Nachricht mit der Verzögerung verbunden ist und ich möchte sie loswerden (die Verzögerung - ich kann mit der Nachricht leben). Die Suche nach einer Lösung scheint darauf hinzudeuten, dass sie in irgendeiner Weise mit DNS-Lookups zusammenhängt, aber ich kann nicht wirklich etwas anderes darüber finden, was überraschend erscheint. Ich möchte nur in der Lage sein, Manifeste in meinem VM schnell anzuwenden, damit ich experimentieren kann. Wie kann ich die Dinge beschleunigen?

Update: Ich sehe keine zusätzlichen Informationen in der Debug-Ausgabe, aber es sieht so aus:

$ 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: Ich habe das "Ruby" -Tag hinzugefügt, weil Puppet so wenige Follower hat. Wenn dies nicht zu Ruby gehört oder wenn Sie ein besseres Tag dafür kennen, lassen Sie es mich wissen.

Aktualisiere erneut: Nachdem ich etwas mehr über Marionetten gelernt habe, verstehe ich jetzt, dass diese Nachricht von der Komponente namens "Facter" kommt, die "Fakten" über "Fakten" herausschnüffelt das System, auf dem Puppet läuft. Ich habe einige Konfigurationsoptionen gefunden und mit "certname" , "node_name" und "node_name_value" herumgespielt, aber die Verzögerung konnte nicht festgestellt werden wegzugehen. Weiß jemand genau, wie er Facter anweisen kann, den fqdn zu ignorieren, oder wie er Facter in die Lage versetzt, den fqdn auf einem Ubuntu 11.10-VM zu finden?

Fortschritt:

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

Das ist mein Router, auf dem Dnsmasq über Tomato ausgeführt wird.

$ 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 hat mich zu arp geführt, das 5 Sekunden lang blockierte und zweimal für jedes facter aufrief:

$ 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

Ich habe das VM von NAT Netzwerk zu Bridged geändert, sodass es jetzt eine IP im Netzwerk hat und arp sofort zurückkehrt. (Ich bin kein Networking-Guru, daher habe ich keine Ahnung, warum dies funktioniert hat, aber es schien eine vernünftige Sache zu sein, es zu versuchen.) Die Ausführung von facter dauert immer noch ca. 4-5 Sekunden und meldet immer noch "Konnte nicht fqdn abrufen ". facter -d zeigt mehrere Vorkommen von "value for domain is still nil" bis zum Ende. Ich denke, etwas stimmt immer noch nicht ganz.

47
Ryan Stewart

Da Puppet die fqdn-Tatsache verwendet, um zu bestimmen, unter welchem ​​Knoten sie ausgeführt wird, kann sie möglicherweise nicht ausgeführt werden, wenn sie nicht ermittelt werden kann. In Anbetracht dessen, was Sie beschreiben, ist das einfachste Debugging facter fqdn Anstelle Ihrer Marionettenbefehlszeile.

Wenn die "mehrere Sekunden" genau 5 Sekunden betragen, ist es sehr wahrscheinlich, dass Ihre DNS-Konfiguration mit einem einzelnen fehlerhaften DNS-Server beschädigt ist. Was ist in /etc/resolv.conf? Was passiert, wenn Sie Dig -x $HOSTIP $DNSSERVERIP Mit dem ersten in der resolv.conf aufgelisteten Nameserver ausführen?

Wenn Sie in facter/fqdn.rb Nachsehen, können Sie sehen, was genau Facter versucht, um den Fehler zu beheben. In der Version, die ich am praktischsten finde, wird facter/hostname.rb Und facter/domainname.rb Verwendet, um den Code von facter/util/resolution.rb Aufzurufen.

Was genau passiert, hängt davon ab, welche Version von facter Sie haben, welches Betriebssystem und möglicherweise auch was genau Sie installiert haben. Es ist sehr wahrscheinlich, dass Sie /bin/hostname, uname (etc) aufrufen und DNS-Lookups durchführen. Sie können jederzeit strace -t facter fqdn Verwenden, um zu sehen, was die Zeit in Anspruch nimmt (achten Sie auf die Lücke in den Zeitstempeln).

Nach allem, was Sie beschrieben haben, scheint das Problem zu sein, dass Puppet/Facter wirklich einen Domain-Namen haben möchte und Sie keinen haben, Sie haben nur einen nackten Host-Namen.

Das Hinzufügen von domain example.com Zu /etc/resolv.conf sollte den Trick machen. Das Ausführen von hostname foo.example.com Sollte ebenfalls ausreichen (muss aber erneut angewendet werden). Permanente Lösungen hängen von der genauen Einrichtung des Betriebssystems ab.

33
freiheit

Ich habe den gleichen Fehler erhalten, als ich Puppet auf meinem Heimcomputer (Xubuntu) ausgeführt habe. Was für mich funktioniert hat, war die Änderung der zweiten Zeile der Datei /etc/hosts. Die ersten beiden Zeilen vor der Änderung:

127.0.0.1   localhost
127.0.1.1   box

Und nach der Änderung:

127.0.0.1   localhost
127.0.1.1   box.example.com box

Nun ist der Befehl hostname -f kehrt zurück box.example.com statt box und Marionette ist glücklich.

26
Teemu Leisti

Hinzufügen

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

zu meinem Vagrantfile reparierte es für mich.

23
shredding

FQDN steht für "vollständig qualifizierter Domänenname". In einer Windows-Domäne (oder einer anderen ähnlichen LDAP-basierten Domäne) ist dies beispielsweise der Name Ihrer Netzwerkdomäne, z. B. "organisation.internal" - die Domäne, der Ihre Computer und Server angehören, und die Domäne, der Sie angehören enthält Ihre Netzwerkgruppen und Benutzerkonten.

Also, es hatte wahrscheinlich Probleme, die fqdn für eine Authentifizierung zu bekommen, die für den Rest der Konfigurationsschritte benötigt wird, würde ich raten.

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

Es ist möglich, dass Sie auf ServerFault eine bessere Antwort erhalten, da das System-/Konfigurationsmanagement auch in deren Bereich übergeht.

5
jefflunt

füge diese Zeile an /etc/resolv.conf

domain abc.com

führen Sie facter fqdn erneut aus

Fqdn erfordert einen Domainnamen, der möglicherweise in Ihrem frisch installierten ubu12 fehlt

4
Kit Ho

Eine andere Möglichkeit zur Umgehung besteht darin, die Tatsache außer Kraft zu setzen.

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

FACTER_fqdn=box.example.com facter

Unter Windows wäre dies

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