Entradas Mensuales

Síguenos en:

Canal Oficial Telegram de elhacker.NET Grupo Facebook elhacker.NET Twitter elhacker.NET Canal Youtube elhacker.NET Comunidad Steam: Grupo elhacker.NET Mastodon

Entradas populares

PostHeaderIcon Ansible permite automatizar tareas en distintos servidores


Ansible es un software que automatiza el aprovisionamiento de software, la gestión de configuraciones y el despliegue de aplicaciones. Está categorizado como una herramienta de orquestación, muy útil para los administradores de sistema y DevOps. En otras palabras, Ansible permite a los DevOps gestionar sus servidores, configuraciones y aplicaciones de forma sencilla, robusta y paralela

 



 Ansible es una herramienta útil que los ingenieros de DevOps pueden utilizar para lograr la automatización de la infraestructura, las aplicaciones, las redes y el entorno de contenedores. Los ingenieros utilizan ampliamente esta herramienta para la automatización y configuración de servidores.

Si tenemos que trabajar con multitud de dispositivos, no solo servidores, sino también dispositivos de red como switches o routers, o incluso trabajar con plataformas en la llamada nube, como AWS, Ansible nos puede ayudar, y mucho, en nuestro día a día. Con permisos de otros sistemas como Puppet, o Chef, Ansible se ha convertido en una de las herramientas de automatización más popular.

Es gratuita, ya que utiliza una licencia GNU GPL v3, sigue con la filosofía del código abierto y permite automatizar la mayoría de los elementos de una infraestructura. Esto es, desde servidores hasta dispositivos de red. Puede funcionar, con el rol de servidor, en sistemas GNU/Linux y tipo UNIX, como por ejemplo AIX, Solaris o BSD. En lo que respecta a la red, soporta dispositivos populares, como Cisco, Palo Alto o F5

Como hemos dicho anteriormente, también permite trabajar con los proveedores de la nube, como AWS, Azure o Google Cloud Platform. Gestionando componentes como redes, grupos de seguridad, direcciones IP o claves públicas.

Hace unos años Ansible fue adquirida por la compañía Red Hat

Ansible gestiona sus diferentes nodos a través de SSH y únicamente requiere Python en el servidor remoto en el que se vaya a ejecutar para poder utilizarlo. Usa YAML para describir acciones a realizar y las configuraciones que se deben propagar a los diferentes nodos

El autor de Ansible es Michael DeHann, y el repositorio lo puedes encontrar en https://github.com/ansible/ansible. El proyecto tiene una gran comunidad activa detrás y sigue creciendo día a día.


  • Ansible automatiza la configuración de la infraestructura, la implementación de aplicaciones y el aprovisionamiento en la nube mientras aprovecha el modelo de servicio Infraestructura como código.

Compatibilidad de Ansible

Ansible se distribuye en Fedora, Red Hat enterprise Linux, CentOS y Scientific Linux mediante los paquetes EPEL, además está disponible para diferentes distribuciones Linux aparte de las anteriores mencionadas puedes verlo en este enlace y descargar la que necesites.

También está disponible para MAC, pero no para Windows, aunque podemos usarlo en máquinas virtuales.

Arquitectura de Ansible


 Con Ansible seremos capaces de controlar una máquina remota (llamada nodo) o varias de ellas en una lista (llamada inventario) definida en una máquina local central (llamada controladora) por medio de guiones, pequeños programas con instrucciones precisas, llamados módulos. Para completar el panorama, un conjunto de instrucciones que contengan guiones es denominado libreto o Playbook.

  • Máquina Local: Controladora.
  • Máquina Remota: Nodo.
  • Lista con las direcciones de los Nodos: Inventario.
  • Fichero con guión: Módulo.
  • Fichero con guiones e instrucciones que llame a otros guiones: Libreto.


En Ansible existen dos tipos de servidores:

  • Controlador: La máquina desde la que comienza la orquestación
  • Nodo: Es manejado por el controlador a través de SSH.


 

