Tutorial de Ansible para principiantes: libro de estrategias, comandos y ejemplos

ยฟQuรฉ es Ansible?

Ansible es una herramienta de automatizaciรณn y orquestaciรณn de cรณdigo abierto para el aprovisionamiento de software, la gestiรณn de la configuraciรณn y la implementaciรณn de software. Ansible puede ejecutar y configurar fรกcilmente sistemas tipo Unix, asรญ como Windows sistemas para proporcionar infraestructura como cรณdigo. Contiene su propio lenguaje de programaciรณn declarativo para la configuraciรณn y gestiรณn del sistema.

Ansible es popular por su simplicidad de instalaciรณn, facilidad de uso en lo que respecta a la conectividad con los clientes, su falta de agente para los clientes de Ansible y la multitud de habilidades. Funciona conectรกndose vรญa SSH a los clientes, por lo que no necesita un agente especial en el lado del cliente, y al enviar mรณdulos a los clientes, los mรณdulos se ejecutan localmente en el lado del cliente y la salida se devuelve al servidor Ansible.

Dado que utiliza SSH, puede conectarse fรกcilmente a los clientes mediante claves SSH, lo que simplifica todo el proceso. Los detalles del cliente, como los nombres de host o las direcciones IP y los puertos SSH, se almacenan en archivos llamados archivos de inventario. Una vez que haya creado un archivo de inventario y lo haya completado, Ansible puede usarlo.

ยฟPor quรฉ utilizar Ansible?

A continuaciรณn se detallan algunas ventajas y ventajas importantes de utilizar Ansible

  • Una de las ventajas mรกs importantes de Ansible es que todos pueden utilizarlo de forma gratuita.
  • No se necesitan conocimientos especiales de administrador de sistemas para instalar y utilizar Ansible, y la documentaciรณn oficial es muy completa.
  • Su modularidad en cuanto a complementos, mรณdulos, inventarios y manuales hacen de Ansible el compaรฑero perfecto para orquestar entornos grandes.
  • Ansible es muy liviano y consistente, y no existen restricciones con respecto al sistema operativo o el hardware subyacente.
  • Tambiรฉn es muy seguro debido a sus capacidades sin agentes y al uso de funciones de seguridad OpenSSH.
  • Otra ventaja que fomenta la adopciรณn de Ansible es su fluida curva de aprendizaje determinada por la documentaciรณn completa y su estructura y configuraciรณn fรกciles de aprender.

Historia de Ansible

A continuaciรณn, se muestran hitos importantes de la historia de ansible:

  • En febrero de 2012 se iniciรณ el proyecto Ansible. Fue desarrollado por primera vez por Michael DeHaan, el creador de Cobbler y Func, Fedora Unified Network Controller.
  • Inicialmente llamada AnsibleWorks Inc, la empresa que financia la herramienta Ansible fue adquirida en 2015 por RedHat y mรกs tarde, junto con RedHat, pasรณ a estar bajo el paraguas de IBM.
  • En la actualidad, Ansible viene incluido en distribuciones como Fedora Linux, RHEL, Centos y Oracle Linux.

Tรฉrminos importantes utilizados en Ansible

  • servidor ansible

    La mรกquina donde estรก instalado Ansible y desde la cual se ejecutarรกn todas las tareas y manuales

  • Mรณdulo

    Bรกsicamente, un mรณdulo es un comando o un conjunto de comandos de Ansible similares destinados a ejecutarse en el lado del cliente.

  • Task

    Una tarea es una secciรณn que consta de un รบnico procedimiento a completar

  • Rol

    Una forma de organizar tareas y archivos relacionados para llamarlos mรกs tarde en un libro de jugadas

  • Hecho

    Informaciรณn obtenida del sistema cliente a partir de las variables globales con la operaciรณn gather-facts

  • Inventario

    Archivo que contiene datos sobre los servidores de clientes de Ansible. Se define en ejemplos posteriores como archivo de hosts.

  • Jugar

    Ejecuciรณn de un libro de jugadas.

  • Manejador

    Tarea que se llama solo si hay un notificador presente

  • Notificador

    Secciรณn atribuida a una tarea que llama a un controlador si se cambia la salida

  • Etiqueta

    Nombre establecido para una tarea que puede usarse mรกs adelante para ejecutar sรณlo esa tarea especรญfica o grupo de tareas.

