Ansible - Jose Ramon Arnau Garví

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 8

Ansible

Jose Ramón Arnau Garví

Crear un Playbook donde automatice varios servidores, se deja al alumno la libertad para
crear la funcionalidad de automatizar las tareas que crea necesarias.

Modificamos el fichero /etc/ansible/hosts.yaml para añadir 2 nuevos servidores, como se


puede observar, el fichero hosts está en formato YAML, para que ansible lea el fichero del
“inventory” con el formato YAML se ha modificado una línea en el fichero de
configuración de Ansible para decir que fichero debe coger como “inventory” es
“hosts.yaml”:

/etc/ansible/ansible.cfg
[defaults]
inventory = /etc/ansible/hosts.yaml

/etc/ansible/hosts.yaml
relayservers:
hosts:
dtc-relay01:
dtc-relay02:

El grupo de servidores “relayservers” está formado por 2 servidores Ubuntu que además
tienen instalado y configurado un servidor de correo “postfix” de tal modo que los
dispositivos internos a la empresa que no pueden enviar correo a través de Office 365
por diversas causas (son viejos, no se puede configurar autenticación,…), son
configurados para que envíen los correos a uno de los dos servidores y estos se encargan
de enviar el correo hacia el destino especificado.

Para ello existe un fichero en Postfix “my_networks” donde se añaden todas las
direcciones IP desde las cuales se permite enviar correo por estos servidores.

Debido a que son 2 servidores exactamente iguales, cuando se añade un nuevo


dispositivo que tiene que enviar correo a través de estos servidores, se debe modificar de
igual modo el fichero “my_networks” en ambos servidores. Dada esta circunstancia,
parece un proceso candidato a automatizar mediante “ansible” y un playbook.

Para ello en primer lugar prepararemos ambos servidores para que se puede acceder
desde nuestro servidor con el ansible instalado a estos dos servidores, y ello lo heremos
con la siguiente instrucción:

Los servidores de correo tienen las siguientes IP:

