Ansible
Introducción al Ansible
Ansible es una herramienta de administración remota que permite definir estados ( está instalado un software o que exista una interfaz de red concreta) y que es capaz de llevar a los equipos a dichos estados realizando las operaciones necesarias.
Ficheros Ansible
Dentro de ansible tenemos varios ficheros que debemos controlar, para saber en qué máquina o grupo de máquinas vamos a ejecutar las diferentes operaciones, que operaciones vamos a realizar y cómo las vamos a realizar.
/etc/ansible/hosts
En este fichero tenemos los grupos de trabajo y sus máquinas dentro. Cuando queramos introducir una máquina nueva, primero deberemos introducirla en un grupo, aunque esta operación no está del todo necesaria ya que también podemos ejecutar una acción sobre una máquina en concreto. Ejemplo: [grupo_uno] 1.1.1.1. 1.1.1.2 1.1.1.3 [grupo_dos] 10.20.11.10
/etc/ansible/host_vars/fichero máquina
Cada vez que queramos añadir una máquina a ansible, aparte de añadirla al archivo “hosts” debemos crear su propio archivo y guardarlo en /host_vars. El contenido de este fichero es simple: ansible_host: 85.91.25.41 ansible_hostname: hostWeb11 master: yes #De momento Solo en cool-ad11,el resto: no
/etc/ansible/config_files/ Dentro de esta carpeta tenemos todos los ficheros preparados para las instalaciones. Los tenemos separados por grupos. Por ejemplo en su interior tenemos el fichero nginx.tar.gz que usaremos para la instalación de nginx.
/etc/ansible/groups_vars/fichero_grupo
Variables de grupo. En este fichero guardamos las variables generales para ese grupo, es decir, en un grupo algunas instalaciones serán las mismas para todas las máquinas (nrpe - nginx - o lo que sea), aquí tenemos definidas estas opciones generales. Por ejemplo para la instalación de nginx en el grupo definimos las siguientes variables:
ariables Nginx
nginx_version: 1.14.0 nginx_configure: --prefix=/usr/local/nginx-Plantilla:Nginx version --user=devel --group=devel --with-http_ssl_module --with-http_realip_module --with-http_stub_status_module --with-http_perl_module config_nginx: nginx.tar.gz
server_origen_nginx: ad05 dominio_nginx: xjh37.com
Definimos la versión a instalar. Definimos los parámetros del configure server_origen_nginx. Esta variable define el nombre de donde se sacó el fichero de configuración, se crea para a posteriori utilizarla para reemplazar el nombre del fichero de configuración. Dominio_nginx. Igual que la anterior, tenemos el nombre del dominio del archivo original.
/etc/ansible/roles Podemos definir un rol como un listado de acciones que debe hacer. Ahora mismo en nuestro caso tenemos los siguientes roles identificados:
cassandra initInstall nginx nodejs personalizar redis spark
Cada uno en su interior tiene las opciones para proceder con la instalación (en este caso) de los diferentes servicios. En nuestro caso principalmente solo hemos tenido que utilizar la carpeta tasks, que es donde se define todo el proceso. Vamos a ver el ejemplo de nginx:
Para la instalación de nginx seguiríamos los siguientes pasos: verificar - descargar - descomprimir - instalar - configurar. Vamos a entender uno de estos procesos, el de instalación estará bien.
-
-
-
- Instalacion NGINX
-
-
- name: Instalar Nginx command: chdir=/usr/local/src/nginx-Plantilla:Nginx version Plantilla:Item with_items: - ./configure Plantilla:Nginx configure - make - make install when: verif_nginx_inst.stat.isdir is not defined
- name : Nombre del proceso que vamos a ejecutar command: En esta caso cambia al directorio especificado.
Las variables nginx-version y nginx_configure las coje del fichero creado en groups_vars, en cambio la variable item la coje de la propia tarea. Esta variables item siempre tendrá que ser generada dentro de la propia tarea, en este caso no son más que las acciones a realizar:
Para entender el parámetro when primero debemos ver el proceso de verificación, lanzado el primero en este archivo task
- name: Verificamos si hay alguna instalación anterior NGINX vPlantilla:Nginx version. stat: path: /usr/local/src/nginx-Plantilla:Nginx version register: verif_nginx_inst
Este proceso comprueba un path en concreto y guarda el estado en la variable o objeto stat.
Posteriormente podemos ver que en el parámetro when se le pregunta al objeto stat si dicho directorio no existe. Le estamos diciendo a ansible que haga la acción siempre y cuando la carpeta no exista ya.
Otro ejemplo del parámetro when:
- name: Copiamos fichero de configuracion local para Master copy: src: "rc.local.master" dest: /etc/rc.d/rc.local when: master == "yes"
Dentro de cada fichero de máquina, el en directorio hosts_vars, tenemos declarada la variable master, esta variable puede contenter un “yes” o un “no”.... Dependiendo de su valor haremos o no una copia de fichero. Esto lo hacemos porque tenemos ficheros que van al mismo directorio en cada instalación pero su valor cambia en función si es un server maestro (Node y Spark) o es un esclavo
/etc/ansible/yamls-varios Bien ya sabemos cómo generamos máquinas nuevas, como crear tareas nuevas, pero ¿como las lanzamos o como llamamos a los diferentes procesos que queremos realizar en nuestra red de máquinas?
Para la acción final tenemos el fichero install.yml dentro de la carpeta yamls-varios: - hosts: host_webINicial
become: yes become_method: sudo vars: - nagios_server: 45.65.25.145 roles: - initInstall - nginx - nodejs - cassandra - redis - spark
Explicación:
- hosts - Grupo donde queremos trabajar
- become
- become_method
- vars: En este fichero también podemos definir variables, aquí se definirán variables que no tienen carácter general y que para ejecución diferentes podría variar.
- roles: los procesos que queremos ejecutar en la instalación, en este caso solo se lanzaría el proceso spark.
Comandos útiles
- ansible-playbook install.yml
Usando el ejemplo anterior inicializará la instalación de spark en el grupo de máquinas cool_ads_us
- ansible imp_rtb_bcn -a “ls /etc/”
Lanzaría el comando ls en la carpeta /etc/ de todas las máquinas del grupo imp_rtb_bcn
- ansible -m copy -a "src=scripts_init dest=/root" cool-ad11
Copia el contenido de la carpeta scripts_init en /root de la máquina cool-ad11
- ansible blockchain
Inserta un trozo de texto en el fichero especificado de la máquina o grupos especificados.