Instalaciรณn de Ansible en Linux

Una vez que haya comparado y sopesado sus opciones y haya decidido optar por Ansible, el siguiente paso es instalarlo en su sistema. Revisaremos los pasos de instalaciรณn en diferentes Linux distribuciones, las mรกs populares, en el siguiente pequeรฑo tutorial.

Instale Ansible en sistemas Centos/RedHat

Paso 1) Instalar repositorio EPEL

[root@ansible-server ~]# sudo yum install epel-release

Paso 2) Instalar paquete ansible

[root@ansible-server ~]# sudo  yum install -y ansible

Instale Ansible en sistemas Centos/RedHat

Instalar ansible en Ubuntu/sistemas Debian

Paso 1) Realizar una actualizaciรณn de los paquetes.

$ sudo apt update

Paso 2) Instale el paquete comรบn de propiedades de software

$ sudo apt install software-properties-common

Paso 3) Instalar el archivo de paquetes personales de Ansible

$ sudo apt-add-repository ppa:ansible/ansible

Paso 4) Instalar ansible

$ sudo apt update
$ sudo apt install ansible

Comandos ad hoc de Ansible

Una de las formas mรกs sencillas de utilizar Ansible es mediante comandos ad-hoc. Estos se pueden utilizar cuando desee emitir algunos comandos en un servidor o en varios servidores. Los comandos ad-hoc no se almacenan para usos futuros, pero representan una forma rรกpida de interactuar con los servidores deseados.

Para este tutorial de Ansible, se configurarรก un archivo de hosts de dos servidores simples, que contiene host1 y host2.

Puede asegurarse de que se pueda acceder a los hosts desde el servidor ansible emitiendo un comando ping en todos los hosts.

[root@ansible-server test_ansible]# ansible -i hosts all -m ping
host1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Comandos ad-hoc de Ansible

Explicaciรณn:

  1. Estado del comando, en este caso ร‰XITO
  2. Host en el que se ejecutรณ el comando
  3. El comando emitido mediante el parรกmetro -m, en este caso, ping
  4. Con el parรกmetro -i, puede apuntar al archivo de hosts.


Puede emitir el mismo comando sรณlo en un host especรญfico si es necesario.

