paint-brush
Ansible 101: trabajar con hechos y plantillaspor@cloudkungfu
903 lecturas
903 lecturas

Ansible 101: trabajar con hechos y plantillas

por cloud-kung-fu4m2024/01/30
Read on Terminal Reader

Demasiado Largo; Para Leer

Ansible utiliza variables, hechos y plantillas para crear flujos de trabajo de automatización adaptables. Las variables permiten la gestión dinámica de la configuración, los hechos proporcionan información específica del sistema y las plantillas generan archivos de configuración personalizables. Este enfoque garantiza que los manuales sean reutilizables y flexibles en diferentes entornos.
featured image - Ansible 101: trabajar con hechos y plantillas
cloud-kung-fu HackerNoon profile picture
0-item

En Ansible, las variables y los hechos, junto con las plantillas, son herramientas fundamentales para crear flujos de trabajo de automatización flexibles. Las variables le permiten administrar y cambiar sus configuraciones dinámicamente. Los hechos son un subconjunto especial de variables que Ansible recopila de los sistemas remotos y proporciona información específica del contexto.


Las plantillas permiten la generación de archivos de configuración controlados por variables, lo que hace que sus manuales se adapten a diversos entornos y escenarios.


Estas herramientas hacen que los manuales sean reutilizables y adaptables, lo que le permite evitar valores codificados y permitir la personalización para diferentes entornos.

Variables y hechos

Las variables permiten modificar los parámetros sin alterar la lógica central del libro de jugadas.

Cómo funcionan juntos los hechos, las variables y las plantillas

  • Tipos de variables:
    • Booleano: valores verdaderos o falsos.

    • Lista: una colección ordenada de elementos.

    • Diccionario: pares clave-valor para estructuras de datos complejas.

    • Variables registradas: captura el resultado de las tareas para utilizarlas más adelante en su libro de jugadas.

    • Hechos: variables recopiladas automáticamente que brindan detalles sobre los sistemas remotos que administra.


NB: Evite conflictos en los nombres de las variables utilizando notación entre corchetes.


 - name: Print the distribution of the target hosts: all vars: curr_time: "{{ now() }}" tasks: - name: Distro Check ansible.builtin.debug: msg: "The target system is {{ ansible_facts['distribution'] }}. Timestamp: {{ curr_time }}"

Plantillas y archivos

Las plantillas en Ansible usan el lenguaje de plantillas Jinja2 para crear archivos dinámicamente usando interpolación de variables, bucles y condicionales.


 - name: Write distro name hosts: all tasks: - name: Write distro name ansible.builtin.template: src: distro.j2 dest: /root/distro.txt mode: '644' # src: location of jinja2 template file # dest: location it will be copied to # permissions that will be granted to the file

Práctica

Usaremos la familia de sistemas operativos para determinar si instalar NGINX de Lighttpd y luego implementaremos una página de inicio personalizada en el host remoto que contiene NGINX, todo sin codificar nombres de host.


  1. Clona el repositorio.
 git clone https://github.com/perplexedyawdie/ansible-learn.git


2. Cambie el directorio a hechos y plantillas

 cd ansible-learn/facts-and-templates


3. Mejora el entorno usando Docker-Compose

 docker compose up -d --build


4. SSH en el servidor Ansible

 ssh -o StrictHostKeyChecking=no -o NoHostAuthenticationForLocalhost=yes root@localhost -p 2200 # password: test123

Variables y hechos

5. Cree un libro de estrategias llamado server_setup.yaml . Aquí, configuraremos NGINX y Lighttpd y luego generaremos el nombre de la distribución para cada host remoto.


 - name: Install NGINX on Debian & Lighttpd on RedHat hosts: all vars: dev1: "Debian" dev2: "RedHat" tasks: - name: Install NGINX for Debian-based systems ansible.builtin.apt: name: nginx state: present when: ansible_facts['os_family'] == dev1 - name: Install Lighttpd for RedHat-based systems ansible.builtin.yum: name: lighttpd state: present when: ansible_facts['os_family'] == dev2 - name: Display the distribution ansible.builtin.debug: msg: "The server is running {{ ansible_facts['distribution'] }}"


6. Ejecute ansible-lint.

 ansible-lint server_setup.yaml


7. Ejecute el libro de jugadas.

 ansible-playbook --key-file /root/.ssh/id_rsa_ansible -u root -i inventory.yaml server_setup.yaml


8. Confirme que la configuración fue exitosa.

 ssh -i /root/.ssh/id_rsa_ansible root@server3 nginx -V ssh -i /root/.ssh/id_rsa_ansible root@server2 lighttpd -v ssh -i /root/.ssh/id_rsa_ansible root@server1 lighttpd -v

Plantillas y archivos

9. Cree un archivo de plantilla Jinja2 llamado index.html.j2


Se completará automáticamente con la familia y distribución del sistema operativo.


 <html> <head> <title>Welcome to {{ ansible_facts['os_family'] }}</title> </head> <body> <h1>Server running on {{ ansible_facts['distribution'] }}</h1> </body> </html>


10. Cree un libro de estrategias llamado custom_homepage.yaml.


Estamos implementando la página de inicio personalizada creada anteriormente en NGINX y luego reiniciamos el servidor.


 - name: Deploy Custom Homepage and restart hosts: all vars: dev1: "Debian" dev2: "RedHat" tasks: - name: Create Homepage with Jinja2 Template for NGINX ansible.builtin.template: src: index.html.j2 dest: /var/www/html/index.html mode: '644' when: ansible_facts['os_family'] == dev1 notify: restart nginx handlers: - name: Restart NGINX listen: "restart nginx" ansible.builtin.service: name: nginx state: restarted when: ansible_facts['os_family'] == dev1


11. Ejecute el linter.

 ansible-lint custom_homepage.yaml


12. Ejecute el libro de jugadas.

 ansible-playbook --key-file /root/.ssh/id_rsa_ansible -u root -i inventory.yaml custom_homepage.yaml


13. Confirme la implementación visitando http://localhost:2203 en su navegador.

Resumen

¡Esfuerzo impresionante! 🙌 Aprendimos cómo usar variables y hechos en un libro de estrategias además de cómo crear archivos dinámicos usando plantillas. A continuación, veremos la modularización y el manejo de errores. ¡Hasta entonces, cuídate!