Tutorial de roles de Ansible

Comprensión de los roles de Ansible

Los roles de Ansible es una forma estructurada de agrupar tareas, controladores, vars y otras propiedades. Aumentan la reutilización. Puede compartir roles fácilmente a través de Ansible Galaxy. Si es nuevo en Ansible, primero lea el .

Creación de un servidor Apache en Ubuntu usando roles Ansible

Para este proyecto, necesitará dos máquinas Ubuntu. El primero será su controlador Ansible y el segundo será su máquina de destino para la instalación de Apache. Antes de comenzar, debe asegurarse de que puede conectarse a su máquina de destino desde su controlador a través de Ansible.

Puede usar el siguiente comando para ver si todo está funcionando:

# ansible all -m ping
172.17.0.3 | SUCCESS=&gt {
“changed”: false,
“ping”: “pong”
}

172.17.0.3 se define en el archivo / etc / ansible / hosts como:

[myserver1]
172.17.0.3 ansible_user=zakh

Roles de Ansible

En su / etc / ansible, debería haber una carpeta de roles. Vaya a la carpeta y emita el siguiente comando:

# ansible-galaxy init apache –offline
– apache was created successfully

El comando debería crear automáticamente la siguiente estructura:

`— apache
|— README.md
|— defaults
| `— main.yml
|— files
|— handlers
| `— main.yml
|— meta
| `— main.yml
|— tasks
| `— main.yml
|— templates
|— tests
| |— inventory
| `— test.yml
`— vars
`— main.yml

Estos son los componentes principales que usaremos en esta lección:

  • tasks / main.yml: es el punto de partida de las tareas del rol. Puede usar main.yml para apuntar a otros archivos de tareas.
  • handlers / main.yml: contiene los controladores.
  • files: puede conservar los archivos y recursos que desea implementar aquí.

Las otras carpetas (no utilizadas en este tutorial):

  • defaults / main.yml: contiene las variables predeterminadas para el rol.
  • meta / main.yml: contiene la información de metadatos del rol.
  • templates – Es una carpeta para colocar plantillas Jinja2.
  • prueba: se puede utilizar para configurar el inventario y los casos de prueba.
  • vars / main.yml: se utiliza para la configuración de variables.

Comencemos con las tareas / main.yml. Pega el siguiente código dentro:


# tasks file for apache
– include_tasks: install.yml
– include_tasks: configure.yml
– include_tasks: service.yml

Estamos dividiendo las tareas en porciones más pequeñas y apuntando a otros archivos YAML. Entonces necesitamos crear esos archivos.

install.yml

Dentro de / etc / ansible / roles / apache / tasks, creemos install.yml con el siguiente código:


# installing apache2
– name: installing apache2 server
apt:
name: apache2
state: present

Está instalando apache2 en el servidor Apache. Está usando apt porque nuestra máquina de destino está ejecutando Ubuntu.

archivos, configure.yml y handlers / main.yml

Configuremos algunos archivos y recursos en la carpeta / etc / ansible / roles / apache / files /. Primero, puede obtener un archivo apache2.conf estándar, hacer sus cambios personalizados y colocarlo en la carpeta. En nuestro caso, solo vamos a agregar el comentario “# Configuración personalizada” en la parte superior. Durante el proceso de ejecución, ansible tomará este archivo apache2.conf y lo reemplazará en la máquina de destino.

Luego crearemos un index.html en la carpeta / etc / ansible / roles / apache / files / con el siguiente código.

&lthead&gt
&lttitle&gtLinuxHint Demo&lt/title&gt
&lt/head&gt
&ltbody&gt
&lth1&gt
Welcome to Earth!
&lt/h1&gt
&ltbr/&gt&ltbr/&gt&ltbr/&gt
&ltp&gt
&ltimg src=“Blue_marble_2015.jpg” alt=“Earth” width=“500” height=“500”/&gt
&lt/p&gt
&lt/body&gt
&lt/html&gt

Observe que hay un archivo de imagen en HTML. Vamos a descargar esta imagen desde aquí y guardarla en la carpeta / etc / ansible / roles / apache / files /.

Ahora volvamos a la carpeta / etc / ansible / roles / apache / tasks y creemos configure.yml con el siguiente código:


# Configuring apache2
– name: apache2 configuration file
copy: src=apache2.conf dest=/etc/apache2/apache2.conf
notify: restart apache service

– name: create the webpage index.html
copy: src=index.html dest=/var/www/html/index.html

– name: copy the image resource
copy: src=Blue_marble_2015.jpg dest=/var/www/html/Blue_marble_2015.jpg

El código anterior hace frente a los recursos que guardamos en la carpeta de archivos en nuestro servidor de destino. Estamos usando configure.yml para configurar nuestras configuraciones de Apache.

Observe el comando “notificar”. Esto requiere un manejador. Entonces entramos en /etc/ansible/roles/apache/handlers/main.yml e ingresamos el siguiente código:


# resarting server
– name: restart apache service
service: name=apache2 state=restarted

Este código reiniciará el servidor Apache.

Service.yml

De nuevo, vuelva a la carpeta / etc / ansible / roles / apache / tasks / y cree el archivo service.yml con el siguiente código:


# tasks file for apache
– name: start apache2 server
service: name=apache2 state=started

Esto iniciará el servidor Apache. Hemos terminado con la definición del rol de apache. Nuestra carpeta de apache dentro de / etc / ansible / roles debería verse así ahora:

apache/
|— README.md
|— defaults
|   `— main.yml
|— files
|   |— Blue_marble_2015.jpg
|   |— apache2.conf
|   `— index.html
|— handlers
|   `— main.yml
|— meta
|   `— main.yml
|— tasks
|   |— configure.yml
|   |— install.yml
|   |— main.yml
|   `— service.yml
|— templates
|— tests
|   |— inventory
|   `— test.yml
`— vars

Usando el rol de Apache con site.yml

Ahora en la carpeta / etc / ansible defina el siguiente site.yml:


– hosts: myserver1
become: true
roles:
– apache

Recuerde que definimos myserver1 dentro del archivo / etc / ansible / hosts como

[myserver1]
172.17.0.3 ansible_user=zakh

Podemos verificar si nuestros archivos YAML están bien formateados usando el siguiente comando:

# ansible-playbook site.yml –syntax-check
playbook: site.yml

En lugar de “playbook: site.yml”, debería ver advertencias si hay algún problema.

Ahora ejecute el siguiente comando:

# ansible-playbook –ask-become-pass site.yml

–Ask-Become-pass es para el acceso SUDO. Un resultado exitoso debería verse así:

PLAY [myserver1]
****************************************************************************************
****************************************************************************************
****************************************************************************************

TASK [Gathering Facts]
*****************************************************************************************
*****************************************************************************************
*****************************************************************************************
ok: [172.17.0.3]

TASK [apache : include_tasks]
*****************************************************************************************
*****************************************************************************************
*****************************************************************************************
included: /etc/ansible/roles/apache/tasks/install.yml for 172.17.0.3

TASK [apache : installing apache2 server]
*****************************************************************************************
*****************************************************************************************
*****************************************************************************************
changed: [172.17.0.3]

TASK [apache : include_tasks]
******************************************************************************************
******************************************************************************************
******************************************************************************************
included: /etc/ansible/roles/apache/tasks/configure.yml for 172.17.0.3

TASK [apache : apache2 configuration file]
******************************************************************************************
******************************************************************************************
******************************************************************************************
changed: [172.17.0.3]

TASK [apache : create the webpage index.html]
******************************************************************************************
******************************************************************************************
*************************************************************************************
changed: [172.17.0.3]

TASK [apache : copy the image resource]
*****************************************************************************************
*****************************************************************************************
*****************************************************************************************
changed: [172.17.0.3]

TASK [apache : include_tasks]
*****************************************************************************************
*****************************************************************************************
*****************************************************************************************
included: /etc/ansible/roles/apache/tasks/service.yml for 172.17.0.3

TASK [apache : start apache2 server]
******************************************************************************************
******************************************************************************************
****************************************************************************************
changed: [172.17.0.3]

RUNNING HANDLER [apache : restart apache service]
*******************************************************************************************
*******************************************************************************************
*************************************************************************
changed: [172.17.0.3]

PLAY RECAP
*******************************************************************************************
*******************************************************************************************
******************************************************************************************
172.17.0.3                 : ok=10   changed=6    unreachable=0    failed=0

Si tiene el puerto 80 abierto en su servidor de destino, entonces debería poder ir a http: // localhost y ver algo como esto:

Si desea iniciar otro servidor, puede cambiar su site.yml para que apunte a un host diferente:


– hosts: myserver2
become: true
roles:
– apache

Puede reutilizar fácilmente el rol que creó.

Estudio adicional

Archivo de imagen:

Leave a Comment

Your email address will not be published. Required fields are marked *

Hazlo Linux