[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2
host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Comandos ad-hoc de Ansible

Explicaciรณn:

  1. El parรกmetro de lรญmite se puede utilizar para emitir comandos solo en hosts especรญficos en el archivo del host.
  2. Nombre del host tal como se define en el archivo de inventario

Si necesita copiar un archivo a varios destinos rรกpidamente, puede usar el mรณdulo de copia en ansible que usa SCP. Entonces el comando y su salida se ven a continuaciรณn:

[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"
host1 | SUCCESS => {
    "changed": true,
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "dest": "/tmp/testfile",
    "gid": 0,
    "group": "root",
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e",
    "mode": "0644",
    "owner": "root",
    "size": 0,
    "src": "/root/.ansible/tmp/ansible-tmp-1562216392.43-256741011164877/source",
    "state": "file",
    "uid": 0
}
host2 | SUCCESS => {
    "changed": true,
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "dest": "/tmp/testfile",
    "gid": 0,
    "group": "root",
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e",
    "mode": "0644",
    "owner": "root",
    "size": 0,
    "src": "/root/.ansible/tmp/ansible-tmp-1562216392.6-280302911361278/source",
    "state": "file",
    "uid": 0
}

Comandos ad-hoc de Ansible

Explicaciรณn:

  1. Copiar mรณdulo definido
  2. Los argumentos del mรณdulo, en este caso, son la ruta absoluta de origen y la ruta absoluta de destino.
  3. Salida del comando Ansible que refleja el รฉxito del comando de copia y otros detalles como las sumas de comprobaciรณn sha1 o md5 para la comprobaciรณn de la integridad del archivo y metadatos como el propietario, el tamaรฑo o los permisos. Es muy fรกcil tener un paquete instalado en varios servidores. Ansible tiene varios mรณdulos que interactรบan con los instaladores utilizados, como yum, apt, dnf, etc.

En el siguiente ejemplo, descubrirรก cรณmo instalar un paquete mediante el mรณdulo yum en dos hosts Centos.

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'
host1 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [


"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.xservers.ro\n * epel: fedora.mirrors.telekom.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: remi.schlundtech.de\n * remi-safe: remi.schlundtech.de\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version                Repository       Size\n================================================================================\nInstalling:\n ncdu            x86_64            1.14-1.el7             epel             51 k\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nInstalled:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}
host2 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.leadhosts.com\n * epel: mirrors.nav.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: mirrors.uni-ruse.bg\n * remi-safe: mirrors.uni-ruse.bg\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version                Repository       Size\n================================================================================\nInstalling:\n ncdu            x86_64            1.14-1.el7             epel             51 k\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nInstalled:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}

Comandos ad-hoc de Ansible

Explicaciรณn:

  1. El mรณdulo Yum se utiliza en este ejemplo.
  2. Define los argumentos del mรณdulo y, en este caso, elegirรกs el nombre del paquete y su estado. Si el estado estรก ausente, por ejemplo, se buscarรก el paquete y, si se encuentra, se eliminarรก.
  3. Cuando estรฉ coloreado en amarillo, verรก la salida del comando ansible con el estado cambiado, lo que significa en este caso que el paquete fue encontrado e instalado.
  4. Estado del comando yum install emitido mediante ansible. En este caso se instalรณ el paquete ncdu.x86_64 0:1.14-1.el7.

Por supuesto, todas las opciones del instalador de yum se pueden usar a travรฉs de ansible, incluidas actualizar, instalar, la รบltima versiรณn o eliminar.

En el siguiente ejemplo, se emitiรณ el mismo comando para eliminar el paquete ncdu instalado previamente.

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'
host1 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version               Repository        Size\n================================================================================\nRemoving:\n ncdu            x86_64            1.14-1.el7            @epel             87 k\n\nTransaction Summary\n================================================================================\nRemove  1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nRemoved:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}
host2 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version               Repository        Size\n================================================================================\nRemoving:\n ncdu            x86_64            1.14-1.el7            @epel             87 k\n\nTransaction Summary\n================================================================================\nRemove  1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nRemoved:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}

Comandos ad-hoc de Ansible

Explicaciรณn:

  1. El resultado del comando yum muestra que el paquete fue eliminado.

Otra caracterรญstica รบtil y esencial que utiliza Ansible para interactuar con el servidor del cliente es recopilar algunos datos sobre el sistema. Por lo tanto, obtiene informaciรณn sobre hardware, software y versiones del sistema y almacena cada valor en una variable que se puede utilizar mรกs adelante.

Si necesita informaciรณn detallada sobre los sistemas que se modificarรกn mediante ansible, puede utilizar el siguiente comando. El mรณdulo de configuraciรณn recopila datos de las variables del sistema.

Comandos ad-hoc de Ansible

Libros de jugadas de Ansible

Libros de jugadas de Ansible Son la forma de enviar comandos a sistemas remotos a travรฉs de scripts. Los playbooks de Ansible se utilizan para configurar entornos de sistemas complejos a fin de aumentar la flexibilidad mediante la ejecuciรณn de un script en uno o mรกs sistemas. Los playbooks de Ansible tienden a ser mรกs un lenguaje de configuraciรณn que un lenguaje de programaciรณn.

