https://github.com/jonixmobile/my_ansible

su fichero de configuración está en /etc/ansible/hosts

comandos ansible IP -m ping (-m ejecuta un módulo) ansible IP -a uptime (-a ejecuta un comanod)

para conectar a otro server generar un certificado ssh-keygen se introduce en el server a administrar ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

verificar ansible 192.168.88.103 -m ping en el caso de utilizar un usuario concreto añadir -u ansible 192.168.88.103 -u user -m ping

existe la posibilidad de ejecutar los comanods sobre todos los equipos añadidos al fichero hotsts

ansible all -m ping

para usar diferentes usuarios en cada server remoto en el fichero hosts especificar el usuario 192.168.88.103 ansible_user=root

crear un usuario en un server remoto

ansible all -m user -a “name=test state=present” [[email protected] ~]# ansible all -m user -a “name=test state=present” localhost | CHANGED => { “ansible_facts”: { “discovered_interpreter_python”: “/usr/bin/python” }, “changed”: true, “comment”: “”, “create_home”: true, “group”: 1000, “home”: “/home/test”, “name”: “test”, “shell”: “/bin/bash”, “state”: “present”, “system”: false, “uid”: 1000 } 192.168.88.103 | CHANGED => { “ansible_facts”: { “discovered_interpreter_python”: “/usr/bin/python” }, “changed”: true, “comment”: “”, “create_home”: true, “group”: 1000, “home”: “/home/test”, “name”: “test”, “shell”: “/bin/bash”, “state”: “present”, “system”: false, “uid”: 1000 }

para utilizar un usuario que tenga permitido sudo añadir –become o sólo -b ansible 192.168.88.103 -m user -a “name=test state=present” –become

INVENTARIO:

crear un grupo [produccion] 192.168.88.103 ansible_user=root [desarrollo] 192.168.88.104 ansible_user=root

y se puede crear un grupo con subgrupos [todos:children] desarrollo produccion

se puede definir variables: ejemplo para añadir –become a las ejecuciones de comando [todos:vars] ansible_become=True

en los grupos se pueden utilizar patrones, para evitar especificar una lista de servidores servernode1, servernode2, etc

servernode[1:6].nosolovirtual.com

para usar alias en vez de IPs en el fichero hosts centos1 ansible_host=192.168.88.103 ansible_user=root

[[email protected] ~]# ansible centos1 -m ping centos1 | SUCCESS => { “ansible_facts”: { “discovered_interpreter_python”: “/usr/bin/python” }, “changed”: false, “ping”: “pong” }

sobre grupos, los comandos por defecto se ejecutan en grupos de 5 servidores. especificar la opción -f para aplicar a un mayor número de servidores una ejecución simultánea

ansible -f 8 produccion -u test -a id

también se puede limitar un comando a ejecutar sobre servidores croncretos de un grupo añadiendo –limit en el fichero hosts [produccion] centos1 ansible_host=192.168.88.103 ansible_user=root centos2 ansible_host=192.168.88.104 ansible_user=root

ansible –limit centos1 produccion -a id

Módulos

módulo setup ansible –limit centos1 produccion -m setup

información de kernel, distro, memoria, etc. Ofrece una información muy detallada.

módulo copy, sirve para copiar ficheros al server remoto ansible produccion -m copy -a “src=/root/ansible/COPYING dest=/tmp/COPYING”

módulo de instalación yum/apt

ansible produccion -m yum -a “name=vim state=present”

para instalar software, state = present – instala el software state = absent – desinstala el software

muestra la lista de servers ansible produccion –list-host hosts (2): centos1 centos2

comprobación si la tarea puede ser ejecutada, sin realizar cambios en el servidor remoto: ejemplo: [[email protected] ansible]# ansible produccion -m yum -C -a “name=htop state=present” centos2 | FAILED! => { “ansible_facts”: { “discovered_interpreter_python”: “/usr/bin/python” }, “changed”: false, “msg”: “No package matching ‘htop’ found available, installed or updated”, “rc”: 126, “results”: [ “No package matching ‘htop’ found available, installed or updated” ] } centos1 | CHANGED => { “ansible_facts”: { “discovered_interpreter_python”: “/usr/bin/python” }, “changed”: true, “changes”: { “installed”: [ “htop” ] }, “results”: [] }

