Tutorial para principiantes: manuales, variables e inventario de Ansible

Beginner S Tutorial Ansible Playbooks



Los libros de jugadas de Ansible son archivos que contienen tareas que se ejecutan para configurar los hosts con Ansible. Los libros de jugadas de Ansible están escritos en formato YAML. YAML es un formato de archivo muy simple como JSON. Le mostraré cómo se ven los libros de jugadas de Ansible YAML en una sección posterior de este artículo.

Los archivos de inventario de Ansible mantienen una lista de los hosts que desea configurar o administrar con Ansible. También puede agrupar estos hosts y administrarlos por grupos. También puede pasar diferentes variables para cada host o para un grupo de hosts.







En este artículo, le mostraré cómo trabajar con libros de jugadas de Ansible, variables, archivos de inventario y algunos módulos comunes de Ansible con ejemplos prácticos. Entonces, ¡comencemos!



Prerrequisitos

Si desea probar los ejemplos de este artículo,



1) Debe tener Ansible instalado en su computadora.
2) Debe tener al menos un host Ubuntu / Debian y un host CentOS / RHEL 8 configurado para la automatización de Ansible.





Hay muchos artículos sobre LinuxHint dedicados a la instalación de Ansible y la configuración de hosts para la automatización de Ansible. Puede consultar estos artículos si es necesario para obtener más información.

Crear un directorio de proyectos

Primero, crea un directorio de proyecto ~ / proyecto / con el siguiente comando:

$mkdir -pv~/proyecto/libros de jugadas

Navega al ~ / proyecto / directorio de la siguiente manera:

$cd~/proyecto

Archivo de inventario básico:

Cree un archivo de inventario de Ansible Hospedadores en el directorio del proyecto con el siguiente comando:

$nanoHospedadores

Puede escribir las direcciones IP de los hosts que desea configurar / automatizar usando Ansible en el Hospedadores archivo de inventario.

192.168.20.167
192.168.20.168
192.168.20.169
192.168.20.170

Una vez que haya terminado con este paso, guarde el archivo presionando + X seguido por Y y .

Si desea utilizar nombres DNS en lugar de direcciones IP en el archivo de inventario, también puede hacerlo.

Si no tiene un servidor DNS que funcione, puede usar el / etc / hosts archivo en su computadora para la resolución de DNS local.

Para la resolución de DNS local, abra el / etc / hosts archivo con un editor de texto ( nano , en mi caso) de la siguiente manera:

$sudo nano /etc/Hospedadores

Escriba las direcciones IP y los nombres DNS que desee de la siguiente manera:

192.168.20.167 vm1.nodekite.com
192.168.20.168 vm2.nodekite.com
192.168.20.169 vm3.nodekite.com
192.168.20.170 vm4.nodekite.com

Una vez que haya terminado con este paso, presione + X seguido por Y y .

Abra el archivo de inventario de Ansible Hospedadores como sigue:

$nanoHospedadores

Ahora puede escribir los nombres DNS de los hosts que desea configurar / automatizar usando Ansible en el Hospedadores archivo de inventario.

vm1.nodekite.com
vm2.nodekite.com
vm3.nodekite.com
vm4.nodekite.com

Una vez que haya terminado, guarde el archivo de inventario de hosts presionando + X seguido por Y y .

Prueba de la conectividad a todos los hosts

Ahora, puede intentar hacer ping a todos los hosts en el archivo de inventario de la siguiente manera:

$ansible-Ialoja a todos-uansible-metro silbido

Como puede ver, se puede acceder a todos los hosts del archivo de inventario. Entonces, estamos listos para pasar a la siguiente sección de este artículo.

Tu primer libro de jugadas de Ansible

Creemos un libro de jugadas simple de Ansible ping_all_hosts.yaml en el libros de jugadas / directorio. Esta acción hará ping a todos los hosts en el Hospedadores archivo de inventario, como antes.

$nanolibros de jugadas/ping_all_hosts.yaml

Escriba las siguientes líneas en el ping_all_hosts.yaml Archivo de libro de jugadas de Ansible:

- hosts: todos
usuario: ansible
Tareas:
- nombre: hacer ping a todos los hosts
silbido:

Aquí,

hosts: todos - selecciona todos los hosts del archivo de inventario Hospedadores .
usuario: ansible - le dice a Ansible que SSH en los hosts en el archivo de inventario como el ansible usuario.
Tareas - Todas las tareas que Ansible ejecutará en los hosts se enumeran aquí. Cada una de las tareas suele tener un nombre y una o más opciones específicas del módulo.