Los comandos del libro de estrategias de Ansible utilizan el formato YAML, por lo que no se necesita mucha sintaxis, pero se debe respetar la sangrรญa. Como su nombre lo indica, un libro de jugadas es una colecciรณn de jugadas. A travรฉs de un libro de estrategias, puede designar roles especรญficos para algunos hosts y otros roles para otros hosts. Al hacerlo, puede organizar varios servidores en escenarios muy diversos, todo en un solo manual.

Para tener todos los detalles precisos antes de continuar con los ejemplos de playbooks de Ansible, primero debemos definir una tarea. Estas son las interfaces con los mรณdulos de Ansible para roles y playbooks.

Ahora, aprendamos el libro de jugadas de Ansible a travรฉs de un ejemplo con un libro de jugadas con una jugada, que contiene mรบltiples tareas como se muestra a continuaciรณn:

---

- hosts: group1
  tasks:
  - name: Install lldpad package
    yum:
      name: lldpad
      state: latest
  - name: check lldpad service status
    service:
      name: lldpad
      state: started

Libros de jugadas de Ansible

En el ejemplo anterior del libro de jugadas de Ansible, el grupo 1 de hosts en el archivo del host estรก destinado a la instalaciรณn del paquete lldpad usando el mรณdulo yum y luego el servicio lldpad creado despuรฉs de la instalaciรณn se inicia usando el mรณdulo de servicio usado principalmente para interactuar con systemd ensemble.

Explicaciรณn:

  1. Grupo de hosts en los que se ejecutarรก el libro de jugadas.
  2. El mรณdulo Yum se utiliza en esta tarea para la instalaciรณn de lldpad.
  3. El mรณdulo de servicio se utiliza para comprobar si el servicio estรก en funcionamiento despuรฉs de la instalaciรณn.

Cada manual de Ansible funciona con un archivo de inventario. El archivo de inventario contiene una lista de servidores divididos en grupos para un mejor control de detalles como Direcciรณn IP y puerto SSH para cada host.

El archivo de inventario que puede utilizar para este ejemplo del libro de estrategias de Ansible se ve a continuaciรณn. Hay dos grupos, denominados grupo1 y grupo2, cada uno de los cuales contiene host1 y host2 respectivamente.

[group1]
host1 ansible_host=192.168.100.2 ansible_ssh_port=22
[group2]
host2 ansible_host=192.168.100.3 ansible_ssh_port=22

Libros de jugadas de Ansible

Explicaciรณn:

  1. Nombre del grupo
  2. Nombre de host, con direcciรณn IP y puerto ssh, en este caso el predeterminado, 22.

Otro ejemplo รบtil del libro de jugadas de Ansible que contiene esta vez dos jugadas para dos anfitriones es el siguiente. Para el primer grupo de hosts, grupo1, se habilitarรก selinux. Si estรก habilitado, aparecerรก un mensaje en la pantalla del anfitriรณn.

Para el segundo grupo de hosts, el paquete httpd se instalarรก solo si ansible_os_family es RedHat y ansible_system_vendor es HP.

Ansible_os_family y ansible_system_vendor son variables recopiladas con la opciรณn together_facts y se pueden usar como en este ejemplo condicional.

---

- hosts: group1
  tasks:
  - name: Enable SELinux
    selinux:
      state: enabled
    when: ansible_os_family == 'Debian'
    register: enable_selinux

  - debug:
      Imsg: "Selinux Enabled. Please restart the server to apply changes."
    when: enable_selinux.changed == true

- hosts: group2
  tasks:
  - name: Install apache
    yum:
      name: httpd
      state: present
    when: ansible_system_vendor == 'HP' and ansible_os_family == 'RedHat'

Libros de jugadas de Ansible

