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 muy fácilmente a clientes que utilizan claves SSH, simplificando todo el proceso. cliente details, 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 podrá 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 al 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 later on, junto con RedHat, se movió 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.

  • Tarea

    Una tarea es una sección que consta de un único procedimiento a completar

  • Función

    Una forma de organizar tareas y archivos relacionados para ser later llamado en un libro de jugadas

  • Hecho

    Información obtenida del sistema cliente de las variables globales con la operación de recopilación de hechos

  • Inventario

    Archivo que contiene datos sobre los servidores del cliente ansible. Definido en later ejemplos como archivo de hosts

  • Juega

    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 se puede utilizar. later para emitir sólo esa tarea o grupo de tareas específicas.

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 sistemas Ubuntu/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 paquete personal ansible archive

$ 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.tails como las sumas de verificación sha1 o md5 para verificar la integridad del archivo y metadatos como propietario, tamaño o permisos. Es fácil tener un paquete instalado en varios servidores. Ansible tiene varios módulos que interactúan con instaladores usados, 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 de hardware, software y versiones del sistema y almacena cada valor en una variable que puede ser later en usado.

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 libros de jugadas de Ansible se utilizan para configurar com.plex entornos de sistemas para aumentar la flexibilidad mediante la ejecución de un script en uno o más sistemas. Los manuales 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 todo el details Preciso antes de continuar con los ejemplos del libro de jugadas de Ansible, primero debemos definir una tarea. Éstas son la interfaz de los módulos ansibles para roles y libros de jugadas.

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 libro de jugadas ansible funciona con un archivo de inventario. El archivo de inventario contiene una lista de servidores divididos en grupos para un mejor control details 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 cuando. En este caso, se mostrará un mensaje para el usuario anfitrión si SELinux estaba habilitado anteriormente.
  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 usar lo siguientewing 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 manual de estrategias de p4.yml definido. Se ejecutará en todos los hosts, excepto en otros.wise especificado en la línea de comando, se ejecutará como usuario root en el puerto 22 (SSH), recopilará datos antes de ejecutar los roles y ejecutará los tres roles mencionados anteriormente. Cada función se puede ejecutar de forma independiente especificando la etiqueta en la línea de comando de 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 sistemas Debian/Ubuntu

$ sudo apt update

Instale el paquete software-properties-common en sistemas Debian/Ubuntu

$ sudo apt install software-properties-common

Instalar el paquete personal ansible archive en sistemas Debian/Ubuntu

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

Instalar ansible en sistemas Debian/Ubuntu

$ 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 crecewing increíblemente rápido al mismo tiempo, los administradores de sistemas y los ingenieros de desarrollo deben pensar en diferentes enfoques sobre cómo automatizar tareas rutinarias y organizar 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 utilizados esenciales de Ansible y definimos la estructura de los manuales de Ansible. Ejemplos completos acompañaron toda la información con explicaciones detalladas.