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:06] – [2.17 Include y Roles] 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 181: Línia 182:
   service: name=nombre state=started   service: name=nombre state=started
 </code> </code>
- 
   * inclusión de otro playbook:<code yaml>   * inclusión de otro playbook:<code yaml>
 - name: primer playbook - name: primer playbook
Línia 222: Línia 222:
 </code> </code>
  
-==== ejemplos+== 2.18 Templates 
 +  * instrucciones en tamplates: 
 +    * expresiones: {{ variable }} 
 +    * control: {% ... %} 
 +      * condicional:<code yaml>{% if ansible_distribution == "Debian" %} 
 +si se cumple la condición 
 +{% endif %}</code> 
 +      * bucle:<code yaml>{% for usuario in lista_usuarios %} 
 +{{ usuario }} 
 +{% endfor %}</code><code yaml; roles/apache2/defaults/main.yml> 
 +lista_usuarios: ["root","alberto","www-data"
 +</code><code yaml> 
 +roles: 
 +  - { role: apache2, lista_usuarios: ["usuario1","root1"] } 
 +</code> 
 +      * comentarios: {# comentario #} 
 + 
 +== 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 
 +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> <code yaml>
 +- name: instalar apache2
 +  apt: name=apache2 state=latest
 +  when: ansible_distribution == "Debian"
 </code> </code>
  
 <code yaml> <code yaml>
 +- name: instalar apache2
 +  apt: name=apache2 state=latest
 +  when: ansible_distribution == "Debian" or ansible_distribution == "Ubuntu"
 </code> </code>
-== 2.18 Templates 
  
-== 2.19 Prioridad variables +<code yaml;inclusión archivo según versión> 
- +- name: Instalar apache2 
-== 2.20 Condiciones+  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.1536322001.txt.gz
  • Darrera modificació: 07/09/2018 05:06
  • per mate