Introdução
Este tutorial irá guiá-lo através da configuração do interpretador Python do Ansible para uma configuração ideal. O Ansible utiliza Python para executar as suas tarefas de automação em sistemas alvo, e configurar o interpretador Python correto é essencial para uma operação suave. Ao final deste tutorial, você entenderá como definir e configurar corretamente o interpretador Python do Ansible, o que o ajudará a evitar problemas comuns e garantir que seus playbooks Ansible sejam executados de forma eficiente.
Instalando o Ansible e Verificando o Interpretador Python
Neste primeiro passo, instalaremos o Ansible e examinaremos o interpretador Python padrão que ele utiliza. Isso nos ajudará a entender a configuração base antes de fazermos quaisquer alterações.
Instalando o Ansible
Vamos começar instalando o Ansible no sistema:
sudo apt update
sudo apt install -y ansible
Isso instala a versão mais recente do Ansible disponível nos repositórios do Ubuntu. Após a conclusão da instalação, podemos verificar se o Ansible foi instalado corretamente, verificando sua versão:
ansible --version
Você deve ver uma saída semelhante 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 a saída inclui a versão do Python que está sendo usada. Esta é uma informação importante, pois nos diz qual interpretador Python o Ansible está atualmente configurado para usar.
Criando um Arquivo de Inventário Simples
Para que o Ansible funcione, precisamos de um arquivo de inventário que liste os hosts que queremos gerenciar. Vamos criar um arquivo de inventário simples:
- No WebIDE, crie um novo arquivo clicando no ícone "New File" no painel Explorer
- Nomeie o arquivo
inventory.ini - Adicione o seguinte conteúdo ao arquivo:
[local]
localhost ansible_connection=local
Este arquivo de inventário define um grupo chamado local com apenas um host - localhost - e especifica que queremos nos conectar a ele diretamente, em vez de via SSH.
Verificando o Interpretador Python no Destino
Agora, vamos verificar qual interpretador Python o Ansible usará em nosso host de destino:
ansible -i inventory.ini local -m setup -a "filter=ansible_python*"
Este comando executa o módulo de configuração do Ansible, que coleta informações sobre o host, filtrando informações relacionadas ao Python. Você deve ver uma saída contendo detalhes sobre o interpretador Python que está sendo usado:
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
}
Isso confirma que o Ansible está usando Python 3 no host de destino. Por padrão, o Ansible tenta usar o melhor interpretador Python disponível no sistema de destino.
Criando um Playbook Ansible Simples e Configurando o Interpretador Python
Agora que entendemos como verificar o interpretador Python, vamos criar um playbook simples e aprender como configurar explicitamente o interpretador Python.
Criando um Playbook Básico
Vamos criar um playbook Ansible simples que usaremos para testar diferentes configurações do interpretador Python:
- No WebIDE, crie um novo arquivo chamado
test_playbook.yml - Adicione o seguinte conteúdo ao arquivo:
---
- 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 irá:
- Exibir o caminho e a versão do interpretador Python que estão sendo usados
- Criar um arquivo de texto no diretório home
- Escrever as informações do interpretador Python nesse arquivo
Executando o Playbook com as Configurações Padrão
Vamos executar este playbook com as configurações padrão:
ansible-playbook -i inventory.ini test_playbook.yml
Você deve ver uma saída semelhante 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
Isso confirma que o Ansible está usando o interpretador Python do sistema, o que geralmente é bom para operações locais.
Definindo Explicitamente o Interpretador Python
Agora, vamos aprender como definir explicitamente o interpretador Python de diferentes maneiras.
Método 1: Definindo no Arquivo de Inventário
- Atualize seu arquivo
inventory.iniadicionando a variável do interpretador Python:
[local]
localhost ansible_connection=local ansible_python_interpreter=/usr/bin/python3
- Execute o playbook novamente:
ansible-playbook -i inventory.ini test_playbook.yml
A saída deve ser semelhante à anterior, confirmando que o interpretador Python especificado está sendo usado.
Método 2: Definindo no Playbook
- Atualize seu
test_playbook.ymlpara incluir a variável do interpretador Python no nível do 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 }}"
- Execute o playbook atualizado:
ansible-playbook -i inventory.ini test_playbook.yml
Verifique se a saída confirma que o interpretador Python está configurado corretamente.
Método 3: Definindo via Linha de Comando
Você também pode definir o interpretador Python ao executar o playbook:
ansible-playbook -i inventory.ini test_playbook.yml -e "ansible_python_interpreter=/usr/bin/python3"
Essa abordagem é útil para substituir temporariamente as configurações para uma única execução.
Verificando os Resultados
Vamos verificar o conteúdo dos arquivos que criamos para confirmar qual interpretador Python foi usado:
cat ~/python_info.txt
cat ~/python_info_2.txt
Ambos os arquivos devem mostrar que estamos usando o interpretador Python 3.
Criando uma Configuração Global do Ansible
Neste passo, criaremos um arquivo de configuração global do Ansible para definir o interpretador Python para todos os playbooks. Essa abordagem é útil quando você precisa de uma configuração consistente do interpretador em todo o seu ambiente Ansible.
Entendendo o Arquivo ansible.cfg
O Ansible procura configurações em vários locais, na seguinte ordem:
- Variável de ambiente
ANSIBLE_CONFIG ansible.cfgno diretório atual~/.ansible.cfg(diretório home do usuário)/etc/ansible/ansible.cfg(em todo o sistema)
Vamos criar um arquivo de configuração no diretório atual, que terá precedência sobre as configurações em todo o sistema.
Criando o Arquivo ansible.cfg
- No WebIDE, crie um novo arquivo chamado
ansible.cfgno diretório do projeto - Adicione o seguinte conteúdo ao arquivo:
[defaults]
inventory = ./inventory.ini
ansible_python_interpreter = /usr/bin/python3
forks = 5
host_key_checking = False
[privilege_escalation]
become = False
Esta configuração faz várias coisas:
- Define o local padrão do arquivo de inventário
- Especifica o interpretador Python a ser usado
- Define o número de processos paralelos (forks) para 5
- Desabilita a verificação da chave do host SSH
- Configura as configurações de elevação de privilégios
Testando a Configuração
Vamos verificar se nosso arquivo de configuração está sendo usado:
ansible --version
A saída agora deve mostrar o local do seu novo arquivo de configuração:
ansible [core 2.12.0]
config file = /home/labex/project/ansible.cfg
...
Criando um Novo Playbook para Testar a Configuração
Vamos criar um novo playbook para testar nossa configuração global:
- Crie um novo arquivo chamado
config_test.yml - Adicione o seguinte conteúdo:
---
- 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:
- Executa
ansible-config dumppara obter a configuração atual - Filtra e exibe a configuração do interpretador Python
- Cria um arquivo com as informações completas da configuração
Executando o Novo Playbook
Execute o playbook para ver a configuração em ação:
ansible-playbook config_test.yml
Você deve ver uma saída que inclui a configuração do interpretador Python do nosso arquivo ansible.cfg.
Examinando os Detalhes da Configuração
Vamos verificar o arquivo de configuração que criamos:
cat ~/config_info.txt | grep python
Você deve ver que o interpretador Python está configurado de acordo com nosso arquivo ansible.cfg.
Comparando Diferentes Métodos de Configuração
Vamos criar um resumo das diferentes maneiras de definir o interpretador Python:
- Crie um novo arquivo chamado
interpreter_summary.yml - Adicione o seguinte conteúdo:
---
- 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 }}
Execute este playbook:
ansible-playbook interpreter_summary.yml
Agora, veja o arquivo de resumo:
cat ~/interpreter_summary.txt
Este arquivo fornece uma referência útil para os diferentes métodos de configuração do interpretador Python no Ansible.
Otimizando o Desempenho do Ansible com as Configurações do Interpretador Python
Neste passo final, exploraremos como otimizar o desempenho do Ansible, ajustando as configurações do interpretador Python e configurações relacionadas.
Entendendo os Fatores de Desempenho do Ansible
Vários fatores afetam o desempenho do Ansible:
- Seleção do interpretador Python
- Configurações de paralelismo (forks)
- Fact caching (armazenamento em cache de fatos)
- Otimização de módulos
Vamos atualizar nossa configuração para otimizar o desempenho.
Otimizando o ansible.cfg para Desempenho
- Atualize o arquivo
ansible.cfgcom configurações relacionadas ao desempenho:
[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
Otimizações de desempenho importantes:
- Aumento do paralelismo com
forks = 10 - Coleta inteligente de fatos com
gathering = smart - Fact caching habilitado para reduzir a coleta redundante de fatos
Criando um Playbook de Teste de Desempenho
Vamos criar um playbook para testar e demonstrar a otimização de desempenho:
- Crie um novo arquivo chamado
performance_test.yml - Adicione o seguinte conteúdo:
---
- 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
Executando o Teste de Desempenho
Execute o playbook de teste de desempenho:
ansible-playbook performance_test.yml
A saída mostrará detalhes sobre o tempo de coleta de fatos e a versão do Python.
Execute o Teste uma Segunda Vez
Execute o teste de desempenho novamente para ver o impacto do fact caching:
ansible-playbook performance_test.yml
Você deve notar que a coleta de fatos é mais rápida na segunda execução, pois os fatos estão sendo recuperados do cache.
Verificando o Relatório de Desempenho
Vamos examinar o relatório de desempenho:
cat ~/performance_report.txt
Este relatório resume sua configuração de desempenho do Ansible e explica como cada configuração afeta o desempenho.
Criando um Resumo Final
Vamos criar um resumo abrangente do que aprendemos sobre o interpretador Python do Ansible e a otimização de desempenho:
- Crie um novo arquivo chamado
final_summary.yml - Adicione o seguinte conteúdo:
---
- 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
Execute este playbook:
ansible-playbook final_summary.yml
Verifique o resumo final:
cat ~/ansible_interpreter_guide.txt
Este guia resume tudo o que você aprendeu sobre como configurar e otimizar o interpretador Python do Ansible.
Resumo
Neste tutorial, você aprendeu como configurar e otimizar o interpretador Python do Ansible. Agora você entende:
- Como verificar qual interpretador Python o Ansible está usando
- Diferentes métodos para especificar o interpretador Python no Ansible:
- No arquivo global
ansible.cfg - No arquivo de inventário
- Dentro dos playbooks usando variáveis
- Via argumentos de linha de comando
- No arquivo global
- Como criar arquivos de configuração adequados para um desempenho ideal
- Técnicas de otimização de desempenho por meio da seleção do interpretador Python e configurações relacionadas
Essas habilidades ajudarão você a garantir que seus playbooks do Ansible sejam executados de forma eficiente e eficaz em diferentes ambientes, evitando problemas comuns relacionados a incompatibilidades do interpretador Python. Agora você pode gerenciar com confiança as configurações do interpretador Python do Ansible em seus projetos de automação de infraestrutura.


