info:cursos:udemy:ansible:modulos:utilidades

utilidades

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)

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

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

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

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

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

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"

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

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

  • prompt = «texto a mostrar»
  • minutes = minutos
  • seconds = segundos

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']

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"

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

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

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]]

  • 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

  • info/cursos/udemy/ansible/modulos/utilidades.txt
  • Darrera modificació: 25/09/2018 01:59
  • per mate