ejecución de comandos en el nodo remoto
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
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
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
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
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
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"
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
https://docs.ansible.com/ansible/latest/modules/pause_module.html#pause-module
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']
incluir otro playbook / tareas
https://docs.ansible.com/ansible/latest/modules/include_module.html#include-module
%%/tasks/main.yml> include: name="configura.yml" include: name="install.yml" include: name="post-install.yml"
incluir rol
https://docs.ansible.com/ansible/latest/modules/include_role_module.html#include-role-module
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
--- - 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
otronumero: 20
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 }}"
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