Para empezar a trabajar con ANSIBLE, lo primero que debemos es conocer el potencial que tiene el fichero de configuración /etc/ansible/hosts . Siendo en este donde definiremos nuestro servidores, grupos de servidores, grupos de grupos, variables… etc.
Para entenderlo, vamos a crear dos grupos de servidores (zona.01 y zona.02), dentro de los cuales insertaremos los servidores descritos en el artículo anterior:
1 2 3 4 5 |
[zona.01] 192.168.1.151 [zona.02] 192.168.1.152 |
Una funcionalidad interesante a la hora de añadir los nombres o direcciones ip de nuestros servidores, es utilizar rangos. De forma que si por ejemplo queremos añadir los servidores miserver01.practicas.es al miserver99.pcracticas.es , lo haremos incluyendo el rango entre corchetes miserver[01:99].pcracticas.es. Esto también funciona utilizando un rango alfabético dentro del nombre del host miserver_[a:h].practicas.es.
Podemos comprobar que ambos grupos funcionan correctamente:
1 2 3 4 5 6 7 |
> ansible zona.01 -a "cat /etc/hostname" -u usuario_nodos 192.168.1.151 | SUCCESS | rc=0 >> ubuntu-nodo01 > ansible zona.02 -a "cat /etc/hostname" -u usuario_nodos 192.168.1.152 | SUCCESS | rc=0 >> ubuntu-nodo02 |
Ahora podemos crear un grupo (zona.all) que incluya ambos grupos. Esto lo haremos añadiendo dicho grupo en el fichero hosts, con la opción «children», la cual permite crear agrupaciones de grupos:
1 2 3 |
[zona.all:children] zona.01 zona.02 |
Y comprobamos su funcionalidad:
1 2 3 4 5 6 |
> ansible zona.all -a "cat /etc/hostname" -u usuario_nodos 192.168.1.152 | SUCCESS | rc=0 >> ubuntu-nodo02 192.168.1.151 | SUCCESS | rc=0 >> ubuntu-nodo01 |
También podemos asignar variables a cada grupo mediante la opción «vars». En nuestro caso vamos a definir el nombre de usuario que vamos a utilizar en el grupo «zona.all»:
1 2 |
[zona.all:vars] ansible_user=nodos_usuario |
Ahora ya no necesitamos utilizar «-u» cuando ejecutemos Ansible, ya que obtendrá el nombre de usuario de la variable ansible_user :
1 2 3 4 5 6 |
> ansible zona.all -a "cat /etc/hostname" 192.168.1.152 | SUCCESS | rc=0 >> ubuntu-nodo02 192.168.1.151 | SUCCESS | rc=0 >> ubuntu-nodo01 |
En caso de necesitar asignar variables por defecto a todos los grupos, utilizaremos el grupo [defaults] :
1 2 |
[defaults] ansible_port=22 |
También podemos añadir las variables en cada linea después del nombre o ip de cada host. Pudiendo modificar los hosts de los grupos zona.01 y zona.02 para especificar en cada caso el nombre del usuario a utiliza o incluso el puerto:
1 2 3 4 5 |
[zona.01] 192.168.1.151 ansible_user=nodo01_user ansible_port=22 [zona.02] 192.168.1.152 ansible_user=nodo02_user ansible_port=8022 |
Esto es muy útil cuando el cada host tiene un modo de acceso diferente, ya que también se puede indicar el puerto (ansible_port), el usuario (ansible_user) o incluso escalar privilegios (ansible_become).
Podemos encontrar documentación sobre todas las variables en la documentación de Ansible: http://docs.ansible.com/ansible/intro_inventory.html