- dtc-relay01: 5.45.9.13
- dtc-relay02: 5.45.9.14
root@dtc-ansible01:/etc/grupogimeno/deployment/playbooks# ssh-
copy-id -f [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed:
"/root/.ssh/id_rsa.pub"

Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'adm-


[email protected]'"
and check to make sure that only the key(s) you wanted were
added.

Probamos a conectarnos al servidor y nos conectamos correctamente:


root@dtc-ansible01:/etc/grupogimeno/deployment/playbooks# ssh
[email protected]
Welcome to Ubuntu 18.04.6 LTS (GNU/Linux 4.15.0-200-generic
x86_64)

* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage

System information as of Wed May 17 13:07:57 CEST 2023

System load: 0.0 Processes: 207


Usage of /: 34.2% of 19.52GB Users logged in: 1
Memory usage: 15% IP address for ens160:
5.45.9.13

https://ubuntu.com/engage/secure-kubernetes-at-the-edge

*** System restart required ***


Last login: Wed May 17 12:02:48 2023 from 172.27.5.44
adm-giditek@dtc-relay01:~$ exit
Como se ha podido observar nos conectamos a las máquinas en cuestión con el usuario
“adm-giditek”, que es un usuario creado en la máquina con permisos para hacer “sudo”.

Para hacernos una idea de lo que vamos a hacer vamos a ver el formato del fichero que
tenemos que ir añadiendo en ambos servidores:

Fichero my_networks situado en la ruta “/etc/postfix”:


# Comentario 1
192.168.31.21/32
192.168.31.22/32

# Comentario X
172.27.215.116/32

# Comentario IIS
172.18.201.18/32

# Comentario Test XX
172.27.215.190/32

Básicamente, se añadirán bloques de texto del estilo:


# Comentario de las IPs permitidas identificando de donde son y
que hacen
IP Permitida1
IP Permitida2
IP PermitidaX

Vamos a suponer que queremos enviar correos con una aplicación vieja desde un
servidor y lo tenemos que hacer a través de nuestros servidores internos, los datos del
servidor son:
En primer lugar, vamos a ver como no nos deja enviar correo a través del servidor, para
ello intentaremos enviar un correo mediante línea de comandos con un telnet al puerto
25:

Por lo tanto, lo que tendremos que hacer es añadir la dirección IP 172.20.16.183 a los
servidores de correo para que le permita enviar correo a este servidor:
El playbook inicial que probamos fue:

root@dtc-ansible01: # cat add_IPs_to_my_networks.yaml


- hosts: relayservers
become: true
serial: 1

tasks:
- name: Add Comment and IPs to my_networks file
blockinfile:
dest: /etc/postfix/my_networks
block: |
# Test Server for ansible practique
172.20.16.183/32

- name: Reload Postfix to apply de changes


command: "postfix reload"

root@dtc-ansible01:#ansible-playbook add_IPs_to_my_networks.yaml
[WARNING]: Invalid characters were found in group names but not
replaced, use -vvvv to see details

PLAY [relayservers] ********************************************

TASK [Gathering Facts] *****************************************


ok: [dtc-relay01]

TASK [Add Comment and IPs to my_networks file]******************


changed: [dtc-relay01]

TASK [Reload Postfix to apply de changes] **********************


changed: [dtc-relay01]

PLAY
[relayservers]**************************************************

TASK [Gathering Facts] *****************************************


ok: [dtc-relay02]

TASK [Add Comment and IPs to my_networks file]******************


changed: [dtc-relay02]

TASK [Reload Postfix to apply de changes] **********************


changed: [dtc-relay02]

PLAY RECAP *****************************************************

dtc-relay01 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

dtc-relay02 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0


Una vez se añaden los bloques de texto con el comentario y la IP de la máquina con el
ansible instalado, debe dejar y deja enviar correo a través de ella:

El correo es recibido correctamente como podemos observar en la siguiente imagen:

Por lo tanto, nos ha funcionado el playbook tal y como pretendíamos…


Intentando añadir otro “comentario+IP” nos hemos dados cuenta de que no se añaden de
nuevo, si no que se modifica el “block” existente, por lo tanto no es el funcionamiento que
deseamos, lo que queremos es añadir “comentarios+IP” múltiples veces.

- hosts: relayservers
become: true
serial: 1

vars:
ip: "{{ip}}"
comment: "{{comment}}"

tasks:
- name: Add IP to my_networks file if don't exists
lineinfile:
path: /etc/postfix/my_networks
line: "{{ip}}"
state: present
create: yes

- name: Add Comment my_networks file before IP address


lineinfile:
path: /etc/postfix/my_networks
line: "{{comment}}"
insertbefore: "{{ip}}"

- name: Reload Postfix to apply de changes


command: "postfix reload"

Una vez modificado el playbook y pasándole como parámetros la IP y el comentario, tiene


el funcionamiento que se pretendía.

ansible-playbook add-lineinfile.yml --extra-vars "ip=172.123.123.123/32 comment='#


Comment'"

ansible-playbook add-lineinfile.yml --extra-vars "ip=172.29.2.35/32 comment='#


Jarnaus PCs'"

root@dtc-ansible01# ansible-playbook add-lineinfile.yml --extra-


vars "ip=172.27.5.37/32 comment='# Jarnaus PCs'"
[WARNING]: Invalid characters were found in group names but not
replaced, use -vvvv to see details
[WARNING]: Found both group and host with same name: dtc-apt-
cache

PLAY [relayservers] ********************************************

TASK [Gathering Facts] *****************************************


ok: [dtc-relay01]

TASK [Add IP to my_networks file if don't exists] **************


ok: [dtc-relay01]

TASK [Add Comment my_networks file before IP address] **********


ok: [dtc-relay01]

TASK [Reload Postfix to apply de changes] **********************


changed: [dtc-relay01]

PLAY [relayservers] ********************************************

TASK [Gathering Facts] *****************************************


ok: [dtc-relay02]

TASK [Add IP to my_networks file if don't exists] **************


ok: [dtc-relay02]

TASK [Add Comment my_networks file before IP address] **********


ok: [dtc-relay02]

TASK [Reload Postfix to apply de changes] **********************


changed: [dtc-relay02]

PLAY RECAP *****************************************************


dtc-relay01 : ok=4 changed=1 unreachable=0
failed=0 skipped=0 rescued=0 ignored=0
dtc-relay02 : ok=4 changed=1 unreachable=0
failed=0 skipped=0 rescued=0 ignored=0

Y el fichero resultado añade los cambios que le vamos haciendo al final del fichero si no
existe, y si existe la IP añade el comentario.

# Comment Test
172.123.123.123/32
# Jarnaus PCs
172.29.2.35/32

También podría gustarte