Mostrando entradas con la etiqueta puppet. Mostrar todas las entradas
Mostrando entradas con la etiqueta puppet. Mostrar todas las entradas

viernes, 7 de junio de 2019

recurso puppet crontab

Mediante puppet podemos añadir y eliminar tareas en el crontab.

Este es el manifest que utilizo en el centro.

Como se puede ver mandamos que se apaguen los equipos (si estuvieran encendidos)  a las 15:35 y 23:50.

En la bios tengo configurado que si hay un corte de corriente, cuando vuelvan se enciendan. Si pusiera que se apagaran, no se encenderían por wakeonlan y habría que encenderlos a mano.

Por lo tanto si hay un corte de corriente por la noche o en fin de semana se encenderían. Por eso pongo un cron que si está encendido por la noche o en fin de semana se apague (se comprueba cada 5 minutos). Esto se ejecuta en todos los equipos menos en los del equipo directivo, que si es posible que vengan en esos intervalos. Para ello sustituyo en el case, caso_particular por el nombre o nombres del equipo.


class mp-apagado-maquinas {

        #Apagado de máquinas por la mediodía.
        cron { apagado-mediodia:
                command => "/sbin/poweroff",
                user => root,
                hour => 15,
                minute => 35,
                ensure => present,
        }

        #Apagado de máquinas por la noche
        cron {  apagado-noche:
                command => "/sbin/poweroff",
                user => root,
                hour => 23,
                minute => 50,
                ensure => present,
        }

        # y por si se encienden por un apagón de luz, bios configurada como power on,
        # cada 5 minutos comprueba si está encendido y se apaga
        # hay algunos equipos que pueden venir a deshoras o desdías a trabajar, en estos se quita el cron, en el resto se les pone
        case $hostname {
                equipo_particular-pro: {
                        cron { apagado-findesemana:
                                 ensure => absent
                        }

                        cron { apagado-madrugada:
                                 ensure => absent
                        }

                }#fin caso particular

                default:{
                        cron { apagado-findesemana:
                                 command => "/sbin/poweroff",
                                 user => root,
                                 hour => '*',
                                 minute => '*/5',
                                 weekday  => [0,6],
                                 ensure => present
                        }

                        cron { apagado-madrugada:
                                 command => "/sbin/poweroff",
                                 user => root,
                                 hour => ['0-6'],
                                 minute => '*/5',
                                 weekday  => ['1-5'],
                                 ensure => present
                        }
                } #fin default
        }#fin hostname
}

viernes, 3 de mayo de 2019

tarea puppet para descargar y añadir clave de repositorio.

       
Esta es el recurso puppet  que utilizo para descargar la clave del repositorio local del centro.
El archivo de la firma está en el repositorio. Lo descarga y lo añade hasta que comprueba que está añadido.  

 exec { "AnadeClaveFuenteroniel":
                command => "wget -O- http://servidorweb/ies/ies.asc  > ies.asc;cat ies.asc| apt-key add -",
                cwd => "/root",
                path => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                timeout => 3600,
                unless => "apt-key list|grep \"7B3B 6261 A1F0 4C57 9A8D  E93D 41F4 5BC4 6BBD 7365\"",
        }

jueves, 21 de marzo de 2019

Recurso Puppet Exec Descargar archivo

Para descargar un archivo por puppet utilizo el recurso exec tal que así

exec { "/usr/bin/wget --limit-rate=2.5m -O /var/cache/paquetes/$paquete http://$servidor/$rutadescarga/$paquete && touch /var/cache/paquetes/$paquete":
     cwd => "/var/cache/paquetes",
     path => "/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/bin:/sbin",
     alias => "descargar-sweethome3d",
     creates => "/var/cache/paquetes/$paquete",
     timeout => 300,
     notify => Exec ["descomprimir-sweethome3d"],
}

El atributo creates comprueba un archivo para controlar que se ha descargado correctamente. En este caso el archivo lo hemos creado con la órden touch. Sería lo mismo que utilizar el atributo unless 
 unless => "/bin/ls /var/cache/paquetes/$paquete",

Con el atributo timeout le decimos el tiempo máximo a esperar para descargar.

Todas las opciones se puede ver en la página de referencia:

Recurso Puppet File Recursivo


Para crear un directorio con archivos dentro utilizamos el recurso de puppet file con el atributo recurse a true.

En el siguiente ejemplo creamos un directorio /usr/local/bin y le ponemos todos los scritps que tenemos en el modulo.
En este caso también he puesto el atributo replace a false así si pongo de manera local en una máquina algún otro script no lo borrará.

        file { "/usr/local/bin":
                source => "puppet:///modules/mp-xubuntu-ficheros-centro/bin",
                ensure => directory,
                mode => 644,
                owner => root,
                group =>root,
                recurse => true,
                replace => false,
        }


Podemos ver todas los opciones en la web de puppet.com/docs

https://puppet.com/docs/puppet/5.5/types/file.html

Recurso Puppet File No reemplazar

En el recurso puppet File si queremos crear un recurso de archivo pero que no sincronizarlo con el del servidor los hacemos con el atribute replace => false.

