GNU/Linux >> Tutoriales Linux >  >> Linux

10 módulos Ansible para la automatización del sistema Linux

Ansible es una solución de automatización completa para su entorno de TI. Puede usar Ansible para automatizar la configuración de servidores Linux y Windows, orquestar el aprovisionamiento de servicios, implementar entornos en la nube e incluso configurar sus dispositivos de red.

Los módulos de Ansible resumen acciones en su sistema para que no tenga que preocuparse por los detalles de implementación. Simplemente describa el estado deseado y Ansible se asegura de que el sistema de destino coincida con él.

La disponibilidad de este módulo es uno de los principales beneficios de Ansible y, a menudo, se denomina Ansible con "baterías incluidas". De hecho, puede encontrar módulos para una gran cantidad de tareas y, si bien esto es excelente, con frecuencia escucho de principiantes que no saben por dónde empezar.

Aunque su elección de módulos dependerá exclusivamente de sus requisitos y de lo que intenta automatizar con Ansible, estos son los diez módulos principales que necesita para comenzar con Ansible para la automatización del sistema Linux.

1. copia

El módulo de copia le permite copiar un archivo desde el nodo de control de Ansible a los hosts de destino. Además de copiar el archivo, le permite establecer la propiedad, los permisos y las etiquetas de SELinux en el archivo de destino. Aquí hay un ejemplo del uso del módulo de copia para copiar un archivo de configuración de "mensaje del día" a los hosts de destino:

- name: Ensure MOTD file is in place
  copy:
    src: files/motd
    dest: /etc/motd
    owner: root
    group: root
    mode: 0644

Para contenido menos complejo, puede copiar el contenido directamente al archivo de destino sin tener un archivo local, como este:

- name: Ensure MOTD file is in place
  copy:
    content: "Welcome to this system."
    dest: /etc/motd
    owner: root
    group: root
    mode: 0644

Este módulo funciona de manera idempotente, lo que significa que solo copiará el archivo si el mismo archivo no está ya instalado con el mismo contenido y permisos.

El módulo de copia es una excelente opción para copiar una pequeña cantidad de archivos con contenido estático. Si necesita copiar una gran cantidad de archivos, eche un vistazo al módulo de sincronización. Para copiar archivos con contenido dinámico, eche un vistazo a la template siguiente módulo.

2. plantilla

El módulo de plantilla funciona de manera similar a copy módulo, pero procesa el contenido dinámicamente utilizando el lenguaje de plantillas Jinja2 antes de copiarlo en los hosts de destino.

Por ejemplo, defina una plantilla de "mensaje del día" que muestre el nombre del sistema de destino, así:

$ vi templates/motd.j2
Welcome to {{ inventory_hostname }}.

Luego, crea una instancia de esta plantilla usando la template módulo, así:

- name: Ensure MOTD file is in place
  template:
    src: templates/motd.j2
    dest: /etc/motd
    owner: root
    group: root
    mode: 0644

Antes de copiar el archivo, Ansible procesa la plantilla e interpola la variable, reemplazándola con el nombre del sistema host de destino. Por ejemplo, si el nombre del sistema de destino es rh8-vm03 , el archivo de resultado es:

Welcome to rh8-vm03.

Mientras que la copy El módulo también puede interpolar variables al usar el content parámetro, la template El módulo permite una flexibilidad adicional mediante la creación de archivos de plantilla, que le permiten definir contenido más complejo, incluido for bucles, if condiciones, y más. Para obtener una referencia completa, consulte la documentación de Jinja2.

Este módulo también es idempotente y no copiará el archivo si el contenido en el sistema de destino ya coincide con el contenido de la plantilla.

3. usuario

El módulo de usuario le permite crear y administrar usuarios de Linux en su sistema de destino. Este módulo tiene muchos parámetros diferentes, pero en su forma más básica, puede usarlo para crear un nuevo usuario.

Por ejemplo, para crear el usuario ricardo con UID 2001, parte de los grupos users y wheel y contraseña mypassword , aplica el user módulo con estos parámetros:

- name: Ensure user ricardo exists
  user:
    name: ricardo
    group: users
    groups: wheel
    uid: 2001
    password: "{{ 'mypassword' | password_hash('sha512') }}"
    state: present

Tenga en cuenta que este módulo intenta ser idempotente, pero no puede garantizarlo para todas sus opciones. Por ejemplo, si vuelve a ejecutar el ejemplo del módulo anterior, restablecerá la contraseña al valor definido, cambiando el usuario en el sistema para cada ejecución. Para hacer que este ejemplo sea idempotente, use el parámetro update_password: on_create , asegurándose de que Ansible solo establezca la contraseña al crear el usuario y no en ejecuciones posteriores.

También puede usar este módulo para eliminar un usuario configurando el parámetro state: absent .

El user El módulo tiene muchas opciones para que administres múltiples aspectos de usuario. Asegúrese de consultar la documentación del módulo para obtener más información.

4. paquete

El módulo de paquetes le permite instalar, actualizar o eliminar paquetes de software de su sistema de destino mediante el administrador de paquetes estándar del sistema operativo.

Por ejemplo, para instalar el servidor web Apache en una máquina Red Hat Linux, aplique el módulo de la siguiente manera:

- name: Ensure Apache package is installed
  package:
    name: httpd
    state: present

Más sobre Ansible

  • Una guía de inicio rápido de Ansible
  • Hoja de trucos de Ansible
  • Curso en línea gratuito:conceptos básicos de Ansible
  • Descargar e instalar Ansible
  • eBook:La empresa automatizada
  • Libro electrónico:Ansible para DevOps
  • Libros electrónicos gratuitos de Ansible
  • Últimos artículos de Ansible

Este módulo es independiente de la distribución y funciona utilizando el administrador de paquetes subyacente, como yum/dnf para distribuciones basadas en Red Hat y apt para Debian. Por eso, solo realiza tareas básicas como instalar y eliminar paquetes. Si necesita más control sobre las opciones del administrador de paquetes, use el módulo específico para la distribución de destino.

Además, tenga en cuenta que, aunque el módulo funciona en diferentes distribuciones, el nombre del paquete para cada uno puede ser diferente. Por ejemplo, en la distribución basada en Red Hat, el nombre del paquete del servidor web Apache es httpd , mientras que en Debian, es apache2 . Asegúrese de que sus libros de jugadas se ocupen de eso.

Este módulo es idempotente y no actuará si el estado actual del sistema coincide con el estado deseado.

5. servicio

Use el módulo de servicio para administrar los servicios del sistema de destino usando el sistema de inicio requerido; por ejemplo, systemd.

En su forma más básica, todo lo que tiene que hacer es proporcionar el nombre del servicio y el estado deseado. Por ejemplo, para iniciar sshd service, use el módulo así:

- name: Ensure SSHD is started
  service:
    name: sshd
    state: started

También puede asegurarse de que el servicio se inicie automáticamente cuando el sistema de destino se inicie proporcionando el parámetro enabled: yes .

Al igual que con el package módulo, el service El módulo es flexible y funciona en diferentes distribuciones. Si necesita ajustar el sistema de inicio de destino específico, use el módulo correspondiente; por ejemplo, el módulo systemd .

Similar a los otros módulos que has visto hasta ahora, el service módulo también es idempotente.

6. cortafuegos

Use el módulo firewalld para controlar el firewall del sistema con el firewalld daemon en los sistemas que lo admiten, como las distribuciones basadas en Red Hat.

Por ejemplo, para abrir el servicio HTTP en el puerto 80, utilícelo así:

- name: Ensure port 80 (http) is open
  firewalld:
    service: http
    state: enabled
    permanent: yes
    immediate: yes

También puede especificar puertos personalizados en lugar de nombres de servicio con port parámetro. En este caso, asegúrese de especificar también el protocolo. Por ejemplo, para abrir el puerto TCP 3000, use esto:

- name: Ensure port 3000/TCP is open
  firewalld:
    port: 3000/tcp
    state: enabled
    permanent: yes
    immediate: yes

También puede usar este módulo para controlar otros firewalld aspectos como zonas o reglas complejas. Asegúrese de consultar la documentación del módulo para obtener una lista completa de opciones.

7. archivo

El módulo de archivos le permite controlar el estado de los archivos y directorios, estableciendo permisos, propiedad y etiquetas de SELinux.

Por ejemplo, use el file módulo para crear un directorio /app propiedad del usuario ricardo , con permisos de lectura, escritura y ejecución para el propietario y el grupo users :

- name: Ensure directory /app exists
  file:
    path: /app
    state: directory
    owner: ricardo
    group: users
    mode: 0770

También puede usar este módulo para establecer propiedades de archivo en directorios recursivamente usando el parámetro recurse: yes o elimine archivos y directorios con el parámetro state: absent .

Este módulo funciona con idempotencia para la mayoría de sus parámetros, pero algunos de ellos pueden hacer que cambie la ruta de destino cada vez. Consulte la documentación para obtener más detalles.

8. archivo de línea

El módulo lineinfile le permite administrar líneas individuales en archivos existentes. Es útil actualizar la configuración específica en archivos existentes sin cambiar el resto del archivo o copiar el archivo de configuración completo.

Por ejemplo, agregue una nueva entrada a su archivo de hosts como esta:

- name: Ensure host rh8-vm03 in hosts file
  lineinfile:
    path: /etc/hosts
    line: 192.168.122.236 rh8-vm03
    state: present

También puede usar este módulo para cambiar una línea existente aplicando el parámetro regexp para buscar una línea existente para reemplazar. Por ejemplo, actualice el sshd_config archivo para evitar el inicio de sesión de root modificando la línea PermitRootLogin yes a PermitRootLogin no :

- name: Ensure root cannot login via ssh
  lineinfile:
    path: /etc/ssh/sshd_config
    regexp: '^PermitRootLogin'
    line: PermitRootLogin no
    state: present

Nota:Use el módulo de servicio para reiniciar el servicio SSHD para habilitar este cambio.

Este módulo también es idempotente, pero, en caso de modificación de línea, asegúrese de que la expresión regular coincida con los estados original y actualizado para evitar cambios innecesarios.

9. desarchivar

Use el módulo de desarchivado para extraer el contenido de archivos comprimidos como tar o zip archivos De forma predeterminada, copia el archivo comprimido desde el nodo de control a la máquina de destino antes de extraerlo. Cambie este comportamiento proporcionando el parámetro remote_src: yes .

Por ejemplo, extraiga el contenido de un .tar.gz archivo que ya se ha descargado en el host de destino con esta sintaxis:

- name: Extract contents of app.tar.gz
  unarchive:
    src: /tmp/app.tar.gz
    dest: /app
    remote_src: yes

Algunas tecnologías de archivo requieren paquetes adicionales para estar disponibles en el sistema de destino; por ejemplo, el paquete unzip para extraer .zip archivos.

Según el formato de archivo utilizado, este módulo puede o no funcionar de manera idempotente. Para evitar cambios innecesarios, puede utilizar el parámetro creates para especificar un archivo o directorio que este módulo crearía al extraer el contenido del archivo. Si este archivo o directorio ya existe, el módulo no vuelve a extraer el contenido.

10. comando

El módulo de comando es flexible y le permite ejecutar comandos arbitrarios en el sistema de destino. Con este módulo, puede hacer casi cualquier cosa en el sistema de destino siempre que haya un comando para ello.

Aunque el comando command El módulo es flexible y potente, debe usarse con precaución. Evite usar el módulo de comando para ejecutar una tarea si hay otro módulo apropiado disponible para eso. Por ejemplo, podría crear usuarios usando el comando command módulo para ejecutar el useradd comando, pero debería usa el user en su lugar, ya que abstrae muchos detalles de usted, se ocupa de los casos de esquina y garantiza que la configuración solo cambie cuando sea necesario.

Para los casos en los que no hay módulos disponibles, o para ejecutar scripts o programas personalizados, el comando command El módulo sigue siendo un gran recurso. Por ejemplo, use este módulo para ejecutar un script que ya está presente en la máquina de destino:

- name: Run the app installer
  command: "/app/install.sh"

De forma predeterminada, este módulo no es idempotente, ya que Ansible ejecuta el comando cada vez. Para hacer el command módulo idempotente, puede usar when condiciones para ejecutar el comando solo si existe la condición apropiada, o creates argumento, similar al ejemplo del módulo de desarchivado.

¿Qué sigue?

Con estos módulos, puede configurar sistemas Linux completos copiando, creando plantillas o modificando archivos de configuración, creando usuarios, instalando paquetes, iniciando servicios del sistema, actualizando el firewall y más.

Si es nuevo en Ansible, asegúrese de consultar la documentación sobre cómo crear playbooks para combinar estos módulos para automatizar su sistema. Algunas de estas tareas requieren ejecutarse con privilegios elevados para funcionar. Para obtener más detalles, consulte la documentación sobre escalada de privilegios.

A partir de Ansible 2.10, los módulos se organizan en colecciones. La mayoría de los módulos de esta lista forman parte de ansible.builtin y están disponibles de forma predeterminada con Ansible, pero algunos de ellos forman parte de otras colecciones. Para obtener una lista de colecciones, consulte la documentación de Ansible.


Linux
  1. Desmitificando Ansible para administradores de sistemas Linux

  2. Una breve introducción a los roles de Ansible para la administración del sistema Linux

  3. 3 comandos útiles de Linux para administradores de sistemas

  4. Tabla de llamadas del sistema Linux o hoja de trucos para ensamblaje

  5. ¿Es seguro desarrollar/probar un módulo de Linux usando una máquina virtual?

Guía de inicio rápido de Ansible para administradores de sistemas Linux

Los 15 mejores emuladores de Linux para sistemas Windows

Las 20 mejores herramientas de bioinformática para el sistema Linux

Los 10 mejores software de geometría para el sistema Linux

Las 15 mejores herramientas de biología para el sistema Linux

15 mejores programas de edición de video para sistema Linux