Explicaciรณn:

  1. Ejemplo de la clรกusula cuando, en este caso, cuando el tipo de sistema operativo es Debian. La variable ansible_os_family se recopila mediante la funcionalidad together_facts.
  2. La salida de la tarea se registra para uso futuro, con su nombre enable_selinux
  3. Otro ejemplo de la clรกusula when. En este caso, se mostrarรก un mensaje para el usuario host si SELinux se habilitรณ antes.
  4. Otro ejemplo de clรกusula when que consta de dos reglas.

Ademรกs de las tareas, tambiรฉn existen algunas tareas particulares llamadas controladores. Los manejadores deben tener un nombre รบnico en todo el libro de jugadas. Funcionan de la misma manera que una tarea normal, pero se puede notificar al controlador a travรฉs de un notificador.

Si no se notifica a un controlador durante la ejecuciรณn del libro de jugadas, este no se ejecutarรก. Sin embargo, si mรกs de una tarea notifica a un controlador, esto se ejecutarรก solo una vez despuรฉs de que finalicen todas las tareas.

En el ejemplo que se muestra a continuaciรณn, puede ver cรณmo una tarea especรญfica tiene una secciรณn de notificaciรณn que llama a otra tarea. Si se cambia el resultado de la primera tarea, se llamarรก a una tarea de controlador. El mejor ejemplo es cambiar un archivo de configuraciรณn y luego reiniciar ese servicio especรญfico.

---

- hosts: group2
  tasks:
  - name: sshd config file modify port
    lineinfile:
     path: /etc/ssh/sshd_config
     regexp: 'Port 28675'
     line: '#Port 22'
    notify:
       - restart sshd
handlers
    - name: restart sshd
      service: sshd
        name: sshd
        state: restarted

En este caso, si se cambia la primera tarea, โ€œpuerto de modificaciรณn del archivo de configuraciรณn sshdโ€, lo que significa que si el puerto no es 28675 en primer lugar, se modificarรก y la tarea notificarรก al controlador con el mismo nombre para que se ejecute. y reiniciarรก el servicio sshd.

Libros de jugadas de Ansible

Explicaciรณn:

  1. Ejemplo de notificador
  2. Ejemplo de manejador

Roles ansibles

Cuando se trata de manuales extensos, es mรกs fรกcil dividir las tareas en roles. Esto tambiรฉn ayuda a reutilizar los roles en el futuro. Los roles son una colecciรณn de tareas que se pueden mover de un libro de estrategias a otro y se pueden ejecutar de forma independiente, pero solo a travรฉs de un archivo de libro de estrategias.

Los roles se almacenan en directorios separados y tienen una estructura de directorio particular.

[root@ansible-server test2]# tree
.
`-- role1
    |-- defaults
    |   `-- main.yml
    |-- handlers
    |   `-- main.yml
    |-- meta
    |   `-- main.yml
    |-- README.md
    |-- tasks
    |   `-- main.yml
    |-- tests
    |   |-- inventory
    |   `-- test.yml
    `-- vars
        `-- main.yml

7 directories, 8 files

El archivo yaml en el directorio defaults contiene una lista de variables predeterminadas que se usarรกn junto con el libro de estrategias. El directorio de controladores se utiliza para almacenar controladores. Se supone que el metadirectorio tiene informaciรณn sobre el autor y las dependencias de roles. En el directorio de tareas, se encuentra el archivo yaml principal para el rol.

El directorio de pruebas contiene un archivo de manual de estrategias yaml de muestra y un archivo de inventario de muestra y se utiliza principalmente con fines de prueba antes de crear el rol real.

El directorio vars contiene el archivo yaml en el que se definirรกn todas las variables utilizadas por el rol. Las plantillas de directorio y los archivos de directorio deben contener archivos y plantillas que serรกn utilizados por las tareas del rol.

Para crear el รกrbol de directorios para un rol, debe utilizar el siguiente comando con el รบltimo parรกmetro, el nombre del rol:

[root@ansible-server test2]# ansible-galaxy init role1

Ansible tambiรฉn funciona bien con plantillas. Como lenguaje para crear plantillas, utiliza Jinja2.