el server centos2 no tiene el repo epel-release, por ello no localiza el paquete htop

configuración avanzada de ansible. está en el fichero ansible.cfg a destacar se puede carmabie el número de forks para que permita la ejecución de más de 5 tareas simultnáenas

PLAYBOOKS

para aplicar un playbook a varios grupos hosts: produccion:&grupo2

se ejecutará en los servidores que pertenezcan sólo a ambos grupos, no a los 2 grupos

si un servidores está en 2 grupos, también se puede especificar que se ejecute en un grupo con una excepción hosts: produccion:!grupo2 se ejecutará en el grupo de produccion con excepción de un server que pertenezca a grupo2

hosts: produccion:grupo2 se ejecutara en ambos grupos

en el caso de dudar sobre que servidores se va a aplicar el playbook se puede consultar con –list-hosts ansible-playbook nombre.yml –list-hosts

también es posible limitar ansible-playbook –limit ‘grupo2’ nombre.yml

chequear la sintaxis de un playbook ansible-playbook –syntax-check nombre.yml

para listar las tareas de un playbook –list-tasks para ejecutar y confirmar cada tarea paso a paso añadir –step empezar por una tarea específica –start-at-task=”Copiar” -> se está especificando una tarea no un playbook en el caso que el fichero yml tenga varios añadir -vvv para tener verbose, tiene 3 niveles añadiendo v

VARIABLES

Módulo de ficheros y OpenSSL permite trabajar con ficheros , plantillas y directorios:

blockinfile: Inserta/actualiza/elimna un bloque de texto en un fichero
copy: copia fichero a remoto
fetch: copia de servidor remoto a local
file: establece atributos a ficheros
lineinfile: asegura que una línea esté dentro de un fichero o reemplaza su contenido
stat: obtiene información de ficheros o sistema de ficheros
template: copia y procesa una plantilla a un nodo remoto
unarchive: extrae ficheros ( después de copiarlo)
openssl_privatekey openssl_publickey

módulo copy opciones: backup yes/no content = “contenido” force = yes/no owner, group, mode, src = /tmp/file

módulo stat para obtener información de un fichero

módulo fetch – obtener un fichero del servidor remoto, interesantre para backups

módulo APT name =nombre:version upgrade puede actualizar el sistema upgrade no/yes/safe/full/dist safe = sólo los paquetes que no sean de sistema full = todos los paquetes dist = de distribución

opciones command, con shell si permite utilizar caracteres especiales como && || -chdir: cambia el directorio en el que está trabajando -execute: puedes especificar el interprete a usar /bin/bash, etc

script – transfiere un script y lo ejecuta -name: script: /path/script.sh

raw – envía comandos sin filtrar por SSH -name: raw: yum install epel-release && yum install nginx

expect – ejecuta un comando permitiendo introducir datos interactivamente.

shell -name: shell: uptime >> file.log args: chdir: /tmp

wait_for: espera a que un puerto o fichero esté disponible, permite un delay antes de ejecutar una tarea.

Módulos notificaciones: destaco

pushbullet – notificaciones a dispositivos mqt – para dispositivos IoT slack – SNS – del servicio de AWs telegram – sendgrid – envío de mails usando la API nexmo – envío de SMS pushover – envío de notificaciones a móviles

Módulo mail: subject= “mensaje” host=servidor port=puerto secure=try,starttls,always,never username= password= to= [email protected] cuenta a la que se envía el mensaje body= “servidor x”

-name: formateo HDD filesystem: dev: /ect/sdc1 fstype: xfs

-name: deshabilitar firewalld firewalld: state: disabled

-name: nombre y timezone hosts: localhost task:

hostname: name=nombre_maquina
timezone: name=”Europe/Madrid”
Conatiners Necesita instalar docker-py

-pip: name=docker-py state=latest -name: descarga imagen docker_image: name: centos state: present