Ansible, como provisionar tu infraestructura

  • by

En el post anterior platicamos en los cambios que se han dado en la infraestructura llegando al termino Iac, el cual es sumamente usado hoy en día.

Si bien hay muchas alternativas, al momento de implementar Iac, una de las opciones que más me gustan es Ansible, el cual salió a la luz en el año 2012, desarrollado por Michael DeHaan, y actualmente es propiedad de Redhat.

Ansible se define así mismo como:

Ansible is an IT automation tool. It can configure systems, deploy software, and orchestrate more advanced IT tasks such as continuous deployments or zero downtime rolling updates.

Ansible

Desde mi punto de vista Ansible es una poderosa herramienta para automarizar el aprovisionamiento de nuestros servidores, la cual puede ser configurada usando el lenguaje YAML donde se describen las configuraciones.

Ventajas de Ansible:

  • Facil se Usar, solo requieres definir tus requerimientos, aplicarlos y listos
  • Agentless: no requiere instalar un agente en cada servidor como chef(aunque también hay una forma de usarlo sin agent) o puppet
  • Extensible: las tareas (tasks) dentro de ansible describen una tarea que necesitas ejecutar en tu servidor pero si necesitas aprovisionamiento mas avanzado puedes usar modelos.
  • Open Source: Es open source ya que usa la licencia GNU GPL
  • Soporte comercial: Si bien puedes usar Ansible sin pagar nada, también puedes usar Ansible tower para usos comerciales, si bien puedes hacer deploy de grandes volúmenes de servidores usando Ansible open source, Ansible Tower permite hacerlo desde un modo más sencillo, dispone de mejores herramientas y hasta soporte técnico.
  • Certificación: Este es un punto extra el cual se me hace bastante interesante, ya que actualmente puedes certificarte como (Red Hat Certified Specialist in Ansible Automation) https://www.redhat.com/en/services/certification/rhcs-ansible-automation

Requisitos:

  • Python: Para poder usar ansible solo requieres tener python

Instalación:

#RHEL/CentOS
$ sudo yum install ansible
#Debian/Ubuntu Linux
$ sudo apt-get install software-properties-common
$ sudo apt-add-repository ppa:ansible/ansible
$ sudo apt-get update
$ sudo apt-get install ansible
#PIP
$ sudo pip install ansible
#OSX:
$ brew install ansible

Es importante que antes de usar creemos un archivo de configuración que es donde indicaremos a que host/ips aplicaremos los cambios, dicho archivo se llama, Inventory File.

Se puede agrupar el inventory file por segmentos y aplicar los cambios a una lista de hosts o IP’s en vez de un solo servidor.

#inventory
[local]
localhost ansible_connection=local

[dev] 
dev1.myapp.com	ansible_connection=ssh ansible_user=admin
dev2.myapp.com ansible_connection=ssh ansible_user=admin

[staging]
staging1.myapp.com	ansible_connection=ssh ansible_user=staging
staging2.myapp.com ansible_connection=ssh ansible_user= staging

Iniciando con Ansible:
La forma de trabajar con ansible es mediante la ejecución de una tarea la cual usara un modulo de ansible, inclusive podremos hacer uso de el modulo más básico llamando ping

$ ansible all -i inventory -m ping
localhost | SUCCESS=> {
	"changed": false,
	"ping": "pong"
}

Con este comando estamos indicando a ansible que ejecute en todos los hosts “all” el modulo “ping”

Si bien podemos ejecutar cualquier tarea usando la forma anterior pero obviamente sera tedioso y lento, la mejor forma de hacerlo es escribiendo un archivo el cual será nuestro playbook el cual solo requiere que este escrito en formato YAML.

Dentro de los playbooks podremos indicar varias configuraciones, las más importantes serían las siguientes

  • host
  • tasks
  • handlers
#playbook.yaml
  host: all
  remote_user: root
  tasks:
    - name: This task will install apache in all hosts (only in Debian distributions)
      apt: name=apache2 update_cache=yes state=latest
      notify:
      - restart apache
  handlers:
    - name: restart apache
      service: name=apache state=restarted

Y para proceder a aplicar dicho software tendríamos que ejecutar ansible-playbook en lugar de ansible

$ ansible-playbook playbook.yaml -i inventory

Hace un par de años di una presentación sobre ansible donde pueden obtener mucha más información sobre lo comentado el día de hoy, espero en posteriores posts ahondar más sobre ansible, nos leemos en la próxima entrega

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.