En el siguiente ejemplo, descubrirรก cรณmo se ve una plantilla bรกsica de jinja2 y la utilizarรก en un rol.

En tiempo de ejecuciรณn, dependiendo de, digamos, en quรฉ centro de datos se encuentra su servidor, puede seleccionar entre mรกs de un servidor de nombres, cada uno correspondiente a un centro de datos, utilizando la variable "resolver_ip_addresses".

{% for resolver in resolver_ip_addresses %}
nameserver {{ resolver }}
{% endfor %}

options timeout:1
options attempts:5
options rotate

En este ejemplo, en el directorio del libro de estrategias, se definen algunas variables, incluida una variable denominada resolver_ip_addresses con diferentes valores segรบn el centro de datos.

- name: Set resolver for server
  template:
    src: dns.j2
    dest: /etc/resolv.conf
    group: root
    owner: root
    mode: "0644"
    tag: resolver	

Roles ansibles

Explicaciรณn:

  1. Nombre de la plantilla a utilizar. La plantilla se encuentra en el directorio de plantillas en la ruta del rol.
  2. Ruta de destino del nombre de archivo que se reemplazarรก con la plantilla, en el lado del cliente.
  3. Permisos del archivo de destino.

Las tareas de roles tambiรฉn pueden tener un campo de etiqueta, al que se le atribuye un nombre. Mรกs de una tarea puede compartir la misma etiqueta. Al ejecutar un libro de jugadas ansible, tambiรฉn puede especificar la etiqueta, para que esas tareas se ejecuten.

Estudio de caso de Ansible

En esta secciรณn, analizaremos un estudio de caso de un libro de jugadas ansible esencial que tiene tres funciones. El propรณsito de esto es dar un ejemplo prรกctico de lo que hablamos antes. Algunos de los ejemplos utilizados anteriormente en este tutorial del libro de estrategias de Ansible se adaptarรกn y utilizarรกn en este libro de estrategias.

A continuaciรณn se muestra la estructura de directorios del libro de jugadas. El archivo Yaml que se utilizarรก serรก p4.yml.

[root@ansible-server test_ansible]# ls -lrth
total 16K
-rw-r--r--. 1 root root   0 Jul  3 10:13 testfile
-rw-r--r--. 1 root root 203 Jul  3 13:30 p1.yml
-rw-r--r--. 1 root root 125 Jul  3 15:00 hosts
-rw-r--r--. 1 root root 488 Jul  3 16:40 p2.yml
-rw-r--r--. 1 root root 188 Jul  4 17:33 p4.yml
drwxr-xr-x. 5 root root  47 Jul  4 17:35 roles
[root@ansible-server test_ansible]# cd roles
[root@ansible-server roles]# ls -lrth
total 12K
drwxr-xr-x. 9 root root 4.0K Jul  4 12:52 httpd
drwxr-xr-x. 9 root root 4.0K Jul  4 13:55 selinux
drwxr-xr-x. 9 root root 4.0K Jul  4 16:54 resolver

El libro de jugadas tiene tres funciones, una llamada resoluciรณn que establece un servidor de nombres especรญfico en los servidores copiando un archivo del servidor al destino /etc/resolv.conf. Otro se llama httpd e instala el paquete httpd con el mรณdulo yum, y el tercero habilita SELinux y notifica al usuario registrado que reinicie el sistema. Cada rol se creรณ usando el comando ansible-galaxy.

Funciรณn de resoluciรณn, tarea main.yml:

Estudio de caso de Ansible

Rol httpd, tarea main.yml:

Estudio de caso de Ansible

Rol de Selinux, tarea main.yml:

Estudio de caso de Ansible

A continuaciรณn se muestra el playbook p4.yml definido. Se ejecutarรก en todos los hosts si no se especifica lo contrario en la lรญnea de comandos, se ejecutarรก como usuario raรญz en el puerto 22 (SSH), recopilarรก datos antes de ejecutar los roles y ejecutarรก los tres roles mencionados anteriormente. Cada rol se puede ejecutar de forma independiente especificando la etiqueta en la lรญnea de comandos ansible-playbook con el parรกmetro โ€“t.