Por ejemplo:

        file { "/usr/share/linex-ubuntu-puppet/escuela2.0":
               owner => root , group => root , mode => 755,
               replace => false,
               source => "puppet:///modules/mp-xubuntu18-tareas-iniciales/escuela2.0.$tipo",
       }

Podemos ver todas los opciones en la web de puppet.com/docs

https://puppet.com/docs/puppet/5.5/types/file.html

Modulo Puppet Instalar SweetHome3D

Me han solicitado instalar un programa de diseño llamado Sweet Home 3d.

La web del desarrollador es la siguiente.

http://www.sweethome3d.com/es/

He realizado una tarea para instalarla en los equipos.

He descargado el tgz para linux 64 bits de la página de descargas y la he puesto en mi servidor en la ruta http://ficheros/linex/programas/ para que lo descargue la tarea.

Luego he creado un lanzador y lo he puesto en los escritorios de los usuarios.

La tarea:

root@servidor:/etc/puppet/modules# tree mp-instala-sweethome3d
mp-instala-sweethome3d
├── files
├── leeme
└── manifests
    └── init.pp

2 directories, 2 files
root@servidor:/etc/puppet/modules# cat mp-instala-sweethome3d/manifests/init.pp
class mp-instala-sweethome3d {

  $servidor = "servidor"
  $rutadescarga = "ficheros/linex/programas"

  case $architecture {
      amd64: { $paquete = "SweetHome3D-6.1.2-linux-x64.tgz" }

 }
  

  exec { "/usr/bin/wget --limit-rate=2.5m -O /var/cache/paquetes/$paquete http://$servidor/$rutadescarga/$paquete":
     cwd => "/var/cache/paquetes",
     alias => "descargar-sweethome3d",
     creates => "/var/cache/paquetes/$paquete",
     timeout => 300,
     notify => Exec ["descomprimir-sweethome3d"],
      }
  exec { "/bin/chmod 755 /var/cache/paquetes/$paquete && /bin/tar -xzvf /var/cache/paquetes/$paquete && /bin/mv /var/cache/paquetes/SweetHome3D-6.1.2 /opt/":
     cwd => "/var/cache/paquetes",
     alias => "descomprimir-sweethome3d",
     require => Exec ["descargar-sweethome3d"],
     unless => "/bin/ls /opt/SweetHome3D-6.1.2",
  }
}


El lanzador:
root@servidor:/etc/puppet/modules# cat /home/profesor/xxxxxx/Escritorio/SweetHome3D.desktop
[Desktop Entry]
Version=1.0
Type=Application
Name=SweetHome3D
Comment=
Exec=/opt/SweetHome3D-6.1.2/SweetHome3D
Icon=/opt/SweetHome3D-6.1.2/SweetHome3DIcon.png
Path=
Terminal=false
StartupNotify=false

lunes, 24 de marzo de 2014

ERROR puppet EN SERVIDORES DE AULA


He leído un Correo de Andy, que con la ayuda de Esteban Navas, han creado esté documento que me parece interesante.


Si nos aparece uno de los siguientes errores al ejecutar “puppet agent - - test” en cualquier servidor de aula:

root@a23-pro:~# puppetd -t
info: Creating a new SSL key for a23-pro.laparra
info: Caching certificate for ca
err: Could not request certificate: Error 400 on SERVER: header too long
Exiting; failed to retrieve certificate and waitforcert is disabled

root@a02-pro:~# puppet agent --test
info: Creating a new SSL key for a02-pro.valledeljerte3
info: Caching certificate for ca
info: Caching certificate for a02-pro.valledeljerte3
err: Could not request certificate: Retrieved certificate does not match private key; please remove certificate from server and regenerate it with the current key
Exiting; failed to retrieve certificate and waitforcert is disabled

Para solucionar este problema, voy a realizar los siguientes pasos:

1.- Parar el script/proceso “sinc_puppet_inst” en el ltsp-squeeze.
2.- Borrar la carpeta /var/lib/puppet/ssl/ en el ltsp-squeeze.
3.- Borrar el certificado del cliente en el servidor NFS:
puppet cert clean a22-pro.laparra
4.- Ejecutar: puppet agent --test en el ltsp-squeeze.

Si después de realizar estos pasos no se consigue que puppet actualice el servidor de aula correctamente, ejecutamos, puppet cert list - -all para mostrar los certificados en el servidor, y veía un error como el siguiente:
err: Could not call list: header too long

5.- Chequeo espacio en el directorio /var del servidor NFS:
find /var/lib/puppet/ssl -type f -empty -print
Y encontré que en los siguientes directorios había archivos de certificados con cero bytes:
  • /var/lib/puppet/ssl/ca/requests
  • /var/lib/puppet/ssl/ca/signed

Borro los archivos a cero:
find /var/lib/puppet/ssl/ -type f -empty -exec rm {} \;

Después de borrar los archivos, reinicié apache2 (puesto que usamos puppet con passenger): service apache2 restart

volví a intentar la actualización manual de clientes y ahora sí funcionó.