¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Ansible
  3. Introducción a la noción de rol
Extrait - Ansible Administre la configuración de sus servidores y el despliegue de sus aplicaciones
Extractos del libro
Ansible Administre la configuración de sus servidores y el despliegue de sus aplicaciones Volver a la página de compra del libro

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...