ANSIBLE - USO DE ROLES

En esta sesión explicamos el uso de roles en Ansible y su estructura

Cargando video...

NOTA: Solo puedes ver una versión limitada del video a baja resolución, si quieres ver la versión completa por favor regístrate y obtén alguno de nuestros planes!

Descripción del Vídeo

Como una buena práctica se creará un archivo que contendrá un blueprint completo de la infraestructura que se desea, sin embargo al momento surgen dos (2) interrogantes:
¿Cómo hacerlo sin perder el control dentro de tanto código?
¿Cómo hacerlo no solo legible sino capaz de compartirlo con otros?

Para ello se sugiere organizar el código de la manera antigua:
Se crearán los roles para cada aplicación que se necesite configurar
Se instalará lo que se necesite 
A medida que sea necesario se irán agregando roles.

De manera que la estructura deberá quedar de la siguiente forma:

 ── roles
│   └── nginx
│       ├── files
│       │   ├── nginx.conf.debian
│       │   └── nginx.conf.redhat
│       ├── handlers
│       │   └── main.yml
│       ├── meta
│       │   └── main.yml
│       ├── tasks
│       │   ├── configure.yml
│       │   ├── install.yml
│       │   ├── main.yml
│       │   └── service.yml
│       ├── templates
│       │   ├── index.j2
│       │   ├── main.yml
│       │   └── nginx.conf
│       └── vars
├── site.yml
└── www.yml


De acuerdo con lo antes expuesto el ejercicio permitirá realizar la siguiente acción, siguiendo con la  estructura del mapa de funcionamiento de ansible:

Instalar un WebServer
Instalar NGINX a través del uso de la paquetería del sistema existente (apt)

Modificar el archivo de configuración (file)
Configurar el nginx.conf, a través del módulo de archivos
 
Reiniciar el servicio del servidor web (service)
Reiniciar el servicio de Nginx, a través de los módulos del sistema

Copiar un archivo html (file)
Colocar una página Web, a través del módulo de archivos


Para ello el archivo site.yml deberá contener la siguiente información:
---
# site.yml : Este es el  del  playbook
- include: www.yml

Creando el www.yml
---
- hosts: all
  pre_tasks:
     - shell: echo 'NGINX":"  Comenzando a  configurar el web server..'
  roles:
     - nginx
  post_tasks:
     - shell: echo 'NGINX":" Terminando de configurar el  nginx web server...'

Ahora se creará el despliegue de directorios que permitirá tener una mejora lectura del proyecto

$ mkdir roles/nginx
$ cd roles/nginx
$ mkdir tasks meta files
$ cd tasks

roles/nginx/tasks/

 Posteriormente se crea el service.yml 

---
 - name: start nginx service
   service: name=nginx state=started

Ahora se actualiza el archivo main.yml con los playbook ya construidos y se colocan antes de service.yml:

--- l
 - include: install.yml
 - include: configure.yml
 - include: service.yml


Ahora se crea el archivo de configuración “configure.yml”: 

---
 - name: create default site configurations
   copy: src=nginx.conf.redhat dest=/etc/nginx/nginx.conf mode=0644
   when: ansible_os_family == "RedHat"     
   notify: 
      - restart nginx

 - name: create default site configurations 
   copy: src=nginx.conf.debian dest=/etc/nginx/nginx.conf mode=0644
   when: ansible_os_family == "Debian"     
   notify: 
      - restart nginx

 - name: create home page for default site
   template: src=index.j2 dest=/usr/share/nginx/html/index.html


$> cd roles/nginx/files

Se modifican los  “nginx.conf[.debian | .redhat]” , son producto de instalaciones limpias previas:

server {
  listen 80;
  server_name localhost;
  location / {
    root /usr/share/nginx/html;
    index index.html;
   }
}



roles/nginx/handlers

Seguidamente se configura el handler en  main.yml:
---
- name: restart nginx service
  service: name=nginx state=restarted
roles/nginx/meta


Ahora se configura el  main.yml:
---
dependencies: 
    - role: nginx
roles/nginx/templates

Posteriormente se configura el index.j2:
<html>
  <body>
    <h1> Desplagando Ansible en {{ansible_hostname }} </h1>
    <p> Bienvenido al Primer Portal Instalado con Ansible en {{ ansible_distribution }}</p>
  </body>
</html>

Posteriormente se configura el main.yml:
---
  - name: configure nginx
    template: src=index.j2 dest=/usr/share/nginx/html/index.html

También se pudo convertir el archivo “nginx.conf” en un template, que solo modificara dependiendo del sistema operativo, en este solo se modificaría la línea referente al usuario y se reemplazaría con que se muestra a continuación:

{% if ansible_os_family == "RedHat" %}
user nginx ;
{% elif ansible_os_family == "Debian" %}
user www-data ;
{% elfi %}

Rating

Global

Ver video en playlist

comments powered by Disqus