Facts Customizados

21 views
Skip to first unread message

Leon Garcia

unread,
Apr 3, 2014, 1:32:57 PM4/3/14
to pupp...@googlegroups.com
Que tal, antes que nada agradecer por los videos en youtube me han  ayudado bastante.

Mi pregunta es un poco hacia como distribuir los facts customizados en puppet, ya he desarrollado mi fact y me funciona de manera local, ahora la idea es integrarlo en un módulo.

He hecho el módulo y lo he asignado a varios servidores manejados por puppet y no tengo problema, lo único malo que he hecho es que realmente no se donde poner el fact customizado, de entrada lo he puesto dentro de los demás facts proporcionados por el rpm de facter,  (/usr/lib/ruby/site_ruby/1.8/facter/), lo cual lo he hecho para probar.

Mi intencíon es crearlo en una ruta en la cual facter sea capaz de ejecutar ese fact.

Ahora si pongo mi codigo de ruby dentro de /etc/facter/facts.d y ejecuto facter tengo este resultado.

# facter -d
Relative directory ./facter removed from search path.
Fact file /etc/facter/facts.d/diskcard.rb was parsed but returned an empty data set

Si declaro la variable antes de invocar el comando:
 FACTERLIB=/etc/facter/facts.d facter -d

Tengo el error pero además tengo el resultado:

# facter -d
Relative directory ./facter removed from search path.
Fact file /etc/facter/facts.d/diskcard.rb was parsed but returned an empty data set
....
diskcard => notfound
.....


Mi pregunta es.. en Puppet como podría crear mi módulo para usar una ruta alterna a mis custom facts, o como podría invocar el uso de FACTERLIB ?

Mi otra opción es correr código de ruby dentro del módulo, he visto que con Puppet DSL  es posible pero tendría que cambiar un poco mi estructura, de init.pp a init.rb, pero estoy un poco perdido acá

espero me puedan ayudar.

Nicolás César

unread,
Apr 3, 2014, 1:52:28 PM4/3/14
to pupp...@googlegroups.com
podrias publicar /etc/facter/facts.d/diskcard.rb ?  y las versiones (puppet-master, puppet agent y facter que estas usando? )


Si te encontras con la decision "exec versus fact" yo lo que hago es pensar.

0) es un dato rea-only o modifica el estado del agente?
1) cada cuanto se va a ejecutar?  en todos los puppet agent runs?
2) ese dato va a estar en todos los agentes?  que paso con los que no lo necesitan?
3) lo voy a necesitar en varios lados (modulos, manifests, etc)? o simplemente en la definicion de 1 nodo?


Yo uso mucho los facts en mi inventory search  http://puppet.fsf.org/nodes/search   para hacerme preguntas como "Que maquinas estan en GNU/Trisquel Taranis?"  

Abrazo!


Nico César


--
Has recibido este mensaje porque estás suscrito al grupo "Puppet en Español" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a puppet-es+...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Leon Garcia

unread,
Apr 3, 2014, 2:09:47 PM4/3/14
to pupp...@googlegroups.com
Que tal Nico,

Gracias por la respuesta, te paso el listado de versiones.

Agente:
puppet-3.4.3-1.el6.noarch

Server:
puppet-server-3.4.2-1.el6.noarch

Facter:
facter-1.7.4-1.el6.x86_64

diskcard.rb

Facter.add("diskcard") do
  setcode do
    cardname = Facter::Util::Resolution.exec('lspci | grep -i -Ee \(RAID\|SCSI\|SATA\) | cut -d: -f3 | sed -e "s/^[ \t]*//" | sort -u | grep -v Device')
    if cardname.nil?
        diskcard = 'notfound'
    else
        diskcard = cardname
    end
  end
end

En cuanto a las preguntas sobre si hacer fact o exec..

La intención de el módulo es mantaner lo agentes que monitorizan el estado de las tarjetas de disco, luego dependiedo de la tarjeta deberá instalar ciertos paquetes del SW del Vendor.

Debe de asegurarse de que exista un cron para invocar a los scripts, pero bueno eso ya es parte del módulo.

Saludos

Pablo Wright

unread,
Apr 3, 2014, 2:17:54 PM4/3/14
to pupp...@googlegroups.com
Acá hay una distinción que es necesario hacer: custom facts vs external facts.

Los custom facts (pueden llamarse "internos" tambien) son aquellos
escritos en Ruby con llamadas a Facter.add. Éstos pueden sincronizarse
automáticamente con los agentes si se colocan en el path correcto
dentro de un módulo [0].
Los facts externos por otro lado pueden ser ejecutables en cualquier
lenguaje, mientras devuelvan el formato correcto. También pueden ser
archivos estáticos. La desventaja es que no se sincronizarán
automáticamente, con lo cual se deberá crear un módulo para
distribuirlos a los agentes [1].

En tu caso León, viendo que ya escribiste el fact en Ruby, lo más
fácil sería que lo incluyeras en el path correspondiente para que
pluginsync actúe. Fijate el primer link que tiene la data que
necesitas.

[0] http://docs.puppetlabs.com/guides/custom_facts.html#loading-custom-facts
[1] http://docs.puppetlabs.com/guides/custom_facts.html#drawbacks

Saludos,
Pablo D. Wright
Technical Operations - www.edrans.com
Buenos Aires: +54 11 5368 5839 - Ext. 8017 |
Las Vegas: +1 5057183014

Leon Garcia

unread,
Apr 3, 2014, 2:24:43 PM4/3/14
to pupp...@googlegroups.com

Gracias Pablo,

Entonces por lo que entiendo, tengo un fact interno, ahora lo tendré que poner en mi modulo dentro de /etc/puppet/modules/my-modulo/lib/facter/diskcard.rb

Según el path que dice la siguiente liga: http://docs.puppetlabs.com/guides/plugins_in_modules.html

Intentaré y les cuento.

Saludos
Reply all
Reply to author
Forward
0 new messages