Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
info:cursos:udemy:ansible:playbooks [07/09/2018 05:18] – [2.18 Templates] mateinfo: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
-  * ''ansible-play [-i inventario] [ociones] playbook.yml''+  * ''ansible-playbook [-i inventario] [ociones] playbook.yml''
  
 == 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:
     * ''--step'' : confirmar cada una de las tareas, cada uno de los playbooks     * ''--step'' : confirmar cada una de las tareas, cada uno de los playbooks
     * ''--start-at-task=<tarea>'' : permite saltarse tareas, le indicamos a partir de cual     * ''--start-at-task=<tarea>'' : permite saltarse tareas, le indicamos a partir de cual
-    * ''--forks|[-f]=#'' : número de tareas en paralelo a ejecutar (por defecto, 5)+    * ''--forks|[-f]%%=#%%'' : número de tareas en paralelo a ejecutar (por defecto, 5)
     * ''-v | -vv | -vvv'' : más verbosidad     * ''-v | -vv | -vvv'' : más verbosidad
  
Línia 239: Línia 240:
  
 == 2.19 Prioridad variables == 2.19 Prioridad variables
 +en orden de menos a mas
 +  - **Defaults** dentro de un **rol**
 +  - variables de grupo (inventario->group_vars/all->group_vars/<grupo>)
 +  - variables de servidor (inventario->host_vars/<servidor>)
 +  - **facts** del servidor
 +  - variables del **playbook** (->vars_prompt->vars_files)
 +  - variables del **rol** (definidas en /roles/<rol>/vars/main.yml)
 +  - variables de bloque -> variables de tareas
 +  - parámetros **rol** -> include_parvars -> include_vars
 +  - set_facts / registered_vars
 +  - extra vars -> ''-e''
  
 == 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 ''when''
 +
 +<code yaml>
 +- name: instalar apache2
 +  apt: name=apache2 state=latest
 +  when: ansible_distribution == "Debian"
 +</code>
 +
 +<code yaml>
 +- name: instalar apache2
 +  apt: name=apache2 state=latest
 +  when: ansible_distribution == "Debian" or ansible_distribution == "Ubuntu"
 +</code>
 +
 +<code yaml;inclusión archivo según versión>
 +- name: Instalar apache2
 +  include: instalar-apache2.yml
 +  when: ansible_distribution == "Debian" or ansible_distribution == "Ubuntu"
 +  
 +- name: Instalar httpd
 +  include: instalar-httpd.yml
 +  when: ansible_distribution == "CentOS"
 +</code>
 +
 +<code yaml; filtrado a través de rol>
 +- { role: apache2, when: ansible_distribution == "Debian" or ansible_distribution == "Ubuntu" }
 +- { role: apache2, when: ansible_distribution == "CentOS" }
 +</code>
 == 2.21 Bucles == 2.21 Bucles
 +ya vimos como usarlo en las plantillas ()
  
 +ahora en tareas (palabra clave): ''with_items''
 +
 +<code yaml; listas>
 +- name: Instalar soft necesario
 +  apt: name={{ item }} state=latest
 +  with_items:
 +    - mariadb
 +    - php5
 +    - phpmyadmin
 +</code>
 +
 +<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>
 +
 +<code yaml; con variables (en roles/<rol>/defaults/main.yml)>
 +- name: Instalar paquetes
 +  apt: {{ item }}
 +  with_items: "{{ lista_paquetes }}"
 +- name: Crar usuarios
 +  user: {{ item }}
 +  with_items: "{{ dic_usuarios }}"
 +</code>
 +<code yaml; variables en main.yml>
 +lista_paquetes: ["php5","phpmyadmin","mysql-server"]
 +dic_usuarios:
 +  - {nombre: "usuario1", grupo: "www-data"}
 +  - {nombre: "usuario2", grupo: "www-data"}
 +</code>
 == 2.22 Register == 2.22 Register
 +''register'' nos permite guardar en una varibale el resultado de la acción realizada por un módulo en una tarea
 +
 +<code yaml>
 +- name: ejecutar comando
 +  command: uptime
 +  register: salida_uptime
 +  
 +- name: mostrar uptime
 +  debug: var=salida[.stdout]
 +</code>
 +
 +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=/var/www/html/index.html
 +  register: out_copia
 +  
 +- name: mostrar contenido
 +  command: cat /var/www/html/index.html
 +  register: out_salida
 +  when: out_copia|changed
 +  
 +- debug: var=out_copia.stdout
 +  when: out_copia|changed
 +  
 +</code>
  
 == 2.23 Ignore Errors == 2.23 Ignore Errors
 +las tareas erróneas paran el playbook, usando ''ignore_errrors = True'' evitamos que la tarea errónea pare la ejecución
 +
 +<code yaml>
 +- name: comprobar si fichero existe
 +  command: ls /noexiste.conf
 +  registar: existe
 +  ignore_errors = true
 +  
 +- name: mostrar errores
 +  debug: var=existe.stderr_lines
 +  
 +</code>
 +
 +se puede usar a nivel de tarea o de playbook <- CUIDADO! todos los errores serán ignorados
 +
 +se pueden usar condicionales ''not <var_register>|failed'' para realizar tareas complementarias en caso de error 
 +<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
 +</code>
  
 == 2.24 Failed When == 2.24 Failed When
 +''failed_when'' o ''changed_when'' permiten especificar las condiciones para marcar una tarea como fallida o cambiada, respectivamente
 +
 +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>
 +
 +<code yaml; da error si no existe la interfaz eth2>
 +- name: ejecutar comando
 +  command: ip a
 +  register: salida
 +  failed_when: "'eth2' not in salida.stdout"
 +</code>
 +
 +<code yaml; no la marca como cambiada>
 +- name: no marcar nunca como cambiado
 +  command: uptime
 +  changed_when: False
 +</code>
  
 +se pueden combinar en la misma tarea juntas
  
  • info/cursos/udemy/ansible/playbooks.1536322738.txt.gz
  • Darrera modificació: 07/09/2018 05:18
  • per mate