Herramientas de usuario

Herramientas del sitio


informatica:ciberseguridad:cursos:curso_ansible_automatizacion_it:conceptos_avanzados

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
informatica:ciberseguridad:cursos:curso_ansible_automatizacion_it:conceptos_avanzados [2023/05/08 20:31] tempwininformatica:ciberseguridad:cursos:curso_ansible_automatizacion_it:conceptos_avanzados [2023/05/08 21:32] (actual) – [Templates I] tempwin
Línea 630: Línea 630:
 </code> </code>
  
-Lo ejecutamos añadiendo la opción ''%%--tags'':+Lo ejecutamos añadiendo la opción ''%%--%%tags'':
  
 <code> <code>
Línea 721: Línea 721:
  
 <WRAP center round info 60%> <WRAP center round info 60%>
-Se puede probar jinga online por ejemplo desde este [[http://jinja.quantprogramming.com/|Jinja2 live parser]]+Se puede probar jinga online por ejemplo desde este [[http://jinja.quantprogramming.com/|Jinja2 live parser]] o [[https://j2live.ttl255.com/|este otro]]
 </WRAP> </WRAP>
  
Línea 1492: Línea 1492:
 Si vamos al equipo/s destino, se habrían creado los usuarios ''user1'' y ''user2'' (en Linux podemos mirar el contenido del fichero ''/etc/passwd''. Si vamos al equipo/s destino, se habrían creado los usuarios ''user1'' y ''user2'' (en Linux podemos mirar el contenido del fichero ''/etc/passwd''.
  
 +Si quisiéramos eliminar los usarios, cambiaríamos el valor de ''state'' a ''absent'':
 +
 +<code yaml>
 +(...)
 +  - name: crear usuarios
 +    user:
 +      name: "{{ item.name }}"
 +      state: absent
 +      groups: "{{ item.groups }}"
 +    loop:
 +      - { name: 'user1', groups: 'sudo'}
 +      - { name: 'user2', groups: 'sudo'}
 +(...)
 +</code>
 ===== Qué son los Roles en Ansible ===== ===== Qué son los Roles en Ansible =====
  
 +Los roles permiten organizar, paquetizar y reusar nuestro código de forma más práctica. 
 +
 +Tendríamos una estructura de carpetas donde incluiremos los roles que queramos.
 +
 +  * ''site.yaml''
 +  * ''roles/''
 +    * ''common/''
 +      * ''files/'': archivos a desplegar en el equipo objetivo.
 +      * ''templates/''
 +      * ''tasks/''
 +      * ''handlers/''
 +      * ''vars/''
 +      * ''defaults/''
 +      * ''meta/'': permite incluir dependencias entre roles
 +    * ''apache/''
 +      * ''files/''
 +      * ''templates/''
 +      * ''tasks/''
 +      * ''handlers/''
 +      * ''vars/''
 +      * ''defaults/''
 ===== Creando nuestro primer Rol ===== ===== Creando nuestro primer Rol =====
 +
 +Crearemos la carpeta principal ''roles'':
 +
 +<code>
 +mkdir roles
 +</code>
 +
 +Dentro de ella, vamos a crear el rol ''nginx'', que será otra carpeta más:
 +
 +<code>
 +mkdir nginx
 +</code>
 +
 +Dentro de ''nginx'', crearemos el resto de carpetas que espera ansible:
 +
 +<code>
 +mkdir defaults files handlers tasks templates
 +</code>
 +
 +Por tanto, si nos vamos al directorio padre, tendríamos la siguiente estructura de carpetas:
 +
 +<code>
 +├── roles
 +│   └── nginx
 +│       ├── defaults
 +│       ├── files
 +│       ├── handlers
 +│       ├── tasks
 +│       └── templates
 +</code>
 +
 +Partimos del siguiente playbook:
 +<code yaml>
 +# Este es nuestro primer playbook
 +- name: primera play
 +  become: yes
 +  hosts: servidor_web
 +  tags: primera_play
 +  gather_facts: false 
 +  vars:
 +    state: present
 +  
 +  tasks:
 +
 +  - name: instalar nginx
 +    apt: name=nginx state="{{ state }}"
 +    notify: reiniciar nginx # Mismo nombre que el handler
 +    
 +  - name: crear index
 +    template:
 +      src: template_ejemplo_3.j2
 +      dest: /var/www/html/index.html
 +      mode: 0755
 +
 +  - name: copiar script
 +    copy:
 +      src: simple_script.sh
 +      dest: /tmp/simple_script.sh
 +
 +   handlers:     
 +   - name: reiniciar nginx
 +     service:
 +       name: nginx
 +       state: restarted
 +</code>
 +
 +Vamos a mover los distintos elemenos de ese playbooks a donde deben estar. Por ejemplo, las tareas irán a ''roles/nginx/tasks/main.yaml'':
 +
 +<code yaml>
 +---
 +  - name: instalar nginx
 +    apt: name=nginx state="{{ state }}"
 +    notify: reiniciar nginx # Mismo nombre que el handler
 +    
 +  - name: crear index
 +    template:
 +      src: template_ejemplo_3.j2
 +      dest: /var/www/html/index.html
 +      mode: 0755
 +
 +  - name: copiar script
 +    copy:
 +      src: simple_script.sh
 +      dest: /tmp/simple_script.sh
 +</code>
 +
 +Colocaremos ahora el template que usamos en el Playbook (''template_ejemplo_3.j2'') en ''roles/nginx/templates/''
 +
 +Hacemos lo mismo con el script ''simple_script.sh'', pero a la ruta ''roles/nginx/files''.
 +
 +Ahora es el turno de los handlers. Añadiremos un fichero ''main.yaml'' con el contenido:
 +
 +<code yaml>
 +---
 +  - name: reiniciar nginx
 +    service:
 +      name: nginx
 +      state: restarted
 +</code>
 +
 +Nos quedan las variables, crearemos el fichero ''roles/nginx/defaults/main.yaml'':
 +
 +<code yaml>
 +---
 +state: present
 +</code>
 +
 +Nos falta incluir este nuevo rol en algún sitio. En la carpeta raíz, creamos uno llamado, por ejemplo, ''nginx_rol.yaml'':
 +
 +<code yaml>
 +---
 +  - hosts: web # Solo aplicamos a uno de los hosts
 +    become: yes
 +    roles:
 +      - nginx # Rol que vamos a incluir
 +</code>
 +
 +Algo tarde, pero no es mal momento para comentar que podemos crear un fichero de configuración de Ansible: ''ansible.cfg'':
 +
 +<code>
 +[defaults]
 +inventory = /home/pepito/inventario
 +remote_user = ansible
 +private_key_file = /home/pepito/.ssh/id_rsa
 +</code>
 +
 +Ahora es más cómodo lanzar el playbook de la siguiente manera:
 +
 +<code>
 +ansible-playbook nginx_role.yaml -vv
 +</code>
  
 ===== Recursos ===== ===== Recursos =====
informatica/ciberseguridad/cursos/curso_ansible_automatizacion_it/conceptos_avanzados.1683570714.txt.gz · Última modificación: por tempwin