¿Cómo copiar archivos a todas las máquinas usando Puppet Master?

12

He instalado puppetmaster en ubuntu 11.04 y he instalado puppet en todos mis clientes. Me he unido a todos mis clientes de marionetas con Puppet Master. ¿Es posible copiar un archivo a todos estos clientes de marionetas desde puppet master?

Por ejemplo:

Tengo el archivo llamado datas.xls en mi escritorio (Puppet Master). ¿Cómo copio estos archivos a todos mis clientes de títeres en la siguiente ubicación (/ home / operator1 / Desktop / Backup /)?

Actualizar:

  • Hola, el archivo no se comparte.
  • ¿Cómo modificar esta línea puppet:///modules/module_name/datas.xlsel archivo que se copiará está en esta ubicación /etc/puppet/modules/mymodule/manifests/datas.xls?

Error en el cliente: (Resuelto)

root@testing:~# puppetd --test 
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find class sudo at /etc/puppet/manifests/site.pp:2 on node testing.chn.jd.com
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run

Error 2 en el cliente:

root@tme13:~# puppetd --test
err: Could not run Puppet configuration client: Could not retrieve local facts: bad URI(is not URI?): http://169.254.169.254/2008-02-01/meta-data/<HTML><HEAD><TITLE>HTTP access denied</TITLE></HEAD><BODY><img src/

Nueva actualización:

¿Cómo aplicar este módulo a todos los nodos? De modo que el archivo se copiará a todos los nodos.

karthick87
fuente
... pero ya no hiciste esta pregunta? askubuntu.com/questions/61080/…
fossfreedom
Sí, pero la solución ya no funciona.
karthick87
Además, no está muy claro, el usuario acaba de copiar el contenido de algunos sitios web.
karthick87
Todavía no es una razón para hacer una nueva pregunta (?) Por cierto, copié esa desde un enlace que Jorge me dio y me dijo que lo hiciera c / p;) ¿¡afaik, ¿qué hay en esa respuesta todavía funciona?
Rinzwind
aquí hay otra referencia: serverfault.com/questions/200101/…
Rinzwind

Respuestas:

24

Puppet es un monstruo para entenderlo, así que aprender con el ejemplo no es malo. A continuación, supongo que está utilizando módulos, por favor diga en un comentario si no lo está o si necesita más detalles sobre cómo armar el módulo.

Digamos que comienzas un nuevo módulo llamado mymodule. En el directorio de inicio de Puppet (generalmente /etc/puppet) en el Puppet Master, debe crear el directorio de archivos y manifiestos del módulo:

mkdir -p modules/mymodule/manifests
mkdir -p modules/mymodule/files

Luego cree un archivo en ese directorio llamado init.ppe ingrese:

class myfile {
    file { '/home/operator1/Desktop/Backup':
        ensure => directory,
        mode => '0755',
        owner => 'operator1',
        group => 'operator1',
    }

    file { "/home/operator1/Desktop/Backup/datas.xls":
        mode => "0644",
        owner => 'operator1',
        group => 'operator1',
        source => 'puppet:///modules/module_name/datas.xls',
    }
}

Luego, coloque el datas.xlsarchivo en el filesdirectorio del módulo, en este ejemplo en modules/mymodule/files/. (Tenga en cuenta que también puede haber un templatesdirectorio para plantillas ).

En el manifests/site.pparchivo debe importar el módulo e incluir la clase haciendo algo como:

import 'mymodule'

node base {
    include myfile
}

node server1 inherits base {}
node server2 inherits base {
    # extra config here
}

Asegúrese de que todos sus nodos hereden de la base y eso debería ser todo lo que necesita hacer. A partir de la marioneta 0.25 puede usar expresiones regulares en el nombre del nodo, por ejemplo:

node server[0-9] inherits base {}

Avíseme en los comentarios si necesita más aclaraciones.

Configurar un cliente para hablar con el titiritero

En el cliente, debe hacer:

sudo apt-get install puppet

Luego edite /etc/default/puppety cambie START=noa START=yes.

También edite /etc/puppet/puppet.confy agregue una línea a la [main]sección para indicarle dónde encontrar el titiritero:

server=puppet.mydomain.com

Entonces podemos hacer una prueba con sudo puppetd --test. Si recibe errores de clave, es posible que deba ir al servidor maestro de marionetas y firmar la clave del cliente. Para verificar el nombre exacto que puede hacer sudo puppetca --listy luego sudo puppetca --sign server1.mydomain.com(o el nombre del servidor del comando de lista).

Ahora comienza el servicio de títeres con sudo service puppet starty deberías estar lejos. El servicio de títeres se ejecutará cada hora, por lo que si actualiza sus recetas de títeres, también se actualizarán todos sus clientes.

Eliminar archivos

Observo en la pregunta original que quería saber cómo eliminar archivos. Editarías el manifests/init.ppser

file { "/home/operator1/Desktop/Backup/datas.xls":
    ensure => absent,
}

Otros consejos útiles

Si tiene problemas, hay algunas cosas que puede hacer. En cualquier máquina con títeres instalados, puede verificar su sintaxis ejecutando

puppet --parseonly --ignoreimport myfile.pp

o verifique todo sacando la --ignoreimportbandera, aunque eso puede dar lugar a algunos mensajes de error divertidos que no son realmente errores que he encontrado. También puede ejecutar puppet live en una máquina cliente de puppet haciendo:

sudo puppetd --test

que muestra varios resultados útiles, con errores y advertencias resaltados en diferentes colores. Si desea aún más detalles, puede ejecutar:

sudo puppetd --test --debug

pero eso generalmente genera tanta salida que es difícil pasar, así que solo hazlo si ya has probado los pasos anteriores y estás atascado y necesitas ver todo lo que se está haciendo.

Tenga en cuenta que esto se basa en la marioneta 0.25.x, que es lo que uso actualmente en el trabajo, y también es la versión en Ubuntu 10.04. El código de Puppet en la sección principal definitivamente seguirá funcionando, pero las versiones posteriores de Puppet tienen nuevas banderas que pueden ayudar con la salida de depuración.

Hamish Downer
fuente
Permítame probar esta solución esta noche, y hacerle saber las actualizaciones. Muchas gracias :)
karthick87
Cómo modificar esta línea puppet:///modules/module_name/datas.xlsdel archivo a copiar está en esta ubicación/etc/puppet/modules/mymodule/manifests/datas.xls
karthick87
El archivo que se copiará debe colocarse /etc/puppet/modules/mymodule/files/datas.xls; actualizaré la respuesta para que quede más claro al respecto.
Hamish Downer
Oke gracias. ¿Cómo ejecutar los manifiestos?
karthick87
¿Cómo aplicar este módulo a todos los nodos desde puppetmaster? En lugar de aplicarlo a todos los nodos con fuerza ejecutandopuppet agent --test
karthick87