ruby puppet facter

ruby - Títere/Facter "No se pudo recuperar el hecho fqdn": ¿Cómo arreglar o eludir?



puppet (6)

Añadiendo

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

a mi Vagrantfile arregló para mí.

Estoy aprendiendo sobre el títere y tratando de experimentar con él en una máquina virtual en casa. No estoy usando un servidor de marionetas todavía, simplemente ejecutando cosas localmente. Funciona bien, pero cada vez que ejecuto un puppet apply ... , recibo un retraso de varios segundos, después de lo cual muestra el mensaje

warning: Could not retrieve fact fqdn

Supongo que el mensaje está vinculado a la demora, y quiero deshacerme de él (la demora, puedo vivir con el mensaje). Buscar una solución en Google parece indicar que de alguna manera está relacionado con las búsquedas de DNS, pero no puedo encontrar nada más al respecto, lo que parece sorprendente. Todo lo que quiero es poder aplicar manifiestos en mi vm rápidamente para poder experimentar. ¿Cómo puedo acelerar las cosas?

Actualización: no veo ninguna información adicional en la salida de depuración, pero se ve así:

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

Actualización: agregué la etiqueta "ruby" porque la marioneta tiene muy pocos seguidores. Si esto no pertenece a ruby, o si conoce una etiqueta mejor para él, hágamelo saber.

Actualizar de nuevo: después de haber aprendido un poco más sobre el títere, ahora entiendo que este mensaje proviene del componente llamado "Facter" que huele "hechos" sobre el sistema en el que se está ejecutando Puppet. Encontré algunas opciones de configuración y jugué con "certname" , "node_name" y "node_name_value" , pero no pude obtener el retraso para irme. ¿Alguien sabe específicamente cómo decirle a Facter que ignore el fqdn o cómo hacer que Facter pueda encontrar el fqdn en un Ubuntu 11.10 vm?

Progreso:

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

Ese es mi enrutador, que ejecuta Dnsmasq vía 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 me llevó a arp, que estaba bloqueando durante 5 segundos y llamó dos veces por cada 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

Cambié la VM de la red NAT a la de puente, de modo que ahora tiene una IP en la red, y arp vuelve inmediatamente ahora. (No soy un gurú de redes, así que no tengo idea de por qué funcionó, pero parecía razonable intentarlo.) Pero facter aún tarda de 4 a 5 segundos en ejecutarse y aún así informa "No se pudo recuperar el hecho fqdn". facter -d muestra varias apariciones de "valor para el dominio sigue siendo nulo", todo el camino hasta el final. Estoy pensando que algo todavía no está del todo bien.


Como Puppet usa el hecho de fqdn para determinar en qué nodo se está ejecutando, puede que no sea posible ejecutarlo si no se puede determinar. Dado lo que está describiendo, lo más simple para depurar es facter fqdn lugar de su línea de comandos de marioneta.

Si los "varios segundos" están muy cerca de exactamente 5 segundos, es muy probable que la configuración de su DNS esté rota con un único servidor DNS incorrecto. ¿Qué hay en /etc/resolv.conf? ¿Qué sucede si ejecuta dig -x $HOSTIP $DNSSERVERIP con el primer servidor de nombres listado en resolv.conf?

Si miras en facter/fqdn.rb , puedes ver qué es exactamente lo que Facter está tratando de hacer para resolver el fqdn. En la versión que tengo más útil es usar facter/hostname.rb y facter/domainname.rb que llaman al código de facter/util/resolution.rb .

Exactamente lo que suceda dependerá de qué versión de facter tenga, qué sistema operativo, y posiblemente también qué exactamente haya instalado. Llamar /bin/hostname , uname (etc) y hacer búsquedas DNS son bastante probables. Siempre puedes usar strace -t facter fqdn para ver qué está tomando el tiempo (busca la brecha en las marcas de tiempo)

De todo lo que has descrito, parece que el problema es que Puppet / Facter realmente quiere tener un nombre de dominio y no tienes uno, simplemente tienes un nombre de host desnudo.

Agregar domain example.com a /etc/resolv.conf debería ser el truco. Ejecutar el hostname foo.example.com también debería ser el truco (pero será necesario volver a aplicarlo). Las soluciones permanentes dependen de la configuración exacta del sistema operativo.


FQDN significa "nombre de dominio completamente calificado". En un dominio de Windows (u otro dominio similar basado en LDAP), por ejemplo, sería el nombre de su dominio de red, como "organización.internal" - el dominio al que se unen sus computadoras y servidores, y el dominio que contiene sus grupos de red y cuentas de usuario.

Por lo tanto, probablemente tuve problemas para obtener el fqdn de alguna autenticación necesaria para realizar el resto de los pasos de configuración, sería mi suposición.

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

Es posible que obtenga una mejor respuesta en ServerFault, ya que la administración del sistema / configuración también cruza a su reino.


Obtuve el mismo error al ejecutar el títere en mi máquina doméstica (Xubuntu). Lo que funcionó para mí fue cambiar la segunda línea de archivo /etc/hosts . Las primeras dos líneas antes del cambio:

127.0.0.1 localhost 127.0.1.1 box

Y después del cambio:

127.0.0.1 localhost 127.0.1.1 box.example.com box

Ahora, el comando hostname -f devuelve box.example.com lugar de box , y puppet está contento.



/etc/resolv.conf esta línea en /etc/resolv.conf

domain abc.com

ejecutar facter fqdn otra vez

Fqdn requiere nombre de dominio, que tal vez falta en su ubu12 recién instalado