Taula de continguts

utilidades

3:32 Comando Utilidades (I)

ejecución de comandos en el nodo remoto

command

https://docs.ansible.com/ansible/latest/modules/command_module.html#command-module

- name: obtener uname
  command: uname -a
  register: salida_uname
- name: crear base de datos si no existe
  command: /sbin/createdb.sh
  args:
    chdir: /var/lib/mysql
    creates: /basededatos/existe
- name: ejecutar si existe
  command uname -a removes=/tmp/hadeexistir

expect

https://docs.ansible.com/ansible/latest/modules/expect_module.html#expect-module

- name: instalar pexpect, necesario en el nodo remoto
  yum: name=pexpect state=latest
- name: cambiar contraseña usuario
  expect:
    command: passwd usuario
    responses: (?i)password: "SuperSecreta"

instalar versión específica (en módulo Phyton): pip install pexpect==3.3

3:33 Comando Utilidades (II)

raw

usar en casos muy concretos (dispositivos sin Phyton o versiones viejas), viaja sin encriptar
https://docs.ansible.com/ansible/latest/modules/raw_module.html#raw-module

- name: actualizar paquetes e instalar uno
  raw: apt-get update && apt-get install vim

script

copia el script en el nodo y se ejecuta allí
https://docs.ansible.com/ansible/latest/modules/script_module.html#script-module

- name: copia y ejecuta el script
  script: /mi/fichero/local.sh argumentos

shell

ejecuta comandos, pero permite (command no lo hace) el uso de tuberías, redirecciones, etc…
https://docs.ansible.com/ansible/latest/modules/shell_module.html#shell-module

- name: obtener uname
  shell: uname -a | tee fichero.log
  register: salida_uname
- name obtener uname 2
  shell: uname -a | tee fichero.log
  args:
    executable: /bin/bash
    chdir: /tmp

assert

asegurarse que se cumplen ciertas condiciones
https://docs.ansible.com/ansible/latest/modules/assert_module.html#assert-module

- vars:
  - numero: 50
- assert:
    that:
      - numero <= 100
      - numero > 0
    msg: "Número ha de estar entre 0 y 100"

debug

muestra un texto personalizado o el valor de una variable
https://docs.ansible.com/ansible/latest/modules/debug_module.html#debug-module

- debug: msg="Hostname {{ ansible_hostname }}"
- debug: var=salida # muestra todo el array, se puede especificar cualquiera de ellos

pause

https://docs.ansible.com/ansible/latest/modules/pause_module.html#pause-module

fail

generar mensaje error y salir
https://docs.ansible.com/ansible/latest/modules/fail_module.html#fail-module

- fail: msg="Dato incorrecto"
  when: valor not in ['y','Y']

3:34 Comando Utilidades (III)

include

incluir otro playbook / tareas
https://docs.ansible.com/ansible/latest/modules/include_module.html#include-module

/roles/%%<rol
%%/tasks/main.yml>
include: name="configura.yml"
include: name="install.yml"
include: name="post-install.yml"

include_role

incluir rol
https://docs.ansible.com/ansible/latest/modules/include_role_module.html#include-role-module

include_vars

incluir variables desde un fichero, en lugar de tener una sección vars:
https://docs.ansible.com/ansible/latest/modules/include_vars_module.html#include-vars-module

playbook
---
- hosts: localhost
- vars:
  - numero: 10
- tasks:
  - include_vars: variables.yml
  - include_rol: name=httpd # en directorio local o en /etc/ansible/roles o en /root/roles
variables.yml
otronumero: 20

self_fact

establece un fact
https://docs.ansible.com/ansible/latest/modules/set_fact_module.html#set-fact-module

permite modificar textos / variables

- tasks:
  - set_fact: nombre="{{ ansible_hostname }}"
  - debug: var=nombre
  - set_fact: nombre2="{{ ansible_hostname | upper }}"

wait_for

espera que se cumpla una condición para continuar (conexión SSH o si un fichero existe, por ejemplo)
Enllaç externhttps://docs.ansible.com/ansible/latest/modules/wait_for_module.html#wait-for-module]]

- hosts: localhost
  tasks:
    - name: esperando al puerto 8080
      wait_for: port=8080 delay=2
    - name: esperando a que exista el fichero
      wait_for: path=/fichero/esperado
    - name: esperando a que no exista el fichero
      wait_for: path=/fichero/espeado state=absent
- name: esperando a server
  wait_for:
    port: 22
    host: "{{ ansible_hostname ]]"
    search_regex: OpenSSH
    delay: 10
    delegate_to: localhost # ???

nc -l 8080