Professional Documents
Culture Documents
Qu veremos
Problemas comunes de un (sys|net)admin Cmo trata de resolverlos Puppet Ejemplos de aplicacin Temas para seguir estudiando
Entre distintos sistemas operativos Entre distintas versiones del mismo sistema operativo Cambio de criterio en el tiempo.
Esfuerzo directamente proporcional al nmero de servidores. Tareas repetitivas que tienden a provocar errores.
Distintos criterios con el paso del tiempo. Difcil implementacin de un nuevo criterio. Diferencia de estilo por cada persona en el equipo. Barrera de entrada alta para nuevos integrantes.
Tenemos backup reciente del sistema operativo? La instalacin es adecuada para el nuevo hardware? Qu cambios / adecuaciones le hicimos cuando lo instalamos? Tiempos de recuperacin y cortes de servicio excesivamente altos.
OUCH!!!! Llevar backups de sistema de N servidores es muy tedioso y costoso. La diferencia real entre los servidores puede ser mnima. Reordenar servicios entre servidores puede ser complejo.
Qu servicios estn activos? Dnde estn instalados esos servicios? Qu particularidades tiene cada sistema instalado? Dnde estn los drivers necesarios? Qu usuarios estn habilitados en cada sistema? Que tan actualizada est la documentacin?
Puppet
Componentes y caractersticas
Es un paso evolutivo al cfengine. Lenguaje declarativo. Estructura Cliente / Servidor. Funcionamiento de tipo pull. Bibliotecas de abstraccin de recursos. Modular. Portable (en la actualidad, entre Un*xes).
Puppet
Esquema de funcionamiento
Puppet
Abstraccin de recursos
Independencia de la implementacin:
Puppet
Lenguaje declarativo
Puppet se centra en la administracin de recursos. Se usa para describir el estado de un recurso, y no cmo lograr dicho estado. Evita la superposicin de declaraciones: Un recurso puede ser manejado en un nico lugar. Idempotencia: se obtiene el mismo resultado sin importar las veces que se aplique la configuracin.
Puppet
Tipos de recursos
Usuario (user) Archivo (file) Paquete de software (package) Servicio (service) Tarea peridica (cron) ...
Puppet
Tipos de recursos (cont.)
user
Puppet
Tipos de recursos (cont.)
file
checksum content backup ensure (absent/present , file/directory) user group source mode
Puppet
Tipos de recursos (cont.)
package
Puppet
Tipos de recursos (cont.)
service
Puppet
Tipos de recursos (cont.)
cron
Puppet
Classes
class unix { file { /etc/passwd: owner => root, group => root, mode => 644; /etc/shadow: owner => root, group => root, mode => 440; } }
Estructura que engloba recursos individuales Utilizable una vez por host (ej: un servicio) Soporta jerarqua de herencia
Puppet
Defines
define svn_repo($path) { exec { "/usr/bin/svnadmin create $path/$title": unless => "/bin/test -d $path", } } svn_repo { puppet: path => "/var/svn" }
Como las clases, pero con argumentos. Utilizable en casos parametrizables por host (ej: virtualhosts en apache)
Puppet
Nodes
import classes/* node default { include unix } node webserver1 inherits default { include apache } node nameserver inherits default { include bind }
Como las clases, pero se aplican a los hosts. Se utilizan para asignar clases y definiciones a los clientes. Soportan herencia.
Puppet
Templates
<VirtualHost *> ServerAdmin <%= admin %> DocumentRoot <%= docroot %> ServerName <%= domain %> </VirtualHost>
Permiten simplificar configuraciones similares entre distintos nodos. Utilizan la potencia del lenguaje ruby. El servidor itera sobre este archivo antes de enviarlo al cliente.
Puppet
Otras caractersticas
Puppet
Ejemplos
Configurar vim como editor preferido
class vim { package { vim: ensure => present, } exec { update-alternatives set editor /usr/bin/vim.basic: path => /bin:/usr/bin, unless => ls -al /etc/alternatives/editor | grep vim.basic, } }
Puppet
Ejemplos
Deshabilitar login de root en sshd
class norootssh { package { openssh-server: ensure => present } service { ssh: require => Package[openssh-server], ensure => running } exec { perl -pi -e 's/^PermitRootLogin yes$/PermitRootLogin no/' /etc/ssh/sshd_config: path => /bin:/usr/bin:/sbin:/usr/sbin, unless => grep 'PermitRootLogin no' /etc/ssh/sshd_config, notify => Service[ssh] } }
Puppet
Ejemplos
Virtualhosts de apache
define vhost ( $domain, $admin, $docroot, $enable = true ) { $vhpath = /etc/apache/conf.d/$domain.conf file { $vhpath: notify => Service[apache], require => File[$docroot], ensure => $enable ? { true => present, false => absent }, content => template(vhost.erb), owner => root, group => root, mode => 640, } file { $docroot: ensure => $enable ? { true => directory, false => absent } }
Puppet
Ejemplos
Template: vhost.erb
<VirtualHost *> ServerAdmin <%= admin %> DocumentRoot <%= docroot %> ServerName <%= domain %> </VirtualHost>
UNNOBA (por invitarme una vez ms) Lucas Di Pntima (por permitirme usar su presentacin como... ejem... plantilla :) Uds. (por aguantarme :)