Cómo pasar variables adicionales a un libro de jugadas de Ansible

Con Ansible, los usuarios tienen la capacidad de aceptar entradas externas mientras ejecutan sus libros de jugadas de Ansible sin modificar el contenido del libro de jugadas de Ansible. Esto se puede hacer a través de la capacidad de pasar variables adicionales a un libro de jugadas de Ansible. Esta función está disponible cuando se utiliza Ansible CLI o Ansible Tower.

Índice

    ¿Por qué variables adicionales?

    ¿Por qué debo pasar variables a un libro de jugadas de Ansible cuando puedo declarar cada variable y valor en el libro de jugadas o en archivos de variables? Esta es una pregunta reciente que recibí la última vez que expliqué el concepto de usar la opción vars adicional en Ansible.

    La respuesta se explica por sí misma cuando se encuentra con escenarios como los siguientes:

    • ¿Qué harás cuando quieras cambiar el valor de una variable? ¿Editar libro de jugadas o archivo variable?
    • ¿Qué hará cuando quiera usar diferentes valores para una variable cada vez que ejecute el libro de jugadas de Ansible?
    • ¿Qué hará cuando quiera usar valores para algunas variables solo cuando ejecute el libro de jugadas?

    Si bien estas preguntas solo rascan la superficie, queda claro que cuando busca flexibilidad, Ansible adicional función variable es la mejor respuesta para la mayoría de estas soluciones. Los siguientes casos de uso explican cómo puede usar variables adicionales para agregar flexibilidad a sus playbooks de Ansible.

    Los hosts codificados son una mala idea

    Por ejemplo, crea un libro de jugadas de Ansible que se ejecuta en un conjunto específico de hosts y establece esos hosts en un grupo titulado: Grupo Web. A medida que completa las pruebas del libro de jugadas de Ansible, lo activa para su uso en producción.

    Desafortunadamente, el equipo de operaciones o los ingenieros tienen que ejecutar este libro de jugadas en otro grupo de host llamado grupo de aplicaciones. Al codificar explícitamente el nombre del grupo de host en el libro de jugadas de Ansible, ha limitado su flexibilidad al requerir cambios en el propio libro de jugadas de Ansible.

    ¿Cuál es el mejor método para resolver este problema?

    Usando el parámetro --extra-vars y modificando el libro de jugadas de Ansible para tomar una variable (por ejemplo, nodos) al declarar sus hosts. El siguiente ejemplo lo ilustra:

    - hosts: "{{ nodes }}"
      vars_files:
        - vars/main.yml
      roles:
        - { role: geerlingguy.apache }

    Para pasar un valor a, use el --extra-vars Donde -e opción al ejecutar el libro de jugadas de Ansible como se muestra a continuación.

    # ansible-playbook myplaybook.yaml --extra-vars "nodes=webgroup”
    
    ## Or
    
    # ansible-playbook myplaybook.yaml --extra-vars "nodes=appgroup”

    Esto garantiza que evite la ejecución accidental del libro de jugadas contra hosts codificados. Si el libro de jugadas de Ansible no especifica el Hospedadores durante la ejecución, Ansible arrojará un error y dejará de decir.

    Controle sus variables fuera de los roles de Ansible

    Los roles de Ansible son una colección de plantillas, archivos, variables, módulos, controladores y tareas creadas con el fin de simplificar la reutilización del código de Ansible.

    En una estructura de directorios de roles de Ansible, tendrá dos tipos de variables en los siguientes directorios:

    • predeterminados / main.yml - contiene variables para un rol que se pueden personalizar de acuerdo con el uso deseado del rol.
    • vars/main.yml - contiene variables para un rol que no están destinadas a ser modificadas.

    * Debido al hecho de que --extra-vars tiene una prioridad más alta que vars / main.yml, las variables se pueden cambiar usando el parámetro --extra-vars. Las variables editables deben residir en defaults/main.yml

    Puede establecer los valores de las variables usando --extra-vars.

    Por ejemplo, usando un puerto diferente en una instalación de Apache como la siguiente (asumiendo que las variables están configuradas en el archivo defaults/main.yml):

    # ansible-playbook deploy-apache.yaml --extra-vars “apache_listen_port=8080”

    Si tiene varios valores para pasar, intente esto:

    # ansible-playbook deploy-apache.yaml --extra-vars “apache_listen_port=8080 apache_listen_port_ssl=443”

    ¿Cómo pasar variables que contienen espacios?

    Debe agregar comillas a los valores de cadena con espacios para pasarlos como variables adicionales:

    # ansible-playbook deploy-apache.yaml --extra-vars "apache_ssl_protocol="All -SSLv2 -SSLv3""

    Conclusión

    Esta es solo una descripción general de las diferentes opciones sobre cómo pasar variables a un libro de jugadas de Ansible. Para conocer más formas de pasar variables a los playbooks de Ansible, como usar JSON y archivos de variables externas, consulte la Sitio de documentación de Ansible.

    Artículos de interés

    Subir