Кукольный / Facter "Не удалось получить факт fqdn": как исправить или обойти? - PullRequest
46 голосов
/ 16 октября 2011

Я изучаю куклу и пытаюсь поэкспериментировать с ней на ВМ дома. Я пока не использую марионеточный сервер, просто работаю локально. Это работает нормально, но каждый раз, когда я запускаю puppet apply ..., я получаю задержку в несколько секунд, после чего отображается сообщение

warning: Could not retrieve fact fqdn

Я предполагаю, что сообщение связано с задержкой, и я хочу избавиться от нее (задержка - я могу жить с сообщением). Поиск в поиске решения, похоже, указывает на то, что оно каким-то образом связано с поиском DNS, но я не могу найти в нем ничего другого, что кажется удивительным. Все, что я хочу, - это быстро применять манифесты в моем виртуальном компьютере, чтобы я мог экспериментировать. Как я могу ускорить процесс?

Обновление: Я не вижу никакой дополнительной информации в выходных данных отладки, но это выглядит так:

$ 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
...

Обновление: Я добавил тег "ruby", потому что у puppet очень мало последователей. Если это не относится к ruby ​​или если вы знаете лучший тег для него, дайте мне знать.

Обновите снова: Узнав немного больше о Puppet, я теперь понимаю, что это сообщение исходит от компонента, называемого "Facter", который выявляет "факты" о системе, на которой работает Puppet. Я нашел некоторые параметры конфигурации и поиграл с "certname" , "node_name" и "node_name_value" , но я не смог заставить задержку уйти , Кто-нибудь знает, как конкретно сказать Facter игнорировать fqdn или как заставить Facter найти fqdn в Ubuntu 11.10 vm?

Прогресс:

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

Это мой роутер, который запускает Dnsmasq через 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 привел меня к arp, который блокировался на 5 секунд и вызывался дважды для каждого 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

Я изменил виртуальную машину с сети NAT на мостовую, чтобы у нее теперь был IP-адрес в сети, и arp немедленно возвращается. (Я не сетевой гуру, поэтому я понятия не имею, почему это сработало, но попытка показалась разумной.) Но facter все равно занимает около 4-5 секунд и все еще выдает отчеты "Не удалось получить факт fqdn ». facter -d показывает несколько вхождений «значение для домена все еще ноль», вплоть до конца. Я думаю, что-то все еще не совсем правильно.

Ответы [ 6 ]

33 голосов
/ 16 октября 2011

Поскольку puppet использует факт fqdn, чтобы определить, на каком узле он работает, запуск может быть невозможен, если его невозможно определить. Учитывая то, что вы описываете, самая простая вещь для отладки - facter fqdn вместо командной строки вашего марионетки.

Если «несколько секунд» очень близко к точным 5 секундам, очень вероятно, что ваша конфигурация DNS сломана с одним плохим DNS-сервером в списке. Что находится в /etc/resolv.conf? Что произойдет, если вы запустите dig -x $HOSTIP $DNSSERVERIP с первым сервером имен, указанным в resolv.conf?

Если вы заглянете в facter/fqdn.rb, вы увидите, что именно facter пытается сделать, чтобы разрешить fqdn. В наиболее удобной для меня версии она использует facter/hostname.rb и facter/domainname.rb, код вызова из facter/util/resolution.rb.

То, что именно произойдет, будет зависеть от того, какая у вас версия Facter, какая ОС и, возможно, также какая у вас установлена. Вызов /bin/hostname, uname (и т. Д.) И выполнение поиска DNS вполне вероятны. Вы всегда можете использовать strace -t facter fqdn, чтобы увидеть, что занимает время (ищите разрыв в метках времени)

Из всего, что вы описали, похоже, проблема в том, что puppet / facter действительно хочет иметь доменное имя, а у вас его нет, у вас просто голое имя хоста.

Добавление domain example.com в /etc/resolv.conf должно помочь. Выполнение hostname foo.example.com также должно помочь (но его нужно будет повторно применить). Постоянные решения зависят от точной настройки ОС.

26 голосов
/ 08 апреля 2012

Я получил ту же ошибку при запуске puppet на моей домашней машине (Xubuntu). Для меня работало изменение второй строки файла /etc/hosts. Первые две строки до изменения:

127.0.0.1   localhost
127.0.1.1   box

А после изменения:

127.0.0.1   localhost
127.0.1.1   box.example.com box

Теперь команда hostname -f возвращает box.example.com вместо box, и кукольный счастлив.

23 голосов
/ 17 ноября 2013

Добавление

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

к моему Vagrantfile исправило это для меня.

5 голосов
/ 16 октября 2011

FQDN означает «полное доменное имя». Например, в домене Windows (или другом аналогичном домене на основе LDAP) это будет имя вашего сетевого домена, например, «organization.internal» - домен, к которому присоединяются ваши компьютеры и серверы, и домен, который содержит ваши сетевые группы и учетные записи пользователей.

Так что, вероятно, возникли проблемы с получением fqdn для некоторой аутентификации, необходимой для выполнения остальных этапов настройки, я бы предположил.

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

Возможно, вы получите лучший ответ по ServerFault, поскольку управление системой / конфигурацией также переходит в их область.

4 голосов
/ 15 ноября 2013

добавить эту строку в /etc/resolv.conf

domain abc.com

снова запустить facter fqdn

Fqdn требуется доменное имя, которое может отсутствовать в вашей только что установленной ubu12

3 голосов
/ 06 августа 2013

Другой возможный способ обойти это переопределить факт.

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

FACTER_fqdn=box.example.com facter

В Windows это будет

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