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:
172.17.0.3 | SUCCESS=> {
“changed”: false,
“ping”: “pong”
}
172.17.0.3 se define en el archivo / etc / ansible / hosts como:
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:
– apache was created successfully
El comando debería crear automáticamente la siguiente estructura:
|— 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.
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:
|— 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
172.17.0.3 ansible_user=zakh
Podemos verificar si nuestros archivos YAML están bien formateados usando el siguiente comando:
playbook: site.yml
En lugar de “playbook: site.yml”, debería ver advertencias si hay algún problema.
Ahora ejecute el siguiente comando:
–Ask-Become-pass es para el acceso SUDO. Un resultado exitoso debería verse así:
****************************************************************************************
****************************************************************************************
****************************************************************************************
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
- http://docs.ansible.com/ansible/latest/playbooks_reuse_roles.html
- http://docs.ansible.com/ansible/latest/playbooks_variables.html
- https://galaxy.ansible.com/