utilidades
3:32 Comando Utilidades (I)
ejecución de comandos en el nodo remoto
- command
- expect : ejecuta un comando y responde a la introducción de dataos
- raw : envía comandos sin filtrar por SSH
- script : transfiere y ejecuta un script
- shell : permite uso de && || » (command no lo permite)
command
https://docs.ansible.com/ansible/latest/modules/command_module.html#command-module
- chdir : cambiar directorio ejecución
- creates : si existe el fichero, NO ejecuta
- executable : ruta binario
- removes : si no existe el fichero, NO ejecuta
- 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
- requerido
- command = comando
- response = respuestas
- opcional
- chdir
- creates
- removes
- echo
- timeout
- 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
- executable = /ruta/ejecutable
- 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
- creates = /fichero/comprobar ← si existe, no ejecuta
- removes = /fichero/comprobar ← si no existe, no ejecuta
- decrypt = true / false ← vault
- 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
- chdir = /directorio
- creates = /fichero/comprobar ← si existe, no ejecuta
- removes = /fichero/comprobar ← si no existe, no ejecuta
- executable
- 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
- that : condiciones
- msg : mensaje a mostrar
- 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
- msg = «mensaje de texto»
- var= variable
- verbosity = [0-3]
- 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
- prompt = «texto a mostrar»
- minutes = minutos
- seconds = segundos
fail
generar mensaje error y salir
https://docs.ansible.com/ansible/latest/modules/fail_module.html#fail-module
- msg = «mensaje»
- 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
- obligatorio
- name
- opcional
- private = true / false
- tasks_from = main
- vars_from = main
- defaults_from = main
- allow_duplicates = true / false
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]]
- state = { present | absent | started | stopped }
- files: present/absent, puertos: started/stopped
- port = puerto
- timeout = segundos de espera a conectar si no hay respuesta
- host = servidor al que conectar
- connection_timeout =
- search_regex = cadena esperada (ya sea conexión o fichero)
- delay = segundos de espera antes de empezar a enviar peticiiones
- path = /ruta/del/fichero
- exclude_hosts
- 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