Módulo de Puppet para MySQL

Nota: esta entrada también la publiqué en inglés en mi blog. If you are an english reader, you may want to check it.

Continuando con los móldulos de Puppet que hemos publicado en la cuenta de GitHub de OSOCO, hoy hablaré del módulo de Puppet para MySQL, que me ha parecido uno de los más útiles cuando hemos creado nuestras infraestructuras :-) .

Hay cantidad de módulos MySQL ya publicados, pero los que probé antes de crear el nuestro eran muy potentes, y por lo tanto complejos y con muchas dependencias. En este caso, quería intentar conseguir justo lo contrario: un módulo sencillo que símplemente funcionase a la hora de hacer las tareas más comunes relacionadas con MySQL: instalarlo, establecer la password de root, crear bases de datos y permitir el acceso de usuarios a las mismas.

Para usar el módulo símplemente debes añadirlo a tus módulos (en nuestro caso usamos Puppet Librarian para la gestión de dependencias) y declarar los recursos que necesitas. El siguiente ejemplo muestra nuestra configuración de MySQL para el nodo que es responsable de hospedar a Jenkins:

class ci_mysql {

    mysql::database { 'someProjectTestDB': }
    mysql::database { 'anotherProjectTestDB': }

    $test_user_name = 'test'
    $test_user_pwd = 'test'

    mysql::user { 'someProjectTestDB-test-user':
        user => "$test_user_name",
        password => "$test_user_pwd",
        database => 'someProjectTestDB',
        host => '%'
    }

    mysql::user { 'anotherProjectTestDB-test-user':
        user => "$test_user_name",
        password => "$test_user_pwd",
        database => 'anotherProjectTestDB',
        host => '%'
    }

    mysql::user { 'anotherProjectTestDB-readonly-user':
        user => 'readonlyuser',
        password => 'readonlyuser',
        database => 'anotherProjectTestDB',
        privileges => 'SELECT'
    }
}

Sólo con eso se instalará el servidor de MySQL y será lanzado como un servicio. Además se crearán dos bases de datos (someProjectTestDB y anotherProjectTestDB) con un usuario con todos los permisos de acceso (de nombre test). Finalmente, el usuario readonlyuser tendrá acceso a la base de datos anotherProjectTestDB, pero sólo podrá hacer consultas de tipo select. Directo y sencillo :) .

La clase también puede ser configurada con los siguientes parámetros opcionales:

class ci_mysql {
   class { "mysql::install":
      version => "5.1.61-0+squeeze1",
      root_pwd => "myFancyRootPassword",
      data_dir => "/mnt/mysql/datadir",
   }   
   ...
}

De esa manera puedes especificar la versión de MySQL, la contraseña del root, y el directorio de datos que usará MySQL para guardar las bases de datos. Por último, añadir que este módulo lo hemos probado tanto en Debian como en Gentoo (por lo que debería funcionar bien en Ubuntu).

New public Gentoo Linux AMI for Europe region

We’ve published a few days ago a new Gentoo Linux Amazon Machine Image for the Europe region, consisting of a baseline 32-bit Gentoo server installation with the addition of a few packages and tools.

The AMI is publicly available as ami-e38fa497 with the manifest osoco-public-images-eu/gentoo_base_2010.1_x86_server.manifest.xml

Next you can find the AMI features for this first revision:

  • The image contains a Gentoo Linux 2010.1 profile built from a recent stage3 (2010-03-06).
  • A recent kernel for Amazon EC2: 2.6.21.7-2.fc8xen-ec2-v1.0.
  • The entire system has been rebuilt for the Xen environment using:
    CFLAGS="-O2 -march=i686 -pipe -mno-tls-direct-seg-refs"
  • Root password is randomly generated on the first machine boot.
  • Disabled password-based authentication in /etc/ssh/sshd_config
  • Public key is fetched from 169.254.169.254 and copied to /root/.ssh/authorized_keys at boot time.
  • The scripts passed as user-data will be run as root at boot time.
  • /etc/motd giving credits to OSOCO and pointing to the image release notes.
  • The following services have been installed and added to the default runlevel:
    • dhcpcd 4.0.15
    • openssh 5.2-p1-r3
    • syslog-ng 3.0.4 (with logrotate 3.7.8)
    • vixie-cron 4.1-r10
    • iptables 1.4.3.2
  • Additonally the following packages/applications have been installed:
    • EC2 API tools (1.3-46266) and EC2 AMI tools (1.3-45758) installed and available in the PATH.
    • IcedTea6 JDK (EC2 API and AMI tools both require a Java VM).
    • sshguard 1.4 to protect against brute force attacks via SSH. It has been configured to monitor syslog-ng logs to detect attacks, and block the attackers through iptables firewall rules.
    • runurl from alestic.com is installed and in the PATH. The runurl command is a simple tool that downloads a program (or script) from the specified URL and runs it. It is very useful for simplifying your user-data scripts on EC2.

Grateful thanks to Geert Bevin for his initial Gentoo image and to Tim Disynger for his building tutorial.