Introducción
Este tutorial le guiará a través de la configuración del intérprete Python de Ansible para una configuración óptima. Ansible utiliza Python para ejecutar sus tareas de automatización en los sistemas de destino, y configurar el intérprete Python correcto es esencial para un funcionamiento sin problemas. Al final de este tutorial, comprenderá cómo establecer y configurar correctamente el intérprete Python de Ansible, lo que le ayudará a evitar problemas comunes y garantizar que sus playbooks de Ansible se ejecuten de manera eficiente.
Instalación de Ansible y verificación del intérprete Python
En este primer paso, instalaremos Ansible y examinaremos el intérprete Python predeterminado que utiliza. Esto nos ayudará a comprender la configuración base antes de realizar cualquier cambio.
Instalación de Ansible
Comencemos instalando Ansible en el sistema:
sudo apt update
sudo apt install -y ansible
Esto instala la última versión de Ansible disponible en los repositorios de Ubuntu. Después de que se complete la instalación, podemos verificar que Ansible se instaló correctamente comprobando su versión:
ansible --version
Debería ver una salida similar a esta:
ansible [core 2.12.0]
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/labex/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
ansible collection location = /home/labex/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/bin/ansible
python version = 3.10.x (default, Ubuntu 22.04) [GCC 11.2.0]
jinja version = 3.0.3
libyaml = True
Observe que la salida incluye la versión de Python que se está utilizando. Esta es información importante, ya que nos indica qué intérprete Python está configurado actualmente para usar Ansible.
Creación de un archivo de inventario simple
Para que Ansible funcione, necesitamos un archivo de inventario que enumere los hosts que queremos administrar. Creemos un archivo de inventario simple:
- En el WebIDE, cree un nuevo archivo haciendo clic en el icono "Nuevo archivo" en el panel del Explorador.
- Nombre el archivo
inventory.ini - Agregue el siguiente contenido al archivo:
[local]
localhost ansible_connection=local
Este archivo de inventario define un grupo llamado local con solo un host - localhost - y especifica que queremos conectarnos a él directamente en lugar de a través de SSH.
Verificación del intérprete Python en el objetivo
Ahora, verifiquemos qué intérprete Python usará Ansible en nuestro host de destino:
ansible -i inventory.ini local -m setup -a "filter=ansible_python*"
Este comando ejecuta el módulo de configuración de Ansible, que recopila información sobre el host, filtrando la información relacionada con Python. Debería ver una salida que contenga detalles sobre el intérprete Python que se está utilizando:
localhost | SUCCESS => {
"ansible_facts": {
"ansible_python": {
"executable": "/usr/bin/python3",
"has_sslcontext": true,
"type": "cpython",
"version": {
"major": 3,
"micro": 10,
"minor": 10,
"releaselevel": "final",
"serial": 0
},
"version_info": [
3,
10,
10,
"final",
0
]
},
"ansible_python_version": "3.10.10"
},
"changed": false
}
Esto confirma que Ansible está utilizando Python 3 en el host de destino. De forma predeterminada, Ansible intenta utilizar el mejor intérprete Python disponible en el sistema de destino.
Creación de un Playbook de Ansible Simple y Configuración del Intérprete Python
Ahora que entendemos cómo verificar el intérprete Python, creemos un playbook simple y aprendamos a configurar explícitamente el intérprete Python.
Creación de un Playbook Básico
Creemos un playbook de Ansible simple que usaremos para probar diferentes configuraciones del intérprete Python:
- En el WebIDE, cree un nuevo archivo llamado
test_playbook.yml - Agregue el siguiente contenido al archivo:
---
- name: Test Python Interpreter
hosts: local
gather_facts: yes
tasks:
- name: Display Python version
debug:
msg: "Python interpreter is {{ ansible_python_interpreter | default('/usr/bin/python3') }} with version {{ ansible_python_version }}"
- name: Create a test file
file:
path: "~/python_info.txt"
state: touch
- name: Write Python info to file
lineinfile:
path: "~/python_info.txt"
line: "Ansible used Python interpreter: {{ ansible_python_interpreter | default('/usr/bin/python3') }} with version {{ ansible_python_version }}"
Este playbook:
- Mostrará la ruta y la versión del intérprete Python que se está utilizando.
- Creará un archivo de texto en el directorio de inicio.
- Escribirá la información del intérprete Python en ese archivo.
Ejecución del Playbook con la Configuración Predeterminada
Ejecutemos este playbook con la configuración predeterminada:
ansible-playbook -i inventory.ini test_playbook.yml
Debería ver una salida similar a esta:
PLAY [Test Python Interpreter] *****************************
TASK [Gathering Facts] *************************************
ok: [localhost]
TASK [Display Python version] ******************************
ok: [localhost] => {
"msg": "Python interpreter is /usr/bin/python3 with version 3.10.10"
}
TASK [Create a test file] **********************************
changed: [localhost]
TASK [Write Python info to file] ***************************
changed: [localhost]
PLAY RECAP ************************************************
localhost : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Esto confirma que Ansible está utilizando el intérprete Python del sistema, lo cual suele ser adecuado para operaciones locales.
Establecimiento Explícito del Intérprete Python
Ahora, aprendamos a establecer explícitamente el intérprete Python de diferentes maneras.
Método 1: Establecimiento en el archivo de inventario
- Actualice su archivo
inventory.iniagregando la variable del intérprete Python:
[local]
localhost ansible_connection=local ansible_python_interpreter=/usr/bin/python3
- Ejecute el playbook de nuevo:
ansible-playbook -i inventory.ini test_playbook.yml
La salida debería ser similar a la anterior, confirmando que se está utilizando el intérprete Python especificado.
Método 2: Establecimiento en el Playbook
- Actualice su
test_playbook.ymlpara incluir la variable del intérprete Python a nivel de play:
---
- name: Test Python Interpreter
hosts: local
gather_facts: yes
vars:
ansible_python_interpreter: /usr/bin/python3
tasks:
- name: Display Python version
debug:
msg: "Python interpreter is {{ ansible_python_interpreter }} with version {{ ansible_python_version }}"
- name: Create a test file
file:
path: "~/python_info_2.txt"
state: touch
- name: Write Python info to file
lineinfile:
path: "~/python_info_2.txt"
line: "Ansible used Python interpreter: {{ ansible_python_interpreter }} with version {{ ansible_python_version }}"
- Ejecute el playbook actualizado:
ansible-playbook -i inventory.ini test_playbook.yml
Verifique que la salida confirme que el intérprete Python está configurado correctamente.
Método 3: Establecimiento a través de la línea de comandos
También puede establecer el intérprete Python al ejecutar el playbook:
ansible-playbook -i inventory.ini test_playbook.yml -e "ansible_python_interpreter=/usr/bin/python3"
Este enfoque es útil para anular temporalmente la configuración para una sola ejecución.
Verificación de los Resultados
Verifiquemos el contenido de los archivos que creamos para confirmar qué intérprete Python se utilizó:
cat ~/python_info.txt
cat ~/python_info_2.txt
Ambos archivos deberían mostrar que estamos utilizando el intérprete Python 3.
Creación de una Configuración Global de Ansible
En este paso, crearemos un archivo de configuración global de Ansible para establecer el intérprete Python para todos los playbooks. Este enfoque es útil cuando necesita una configuración de intérprete consistente en todo su entorno Ansible.
Comprensión del archivo ansible.cfg
Ansible busca la configuración en varias ubicaciones, en el siguiente orden:
- Variable de entorno
ANSIBLE_CONFIG ansible.cfgen el directorio actual~/.ansible.cfg(directorio de inicio del usuario)/etc/ansible/ansible.cfg(a nivel del sistema)
Creemos un archivo de configuración en el directorio actual, que tendrá prioridad sobre la configuración a nivel del sistema.
Creación del archivo ansible.cfg
- En el WebIDE, cree un nuevo archivo llamado
ansible.cfgen el directorio del proyecto. - Agregue el siguiente contenido al archivo:
[defaults]
inventory = ./inventory.ini
ansible_python_interpreter = /usr/bin/python3
forks = 5
host_key_checking = False
[privilege_escalation]
become = False
Esta configuración hace varias cosas:
- Establece la ubicación predeterminada del archivo de inventario.
- Especifica el intérprete Python a utilizar.
- Establece el número de procesos paralelos (forks) en 5.
- Desactiva la verificación de la clave del host SSH.
- Configura los ajustes de escalada de privilegios.
Prueba de la configuración
Verifiquemos que se está utilizando nuestro archivo de configuración:
ansible --version
La salida ahora debería mostrar la ubicación de su nuevo archivo de configuración:
ansible [core 2.12.0]
config file = /home/labex/project/ansible.cfg
...
Creación de un nuevo Playbook para probar la configuración
Creemos un nuevo playbook para probar nuestra configuración global:
- Cree un nuevo archivo llamado
config_test.yml - Agregue el siguiente contenido:
---
- name: Test Global Configuration
hosts: local
gather_facts: yes
tasks:
- name: Get Ansible configuration
command: ansible-config dump
register: config_output
- name: Display Python interpreter from config
debug:
msg: "{{ config_output.stdout_lines | select('search', 'python_interpreter') | list }}"
- name: Create config info file
file:
path: "~/config_info.txt"
state: touch
- name: Write config info to file
copy:
content: "{{ config_output.stdout }}"
dest: "~/config_info.txt"
Este playbook:
- Ejecuta
ansible-config dumppara obtener la configuración actual. - Filtra y muestra la configuración del intérprete Python.
- Crea un archivo con la información completa de la configuración.
Ejecución del nuevo Playbook
Ejecute el playbook para ver la configuración en acción:
ansible-playbook config_test.yml
Debería ver una salida que incluya la configuración del intérprete Python de nuestro archivo ansible.cfg.
Examen de los detalles de la configuración
Verifiquemos el archivo de configuración que creamos:
cat ~/config_info.txt | grep python
Debería ver que el intérprete Python está configurado de acuerdo con nuestro archivo ansible.cfg.
Comparación de diferentes métodos de configuración
Creemos un resumen de las diferentes formas de configurar el intérprete Python:
- Cree un nuevo archivo llamado
interpreter_summary.yml - Agregue el siguiente contenido:
---
- name: Summarize Python Interpreter Configuration
hosts: local
gather_facts: yes
tasks:
- name: Create summary file
file:
path: "~/interpreter_summary.txt"
state: touch
- name: Write summary information
blockinfile:
path: "~/interpreter_summary.txt"
block: |
Ansible Python Interpreter Configuration Methods:
1. Global ansible.cfg: {{ ansible_python_interpreter }}
2. Inventory file: Can be set with 'ansible_python_interpreter=/path/to/python'
3. Playbook variables: Can be set with 'vars: ansible_python_interpreter=/path/to/python'
4. Command line: Can be set with '-e ansible_python_interpreter=/path/to/python'
Current Python version: {{ ansible_python_version }}
Python path: {{ ansible_python.executable }}
Ejecute este playbook:
ansible-playbook interpreter_summary.yml
Ahora mire el archivo de resumen:
cat ~/interpreter_summary.txt
Este archivo proporciona una referencia útil para los diferentes métodos de configuración del intérprete Python en Ansible.
Optimización del Rendimiento de Ansible con la Configuración del Intérprete Python
En este paso final, exploraremos cómo optimizar el rendimiento de Ansible ajustando la configuración del intérprete Python y las configuraciones relacionadas.
Comprensión de los Factores de Rendimiento de Ansible
Varios factores afectan el rendimiento de Ansible:
- Selección del intérprete Python
- Configuración de paralelismo (forks)
- Almacenamiento en caché de hechos (fact caching)
- Optimización de módulos
Actualicemos nuestra configuración para optimizar el rendimiento.
Optimización de ansible.cfg para el Rendimiento
- Actualice el archivo
ansible.cfgcon configuraciones relacionadas con el rendimiento:
[defaults]
inventory = ./inventory.ini
ansible_python_interpreter = /usr/bin/python3
forks = 10
host_key_checking = False
gathering = smart
fact_caching = jsonfile
fact_caching_connection = /tmp/ansible_facts
fact_caching_timeout = 3600
[privilege_escalation]
become = False
Optimizaciones clave de rendimiento:
- Mayor paralelismo con
forks = 10 - Recopilación inteligente de hechos con
gathering = smart - Habilitación del almacenamiento en caché de hechos para reducir la recopilación redundante de hechos
Creación de un Playbook de Prueba de Rendimiento
Creemos un playbook para probar y demostrar la optimización del rendimiento:
- Cree un nuevo archivo llamado
performance_test.yml - Agregue el siguiente contenido:
---
- name: Performance Testing
hosts: local
gather_facts: yes
tasks:
- name: Measure fact gathering time
debug:
msg: "Facts gathered in {{ ansible_date_time.epoch | float - ansible_date_time.start | float }} seconds"
- name: Get Python version details
command: "{{ ansible_python.executable }} --version"
register: python_version
- name: Display Python version
debug:
msg: "{{ python_version.stdout }}"
- name: Create performance report
file:
path: "~/performance_report.txt"
state: touch
- name: Write performance information
blockinfile:
path: "~/performance_report.txt"
block: |
Ansible Performance Configuration:
Python Interpreter: {{ ansible_python_interpreter }}
Python Version: {{ python_version.stdout }}
Configuration Settings:
- Forks: {{ lookup('ini', 'forks section=defaults file=ansible.cfg') | default('5') }}
- Fact Gathering: {{ lookup('ini', 'gathering section=defaults file=ansible.cfg') | default('implicit') }}
- Fact Caching: {{ lookup('ini', 'fact_caching section=defaults file=ansible.cfg') | default('disabled') }}
Performance Impact:
- Using Python 3 vs Python 2 can provide significant performance improvements
- Increased forks allows more parallel operations
- Smart fact gathering and caching reduce unnecessary operations
Ejecución de la Prueba de Rendimiento
Ejecute el playbook de prueba de rendimiento:
ansible-playbook performance_test.yml
La salida mostrará detalles sobre el tiempo de recopilación de hechos y la versión de Python.
Ejecute la prueba por segunda vez
Ejecute la prueba de rendimiento nuevamente para ver el impacto del almacenamiento en caché de hechos:
ansible-playbook performance_test.yml
Debería notar que la recopilación de hechos es más rápida en la segunda ejecución, ya que los hechos se están recuperando de la caché.
Verificación del Informe de Rendimiento
Examinemos el informe de rendimiento:
cat ~/performance_report.txt
Este informe resume su configuración de rendimiento de Ansible y explica cómo cada configuración afecta el rendimiento.
Creación de un Resumen Final
Creemos un resumen completo de lo que hemos aprendido sobre el intérprete Python de Ansible y la optimización del rendimiento:
- Cree un nuevo archivo llamado
final_summary.yml - Agregue el siguiente contenido:
---
- name: Final Summary
hosts: local
gather_facts: yes
tasks:
- name: Create final summary
copy:
dest: "~/ansible_interpreter_guide.txt"
content: |
## Ansible Python Interpreter Guide
### Current Configuration
- Python interpreter: {{ ansible_python_interpreter }}
- Python version: {{ ansible_python_version }}
- Ansible version: {{ ansible_version.full }}
### Configuration Methods
1. ansible.cfg (global): ansible_python_interpreter = /path/to/python
2. Inventory file: hostname ansible_python_interpreter=/path/to/python
3. Playbook variables: vars: ansible_python_interpreter: /path/to/python
4. Command line: -e ansible_python_interpreter=/path/to/python
### Performance Optimization
- Use Python 3.x for better performance
- Configure proper parallelism with 'forks'
- Enable fact caching for repeated playbook runs
- Use 'gather_facts: smart' to minimize fact gathering
### Best Practices
- Always specify the Python interpreter explicitly for production systems
- Use the most recent stable Python version available on your system
- Test playbooks with the same Python version that will be used in production
- Document Python interpreter requirements for your playbooks
Ejecute este playbook:
ansible-playbook final_summary.yml
Verifique el resumen final:
cat ~/ansible_interpreter_guide.txt
Esta guía resume todo lo que ha aprendido sobre la configuración y optimización del intérprete Python de Ansible.
Resumen
En este tutorial, ha aprendido a configurar y optimizar el intérprete Python de Ansible. Ahora comprende:
- Cómo verificar qué intérprete Python está utilizando Ansible
- Diferentes métodos para especificar el intérprete Python en Ansible:
- En el archivo global
ansible.cfg - En el archivo de inventario
- Dentro de los playbooks usando variables
- A través de argumentos de línea de comandos
- En el archivo global
- Cómo crear archivos de configuración adecuados para un rendimiento óptimo
- Técnicas de optimización del rendimiento a través de la selección del intérprete Python y configuraciones relacionadas
Estas habilidades le ayudarán a garantizar que sus playbooks de Ansible se ejecuten de manera eficiente y efectiva en diferentes entornos, evitando problemas comunes relacionados con las discrepancias del intérprete Python. Ahora puede administrar con confianza la configuración del intérprete Python de Ansible en sus proyectos de automatización de infraestructura.