El libro de jugadas ping_all_hosts.yaml tiene solo una tarea, hacer ping a todos los hosts en el archivo de inventario Hospedadores . El nombre de la tarea es Hacer ping a todos los hosts y usa el silbido módulo.

los silbido módulo no necesita ninguna otra opción. Entonces, lo dejé vacío (no hay nada después de los dos puntos, : )

Una vez que haya terminado con este paso, guarde el archivo presionando + X seguido por Y y .

Puede ejecutar el ping_all_hosts.yaml Libro de jugadas de Ansible de la siguiente manera:

$ansible-playbook-Ialoja libros de jugadas/ping_all_hosts.yaml

Como puede ver, la tarea de ping se realiza correctamente en todos los hosts del archivo de inventario.

Archivo de configuración simple de Ansible

En el ejemplo anterior, tenía que usar el -I opción para decirle a Ansible qué archivo de inventario usar. En mi caso, es el Hospedadores archivo de inventario.

$ansible-playbook-Ialoja libros de jugadas/ping_all_hosts.yaml

Si no desea pasar un archivo de inventario con el -I cada vez que ejecute un libro de jugadas de Ansible, todo lo que tiene que hacer es establecer un archivo de inventario predeterminado para su proyecto.

Para hacer eso, cree un nuevo archivo de configuración de Ansible ansible.cfg en la raíz de su proyecto de la siguiente manera:

$nanoansible.cfg

Escriba las siguientes líneas en el ansible.cfg expediente:

[valores predeterminados]
inventario =./Hospedadores

Una vez que haya terminado, guarde el archivo presionando + X seguido por Y y .

Puede ejecutar el mismo libro de jugadas de Ansible de la siguiente manera:

$libros de jugadas ansible-playbook/ping_all_hosts.yaml

Como puede ver, el libro de jugadas usa el Hospedadores archivo de inventario de forma predeterminada. Todavía puede usar el -I opción para especificar un archivo de inventario diferente, si lo desea. Ansible es muy flexible.

Agrupar hosts en el archivo de inventario

Hasta ahora, le he mostrado cómo ejecutar un conjunto de tareas (libro de jugadas) en todos los hosts del archivo de inventario. Pero, ¿qué sucede si desea ejecutar un conjunto de tareas en algunos de los hosts y otro conjunto de tareas en otros hosts? Puede agrupar los hosts en el archivo de inventario y ejecutar diferentes tareas en los grupos de hosts.

En esta sección, le mostraré cómo agrupar hosts en el archivo de inventario y cómo trabajar con grupos de hosts.

Primero, abra el archivo de inventario Hospedadores como sigue:

$nanoHospedadores

Escriba las siguientes líneas en el Hospedadores archivo de inventario:

[debian10]
vm1.nodekite.com
vm2.nodekite.com
[centos8]
vm3.nodekite.com
vm4.nodekite.com

Aquí, he creado dos grupos de hosts: debian10 y centos8 .

En el debian10 grupo, tengo dos hosts: vm1.nodekite.com y vm2.nodekite.com

En el centos8 grupo, tengo dos hosts: vm3.nodekite.com y vm4.nodekite.com

Una vez que haya terminado, guarde el archivo presionando + X seguido por Y y .

Ahora crearemos un nuevo libro de jugadas. ping_debian10_hosts.yaml , que hará ping a los hosts como antes, pero solo a los hosts en el debian10 grupo de acogida.

Crea un libro de jugadas ping_debian10_hosts.yaml en el libros de jugadas / directorio de la siguiente manera:

$nanolibros de jugadas/ping_debian10_hosts.yaml

Escriba las siguientes líneas en el ping_debian10_hosts.yaml Libro de jugadas de Ansible:

- hosts: debian10
usuario: ansible
Tareas:
- nombre: hacer ping a todo Debian10Hospedadores
silbido:

En lugar de hosts: todos , Yo he añadido hosts: debian10 aquí. debian10 es el grupo anfitrión. Este libro de jugadas se ejecutará solo en los hosts en el debian10 grupo de acogida.

Una vez que haya terminado, guarde el archivo presionando + X seguido por Y y .

Ejecute el libro de jugadas de la siguiente manera:

$libros de jugadas ansible-playbook/ping_debian10_hosts.yaml

Como puede ver, solo los hosts en el debian10 se hace ping al grupo de host.

Usando el mismo método, crea otro libro de jugadas ping_centos8_hosts.yaml como sigue:

$nanolibros de jugadas/ping_centos8_hosts.yaml

Escriba las siguientes líneas en el ping_centos8_hosts.yaml Libro de jugadas de Ansible:

- anfitriones: centos8
usuario: ansible
Tareas:
- nombre: hacer ping a todos los CentOS8Hospedadores
silbido:

De la misma manera, he agregado anfitriones: centos8 aquí. centos8 es el grupo anfitrión. Este libro de jugadas se ejecutará solo en los hosts en el centos8 grupo de acogida.

Una vez que haya terminado, guarde el archivo presionando + X seguido por Y y .

Ejecute el libro de jugadas de la siguiente manera:

$libros de jugadas ansible-playbook/ping_centos8_hosts.yaml

Como puede ver, solo los hosts en el centos8 se hace ping al grupo de host.

Tipos de variables de Ansible

Hay diferentes tipos de variables en Ansible. Los principales tipos de variables son Variables de Ansible Facts y Variables definidas por el usuario .

Variables de Ansible Facts: Dependiendo del host en el que esté trabajando Ansible, Ansible genera variables de hechos de Ansible. Las variables de hechos de Ansible contienen información sobre el host, como direcciones IP, nombre de host, nombre de dominio, fecha, hora, variables de entorno de shell y más.

Variables definidas por el usuario: Estas son variables personalizadas definidas por el usuario. Puede pasar variables definidas por el usuario desde la línea de comandos o utilizando el archivo de inventario.

Principalmente, las variables definidas por el usuario son de dos tipos: Variables de grupo y Variables de host .

Precedencia variable de Ansible

La precedencia variable de Ansible es : Variables de línea de comando > Variables de host > Variables de grupo

Si establece la misma variable que la variable del lenguaje principal y la variable de grupo, se aplicará la variable del lenguaje principal.

De manera similar, las variables que establezca desde la línea de comandos mientras ejecuta un libro de jugadas reemplazarán tanto las variables del host como las del grupo.

Trabajar con variables de hechos de Ansible

En esta sección, le mostraré cómo trabajar con variables de hechos de Ansible. Entonces, ¡comencemos!

Puede enumerar todas las variables de Ansible Facts de los hosts en su Hospedadores archivo de inventario de la siguiente manera:

$ansible todo-uansible-metroconfiguración

Como puede ver, todas las variables de Ansible Facts se enumeran en formato JSON. Es una lista muy larga.

Como la lista es bastante larga, puede abrirla con un programa de buscapersonas como menos como sigue:

$ansible todo-uansible-metroconfiguración| menos

Ahora, puede desplazar la salida hacia arriba, abajo, izquierda y derecha según sea necesario.

También puede buscar nombres de variables en el localizador. Para hacer eso, presione el / tecla en su teclado. Luego, escriba la cadena de búsqueda ( nombre de host en mi caso) y presione .

Como puede ver, la variable de hechos de Ansible que coincide con la cadena de búsqueda es ansible_hostname . Puede presionar norte para ir al siguiente partido y PAG para ir a la coincidencia anterior del buscapersonas. Así es como encuentra la variable de hechos de Ansible que necesita para su proyecto de Ansible.

Veamos ahora cómo acceder a las variables de hechos de Ansible.

Crea un nuevo libro de jugadas print_variable1.yaml como sigue:

$nanolibros de jugadas/print_variable1.yaml

Escriba las siguientes líneas en el print_variable1.yaml expediente:

- hosts: todos
usuario: ansible
Tareas:
- nombre: Imprimirnombre de hostde todos los anfitriones
depurar:
msg:'{{ansible_hostname}}'

Aquí, he agregado una tarea Imprimir el nombre de host de todos los hosts . Esta tarea utiliza el Ansible depurar módulo para imprimir un mensaje cuando se ejecuta el libro de jugadas.

msg es el único parámetro obligatorio del depurar módulo. los msg El parámetro acepta una cadena entre comillas, que es el mensaje que se imprimirá en la consola.

Aquí, {{ nombre de la variable }} El formato se utiliza para acceder a una variable. En este caso, {{ansible_hostname}} se utiliza para imprimir el ansible_hostname variable de cada uno de los hosts en el archivo de inventario.

Una vez que haya terminado, guarde el archivo presionando + X seguido por Y y .

También puede acceder a la variable de hechos de Ansible como ansible_facts [variable_name] . Entonces el ansible_hostname la variable se convertirá en ansible_facts [nombre de host] .

Podemos reescribir el print_variable1.yaml libro de jugadas como este también. Obtendremos el mismo resultado.

- hosts: todos
usuario: ansible
Tareas:
- nombre: Imprimirnombre de hostde todos los anfitriones
depurar:
msg:'{{ansible_facts [' variable_name ']}}'

Ejecuta el libro de jugadas print_variable1.yaml como sigue:

$libros de jugadas ansible-playbook/print_variable1.yaml

Como puede ver, el nombre de host de cada uno de los hosts en el archivo de inventario está impreso en la consola.

Imprimamos ahora la dirección IPv4 predeterminada de cada host junto con el nombre de host. Como puede ver, se puede acceder a la dirección IPv4 predeterminada del host mediante el Dirección propiedad de la ansible_default_ipv4 objeto.

Crea un nuevo libro de jugadas print_variable2.yaml como sigue:

$nanolibros de jugadas/print_variable2.yaml

Escriba las siguientes líneas en el print_variable2.yaml expediente:

- hosts: todos
usuario: ansible
Tareas:
- nombre: Imprimirnombre de hostde todos los anfitriones
depurar:
msg:'{{ansible_hostname}} - {{ansible_default_ipv4.address}}'

Este libro de jugadas es el mismo que antes. La única diferencia es la nueva variable. {{ansible_default_ipv4.address}} en el msg opción de la depurar módulo.

Una vez que haya terminado, guarde el archivo presionando + X seguido por Y y .

Ejecutar el print_variable2.yaml libro de jugadas de la siguiente manera:

$libros de jugadas ansible-playbook/print_variable2.yaml

Como puede ver, la dirección IPv4 predeterminada y el nombre de host de los hosts están impresos en la consola.

Entonces, así es como trabaja con las variables de Ansible Facts.

Configuración de variables definidas por el usuario desde la línea de comandos:

En esta sección, le mostraré cómo configurar variables definidas por el usuario desde la línea de comandos mientras ejecuta los libros de jugadas de Ansible.

Primero, crea un nuevo libro de jugadas print_variable3.yaml como sigue:

$nanolibros de jugadas/print_variable3.yaml

Escriba las siguientes líneas en el print_variable3.yaml expediente:

- hosts: todos
usuario: ansible
Tareas:
- nombre: Imprimirmandovariable de línea
depurar:
msg:'Bienvenido {{username}}'

Aquí, he usado el depurar módulo para imprimir el mensaje Bienvenido {{username}} . nombre de usuario es una variable que se sustituirá cuando ejecutemos el libro de jugadas.

Una vez que haya terminado, guarde el archivo presionando + X seguido por Y y .

Ejecuta el libro de jugadas print_variable3.yaml como sigue:

$ansible-playbook-Y 'nombre de usuario = Bob'libros de jugadas/print_variable3.yaml

NOTA: Aquí, -Y se utiliza para pasar una nombre de usuario variable con el valor Beto al libro de jugadas print_variable3.yaml desde la línea de comando.

Como puede ver, el mensaje Bienvenido Bob está impreso en la consola.

Descubramos ahora cómo pasar múltiples variables desde la línea de comandos.

Crea un nuevo libro de jugadas print_variable4.yaml como sigue:

$nanolibros de jugadas/print_variable4.yaml

Escriba las siguientes líneas en el print_variable4.yaml expediente:

- hosts: todos
usuario: ansible
Tareas:
- nombre: Imprime variables definidas por el usuario
depurar:
msg:'username = {{username}} http_port = {{http_port}}'

El libro de jugadas debería resultarle muy familiar en este momento. Todo lo que hace es imprimir las 2 variables nombre de usuario y http_port en la consola.

Una vez que haya terminado, guarde el archivo presionando + X seguido por Y y .

Ahora puede pasar el nombre de usuario y http_port variable al libro de jugadas usando dos diferentes -Y opción de la siguiente manera:

$ ansible-playbook-Y 'nombre de usuario = Bob' -Y 'http_port = 8080'
libros de jugadas/print_variable4.yaml

O simplemente puede separar las variables con un espacio en blanco, de la siguiente manera:

$ ansible-playbook-Y 'nombre de usuario = Bob http_port = 8080'
libros de jugadas/print_variable4.yaml

Como puede ver, el nombre de usuario y http_port las variables están impresas en la consola.

Trabajar con variables de grupo definidas por el usuario

Digamos que desea agregar algunas variables a un grupo de hosts. Esta acción es muy fácil de hacer en Ansible.

Primero, abre tu Hospedadores archivo de inventario de la siguiente manera:

$nanoHospedadores

Escriba las siguientes líneas en su Hospedadores archivo de inventario:

[debian10]
vm1.nodekite.com
vm2.nodekite.com
[debian10: vars]
nombre de usuario = Lily
http_port =4343
[centos8]
vm3.nodekite.com
vm4.nodekite.com
[centos8: vars]
nombre de usuario = Bob
http_port =7878

Como puede ver, he creado una nueva sección. [debian10: vars] por debian10 grupo de host y agregó las variables ( nombre de usuario y http_port ) por debian10 grupo anfitrión allí.

De la misma manera, he creado una nueva sección. [centos8: vars] por centos8 grupo de host y agregó las variables ( nombre de usuario y http_port ) por centos8 grupo anfitrión allí.

Una vez que haya terminado, guarde el Hospedadores archivo de inventario presionando + X seguido por Y y .

Ejecutar el print_variable4.yaml libros de jugadas de la siguiente manera:

$libros de jugadas ansible-playbook/print_variable4.yaml

Como puede ver, las variables correctas se pasan a cada uno de los hosts en función de su grupo de hosts.

Trabajar con variables de host definidas por el usuario

En esta sección, le mostraré cómo configurar variables para hosts específicos en el archivo de inventario.

Primero, abra el Hospedadores archivo de inventario de la siguiente manera:

$nanoHospedadores

Para agregar variables a un host específico (digamos, vm1.nodekite.com ), simplemente agregue un espacio / pestaña después del nombre de IP / DNS del host y escriba sus variables, como se muestra en la captura de pantalla a continuación.

También puede agregar múltiples variables. Simplemente separe cada variable con un espacio.

Una vez que haya terminado, guarde el archivo de inventario presionando + X seguido por Y y .

Ejecutar el print_variable4.yaml libros de jugadas de la siguiente manera:

$libros de jugadas ansible-playbook/print_variable4.yaml

Como puede ver, las variables solo se establecen para el vm1.nodekite.com anfitrión. Los otros hosts tienen aplicadas variables de grupo.

Generación de archivos de inventario rápidamente con rangos

Puede usar rangos para generar rápidamente archivos de inventario de Ansible si sus direcciones IP de host o nombres DNS son consistentes (es decir, tienen un formato específico).

En los ejemplos anteriores, he usado los hosts vm1.nodekite.com , vm2.nodekite.com , vm3.nodekite.com y vm4.nodekite.com . En lugar de escribir 4 líneas, podría haber escrito vm [1: 4] .nodekite.com en el archivo de inventario.

Para experimentar con rangos, abra el Hospedadores archivo de inventario de la siguiente manera:

$nanoHospedadores

Elimine todos los hosts y las variables de los archivos de inventario.

Ahora podemos reemplazar vm1.nodekite.com y vm2.nodekite.com con vm [1: 2] .nodekite.com por debian10 grupo anfitrión de la siguiente manera.

De la misma manera, podemos reemplazar vm3.nodekite.com y vm4.nodekite.com con vm [3: 4] .nodekite.com por centos8 grupo de acogida.

Una vez que haya terminado, guarde el archivo presionando + X seguido por Y y .

Ejecutar el ping_all_hosts.yaml como sigue:

$libros de jugadas ansible-playbook/ping_all_hosts.yaml

Como puede ver, los rangos de host se ampliaron cuando ejecuté el libro de jugadas.

Almacenamiento de variables en diferentes archivos

Almacenar las variables de grupo y las variables del lenguaje principal en el mismo archivo de inventario es muy fácil. Pero es posible que esté buscando más flexibilidad. Especialmente cuando desea usar rangos en su archivo de inventario, ya que ya no puede establecer variables de host si usa rangos. Bueno, puede almacenar variables de grupo y variables de host en diferentes archivos. En esta sección, le mostraré cómo se hace.

De forma predeterminada, Ansible busca variables de grupo en el group_vars / directorio y variables de host en el host_vars / directorio.

Entonces, crea el group_vars / y host_vars / directorio de la siguiente manera:

$mkdir -pv {anfitrión, grupo}_cuyo

Para establecer variables de grupo para el debian10 grupo de host, crea un archivo debian10 (igual que el nombre del grupo) en el group_vars / directorio de la siguiente manera:

$nanogroup_vars/debian10

Escriba sus variables de la siguiente manera:

nombre de usuario: Lily
http_port: 4343

Una vez que haya terminado, guarde el archivo presionando + X seguido de Y y .

De la misma manera, para establecer variables de grupo para el centos8 grupo de host, crea un archivo centos8 (igual que el nombre del grupo) en el group_vars / directorio de la siguiente manera:

$nanogroup_vars/centos8

Escriba sus variables de la siguiente manera:

nombre de usuario: Bob
http_port: 7878

Una vez que haya terminado, guarde el archivo presionando + X seguido de Y y .

Ejecutar el print_variable4.yaml libro de jugadas de la siguiente manera:

$libros de jugadas ansible-playbook/print_variable4.yaml

Como puede ver, las variables de grupo están configuradas correctamente para cada grupo de hosts.

Para establecer variables de host para el host vm1.nodekite.com , crea un archivo vm1.nodekite.com (igual que el nombre de host o la dirección IP) en el host_vars / directorio de la siguiente manera:

$nanovm1.nodekite.com

Escriba sus variables de host de la siguiente manera:

nombre de usuario: Alex
http_port: 7788

Una vez que haya terminado, guarde el archivo presionando + X seguido de Y y .

Ejecutar el print_variable4.yaml libro de jugadas de la siguiente manera:

$ ansible-playbook playbooks/print_variable4.yaml
[

Como puede ver, las variables del host están configuradas correctamente para el host vm1.nodekite.com .

Trabajar con bucles en Ansible

En esta sección, le mostraré cómo usar bucles en Ansible.

Primero, crea un nuevo libro de jugadas loop1.yaml en el libros de jugadas / directorio de la siguiente manera:

$nanolibros de jugadas/loop1.yaml

Escriba las siguientes líneas en el loop1.yaml playbook:

- hosts: todos
usuario: ansible
Tareas:
- nombre: Imprimir lista de usuarios
depurar:
msg:'Usuario: {{item}}'
with_items:
- Alex
- Beto
- Lily

Aquí, tengo 1 tarea que imprime una lista de usuarios que usan loop.

Para establecer los valores de iteración para la tarea, use el with_items módulo. Luego, agrega los valores uno por uno.

with_items:
- Alex
- Beto
- Lily

Accede al valor de la iteración actual usando el artículo variable.

depurar:
msg:'Usuario: {{item}}'

Una vez que haya terminado, guarde el archivo presionando + X seguido por Y y .

Ejecutar el loop1.yaml libro de jugadas de la siguiente manera:

$libros de jugadas ansible-playbook/loop1.yaml

Como puede ver, se ejecutó la misma tarea para cada elemento en cada host. Entonces, el ciclo está funcionando.

Trabajar con condiciones en Ansible

Si desea ejecutar tareas en función de determinadas condiciones, esta sección es para usted.

Para ejecutar tareas según la condición, puede utilizar el cuando módulo de Ansible. Veamos un ejemplo de este módulo. Primero, crea un nuevo libro de jugadas condition1.yaml como sigue:

$nanolibros de jugadas/condition1.yaml

Escriba las siguientes líneas en el condition1.yaml playbook:

- hosts: todos
usuario: ansible
Tareas:
- nombre: ejecuta esta tarea solo en Debian
depurar:
msg:'esta tarea se está ejecutando en Debian'
cuando: ansible_facts['distribución']=='Debian'

Aquí,

ansible_facts ['distribución'] == 'Debian' se utiliza para comprobar si el distribución es Debian . La tarea se ejecutará solo si la distribución es Debian.

los ansible_facts ['distribución'] se utiliza para acceder a la variable Ansible Facts ansible_distribution . También puede comprobar la versión de distribución utilizando el ansible_distribution_major_version variable.

Una vez que haya terminado, guarde el archivo presionando + X seguido por Y y .

Ejecutar el condition1.yaml libro de jugadas de la siguiente manera:

$libros de jugadas ansible-playbook/condition1.yaml

Como puede ver, la tarea se ejecutó solo en los hosts de Debian. La tarea no se ejecutó en los hosts de CentOS.

También puede verificar varias condiciones al mismo tiempo y ejecutar la tarea solo si todas las condiciones son verdaderas. Veamos un ejemplo.

Crea un nuevo libro de jugadas condition2.yaml como sigue:

$nanolibros de jugadas/condition2.yaml

Escriba las siguientes líneas en el condition2.yaml expediente:

- hosts: todos
usuario: ansible
Tareas:
- nombre: ejecuta esta tarea solo en Debian10
depurar:
msg:'esta tarea se está ejecutando en Debian 10'
cuando: ansible_facts['distribución']=='Debian'
y ansible_facts['distribución_versión_principal']=='10'

Aquí, la tarea solo se ejecutará si la distribución es Debian ( ansible_facts ['distribución'] == 'Debian' ) y la versión es 10 ( ansible_facts [‘distribution_major_version’] == ’10’ ). Si ambas condiciones son verdaderas, la tarea se ejecutará. De lo contrario, la tarea no se ejecutará.

He usado el y palabra clave para comprobar si ambas condiciones son verdaderas aquí. Si desea comprobar si alguna de las condiciones es verdadera, puede utilizar el o palabra clave en su lugar.

Una vez que haya terminado, guarde el archivo presionando + X seguido por Y y .

Ejecuta el libro de jugadas condition2.yaml como sigue:

$libros de jugadas ansible-playbook/condition2.yaml

Como puede ver, la tarea se ejecutó solo en los hosts de Debian 10.

Cambiemos el libro de jugadas condition2.yaml para ejecutar la tarea solo en hosts Debian 8 de la siguiente manera.

Como puede ver, se omitieron todos los hosts porque no tengo ningún host Debian 8 en el archivo de inventario.

Trabajar con el módulo apt de Ansible

los apto El módulo de Ansible se utiliza para instalar un paquete de software específico en hosts Ubuntu / Debian. Veamos cómo utilizar este módulo.

Primero, crea un nuevo libro de jugadas apt1.yaml en el libros de jugadas / directorio de la siguiente manera:

$nanolibros de jugadas/apt1.yaml

Escriba las siguientes líneas en el apt1.yaml playbook:

- hosts: debian10
usuario: ansible
hecho realidad
Tareas:
- nombre: Instalar apache2
apto:
nombre: apache2
estado: último

los apto módulo requiere sólo el nombre del paquete que desea instalar / actualizar / eliminar y el estado del paquete.

Aquí, estoy intentando instalar el apache2 paquete ( nombre: apache2 ) en mis hosts Debian 10. Como intento instalar un paquete y también actualizarlo si hay una nueva versión disponible, el estado debiera ser más reciente .

estado también acepta las siguientes opciones:

ausente - El paquete se eliminará si ya está instalado.
más reciente - El paquete se actualizará si hay una actualización disponible. Si el paquete aún no está instalado, se instalará.
regalo - El paquete se instalará si aún no está instalado. Pero el paquete no se actualizará si hay una actualización disponible.

Note que he agregado hecho realidad en el libro de jugadas. Esto le dará al ansible privilegios de sudo de usuario para modificar la estructura del sistema de archivos (es decir, instalar / actualizar / eliminar paquetes). Sin hecho realidad , los apto módulo no podrá instalar el apache2 paquete.

Una vez que haya terminado, guarde el libro de jugadas presionando + X seguido por Y y .

Ejecutar el apt1.yaml libro de jugadas de la siguiente manera:

$libros de jugadas ansible-playbook/apt1.yaml

Como puede ver, el libro de jugadas se ejecutó con éxito en los hosts de Debian 10.

Como puede ver, el apache2 El paquete está instalado en mis hosts Debian 10.

Trabajar con el módulo dnf / yum de Ansible

los dnf y mmm El módulo de Ansible se utiliza para instalar un paquete de software específico en hosts CentOS / RHEL. Puede usar este módulo de la misma manera que hizo apto módulo en la sección anterior de este artículo.

Ambos dnf y mmm los módulos aceptan los mismos parámetros. Puede utilizar el dnf módulo en hosts CentOS / RHEL 8, y mmm en CentOS / RHEL 7 o anterior.

Veamos ahora un ejemplo de este módulo.

Primero, crea un nuevo libro de jugadas dnf1.yaml en el libros de jugadas / directorio de la siguiente manera:

$nanolibros de jugadas/dnf1.yaml

Escriba las siguientes líneas en el dnf1.yaml playbook:

- anfitriones: centos8
usuario: ansible
hecho realidad
Tareas:
- nombre: instala el paquete httpd
dnf:
nombre: httpd
estado: último

los dnf y mmm módulo requiere sólo el nombre del paquete que desea instalar / actualizar / eliminar y el estado del paquete.

Aquí, estoy intentando instalar el httpd paquete ( nombre: httpd ) en mis hosts CentOS 8. Como intento instalar un paquete y también me gustaría actualizarlo si hay una nueva versión disponible, el estado debiera ser más reciente .

estado acepta las siguientes opciones:

ausente - El paquete se eliminará si ya está instalado.
más reciente - El paquete se actualizará si hay una actualización disponible. Si el paquete aún no está instalado, se instalará.
regalo - El paquete se instalará si aún no está instalado. Pero el paquete no se actualizará si hay una actualización disponible.

Note que he agregado hecho realidad en el libro de jugadas. Esto le da al ansible privilegios de sudo de usuario para modificar la estructura del sistema de archivos (es decir, instalar / actualizar / eliminar paquetes). Sin hecho realidad , los apto módulo no podrá instalar el httpd paquete.

Una vez que haya terminado, guarde el libro de jugadas presionando + X seguido por Y y .

Ejecutar el dnf1.yaml libro de jugadas de la siguiente manera:

$libros de jugadas ansible-playbook/dnf1.yaml

Como puede ver, el libro de jugadas se ejecutó con éxito en el host CentOS 8.

Trabajar con el módulo de servicio Ansible

los Servicio El módulo de Ansible se utiliza para iniciar, detener, reiniciar, habilitar (agregar servicio al inicio) y deshabilitar (eliminar el servicio del inicio) servicios en sus hosts.

En secciones anteriores, le mostré cómo instalar el paquete del servidor HTTP Apache usando Ansible apto , dnf y mmm módulos. Asegurémonos ahora de que el servicio del servidor HTTP Apache se esté ejecutando y se haya agregado al inicio del sistema.

Trabajaré con mis hosts Debian 10. Pero, puede trabajar con hosts CentOS 8, si lo desea. Simplemente ajuste el libro de jugadas en consecuencia.

Primero, cree un nuevo libro de jugadas de Ansible apt2.yaml como sigue:

$nanolibros de jugadas/apt2.yaml

Escriba las siguientes líneas en el apt2.yaml playbook:

- hosts: debian10
usuario: ansible
hecho realidad
Tareas:
- nombre: Instalar apache2
apto:
nombre: apache2
estado: último
- nombre: inicia el servicio apache2
Servicio:
nombre: apache2
estado: iniciado
habilitado: Verdadero

Aquí, he agregado una nueva tarea, Inicie el servicio apache2 .

nombre: apache2 - el servicio en el que estoy trabajando es apache2 .

estado: iniciado - el servicio debe estar funcionando.

habilitado: Verdadero - el servicio debe agregarse al inicio del sistema.

los estado El parámetro acepta otros valores.

recargado - El servicio debe recargar los archivos de configuración.
reiniciado - Se debe reiniciar el servicio.
empezado - El servicio debe estar funcionando. Si el servicio no se está ejecutando, inícielo.
interrumpido - Se debe detener el servicio. Si el servicio se está ejecutando, detenga el servicio.

Ejecuta el libro de jugadas apt2.yaml como sigue:

$libros de jugadas ansible-playbook/apt2.yaml

Como puede ver, el libro de jugadas se ejecutó correctamente.

Como puede ver, el apache2 el servicio se está ejecutando en mis hosts Debian 10.

Trabajar con el módulo de copia de Ansible

El Ansible Copiar El módulo se utiliza principalmente para copiar archivos desde su computadora a hosts remotos.

En la sección anterior, instalé el servidor web Apache 2 en mis hosts Debian 10. Copiemos ahora un index.html en la raíz web de los hosts de Debian 10.

Primero, crea un nuevo directorio archivos / como sigue:

$mkdir -varchivos

Crea un archivo nuevo index.html en el archivos / directorio de la siguiente manera:

$nanoarchivos/index.html

Escriba las siguientes líneas en el index.html expediente:


< html >
< cabeza >
< título >Servidor web de Ansible</ título >
</ cabeza >
< cuerpo >
< h1 >Bienvenido a LinuxHint</ h1 >
< pag >Este servidor web se implementó con Ansible.</ pag >
</ cuerpo >
</ html >

Una vez que haya terminado, guarde el archivo presionando + X seguido por Y y .

Crea un nuevo libro de jugadas de Ansible apt3.yaml como sigue:

$nanolibros de jugadas/apt3.yaml

Escriba las siguientes líneas en el apt3.yaml expediente:

- hosts: debian10
usuario: ansible
hecho realidad
Tareas:
- nombre: Instalar apache2
apto:
nombre: apache2
estado: último
- nombre: copia index.html al servidor
Copiar:
src: ../archivos/index.html
dest:/dónde/www/html/index.html
modo: 0644
propietario: www-data
grupo: www-data
- nombre: inicia el servicio apache2
Servicio:
nombre: apache2
estado: iniciado
habilitado: Verdadero

Aquí la tarea Copiar index.html al servidor copia el index.html desde el archivos / directorio al / var / www / html / directorio de los hosts de Debian 10.

src: ../files/index.html - La ruta del archivo de origen.
dest: /var/www/html/index.html - La ruta del archivo de destino.
modo: 0644 - Los permisos para el usuario del archivo (6 - lectura y escritura), grupo (4 - lectura) y otros (4 - lectura).
propietario: www-data - Establezca el propietario del archivo en www-datos .
grupo: www-data - Establezca el grupo del archivo en www-datos .

Una vez que haya terminado, guarde el archivo presionando + X seguido por Y y .

Ejecutar el apt3.yaml libro de jugadas de la siguiente manera:

$libros de jugadas ansible-playbook/apt3.yaml

Como puede ver, la tarea Copiar index.html al servidor es exitoso.

Como puede ver, el index.html El archivo se copió en los hosts de Debian 10.

Como puede ver, el servidor web Debian 10 sirve al index.html página que acabo de copiar en los hosts de Debian 10.

Entonces, estos son los conceptos básicos de Ansible. Puede obtener más información sobre Ansible leyendo la documentación oficial de Ansible. Gracias por leer este artículo.