Introducción a la noción de rol
Objetivos del capítulo y requisitos
1. Contexto y requisitos
Los capítulos anteriores han introducido la noción del playbook. Ahora va a reutilizar ese mecanismo para proceder a la instalación de un wiki basado en MediaWiki. Este software está compuesto por dos partes:
-
la parte que consiste en la presentación, que corresponde a Apache/PHP;
-
la base de datos MySQL.
Si desea conocer más sobre su estructura, puede visitar la página: https://www.mediawiki.org/wiki/MediaWiki
2. Archivos descargables
Puede encontrar los ejemplos de los directorios inventarios y variables en el archivo comprimido capitulo-07.tar.gz que se encuentra en la página del libro del sitio de Ediciones ENI.
Introducción a los roles Ansible
Como ya se ha visto en capítulos anteriores, los playbooks permiten encadenar distintas acciones (plantillas, shell, copia de archivos) así como elegir el lugar dónde debe realizarlos (método de conexión, delegación de operaciones, etc.).
Solamente hay un problema: cuando haya escrito unos cuantos playbooks con unas cuantas plantillas para cada uno y la gestión de algunos archivos, puede ser que le resulte un poco difícil organizarse. Por supuesto, nada le impide crear subcarpetas para almacenar sus plantillas clasificadas por playbooks.
También será necesario reutilizar instrucciones. La instrucción include le puede ayudar, sin embargo ese mecanismo no funcionará en todos los casos.
La noción de rol responde a esos dos problemas:
-
Reutilización del código en distintos playbooks de manera modular.
-
Organizar el código que se encuentra en los playbooks.
En el caso que va ver a continuación, usted trabajará en la reutilización del playbook de instalación de Apache, que es necesario para el funcionamiento de MediaWiki.
1. Estructura de un rol
Un role es una estructura en forma de árbol que contiene algunos directorios y archivos. Los roles que se encuentran en el directorio roles serán utilizados automáticamente por sus playbooks. También se pueden poner a disposición de Ansible de la manera siguiente:
-
Modificación de la variable de entorno DEFAULT_ROLES_PATH.
-
Modificación de la opción roles_path del archivo de configuración Ansible.
Cada rol tendrá un directorio del mismo nombre en el directorio roles. En un rol, podrá usar los directorios siguientes:
-
files: todos los archivos que se copiarán con el módulo copy.
-
templates: archivos de plantilla Jinja.
-
tasks: lista de instrucciones que se van a ejecutar (en el archivo main.yml).
-
handlers: igual que para las instrucciones handlers (archivo main.yml).
-
vars: archivo...
Instalación de MediaWiki
Como se ha visto anteriormente, tiene a su disposición un rol para la instalación de Apache. Verá cómo utilizarlo y cómo completarlo.
1. Filtros Jinja e instalación de Apache
Lo primero, usted alimentará un archivo llamadowiki.yml en el que declarará las máquinas para la instalación del wiki. Añadirá las máquinas apache1 y mysql1 respectivamente en los grupos apache y mysql.
He aquí el contenido de este archivo:
apache:
hosts:
apache1: {}
mysql:
hosts:
mysql1: {}
Ahora que ha declarado las diferentes máquinas y que las ha clasificado en los grupos ad hoc, podrá empezar el nuevo playbook de instalación de Apache. Este último se llamará install-apache.yml y solamente lanzará el rol genérico apache. He aquí el contenido del archivo:
- name: "Apache installation"
hosts: apache
roles:
- role: "apache"
Hay un pequeño problema: el intérprete de PHP para instalar MediaWiki. El intérprete de PHP se instala con el paquete php. En este caso, necesitará también php-mysql y php-xml.
En lugar de crear un nuevo rol para la instalación de PHP, simplemente añadirá una tarea condicionada al valor de la variable php_install.
He aquí el extracto del código que debería permitir esta operación:
- name: "install php packages"
yum:
name: "php,php-mysql,php-xml,php-mbstring,php-mcrypt,php-gd,php-intl"
state: "present"
when: php_install
# We need to restart apache
notify: [ "apache restart" ]
Ejecute esta operación usando las opciones siguientes:
-
la opción -i seguida del nombre del inventario;
-
el nombre del playbook install-apache.yml;
-
la opción php_install (-e php_install=yes).
Es como si utilizara el comando siguiente:
$ ansible-playbook -i wiki.yml install-apache.yml \
-e php_install=yes
Desgraciadamente, Ansible debería mostrarle el error siguiente:
The conditional check 'php_install' failed. The error was: error
while evaluating conditional (php_install):...
Finalización de la instalación de MediaWiki
Antes de seguir descubriendo Ansible, va a tener que volver a la instalación de MediaWiki. Alguno detalles no se han abordado y ahora tendrán su importancia.
1. Reentrada y script shell
Punto importante: no se ha comprobado la reentrada del playbook.
Para ello, vuelva a iniciar la instalación del wiki:
$ ansible-playbook -i wiki.yml install-mediawiki.yml
Desafortunadamente, hay algo que no funciona (extracto):
PLAY [MediaWiki apache configuration] ***************************
TASK [mediawiki/configuration : mediawiki directory] ************
ok: [apache1]
TASK [mediawiki/configuration : uncompress mediawiki archive] ***
ok: [apache1]
TASK [mediawiki/configuration : mediawiki configuration] ********
failed: [apache1] (item=) => {"changed": true, "cmd": ["php",
"install.php", [...]Se ha detectado un archivo LocalSettings.php.
Para actualizar la instalación, vuelva a ejecutar
update.php [...]
El instalador PHP le indica que no puede volver a ejecutar la instalación ya que existe un archivo llamado LocalSettings.php. Este archivo indica que MediaWiki ya ha sido instalado (se trata del archivo de instalación del sitio wiki). Aquí, el script le propone ejecutar update.php en su lugar.
Cuando encuentre este tipo de error, se puede hablar de un problema...