Puppet/Facter "Не удалось найти факт fqdn": как исправить или обойти? - программирование
Подтвердить что ты не робот

Puppet/Facter "Не удалось найти факт fqdn": как исправить или обойти?

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

warning: Could not retrieve fact fqdn

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

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

$ 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", потому что у марионетки так мало последователей. Если это не относится к рубину, или если вы знаете лучший тег для него, сообщите мне.

Обновить еще раз: Узнав еще немного о марионетке, теперь я понимаю, что это сообщение исходит от компонента, называемого "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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

У меня такая же ошибка при запуске марионетки на моей домашней машине (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, а марионетка счастлива.

Ответ 3

Добавление

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

для моего Vagrantfile исправил его для меня.

Ответ 4

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

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

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

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

Ответ 5

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

domain abc.com

снова запустите fqdn

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