---

- hosts: all
  user: root
  port: 22
  gather_facts: True
  roles:
    - { role: selinux, tags: selinux }
    - { role: httpd, tags: httpd }
    - { role: resolver, tags: resolver }

Ejecutar el libro de jugadas p4.yml en dos hosts e interpretar el resultado. El mismo comando se puede ejecutar con el parรกmetro โ€“check para un ensayo. En caso de que desee utilizar la autenticaciรณn de contraseรฑa, utilice el parรกmetro -k.

Estudio de caso de Ansible

Explicaciรณn:

  1. Comando Ansible-playbook que ejecuta p4.yml
  2. Playbook omite la funciรณn SELinux porque ya estรก habilitada.
  3. Ansible descubriรณ que el paquete httpd ya estรก instalado, por lo que devuelve ok.
  4. Se configurรณ el solucionador y se cambiรณ el estado del solucionador de roles.

Hoja de referencia de comandos de Ansible

Instale el repositorio EPEL en sistemas Centos/RHEL

[root@ansible-server ~]# sudo yum install epel-release

Instalar el paquete ansible en sistemas Centos/RHEL

[root@ansible-server ~]# sudo  yum install -y ansible

Realizar una actualizaciรณn de los paquetes en Debian/Ubuntu sistemas

$ sudo apt update

Instale el paquete comรบn de propiedades de software en Debian/Ubuntu sistemas

$ sudo apt install software-properties-common

Instalar el archivo de paquetes personales de Ansible en Debian/Ubuntu sistemas

$ sudo apt-add-repository ppa:ansible/ansible

Instalar ansible en Debian/Ubuntu sistemas

$ sudo apt update
$ sudo apt install ansible

Emitir un comando ping en todos los servidores definidos en el archivo de inventario llamado hosts

 
[root@ansible-server test_ansible]# ansible -i hosts all -m ping

Emita un comando ping solo en host2

[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2

Copie el archivo "testfile" en todos los hosts en el archivo de inventario

[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"

Instale el paquete ncdu en todos los hosts

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'

Eliminar el paquete ncdu en todos los hosts

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'

Cree la estructura de directorios para el rol denominado rol1.

[root@ansible-server test2]# ansible-galaxy init role1

Manual de estrategias de ejecuciรณn en seco de p4.yml

[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml --check

Ejecute el libro de estrategias p4.yml con autenticaciรณn de contraseรฑa para todos los hosts

[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml -k

Resumen

En un mundo con tecnologรญa que cambia continuamente a un ritmo rรกpido y crece increรญblemente rรกpido al mismo tiempo, los administradores de sistemas y los ingenieros de DevOps deben pensar en diferentes enfoques sobre cรณmo automatizar tareas rutinarias y orquestar grandes grupos de servidores.

Si bien hay muchos alternativa a Ansible (Chef, Puppet) que hacen lo mismo con algunas diferencias, Ansible logrรณ superar a todos ellos con su simplicidad, seguridad mejorada y, lo mรกs importante, su suave curva de aprendizaje. Debido a estas cualidades y a la rรกpida adopciรณn de Ansible, creamos un tutorial lleno de ejemplos para que pueda tener una primera experiencia aรบn mรกs fluida al trabajar con Ansible.

En este tutorial bรกsico de Ansible, describimos Ansible y hablamos un poco sobre su historia. Mencionamos los puntos fuertes de Ansible y las ventajas que Ansible puede aportar a la automatizaciรณn y orquestaciรณn de infraestructuras de diferentes tamaรฑos. Definimos los tรฉrminos esenciales utilizados en Ansible y definimos la estructura de los playbooks de Ansible. Toda la informaciรณn se acompaรฑรณ de ejemplos completos con explicaciones detalladas.

Resumir este post con: