LINUX

Introducción a Ansible en la línea de comandos

ANSIBLE es una plataforma de software de código abierto para la gestión de la configuración, el aprovisionamiento, la implementación de aplicaciones y la orquestación de servicios. Se puede utilizar para configurar nuestros servidores en producción, puesta en escena y desarrollos. También se puede utilizar para administrar servidores de aplicaciones como servidores web, servidores de bases de datos y muchos otros. Otros sistemas similares a la gestión de la configuración son CHEF, Puppet, SALT y Distelli, frente a todos estos ANSIBLE es la herramienta más sencilla y fácil de gestionar. La principal ventaja de usar Ansible es la siguiente:

1. Los módulos se pueden escribir en cualquier lenguaje de programación.
2. Ningún agente ejecutándose en la máquina cliente.
3. Fácil de instalar y administrar.
4. Altamente confiable.
5. Escalable

En este artículo, explicaré algunos de los conceptos básicos sobre sus primeros pasos con Ansible.

Entendiendo el archivo de hosts

Una vez que haya instalado Ansible, lo primero es comprender su archivo de inventario. Estos archivos contienen la lista de servidores de destino administrados por Ansible. La ubicación predeterminada del archivo de hosts es / etc / ansible / hosts. Podemos editar este archivo para incluir nuestros sistemas de destino. Este archivo especifica varios grupos en los que puede clasificar sus hosts según sus preferencias.

ansible_hosts

Como se mencionó aquí, cosas importantes a tener en cuenta al crear el archivo de hosts:

# – Los comentarios comienzan con el carácter «https://linoxide.com/linux-how-to/started-ansible-command-line/#»
# – Las líneas en blanco se ignoran
# – Los grupos de hosts están delimitados por [header] elementos
# – Puede ingresar nombres de host o direcciones IP
#: Un nombre de host / ip puede ser miembro de varios grupos
# – Los hosts remotos pueden tener asignaciones en más de un grupo
# – Incluya rangos de host en una cadena como servidor-[01:12]-ejemplo.com

PD: No se recomienda realizar modificaciones en el archivo de inventario predeterminado, en su lugar, podemos crear nuestros propios archivos de inventario personalizados en cualquier ubicación según nuestra conveniencia.

¿Cómo funciona Ansible?

En primer lugar, el cliente de administración de Ansible se conecta al servidor de destino mediante SSH. No necesitamos configurar ningún agente en los servidores del cliente. Todo lo que necesita es Python y un usuario que pueda iniciar sesión y ejecutar los scripts. Una vez que se establece la conexión, comienza a recopilar datos sobre la máquina cliente, como los sistemas operativos, los servicios en ejecución y los paquetes. Podemos ejecutar diferentes comandos, copiar / modificar / eliminar archivos y carpetas, administrar o configurar paquetes y servicios usando Ansible fácilmente. Lo demostraré con la ayuda de mi configuración de demostración.

Mis servidores cliente son 45.33.76.60 y 139.162.35.39. Creé mi archivo de hosts de inventario personalizado bajo mi usuario. Consulte mi archivo de inventario con tres grupos, a saber, servidores web, producción y pruebas.

En los servidores web, he incluido dos de mis servidores cliente. Y los separó en otros dos grupos como uno en producción y otro en pruebas.

linuxmonty@linuxmonty-Latitude-E4310:~$ cat hosts
[webservers]
139.162.35.39
45.33.76.60

[production]
139.162.35.39

[Testing]
45.33.76.60

Establecer conexiones SSH

Necesitamos crear las claves SSH para el servidor de administración y copiarlas en los servidores de destino para mejorar las conexiones SSH. Echemos un vistazo a cómo hice eso para mis servidores cliente.

linuxmonty@linuxmonty-Latitude-E4310:~$ # ssh-keygen -t rsa -b4096
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
2e:2f:32:9a:73:6d:ba:f2:09:ac:23:98:0c:fc:6c:a0 linuxmonty@linuxmonty-Latitude-E4310
The key's randomart image is:
+--[ RSA 4096]----+
| |
| |
| |
| |
|. S |
|.+ . |
|=.* .. . |
|Eoo*+.+o |
|o.+*=* .. |
+-----------------+

Copiar las claves SSH

Así es como copiamos las claves SSH del servidor de administración a los servidores de destino.

Cliente 1:

linuxmonty@linuxmonty-Latitude-E4310# ssh-copy-id root@139.162.35.39
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@139.162.35.39's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'root@139.162.35.39'"
and check to make sure that only the key(s) you wanted were added.

linuxmonty@linuxmonty-Latitude-E4310#

Cliente 2:

linuxmonty@linuxmonty-Latitude-E4310# ssh-copy-id root@45.33.76.60
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@139.162.35.39's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'root@45.33.76.60'"
and check to make sure that only the key(s) you wanted were added.

linuxmonty@linuxmonty-Latitude-E4310#

Una vez que ejecute estos comandos desde su servidor de administración, sus claves se agregarán a los servidores de destino y se guardarán en las claves autorizadas.

Familiarizarse con algunos módulos básicos de Ansible

Los módulos controlan los recursos del sistema, la configuración, los paquetes, los archivos, etc. Hay más de 450 módulos utilizados en Ansible. En primer lugar, usemos el módulo para verificar la conectividad entre su servidor de administración y los servidores de destino. Podemos ejecutar el silbido módulo de su servidor de administración para confirmar la conectividad.

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible -i hosts all -m ping -u root
139.162.35.39 | success >> {
"changed": false,
"ping": "pong"
}

45.33.76.60 | success >> {
"changed": false,
"ping": "pong"
}
-i : Represents the inventory file selection
-m : Represents the module name selection
-u : Represents the user for execution.

Dado que está ejecutando este comando como usuario para conectarse a los servidores de destino, debe cambiar al usuario raíz para la ejecución del módulo.

Así es como se verifica el estado del inventario en el archivo de hosts.

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible -i hosts webservers --list-hosts
139.162.35.39
45.33.76.60
linuxmonty@linuxmonty-Latitude-E4310:~$
linuxmonty@linuxmonty-Latitude-E4310:~$ ansible -i hosts production --list-hosts
139.162.35.39
linuxmonty@linuxmonty-Latitude-E4310:~$ ansible -i hosts Testing --list-hosts
45.33.76.60

Módulo de configuración

Ahora ejecuta el configuración módulo para recopilar más datos sobre sus servidores de destino para organizar sus libros de jugadas. Este módulo le proporciona la información sobre el hardware del servidor, la red y algunas de las configuraciones de software relacionadas con ansible. Estos hechos se pueden describir en la sección de libros de jugadas y representan variables descubiertas sobre su sistema. Estos también se pueden utilizar para implementar la ejecución condicional de tareas.

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible -i hosts all -m setup -u root

configuraciónPuede ver la arquitectura del servidor, la información de la CPU, la versión de Python, la memoria, la versión del sistema operativo, etc., ejecutando este módulo.

Módulo de mando

A continuación se muestran algunos ejemplos del uso del módulo de comando. Podemos pasar cualquier argumento a este módulo de comando para ejecutarlo.

tiempo de actividad:

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible -i hosts all -m command -a 'uptime' -u root
139.162.35.39 | success | rc=0 >>
14:55:31 up 4 days, 23:56, 1 user, load average: 0.00, 0.01, 0.05

45.33.76.60 | success | rc=0 >>
14:55:41 up 15 days, 3:20, 1 user, load average: 0.20, 0.07, 0.06

nombre de host:

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible -i hosts all -m command -a 'hostname' -u root
139.162.35.39 | success | rc=0 >>
client2.production.com

45.33.76.60 | success | rc=0 >>
client1.testing.com

w:

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible -i hosts all -m command -a 'w' -u root
139.162.35.39 | success | rc=0 >>
08:07:55 up 4 days, 17:08, 2 users, load average: 0.00, 0.01, 0.05
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 07:54 7:54 0.00s 0.00s -bash
root pts/1 08:07 0.00s 0.05s 0.00s w

45.33.76.60 | success | rc=0 >>
08:07:58 up 14 days, 20:33, 2 users, load average: 0.03, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 101.63.79.157 07:54 8:01 0.00s 0.00s -bash
root pts/1 101.63.79.157 08:07 0.00s 0.05s 0.00s w

De manera similar, podemos ejecutar cualquier comando de Linux en múltiples servidores de destino usando el módulo de comando en Ansible.

Gestión de usuarios y grupos

Ansible proporciona un módulo llamado «usuario» qué servidor tiene este propósito. El módulo de ‘usuario’ permite una fácil creación y manipulación de cuentas de usuario existentes, así como la eliminación de las cuentas de usuario existentes según nuestras necesidades.

Uso: # ansible -i selección de inventario -m usuario -a «nombre = nombre de usuario1 contraseña = «

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible -i hosts all -m user -a "name=adminsupport password=<default123>" -u root
45.33.76.60 | success >> {
"changed": true,
"comment": "",
"createhome": true,
"group": 1004,
"home": "/home/adminsupport",
"name": "adminsupport",
"password": "NOT_LOGGING_PASSWORD",
"shell": "/bin/bash",
"state": "present",
"system": false,
"uid": 1004
}

In the above server, this command initiates the creation of this adminsupport user. But in the server 139.162.35.39 this user is already present, hence, it skips any other modifications for that user.

139.162.35.39 | success >> {
"changed": true,
"comment": "",
"createhome": true,
"group": 1001,
"home": "/home/adminsupport",
"name": "adminsupport",
"password": "NOT_LOGGING_PASSWORD",
"shell": "/bin/bash",
"state": "present",
"stderr": "useradd: warning: the home directory already exists.nNot copying any file from skel directory into it.nCreating mailbox file: File existsn",
"system": false,
"uid": 1001
}

Uso: ansible -i selección de inventario -m usuario -a ‘nombre = nombre de usuario estado = ausente’

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible -i hosts Testing -m user -a "name=adminsupport state=absent" -u root
45.33.76.60 | success >> {
"changed": true,
"force": false,
"name": "adminsupport",
"remove": false,
"state": "absent"
}

Este comando elimina al usuario soporte administrativo desde nuestro servidor de pruebas 45.33.76.60.

Transferencias de archivos

Ansible proporciona un módulo llamado «Copiar» para mejorar las transferencias de archivos a través de múltiples servidores. Puede transferir de forma segura muchos archivos a varios servidores en paralelo.

Usage : ansible -i inventory selection -m copy -a «src=file_name dest=file path to save»

I’m copying a shell script called test.sh from my admin server to all my target servers /root. Please see the command usage below:

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible -i hosts all -m copy -a "src=test.sh dest=/root/" -u root
139.162.35.39 | success >> {
"changed": true,
"dest": "/root/test.sh",
"gid": 0,
"group": "root",
"md5sum": "d910e95fdd8efd48d7428daafa7706ec",
"mode": "0755",
"owner": "root",
"size": 107,
"src": "/root/.ansible/tmp/ansible-tmp-1463040011.67-93143679295729/source",
"state": "file",
"uid": 0
}

45.33.76.60 | success >> {
"changed": true,
"dest": "/root/test.sh",
"gid": 0,
"group": "root",
"md5sum": "d910e95fdd8efd48d7428daafa7706ec",
"mode": "0755",
"owner": "root",
"size": 107,
"src": "/root/.ansible/tmp/ansible-tmp-1463040013.85-235107847216893/source",
"state": "file",
"uid": 0
}

Resultado de salida

[root@client2 ~]# ll /root/test.sh
-rwxr-xr-x 1 root root 107 May 12 08:00 /root/test.sh

Si usa el libro de jugadas, puede aprovechar la plantilla del módulo para realizar la misma tarea.

También proporciona un módulo llamado «expediente» lo que nos ayudará a cambiar la propiedad y los permisos de los archivos en varios servidores. Podemos pasar estas opciones directamente al «Copiar» mando. Este módulo también se puede utilizar para crear o eliminar los archivos / carpetas.

Ejemplo :

Modifiqué las propiedades y los grupos de un archivo test.sh existente en el servidor de destino y cambié su permiso a 600.

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible -i hosts production -m file -a "dest=/root/test.sh mode=600 owner=adminsupport group=adminsupport" -u root
139.162.35.39 | success >> {
"changed": true,
"gid": 1001,
"group": "adminsupport",
"mode": "0600",
"owner": "adminsupport",
"path": "/root/test.sh",
"size": 107,
"state": "file",
"uid": 1001
}

Output :

[root@client2 ~]# ll | grep test.sh
-rw------- 1 adminsupport adminsupport 107 May 12 08:00 test.sh

Creando una carpeta

Ahora necesito crear una carpeta con la propiedad y los permisos deseados. Veamos el comando para adquirir eso. Estoy creando una carpeta «ansible» en mi grupo de servidores de producción y la asigno al propietario «adminsupport» con 755 permisos.

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible -i hosts production -m file -a "dest=/root/ansible mode=755 owner=adminsupport group=adminsupport state=directory" -u root
139.162.35.39 | success >> {
"changed": true,
"gid": 1001,
"group": "adminsupport",
"mode": "0755",
"owner": "adminsupport",
"path": "/root/ansible",
"size": 4096,
"state": "directory",
"uid": 1001
}

Producción :

[root@client2 ~]# ll | grep ansible
drwxr-xr-x 2 adminsupport adminsupport 4096 May 12 08:45 ansible
[root@client2 ~]# pwd
/root

Eliminar una carpeta

Incluso podemos usar este módulo para eliminar carpetas / archivos de múltiples servidores de destino. Por favor, vea cómo lo hice.

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible -i hosts production -m file -a "dest=/root/ansible state=absent" -u root
139.162.35.39 | success >> {
"changed": true,
"path": "/root/ansible",
"state": "absent"
}

La única variable que determina la operación es la variable arbitraria llamada «Expresar«, se modifica a ausente para eliminar esa carpeta en particular del servidor.

Gestionar paquetes

Veamos cómo podemos administrar paquetes usando Ansible. Necesitamos identificar la plataforma de los servidores de destino y usar los módulos de administrador de paquetes deseados, como yum o apt, que se adapten al propósito. Podemos usar apt o yum según la versión del sistema operativo del servidor de destino. También tiene módulos para administrar paquetes en muchas plataformas.

Instalando un paquete VsFTPD en mi servidor de producción en mi inventario.

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible -i hosts production -m yum -a 'name=vsftpd state=present' -u root
139.162.35.39 | success >> {
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirrornLoading mirror speeds from cached hostfilen * base: mirrors.linode.comn * epel: mirror.wanxp.idn * extras: mirrors.linode.comn * updates: mirrors.linode.comnResolving Dependenciesn--> Running transaction checkn---> Package vsftpd.x86_64 0:3.0.2-11.el7_2 will be installedn--> Finished Dependency ResolutionnnDependencies Resolvednn============================n Package Arch Version Repository Sizen===========================================nInstalling:n vsftpd x86_64 3.0.2-11.el7_2 updates 167 knnTransaction Summaryn===============================================nInstall 1 PackagennTotal download size: 167 knInstalled size: 347 knDownloading packages:nRunning transaction checknRunning transaction testnTransaction test succeedednRunning transactionn Installing : vsftpd-3.0.2-11.el7_2.x86_64 1/1 n Verifying : vsftpd-3.0.2-11.el7_2.x86_64 1/1 nnInstalled:n vsftpd.x86_64 0:3.0.2-11.el7_2 nnComplete!n"
]
}

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible -i hosts production -m yum -a 'name=vsftpd state=present' -u root
139.162.35.39 | success >> {
"changed": false,
"msg": "",
"rc": 0,
"results": [
"vsftpd-3.0.2-11.el7_2.x86_64 providing vsftpd is already installed"
]
}

Si se da cuenta, puede ver que, cuando ejecuto el comando ansible para instalar el paquete por primera vez, la variable «cambiada» era «verdadera», lo que significa que este comando ha instalado el paquete. Pero cuando ejecuté ese comando nuevamente, informó que la variable «cambió» como «falso», lo que significa que el comando verificó la instalación del paquete y descubrió que ya estaba instalado, por lo que no se hizo nada en ese servidor.

Del mismo modo, podemos actualizar o eliminar un paquete, la única variable que determina que es el variable de estado que se puede modificar para último para instalar el último paquete disponible y ausente para eliminar el paquete del servidor.

Ejemplos:

Actualizando el paquete

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible -i hosts production -m yum -a 'name=vsftpd state=latest' -u root
139.162.35.39 | success >> {
"changed": false,
"msg": "",
"rc": 0,
"results": [
"All packages providing vsftpd are up to date"
]
}

Esto afirma que el software instalado ya está en la última versión y no hay actualizaciones disponibles.

Retirar el paquete

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible -i hosts production -m yum -a 'name=vsftpd state=absent' -u root
139.162.35.39 | success >> {
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirrornResolving Dependenciesn--> Running transaction checkn---> Package vsftpd.x86_64 0:3.0.2-11.el7_2 will be erasedn--> Finished Dependency ResolutionnnDependencies Resolvednn================================================================================n Package Arch Version Repository Sizen================================================================================nRemoving:n vsftpd x86_64 3.0.2-11.el7_2 @updates 347 knnTransaction Summaryn================================================================================nRemove 1 PackagennInstalled size: 347 knDownloading packages:nRunning transaction checknRunning transaction testnTransaction test succeedednRunning transactionn Erasing : vsftpd-3.0.2-11.el7_2.x86_64 1/1 n Verifying : vsftpd-3.0.2-11.el7_2.x86_64 1/1 nnRemoved:n vsftpd.x86_64 0:3.0.2-11.el7_2 nnComplete!n"
]
}

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible -i hosts production -m yum -a 'name=vsftpd state=absent' -u root
139.162.35.39 | success >> {
"changed": false,
"msg": "",
"rc": 0,
"results": [
 "vsftpd is not installed"
]
}

La primera vez que ejecutamos el comando ansible, eliminó el paquete VsFTPD y luego lo ejecutamos nuevamente para confirmar que no existe ningún paquete en el servidor ahora.

Gestión de servicios

Es necesario administrar los servicios que están instalados en los servidores de destino. Ansible proporciona el módulo Servicio para lograr eso. Podemos usar este módulo para habilitar los servicios de arranque e inicio / parada / reinicio. Consulte los ejemplos de cada caso.

Iniciar / habilitar un servicio

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible -i hosts all -m service -a 'name=nginx enabled=yes state=started' -u root
45.33.76.60 | success >> {
"changed": false,
"enabled": true,
"name": "nginx",
"state": "started"
}

139.162.35.39 | success >> {
"changed": false,
"enabled": true,
"name": "nginx",
"state": "started"
}

Detención de un servicio

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible -i hosts all -m service -a 'name=nginx state=stopped' -u root
139.162.35.39 | success >> {
"changed": true,
"name": "nginx",
"state": "stopped"
}

45.33.76.60 | success >> {
"changed": true,
"name": "nginx",
"state": "stopped"
}

Reinicio de un servicio

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible -i hosts all -m service -a 'name=nginx state=restarted' -u root
139.162.35.39 | success >> {
"changed": true,
"name": "nginx",
"state": "started"
}

45.33.76.60 | success >> {
"changed": true,
"name": "nginx",
"state": "started"
}

Como puede ver, la variable de estado se modifica a estado iniciado, reiniciado y detenido para administrar el servicio.

Playbooks

Los Playbooks son el lenguaje de configuración, implementación y orquestación de Ansible. Pueden asignar diferentes roles, realizar tareas como copiar o eliminar archivos / carpetas, hacer uso de módulos maduros que cambian la mayor parte de la funcionalidad o sustituir variables para hacer que sus implementaciones sean dinámicas y reutilizables.

Los Playbooks definen los pasos y la configuración de su implementación. Son modulares y pueden contener variables. Se pueden utilizar para orquestar pasos en varias máquinas. Son archivos de configuración escritos en un archivo YAML simple, que es el lenguaje de automatización de Ansible. Pueden contener múltiples tareas y pueden hacer uso de módulos «maduros».

Aquí hay un ejemplo de un libro de jugadas simple.

linuxmonty@linuxmonty-Latitude-E4310:~$ cat simpleplbook.yaml
---

- hosts: production
remote_user: root

tasks:
- name: Setup FTP
yum: pkg=vsftpd state=installed
- name: start FTP
service: name=vsftpd state=started enabled=yes

Este es un libro de jugadas simple con dos tareas como se muestra a continuación:

  1. Instalar servidor FTP
  2. Asegurar el estado del servicio

Veamos cada declaración en detalle

– hosts: producción: selecciona el host de inventario para iniciar este proceso.

remote_user: root: especifica el usuario que debe ejecutar este proceso en los servidores de destino.

Tareas:
1. – nombre: Configurar FTP
2. yum: pkg = vsftpd state = installed
3. – nombre: iniciar FTP
4. servicio: nombre = estado vsftpd = iniciado habilitado = sí

Estos especifican las dos tareas que se deben realizar mientras se ejecuta este manual. Podemos dividirlo en cuatro declaraciones para mayor claridad. La primera declaración describe la tarea que consiste en configurar un servidor FTP y la segunda declaración la realiza eligiendo / instalando el paquete en el servidor de destino. La tercera declaración describe la siguiente tarea y la cuarta asegura el estado del servicio iniciando el servidor FTP y habilitándolo al arrancar.

Ahora veamos el resultado de este libro de jugadas.

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible-playbook -i hosts simpleplbook.yaml

PLAY [production] *************************************************************

GATHERING FACTS ***************************************************************
ok: [139.162.35.39]

TASK: [Setup FTP] *************************************************************
changed: [139.162.35.39]

TASK: [start FTP] *************************************************************
changed: [139.162.35.39]

PLAY RECAP ********************************************************************
139.162.35.39 : ok=3 changed=2 unreachable=0 failed=0

Podemos ver que los libros de jugadas se ejecutan secuencialmente de acuerdo con las tareas especificadas en el libro de jugadas. Primero elige el inventario y luego comienza a realizar las jugadas una a una.

Implementaciones de aplicaciones

Voy a configurar mis servidores web usando un libro de jugadas. Creé un manual de estrategias para mi grupo de inventario de «servidores web». Consulte los detalles de mi libro de jugadas a continuación:

linuxmonty@linuxmonty-Latitude-E4310:~$ cat webservers_setup.yaml
---

- hosts: webservers
vars:
- Welcomemsg: "Welcome to Ansible Application Deployment"

tasks:
- name: Setup Nginx
yum: pkg=nginx state=installed
- name: Copying the index page
template: src=index.html dest=/usr/share/nginx/html/index.html
- name: Enable the service on boot
service: name=nginx enabled=yes
- name: start Nginx
service: name=nginx state=started

Ahora ejecutemos este libro de jugadas desde mi servidor de administración para implementarlo.

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible-playbook -i hosts -s webservers_setup.yaml -u root

PLAY [webservers] *************************************************************

GATHERING FACTS ***************************************************************
ok: [139.162.35.39]
ok: [45.33.76.60]

TASK: [Setup Nginx] ***********************************************************
changed: [139.162.35.39]
changed: [45.33.76.60]

TASK: [Copying the index page] ************************************************
changed: [139.162.35.39]
changed: [45.33.76.60]

TASK: [Enable the service on boot] ********************************************
changed: [139.162.35.39]
changed: [45.33.76.60]

TASK: [start Nginx] ***********************************************************
changed: [139.162.35.39]
changed: [45.33.76.60]

PLAY RECAP ********************************************************************
139.162.35.39 : ok=5 changed=4 unreachable=0 failed=0
45.33.76.60 : ok=5 changed=4 unreachable=0 failed=0

Este libro de jugadas describe cuatro tareas evidentes a partir del resultado. Después de ejecutar este libro de jugadas, podemos confirmar el estado comprobando los servidores de destino en el navegador.

ansiblewebserver

Ahora, planeo agregar un módulo PHP a saber php-gd a los servidores de destino. Puedo editar mi libro de jugadas para incluir esa tarea también y ejecutarla nuevamente. Veamos qué pasa ahora. Mi libro de jugadas modificado es el siguiente:

linuxmonty @ linuxmonty-Latitude-E4310: ~ $ cat webservers_setup.yaml

- hosts: webservers
vars:
- Welcomemsg: "Welcome to Nginx default page"
- WelcomePHP: "PHP GD module enabled"

tasks:
- name: Setup Nginx
yum: pkg=nginx state=installed
- name: Copying the index page
template: src=index.html dest=/usr/share/nginx/html/index.html
- name: Enable the service on boot
service: name=nginx enabled=yes
- name: start Nginx
service: name=nginx state=started
- name: Setup PHP-GD
 yum: pkg=php-gd state=installed

Como puede ver, agrego estas líneas resaltadas a mi libro de jugadas. Así es como va ahora.

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible-playbook -i hosts -s webservers_setup.yaml -u root

PLAY [webservers] *************************************************************

GATHERING FACTS ***************************************************************
ok: [139.162.35.39]
ok: [45.33.76.60]

TASK: [Setup Nginx] ***********************************************************
ok: [139.162.35.39]
ok: [45.33.76.60]

TASK: [Copying the index page] ************************************************ 
changed: [139.162.35.39]
changed: [45.33.76.60]

TASK: [Enable the service on boot] ********************************************
ok: [139.162.35.39]
ok: [45.33.76.60]

TASK: [start Nginx] ***********************************************************
ok: [139.162.35.39]
ok: [45.33.76.60]

TASK: [Setup PHP-GD] ********************************************************** 
changed: [45.33.76.60]
changed: [139.162.35.39]

PLAY RECAP ********************************************************************
139.162.35.39 : ok=6 changed=2 unreachable=0 failed=0
45.33.76.60 : ok=6 changed=2 unreachable=0 failed=0

Al analizar de cerca este resultado, puede ver que solo dos secciones de este han informado modificaciones en los servidores de destino. Uno es la modificación del archivo de índice y otro es la instalación de nuestro módulo PHP adicional. Ahora podemos evidenciar los cambios para los servidores de destino en el navegador.

PHPmodule + Nginx

Roles

Los roles de Ansible son un tipo especial de libros de jugadas que son completamente autónomos y portátiles. Los roles contienen tareas, variables, plantillas de configuración y otras tareas de apoyo que necesitan completar una orquestación compleja. Los roles se pueden utilizar para simplificar operaciones más complejas. Puede crear diferentes roles como common, webservers, db_servers, etc. categorizando con diferentes propósitos e incluirlos en el libro de jugadas principal con solo mencionar los roles. Así es como creamos los roles.

linuxmonty@linuxmonty-Latitude-E4310:~$ ansible-galaxy init common
common was created successfully

Ahora, he creado un rol llamado común para realizar algunas de las tareas comunes en todos mis servidores de destino. Cada rol contiene sus tareas individuales, plantillas de configuración, variables, controladores, etc.

total 40
drwxrwxr-x 9 linuxmonty linuxmonty 4096 May 13 14:06 ./
drwxr-xr-x 34 linuxmonty linuxmonty 4096 May 13 14:06 ../
drwxrwxr-x 2 linuxmonty linuxmonty 4096 May 13 14:06 defaults/
drwxrwxr-x 2 linuxmonty linuxmonty 4096 May 13 14:06 files/
drwxrwxr-x 2 linuxmonty linuxmonty 4096 May 13 14:06 handlers/
drwxrwxr-x 2 linuxmonty linuxmonty 4096 May 13 14:06 meta/
-rw-rw-r-- 1 linuxmonty linuxmonty 1336 May 13 14:06 README.md
drwxrwxr-x 2 linuxmonty linuxmonty 4096 May 13 14:06 tasks/
drwxrwxr-x 2 linuxmonty linuxmonty 4096 May 13 14:06 templates/
drwxrwxr-x 2 linuxmonty linuxmonty 4096 May 13 14:06 vars/

Podemos crear nuestro archivo YAML dentro de cada una de estas carpetas según nuestro propósito. Más adelante, podemos ejecutar todas estas tareas simplemente especificando estos roles dentro de un libro de jugadas. Puede obtener más detalles sobre los roles de Ansible aquí.

Espero que esta documentación le proporcione los conocimientos básicos sobre cómo administrar sus servidores con Ansible. Gracias por leer esto. Recomendaría sus valiosas sugerencias y comentarios al respecto.

¡Feliz Automatización!

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar