Implementar y eliminar un servidor web con Ansible

TenerAnsible es una herramienta de automatización informática sin agentes que revela el misterio de cómo se realiza el trabajo. Muchos administradores de sistemas ejecutan comandos o playbooks ad hoc de Ansible a diario para administrar sus tareas automatizadas. Se basan en la salida de la interfaz de línea de comandos (CLI) predeterminada de Ansible para visualizar y comprender lo que sucede después de que su comando o playbook termina de ejecutarse.

Dado que la salida estándar de Ansible CLI es limpia y liviana, una opción para realizar un seguimiento de los tiempos de ejecución, obtener métricas, comprender el consumo de recursos y recopilar otra información es modificar la salida para incluir más detalles mediante complementos de devolución de llamada. Este artículo explica cómo usar dos complementos de devolución de llamada de Ansible diferentes para perfilar la actividad del sistema y el uso máximo de la memoria del trabajo y la ejecución completa usando cgroups.

Hay mucho terreno que cubrir con este tema. Este artículo establece el escenario definiendo el entorno y los componentes necesarios. Un segundo artículo cubrirá las pruebas de tiempo de ejecución del libro de jugadas utilizando complementos de refuerzo.

Índice

    Configuración del entorno de prueba

    Este escenario solo necesita un nodo administrado y una máquina de destino. Utiliza el nodo administrado (ServerA) para definir archivos de configuración y playbooks. Ejecuta las pruebas en la máquina de destino (Servidor B), donde el servicio httpd está instalado y configurado para actuar como un servidor web de prueba. Los servidores A y B tienen la siguiente configuración:

    • UPC: 1 procesador virtual
    • Memoria: 1GB
    • Disco: 10 GB
    • Sistema de explotación : RHEL 8.4
    • Versión de Ansible: 2.9.26

    [ Register for our free Ansible essentials online course. ]

    Todos los comandos se ejecutan en el nodo administrado. Comience por crear un archivo de inventario con solo el nombre de host de la máquina de destino:

    [servera]$ cat << EOF > hosts
    [demo]
    serverb
    EOF

    Luego crea un sencillo ansible.cfg archivo con alguna información de configuración de acceso:

    [servera]$ cat << EOF > ansible.cfg
    [defaults]
    inventory=hosts
    remote_user=alexon
    
    [privilege_escalation]
    become=True
    become_method=sudo
    become_user=root
    become_ask_pass=False
    EOF

    Como mencioné anteriormente, la máquina de destino es un servidor web básico. Cree dos libros de jugadas simples. La primera, deploy-webserver.yml, instala, configura e inicia el servicio httpd en el destino con un index.html página. La segunda, remove-webserver.yml, elimina toda esta configuración.

    Aquí está el primer libro de jugadas:

    [servera]$ cat << EOF > deploy-webserver.yml
    ---
    - name: Demo playbook to test callback plugin - Deployment
      hosts: serverb
      tasks:
        
        - name: Install httpd package
          dnf:
            name: httpd
            state: latest
        
        - name: Start and enable httpd service
          service:
            name: httpd
            enabled: true
            state: started
    
        - name: Create a custom index.html file
          copy:
            dest: /var/www/html/index.html
            content: |
              Enable SysAdmin Demo:
              Ansible Profiling with Callback Plugin
              Custom Web Page
    EOF

    Y aquí está el segundo libro de jugadas:

    [servera]$ cat << EOF > remove-webserver.yml
    ---
    - name: Demo playbook to test callback plugin - Remove
      hosts: serverb
      tasks:
    
        - name: Stop and disable httpd service
          service:
            name: httpd
            enabled: false
            state: stopped
    
        - name: Remove httpd package
          dnf:
            name: httpd
            state: absent
    EOF

    Debe tener los siguientes cuatro archivos en su demo directorio telefónico:

    [servera]$ ls -1
    ansible.cfg
    deploy-webserver.yml
    hosts
    remove-webserver.yml

    Probar el entorno

    Primero, pruebe la comunicación con la máquina de destino haciendo ping a través de un comando ad hoc de Ansible:

    [servera]$ ansible -i hosts -m ping serverb
    
    serverb | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": false,
        "ping": "pong"
    }

    Ejecute los libros de jugadas para verificar que funcionan como se esperaba. Primero, ejecute el deploy-webserver.yml libro de jugadas:

    [servera]$ ansible-playbook deploy-webserver.yml
    
    PLAY [Demo playbook to test callback plugin - Deployment] *******************************************************************************************
    
    TASK [Gathering Facts] ******************************************************************************************************************************
    ok: [serverb]
    
    TASK [Install httpd package] ************************************************************************************************************************
    changed: [serverb]
    
    TASK [Start and enable httpd service] ***************************************************************************************************************
    changed: [serverb]
    
    TASK [Create a custom index.html file] **************************************************************************************************************
    ok: [serverb]
    
    PLAY RECAP ******************************************************************************************************************************************
    serverb                    : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

    ¡Éxito! que decir de la remove-webserver.yml libro de jugadas?

    [servera]$ ansible-playbook remove-webserver.yml
    
    PLAY [Demo playbook to test callback plugin - Remove] ***********************************************************************************************
    
    TASK [Gathering Facts] ******************************************************************************************************************************
    ok: [serverb]
    
    TASK [Stop and disable httpd service] ***************************************************************************************************************
    changed: [serverb]
    
    TASK [Remove httpd package] ************************************************************************************************************************
    changed: [serverb]
    
    PLAY RECAP ******************************************************************************************************************************************
    serverb                    : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

    Funciona a las mil maravillas. Pero, ¿cómo sabe las respuestas a preguntas como: cuánto tiempo lleva completar cada tarea? ¿Cuántos recursos (memoria y CPU) se han consumido? ¿Cuál fue el tiempo de ejecución total de los libros de jugadas? ¿Y cuánto de los recursos totales consumió la máquina de destino? ¡Parece preguntas para el segundo artículo!

    Envoltura

    En este artículo, definí el problema del seguimiento de los tiempos de ejecución, la obtención de métricas y el consumo de recursos en la salida de la CLI de Ansible al ejecutar playbooks. He cubierto los ajustes básicos para los libros de jugadas y los archivos de configuración de Ansible. También establecí la infraestructura que usará en el próximo artículo de la serie, que cubre la prueba de perfiles de recursos y la realización de tareas con los complementos de devolución de llamada de Ansible.

    Artículos de interés

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada.

    Subir