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:44] – [2.19 Prioridad variables] 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 252: | Línia 253: | ||
== 2.20 Condiciones | == 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> | ||
+ | - name: instalar apache2 | ||
+ | apt: name=apache2 state=latest | ||
+ | when: ansible_distribution == " | ||
+ | </ | ||
+ | |||
+ | <code yaml> | ||
+ | - name: instalar apache2 | ||
+ | apt: name=apache2 state=latest | ||
+ | when: ansible_distribution == " | ||
+ | </ | ||
+ | |||
+ | <code yaml; | ||
+ | - name: Instalar apache2 | ||
+ | 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 | ||