GNU/Linux >> Tutoriales Linux >  >> Linux

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

Con Ansible, los usuarios tienen la flexibilidad de aceptar entradas externas mientras ejecutan sus libros de jugadas de Ansible sin cambiar 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.

¿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 fue una pregunta reciente que recibí la última vez que expliqué el concepto de usar la opción de variables adicionales en Ansible.

La respuesta se vuelve explícita cuando te encuentras con escenarios como el siguiente:

  • ¿Qué harás cuando quieras cambiar el valor de una variable? ¿Editar el libro de jugadas o el archivo de variables?
  • ¿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 extra La característica 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.

Codificar hosts es 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 etiquetado como :grupo web. A medida que completa la prueba del libro de jugadas de Ansible, lo habilita para su uso en producción.

Desafortunadamente, el equipo de operaciones o los ingenieros deben ejecutar este libro de jugadas en un grupo diferente de hosts llamado appgroup. . Al codificar explícitamente el nombre del grupo de hosts dentro del libro de jugadas de Ansible, ha limitado su flexibilidad al requerir cambios en el propio libro de jugadas de Ansible.

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

El uso del parámetro --extra-vars y la modificación del 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 nodos , use el --extra-vars o -e opción mientras ejecuta el libro de jugadas de Ansible, como se ve 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 los hosts mientras se ejecuta, Ansible arrojará un error y se detendrá, diciendo no hay valor para los nodos .

Controlar sus variables desde 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.

Dentro de una estructura de directorios de roles de Ansible, tendrá dos tipos de variables dentro de los siguientes directorios:

  • valores predeterminados/main.yml - contiene variables para una función que se puede personalizar en función del uso deseado de la función.
  • vars/main.yml - contiene variables para un rol que no están destinadas a ser modificadas.

* Debido a que --extra-vars tiene mayor precedencia que vars/main.yml, las variables se pueden modificar usando el parámetro --extra-vars. Las variables modificables deben residir en defaults/main.yml

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

Por ejemplo, usar un puerto diferente en una instalación de Apache como la siguiente (suponiendo que las variables estén definidas dentro de 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'"

Resumir

[ ¿Necesita más información sobre Ansible? Realice un curso gratuito de descripción técnica de Red Hat. Ansible Essentials:descripción técnica de la simplicidad en la automatización. ]

Esto es solo un vistazo 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 el sitio de documentación de Ansible.


Linux
  1. Deconstruyendo un libro de jugadas de Ansible

  2. Cómo crear un libro de jugadas de Ansible

  3. Cómo instalar paquetes de software con un playbook de Ansible

  4. Cómo pasar variables de entorno a contenedores Docker

  5. ¿Cómo crear el libro de jugadas de Ansible para obtener versiones del sistema operativo de los hosts remotos?

Cómo usar controladores en Ansible Playbook

Cómo crear roles de Ansible y usarlos en Playbook

Cómo crear playbooks de Ansible para la automatización de TI

Cómo definir y usar controladores en Ansible Playbooks

Cómo crear y ejecutar un archivo de libro de jugadas de Ansible

Cómo usar Ansible para configurar Vim