Glosarios de conceptos

Veamos un resumen de los principales conceptos a tener en cuenta.

  • Facts: Información útil de los clientes.
  • Inventario: Incluye información, estática o dinámica, de los clientes administrados y su información.
  • Módulos: Son las librerías que se utilizan para controlar elementos como ficheros, servicios paquetes o comandos. Estos se copian al nodo cliente para que ejecute la tarea indicada.
  • Nodo: Objeto a administrar, ya sea un servidor, un router y otro elementos.
  • Play: Lista de tareas a realizar en los clientes especificados en el Playbook.
  • Playbook: Se encarga de definir todas las tareas que debemos realizar sobre un conjunto de hosts clientes.
  • Roles: Es una agrupación de tareas, ficheros y plantillas, que pueden ser reutilizados.
  • Tareas: Definición de una acción a realizar.

Trabajando con los Playbook

Para poder ejecutarlos de manera eficaz debemos tener en cuenta varias cosas.

  1. El objetivo: Debido a que los Playbooks están proporcionando dirección e interactividad con los módulos, Ansible asume que sabemos cómo hacer lo que estamos tratando de hacer y lo automatiza. Es por que son como instrucciones: le estamos diciendo a las partes automatizadas cómo deseamos que se configure la tarea.
  2. Las tareas: Si necesita iniciar el servidor web, necesitará saber cómo se hace para poder usar el módulo de servicio e iniciar el servidor web por su nombre. Si este está instalando software, entonces debe saber cómo se realiza la instalación en el destino. También necesitará comprender los conceptos básicos de las tareas que se realizan. ¿El software que está instalando tiene una configuración de configuración? ¿Hay varios pasos que requieren condiciones o valores de argumento? Si hay variables que se están pasando

Instalación de Ansible en GNU Linux

Existen una serie de distribuciones recomendadas, para llevar el rol de servidor central, estos son RHEL, CentOS, Debian y Ubuntu. En estos casos utilizaremos el gestor de paquetes y los repositorios propios de cada distribución. Aún así, si queremos tener siempre la última versión instalada, lo recomendado es utilizar el gestor típico de Python llamado pip.

El host con el rol de máquina de control debe cumplir con una serie de requisitos que son, tener una versión de Python 2 (Versiones 2.6 o 2.7) o en su caso Python 3 (Versiones 3.5 o posteriores).

Los nodos clientes se llaman nodos gestionados (Managed Node). En este caso sólo es necesario tener una versión de Python superior a la 2.5. Por defecto, para copiar los ficheros entre la máquina de control y los nodos gestionados se utiliza sftp, aunque también se puede configurar el uso de scp.


Módulos importantes para Ansible

Módulo 1: Gestor de paquetes

Existe un módulo para los gestores de paquetes más populares, como DNF o APT, que nos permite instalar cualquier paquete en el sistema. Esta funcionalidad depende complemente del administrador de paquetes, pero generalmente estos módulos pueden instalar, actualizar, degradas, eliminar y enumerar paquetes. Los nombres de los módulos relevantes son fáciles de adivinar, por ejemplo, el módulo DNF es «dnf_module«, el antiguo módulo YUM sería «yum_module«, mientras al respecto de APT sería «apt_module«, por hablar de los más habituales.


Veamos algunos ejemplos:

Ejemplo 1:

- name: Instalar la ultima versión de Apache y MariaDB

  dnf:

    name:

     - httpd

      - mariadb-server

    state: latest

Ejemplo 2:

- name: Instalar una lista de paquetes
  yum:
    name:
     - nginx
      - postgresql
      - postgresql-server
    state: present

Módulos 2: Service


Después de instalar un paquete, necesita un módulo para iniciarlo. El módulo service nos permite iniciar, detener y volver cargar los paquetes instalados.

Ejemplo 1:


- name: Encender el servicio foo, basado en el proceso /usr/bin/foo
service:
name: foo
pattern: /usr/bin/foo
state: started

 

Ejemplo 2:
- name: Reinciar el servicio de red en la interfaz eth0
service:
name: network
state: restarted
args: eth0

Módulo 3: Copy

Este módulo copia un archivo desde la máquina local o remota a una ubicación en la máquina remota.

Ejemplo 1:


- name: Copia el fichero "ntp.conf" en la ubicacion, copia de seguridad del original si difiere de la versión copiada
copy:
src: /mine/ntp.conf
dest: /etc/ntp.conf
owner: root
group: root
mode: '0644'
backup: yes

Ejemplo 2:


- name: Copia el archivo con el propietario y el permiso, utilizando una representación simbólica
copy:
src: /srv/myfiles/foo.conf
dest: /etc/foo.conf
owner: foo
group: foo
mode: u=rw,g=r,o=r

Módulo 4: Debug

El módulo debug imprime declaraciones durante la ejecución y puede ser útil para depurar variables o expresiones sin tener que detener el libro de jugadas.

Ejemplo 1:


name: Muestra las variables / acciones conocidas para un host
debug:
var: hostvars[inventory_hostname]
verbosity: 4

Ejemplo 2:


- name: Escribir algún contenido en un archivo /tmp/foo.txt
copy:
dest: /tmp/foo.txt
content: |
Good Morning!
Awesome sunshine today.
register: display_file_content
- name: Debug display_file_content
debug:
var: display_file_content
verbosity: 2

Esto registra el contenido de la salida del módulo de copia y lo muestra solo cuando especifica verbosidad como 2.

Por ejemplo:

ansible-playbook demo.yaml -vv

Módulo 5: File

El módulo file maneja los ficheros y sus propiedades

  • Establece atributos de archivos, enlaces simbólicos o directorios
  • También elimina archivos, enlaces simbólicos o directorios.

Ejemplo 1:


- name: Cambia el propietario, grupo y permisos
file:
path: /etc/foo.conf
owner: foo
group: foo
mode: '0644'

Esto crea un archivo llamado foo.conf y establece el permiso en 0644.

Ejemplo 2:


- name: Crea un directorio si este no existe
file:
path: /etc/some_directory
state: directory
mode: '0755'

Esto crea un directorio llamado some_directory y establece el permiso en 0755.

Módulo 6: Lineinfile

El módulo lineinfile maneja líneas de texto en un fichero.

  • Asegura que una línea particular esté en un archivo o reemplaza una línea existente usando una expresión regular referenciada hacia atrás.
  • Es principalmente útil cuando desea cambiar solo una línea en un archivo.

Ejemplo 1:


- name: Indica el modo enforcing para SELINUX
lineinfile:
path: /etc/selinux/config
regexp: '^SELINUX='
line: SELINUX=enforcing

Establece el valor SELINUX=enforcing

Ejemplo 2:


- name: Agrega una línea a un archivo si el archivo no existe, sin pasar regexp
lineinfile:
path: /etc/resolv.conf
line: 192.168.1.99 foo.lab.net foo
create: yes

Añade una entrada para IP y nombre de host en el fichero resolv.conf

Módulo 7: Git

El módulo git gestiona las revisiones de git contra los repositorios para implementar archivos o software.

Ejemplo 1:


# Crear el fichero Git desde el repo
- git:
repo: https://github.com/ansible/ansible-examples.git
dest: /src/ansible-examples
archive: /tmp/ansible-examples.zip

Ejemplo 2:


- git:
repo: https://github.com/ansible/ansible-examples.git
dest: /src/ansible-examples
separate_git_dir: /src/ansible-examples.git

Este último ejemplo se encarga de clonar un repositorio en un directorio separado de Git.

Módulo 8: Cli_command

El módulo cli_command, disponible desde la versión de Ansible 2.7, proporciona una forma independiente de la plataforma de enviar configuraciones basadas en texto a dispositivos de red a través del complemento de conexión network_cli

Ejemplo 1:


- name: Commit con comentario
cli_config:
config: set system host-name foo
commit_comment: this is a test

Esto establece el nombre de host para un switch y muestra un mensaje de confirmación.

Ejemplo 2:

name: Configure la ruta del backup
cli_config:
config: "{{ lookup('template', 'basic/config.j2') }}"
backup: yes
backup_options:
filename: backup.cfg
dir_path: /home/user


Esto hace una copia de seguridad de una configuración en un archivo de destino diferente.

Módulo 9: Archive

El módulo archive crea un archivo comprimido de uno o más archivos. Por defecto, supone que la fuente de compresión existe en el destino.

Ejemplo 1:


- name: Comprime el directorio /path/to/foo/ en /path/to/foo.tgz
archive:
path: /path/to/foo
dest: /path/to/foo.tgz

Ejemplo 2:


- name: Crear un fichero comprimido bz2, en la ruta /path
archive:
path:
- /path/to/foo
- /path/wong/foo
dest: /path/file.tar.bz2
format: bz2

Módulo 10: Command

Uno de los módulos más básicos pero útil, el módulo command toma el nombre del comando seguido de una lista de argumentos delimitados por espacios.

Ejemplo 1:


- name: return motd to registered var
command: cat /etc/motd
register: mymotd

Ejemplo 2:


- name: Cambia el directorio de trabajo a somedir/ y ejecuta el comando db_owner si /path/to/database no existe.
command: /usr/bin/make_database.sh db_user db_name
become: yes
become_user: db_owner
args:
chdir: somedir/
creates: /path/to/database


Puppet



  • Puppet es una herramienta que permite desplegar configuraciones, instalar paquetes en diferentes servidores a través de código. Es una herrramienta para realizar Infrastructure as a Code (IaaC)
  • La diferencia de Puppet frente a otros como Ansible, es que puppet tiene instalado un agente en el equipo que se asegura de que la configuración indicada en el código de Puppet se mantiene.
  • Si el código de puppet indica que la máquina tiene que tener el firewall encendido y un usuario lo deshabilita, el agente de Puppet volverá a activarlo cuando realice su check.

Puppet es una herramienta de gestión de la configuración del código abierto. Una de sus principales características, es que permite gestionar una infraestructura como código. Como en el caso de Ansible, Puppet automatiza la gestión de la infraestructura, de modo que se puede desplegar aplicaciones y software de forma más rápida y segura.

Puppet permite a las empresas gestionar de forma simultánea decenas de equipos de desarrollo y miles de recursos. Esto es así, porque de forma automática comprende las relaciones inherentes que se dan en cualquier infraestructura.

Gestiona dependencias y trata los errores de forma inteligente. Así, cuando encuentra una configuración que falla, salta por encima del resto de configuraciones dependientes. Gracias a todo esto, se ha convertido en una de las herramientas DevOps más utilizadas, formada por más de 5.000 módulos y con soporte para cientos de herramientas externas.

Puppet es otra plataforma de código abierto adecuada para aprovisionar infraestructura resistente. Los ingenieros de DevOps pueden usar Puppet para configurar, implementar, ejecutar servidores y automatizar la implementación de las aplicaciones en los servidores configurados. 

Características

  • Altamente extensible, compatible con varias herramientas de desarrollo y API.
  • Características de la puppet Bolt, un potente orquestador de tareas para automatizar tareas manuales.
  • Puppet se integra bien con Kubernetes y Docker.

Chef

Chef como herramienta en DevOps le permite realizar tareas de administración de configuración en servidores y otros recursos informáticos. El enfoque de Chef para la gestión de la infraestructura utiliza agentes como Chef Infraestructura para automatizar la configuración de la infraestructura. Usar Chef en procesos de automatización es simple. Con unos pocos clics, varios nodos pueden estar en funcionamiento.

Fuentes:

https://www.ochobitshacenunbyte.com/2019/01/30/que-es-ansible-para-que-sirve/


0 comentarios :

Publicar un comentario

Los comentarios pueden ser revisados en cualquier momento por los moderadores.

Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.

Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.