Diferències
Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
info:cursos:udemy:ansible:playbooks [07/09/2018 05:06] – [2.17 Include y Roles] mate | info:cursos:udemy:ansible:playbooks [19/09/2018 00:54] (actual) – [2.11 introducción Playbooks] mate | ||
---|---|---|---|
Línia 16: | Línia 16: | ||
* cada guión es un playbook, puede haber varios en un fichero | * cada guión es un playbook, puede haber varios en un fichero | ||
* **name** es opcional, pero recomendado | * **name** es opcional, pero recomendado | ||
- | * '' | + | * '' |
== 2.12 Esenciales | == 2.12 Esenciales | ||
* hosts: lista de servidores a administrar (grupos o servidores) | * hosts: lista de servidores a administrar (grupos o servidores) | ||
- | * si se quieren separar, usar **:** | + | * si se quieren separar, usar **%%:%%** |
* se puede usar **&** para que estén en 2 grupos a la vez | * se puede usar **&** para que estén en 2 grupos a la vez | ||
* se puede usar **!** | * se puede usar **!** | ||
+ | |||
<code yaml> | <code yaml> | ||
hosts: serweb # un grupo, afecta a todas las máquinas | hosts: serweb # un grupo, afecta a todas las máquinas | ||
Línia 53: | Línia 54: | ||
* '' | * '' | ||
* '' | * '' | ||
- | * '' | + | * '' |
* '' | * '' | ||
Línia 181: | Línia 182: | ||
service: name=nombre state=started | service: name=nombre state=started | ||
</ | </ | ||
- | |||
* inclusión de otro playbook:< | * inclusión de otro playbook:< | ||
- name: primer playbook | - name: primer playbook | ||
Línia 222: | Línia 222: | ||
</ | </ | ||
- | ==== ejemplos | + | == 2.18 Templates |
+ | * instrucciones en tamplates: | ||
+ | * expresiones: | ||
+ | * control: {% ... %} | ||
+ | * condicional:< | ||
+ | si se cumple la condición | ||
+ | {% endif %}</ | ||
+ | * bucle:< | ||
+ | {{ usuario }} | ||
+ | {% endfor %}</ | ||
+ | lista_usuarios: | ||
+ | </ | ||
+ | roles: | ||
+ | - { role: apache2, lista_usuarios: | ||
+ | </ | ||
+ | * comentarios: | ||
+ | |||
+ | == 2.19 Prioridad variables | ||
+ | en orden de menos a mas | ||
+ | - **Defaults** dentro de un **rol** | ||
+ | - variables de grupo (inventario-> | ||
+ | - variables de servidor (inventario-> | ||
+ | - **facts** del servidor | ||
+ | - variables del **playbook** (-> | ||
+ | - variables del **rol** (definidas en / | ||
+ | - variables de bloque -> variables de tareas | ||
+ | - parámetros **rol** -> include_parvars -> include_vars | ||
+ | - set_facts / registered_vars | ||
+ | - extra vars -> '' | ||
+ | |||
+ | == 2.20 Condiciones | ||
+ | se puede condicionar: | ||
+ | * ejecución de una tarea | ||
+ | * inclusión de un fichero | ||
+ | * el uso de un rol | ||
+ | |||
+ | usando la expresión '' | ||
<code yaml> | <code yaml> | ||
+ | - name: instalar apache2 | ||
+ | apt: name=apache2 state=latest | ||
+ | when: ansible_distribution == " | ||
</ | </ | ||
<code yaml> | <code yaml> | ||
+ | - name: instalar apache2 | ||
+ | apt: name=apache2 state=latest | ||
+ | when: ansible_distribution == " | ||
</ | </ | ||
- | == 2.18 Templates | ||
- | == 2.19 Prioridad variables | + | <code yaml; |
- | + | - name: Instalar apache2 | |
- | == 2.20 Condiciones | + | include: instalar-apache2.yml |
+ | when: ansible_distribution | ||
+ | |||
+ | - name: Instalar httpd | ||
+ | include: instalar-httpd.yml | ||
+ | when: ansible_distribution | ||
+ | </ | ||
+ | <code yaml; filtrado a través de rol> | ||
+ | - { role: apache2, when: ansible_distribution == " | ||
+ | - { role: apache2, when: ansible_distribution == " | ||
+ | </ | ||
== 2.21 Bucles | == 2.21 Bucles | ||
+ | ya vimos como usarlo en las plantillas () | ||
+ | ahora en tareas (palabra clave): '' | ||
+ | |||
+ | <code yaml; listas> | ||
+ | - name: Instalar soft necesario | ||
+ | apt: name={{ item }} state=latest | ||
+ | with_items: | ||
+ | - mariadb | ||
+ | - php5 | ||
+ | - phpmyadmin | ||
+ | </ | ||
+ | |||
+ | <code yaml; diccionarios> | ||
+ | - name: Crear usuarios | ||
+ | user: name={{ item.nombre }} state=present groups={{ item.grupo }} | ||
+ | with_items: | ||
+ | - {nombre: usuario1, grupo: www-data} | ||
+ | - {nombre: usuario2, grupo: www-data} | ||
+ | </ | ||
+ | |||
+ | <code yaml; con variables (en roles/< | ||
+ | - name: Instalar paquetes | ||
+ | apt: {{ item }} | ||
+ | with_items: "{{ lista_paquetes }}" | ||
+ | - name: Crar usuarios | ||
+ | user: {{ item }} | ||
+ | with_items: "{{ dic_usuarios }}" | ||
+ | </ | ||
+ | <code yaml; variables en main.yml> | ||
+ | lista_paquetes: | ||
+ | dic_usuarios: | ||
+ | - {nombre: " | ||
+ | - {nombre: " | ||
+ | </ | ||
== 2.22 Register | == 2.22 Register | ||
+ | '' | ||
+ | |||
+ | <code yaml> | ||
+ | - name: ejecutar comando | ||
+ | command: uptime | ||
+ | register: salida_uptime | ||
+ | | ||
+ | - name: mostrar uptime | ||
+ | debug: var=salida[.stdout] | ||
+ | </ | ||
+ | |||
+ | los valores devueltos son: | ||
+ | * changed | ||
+ | * failed | ||
+ | * skipped | ||
+ | * rc | ||
+ | * == 0 -> OK | ||
+ | * != 0 -> KO | ||
+ | * stdout / stderr / stdout_lines / stderr_lines | ||
+ | * en lines se podría rehusar como bucle | ||
+ | y se pueden usar esos estados para filtrar la ejecución de otras tareas | ||
+ | |||
+ | <code yaml; solo ejecutará la segunda tarea si ha habído un changed en la primera> | ||
+ | - name: copiar fichero index.html | ||
+ | template: src=index.html.j2 dest=/ | ||
+ | register: out_copia | ||
+ | | ||
+ | - name: mostrar contenido | ||
+ | command: cat / | ||
+ | register: out_salida | ||
+ | when: out_copia|changed | ||
+ | | ||
+ | - debug: var=out_copia.stdout | ||
+ | when: out_copia|changed | ||
+ | | ||
+ | </ | ||
== 2.23 Ignore Errors | == 2.23 Ignore Errors | ||
+ | las tareas erróneas paran el playbook, usando '' | ||
+ | |||
+ | <code yaml> | ||
+ | - name: comprobar si fichero existe | ||
+ | command: ls / | ||
+ | registar: existe | ||
+ | ignore_errors = true | ||
+ | | ||
+ | - name: mostrar errores | ||
+ | debug: var=existe.stderr_lines | ||
+ | | ||
+ | </ | ||
+ | |||
+ | se puede usar a nivel de tarea o de playbook <- CUIDADO! todos los errores serán ignorados | ||
+ | |||
+ | se pueden usar condicionales '' | ||
+ | <code yaml> | ||
+ | - name: mostrar salida | ||
+ | debug: var=existe.stdout_lines | ||
+ | when: not salida|failed | ||
+ | [ when: salida|failed != False ] # expresión equivalente | ||
+ | | ||
+ | - name: mostrar errores | ||
+ | debug: var=existe.stderr_lines | ||
+ | when: salida|failed | ||
+ | </ | ||
== 2.24 Failed When | == 2.24 Failed When | ||
+ | '' | ||
+ | |||
+ | un comando es marcado como erróneo si su **rc** (return code) es != 0 -> '' | ||
+ | |||
+ | <code yaml; siempre retornará changed> | ||
+ | - name: ejecutar comando | ||
+ | command: ip a | ||
+ | </ | ||
+ | |||
+ | <code yaml; da error si no existe la interfaz eth2> | ||
+ | - name: ejecutar comando | ||
+ | command: ip a | ||
+ | register: salida | ||
+ | failed_when: | ||
+ | </ | ||
+ | |||
+ | <code yaml; no la marca como cambiada> | ||
+ | - name: no marcar nunca como cambiado | ||
+ | command: uptime | ||
+ | changed_when: | ||
+ | </ | ||
+ | se pueden combinar en la misma tarea juntas | ||