Configuración de Ansible

AnsibleAnsibleBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás sobre los archivos de configuración de Ansible y cómo personalizar el comportamiento de Ansible. Ansible utiliza archivos de configuración para definir diversas configuraciones que controlan su funcionamiento. Explorarás la configuración predeterminada, crearás un archivo de configuración personalizado y entenderás cómo diferentes opciones de configuración afectan el comportamiento de Ansible. Al final de este laboratorio, tendrás experiencia práctica en la configuración de Ansible para diferentes escenarios, lo cual es crucial para adaptar Ansible a tus necesidades y entorno específicos.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ansible(("Ansible")) -.-> ansible/AnsibleSetupandConfigurationGroup(["Ansible Setup and Configuration"]) ansible(("Ansible")) -.-> ansible/ModuleOperationsGroup(["Module Operations"]) ansible(("Ansible")) -.-> ansible/InventoryManagementGroup(["Inventory Management"]) ansible(("Ansible")) -.-> ansible/PlaybookEssentialsGroup(["Playbook Essentials"]) linux(("Linux")) -.-> linux/VersionControlandTextEditorsGroup(["Version Control and Text Editors"]) ansible/AnsibleSetupandConfigurationGroup -.-> ansible/install("Ansible Setup") ansible/ModuleOperationsGroup -.-> ansible/debug("Test Output") ansible/InventoryManagementGroup -.-> ansible/groups_inventory("Define Inventory Groups") ansible/PlaybookEssentialsGroup -.-> ansible/playbook("Execute Playbook") linux/VersionControlandTextEditorsGroup -.-> linux/vim("Text Editing") linux/VersionControlandTextEditorsGroup -.-> linux/nano("Simple Text Editing") subgraph Lab Skills ansible/install -.-> lab-390437{{"Configuración de Ansible"}} ansible/debug -.-> lab-390437{{"Configuración de Ansible"}} ansible/groups_inventory -.-> lab-390437{{"Configuración de Ansible"}} ansible/playbook -.-> lab-390437{{"Configuración de Ansible"}} linux/vim -.-> lab-390437{{"Configuración de Ansible"}} linux/nano -.-> lab-390437{{"Configuración de Ansible"}} end

Comprender la configuración predeterminada de Ansible

Comencemos examinando la configuración predeterminada de Ansible. Ansible busca archivos de configuración en varios lugares, y cada ubicación tiene una prioridad diferente.

Primero, veamos si existe un archivo de configuración de Ansible a nivel de sistema:

cat /etc/ansible/ansible.cfg

Podría aparecer un mensaje de error si este archivo no existe, lo cual es normal en muchos entornos.

Ahora, echemos un vistazo a los valores de configuración predeterminados de Ansible. Podemos hacer esto ejecutando:

ansible-config dump

Este comando mostrará todas las configuraciones actuales de Ansible. Es una lista larga, así que analicemos algunas configuraciones importantes:

  • DEFAULT_HOST_LIST: La ruta del archivo de inventario predeterminado.
  • DEFAULT_REMOTE_USER: El usuario SSH predeterminado que Ansible utilizará para conectarse a los hosts remotos.
  • DEFAULT_BECOME_METHOD: El método predeterminado que Ansible utilizará para la elevación de privilegios (como sudo).

No te preocupes si aún no entiendes todas estas configuraciones. A medida que trabajes más con Ansible, te familiarizarás con las más relevantes para tus necesidades.

Presiona Q para salir de la salida.

Ahora, creemos un archivo de inventario simple para usar en nuestros próximos pasos:

echo "localhost ansible_connection=local" > /home/labex/project/inventory

Esto crea un archivo de inventario mínimo con solo el localhost definido.

Crear un archivo de configuración personalizado de Ansible

Ahora que comprendemos la configuración predeterminada, creemos un archivo de configuración personalizado de Ansible. Esto nos permite anular las configuraciones predeterminadas y adaptar el comportamiento de Ansible a nuestras necesidades.

Crea un nuevo archivo llamado ansible.cfg en el directorio /home/labex/project:

nano /home/labex/project/ansible.cfg

Agrega el siguiente contenido al archivo:

[defaults]
inventory = /home/labex/project/inventory
remote_user = labex
host_key_checking = False
stdout_callback = yaml

[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False

Analicemos estas configuraciones:

  • inventory: Especifica la ruta a nuestro archivo de inventario.
  • remote_user: Establece el usuario SSH predeterminado para las conexiones.
  • host_key_checking: Deshabilita la comprobación de la clave del host SSH, lo cual puede ser útil en entornos de prueba (pero debe estar habilitado en producción por razones de seguridad).
  • stdout_callback: Cambia el formato de salida a YAML para una mejor legibilidad.
  • become: Habilita la elevación de privilegios por defecto.
  • become_method: Establece sudo como el método para la elevación de privilegios.
  • become_user: Especifica a qué usuario cambiar al elevar los privilegios.
  • become_ask_pass: Deshabilita la solicitud de la contraseña de sudo.

Guarda y sale del editor. En nano, puedes hacer esto presionando Ctrl+X, luego Y para confirmar y Enter para guardar.

Ahora, verifiquemos que Ansible esté utilizando nuestro nuevo archivo de configuración. Ejecuta:

ansible-config dump --only-changed
DEFAULT_BECOME(/home/labex/project/ansible.cfg) = True
DEFAULT_BECOME_ASK_PASS(/home/labex/project/ansible.cfg) = False
DEFAULT_BECOME_METHOD(/home/labex/project/ansible.cfg) = sudo
DEFAULT_BECOME_USER(/home/labex/project/ansible.cfg) = root
DEFAULT_HOST_LIST(/home/labex/project/ansible.cfg) = ['/home/labex/project/inventory']
DEFAULT_REMOTE_USER(/home/labex/project/ansible.cfg) = labex
DEFAULT_STDOUT_CALLBACK(/home/labex/project/ansible.cfg) = yaml
HOST_KEY_CHECKING(/home/labex/project/ansible.cfg) = False

Este comando mostrará solo las configuraciones que difieren de la configuración predeterminada. Deberías ver los cambios que hicimos en nuestro archivo personalizado ansible.cfg.

Probar la configuración personalizada

Ahora que tenemos nuestra configuración personalizada lista, creemos un playbook simple para probarla. Esto nos ayudará a entender cómo los cambios en nuestra configuración afectan el comportamiento de Ansible.

Crea un nuevo archivo llamado test_config.yml en el directorio /home/labex/project:

nano /home/labex/project/test_config.yml

Actualiza el contenido como se muestra a continuación:

---
- name: Test Custom Configuration
  hosts: all
  tasks:
    - name: Display remote user
      debug:
        msg: "Connected as user: {{ ansible_user }}"

    - name: Display privilege escalation info
      debug:
        msg: "Privilege escalation is {{ 'enabled' if ansible_become | default(false) else 'disabled' }}"

    - name: Show Ansible configuration
      debug:
        msg: "Inventory file: {{ lookup('config', 'DEFAULT_HOST_LIST') }}"

    - name: Check if become is enabled in ansible.cfg
      command: grep "become = True" /home/labex/project/ansible.cfg
      register: become_check
      changed_when: false
      failed_when: false

    - name: Display become setting from ansible.cfg
      debug:
        msg: "Become is {{ 'enabled' if become_check.rc == 0 else 'disabled' }} in ansible.cfg"

Este playbook actualizado realiza los siguientes cambios:

  1. Hemos agregado un valor predeterminado para ansible_become para evitar el error de variable no definida.
  2. Hemos agregado dos nuevas tareas que verifican directamente el archivo ansible.cfg para la configuración de become, lo que proporciona una representación más precisa de tu configuración.

Ahora, ejecutemos el playbook actualizado:

ansible-playbook /home/labex/project/test_config.yml

Esto debería ejecutarse sin errores y proporcionarte información sobre tu configuración de Ansible.

Además, abordemos la advertencia de desaprobación actualizando nuestro archivo ansible.cfg:

nano /home/labex/project/ansible.cfg

Agrega la siguiente línea bajo la sección [defaults]:

interpreter_python = /usr/bin/python3

Tu archivo ansible.cfg ahora debería verse algo así:

[defaults]
inventory = /home/labex/project/inventory
remote_user = labex
host_key_checking = False
stdout_callback = yaml
interpreter_python = /usr/bin/python3

[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False

Guarda y sale del editor.

Ahora, cuando vuelvas a ejecutar el playbook:

ansible-playbook /home/labex/project/test_config.yml

Deberías ver la salida sin la advertencia de desaprobación, y debería mostrar correctamente tus configuraciones.

Resumen

En este laboratorio, has aprendido sobre los archivos de configuración de Ansible y cómo personalizar el comportamiento de Ansible. Estos son los puntos clave:

  1. Ansible utiliza archivos de configuración para controlar su comportamiento. La configuración predeterminada se puede ver utilizando el comando ansible-config dump.

  2. Puedes crear archivos de configuración personalizados para anular las configuraciones predeterminadas. Estos archivos suelen llamarse ansible.cfg y se pueden colocar en diferentes ubicaciones, con diferentes prioridades.

  3. Algunas configuraciones importantes son:

    • inventory: Especifica la ruta al archivo de inventario.
    • remote_user: Establece el usuario SSH predeterminado para las conexiones.
    • host_key_checking: Controla la comprobación de la clave del host SSH.
    • become y configuraciones relacionadas: Controlan la elevación de privilegios.
  4. El comando ansible-config dump --only-changed es útil para ver solo las configuraciones que difieren de la configuración predeterminada.

  5. Puedes probar los cambios en tu configuración creando y ejecutando playbooks que muestren información de configuración.

  6. La opción --config te permite especificar un archivo de configuración en particular cuando ejecutas comandos de Ansible, lo cual puede ser útil para pruebas o cuando necesitas utilizar diferentes configuraciones para diferentes escenarios.

Comprender y poder personalizar la configuración de Ansible es crucial para adaptar Ansible a tu entorno y requisitos específicos. A medida que sigas trabajando con Ansible, probablemente encontrarás que ajustas estas configuraciones para optimizar tus flujos de trabajo de automatización.

Practica creando diferentes archivos de configuración para diferentes escenarios. Por ejemplo, podrías crear una configuración para entornos de prueba donde las configuraciones de seguridad son más laxas, y otra para entornos de producción con configuraciones de seguridad más estrictas.

Recuerda que, aunque algunas configuraciones como deshabilitar host_key_checking pueden ser convenientes para pruebas, deben considerarse detenidamente en entornos de producción donde la seguridad es primordial. Siempre revisa tu configuración de Ansible como parte de tu estrategia general de seguridad del sistema.

En futuros laboratorios, aprenderás cómo aprovechar estas configuraciones en escenarios más complejos, integrándolas con roles, inventarios dinámicos y otras características avanzadas de Ansible.