Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
O Ansible 2.8 (ou posterior) é necessário para executar os guias estratégicos de exemplo neste artigo.
O recurso de inventário dinâmico do Ansible remove a carga de manter arquivos de inventário estáticos.
Neste tutorial, você usará o plug-in de inventário dinâmico do Azure para preencher seu inventário do Ansible.
Neste artigo, você aprenderá a:
- Configure duas máquinas virtuais de teste.
- Adicionar tags a máquinas virtuais do Azure
- Gerar um inventário dinâmico
- Usar grupos condicionais e grupos com chave para preencher associações de grupo
- Executar playbooks contra grupos no inventário dinâmico
Pré-requisitos
- Assinatura do Azure: Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
- Azure Service Principal: Criar um principal de serviço, anotando os seguintes valores: appId, displayName, senha e locatário.
Instalar o Ansible: execute uma das seguintes opções:
- Instalar e configurar o Ansible em uma máquina virtual linux
- Configure o Azure Cloud Shell e, se você não tiver acesso a uma máquina virtual linux, crie uma máquina virtual com o Ansible.
Criar VMs do Azure
Entre no portal do Azure.
Abra o Cloud Shell.
Crie um grupo de recursos do Azure para armazenar as máquinas virtuais deste tutorial.
Importante
O grupo de recursos do Azure que você criar nesta etapa deve ter um nome totalmente em minúsculas. Caso contrário, a geração do inventário dinâmico falhará.
az group create --resource-group ansible-inventory-test-rg --location eastusCrie duas máquinas virtuais linux no Azure usando uma das seguintes técnicas:
Guia estratégico do Ansible – O artigo, Criar uma máquina virtual básica do Linux no Azure com o Ansible e criar uma máquina virtual básica do Windows no Azure com o Ansible ilustra como criar uma máquina virtual a partir de um guia estratégico do Ansible.
CLI do Azure – Emita cada um dos seguintes comandos no Cloud Shell para criar as duas máquinas virtuais:
az vm create \ --resource-group ansible-inventory-test-rg \ --name win-vm \ --image MicrosoftWindowsServer:WindowsServer:2019-Datacenter:latest \ --admin-username azureuser \ --admin-password <password> az vm create \ --resource-group ansible-inventory-test-rg \ --name linux-vm \ --image Ubuntu2204 \ --admin-username azureuser \ --admin-password <password>Substitua
<password>sua senha.
Adicionar tags de função de aplicativo
As tags são usadas para organizar e categorizar recursos do Azure. Atribuir as VMs do Azure a uma função de aplicativo permite que você use as marcas como nomes de grupo no inventário dinâmico do Azure.
Execute os seguintes comandos para atualizar as etiquetas da VM:
az vm update \
--resource-group ansible-inventory-test-rg \
--name linux-vm \
--set tags.applicationRole='message-broker'
az vm update \
--resource-group ansible-inventory-test-rg \
--name win-vm \
--set tags.applicationRole='web-server'
Saiba mais sobre estratégias de marcação do Azure em Definir sua estratégia de marcação.
Gerar um inventário dinâmico
O Ansible fornece um plug-in de inventário dinâmico do Azure.
As seguintes etapas orientam você usando o plug-in:
Criar um inventário dinâmico chamado
myazure_rm.ymlplugin: azure_rm include_vm_resource_groups: - ansible-inventory-test-rg auth_source: autoPonto-chave:
- O Ansible usa o nome do arquivo de inventário e a extensão para identificar qual plug-in de inventário usar. Para usar o plug-in de inventário dinâmico do Azure, o arquivo deve terminar com
azure_rme ter uma extensão deymlouyaml.
- O Ansible usa o nome do arquivo de inventário e a extensão para identificar qual plug-in de inventário usar. Para usar o plug-in de inventário dinâmico do Azure, o arquivo deve terminar com
Execute o seguinte comando para consultar as VMs no grupo de recursos:
ansible-inventory -i myazure_rm.yml --graphAo executar o comando, você verá resultados semelhantes à seguinte saída:
@all: |--@ungrouped: | |--linux-vm_cdb4 | |--win-vm_3211
Ambas as VMs pertencem ao grupo ungrouped, que é um subgrupo do grupo all no inventário do Ansible.
Ponto-chave:
- Por padrão, o plug-in de inventário dinâmico do Azure retorna nomes globalmente exclusivos. Por esse motivo, os nomes da VM podem conter caracteres extras. Você pode desabilitar esse comportamento adicionando
plain_host_names: yesao inventário dinâmico.
Localizar hostvars de VM do Azure
Execute o seguinte comando para exibir todos os hostvars:
ansible-inventory -i myazure_rm.yml --list
{
"_meta": {
"hostvars": {
"linux-vm_cdb4": {
"ansible_host": "52.188.118.79",
"availability_zone": null,
"computer_name": "linux-vm",
"default_inventory_hostname": "linux-vm_cdb4",
"id": "/subscriptions/<subscriptionid>/resourceGroups/ansible-inventory-test-rg/providers/Microsoft.Compute/virtualMachines/linux-vm",
"image": {
"offer": "0001-com-ubuntu-server-jammy",
"publisher": "Canonical",
"sku": "22_04-lts-gen2",
"version": "latest"
},
...,
"tags": {
"applicationRole": "message-broker"
},
...
},
"win-vm_3211": {
"ansible_host": "52.188.112.110",
"availability_zone": null,
"computer_name": "win-vm",
"default_inventory_hostname": "win-vm_3211",
"id": "/subscriptions/<subscriptionid>/resourceGroups/ansible-inventory-test-rg/providers/Microsoft.Compute/virtualMachines/win-vm",
"image": {
"offer": "WindowsServer",
"publisher": "MicrosoftWindowsServer",
"sku": "2019-Datacenter",
"version": "latest"
},
...
"tags": {
"applicationRole": "web-server"
},
...
}
}
},
...
}
}
Ao extrair informações do Azure, o inventário dinâmico preenche a hostvars de cada VM do Azure. Em hostvars seguida, eles devem determinar as associações de grupo de VM dentro do inventário do Ansible.
Atribuir associação de grupo com conditional_groups
Cada grupo condicional é feito de duas partes. O nome do grupo e a condição para adicionar um membro ao grupo.
Use a propriedade image.offer para criar associação de grupo condicional para o linux-vm.
Abra o myazure_rm.yml inventário dinâmico e adicione o seguinte conditional_group:
plugin: azure_rm
include_vm_resource_groups:
- ansible-inventory-test-rg
auth_source: auto
conditional_groups:
linux: "'ubuntu' in image.offer"
windows: "'WindowsServer' in image.offer"
Execute o ansible-inventory com a opção --graph:
ansible-inventory -i myazure_rm.yml --graph
@all:
|--@linux:
| |--linux-vm_cdb4
|--@ungrouped:
|--@windows:
| |--win-vm_3211
Na saída, você pode ver que as VMs não estão mais associadas ao ungrouped grupo. Em vez disso, cada VM é atribuída a um novo grupo criado pelo inventário dinâmico.
Ponto-chave:
- Os grupos condicionais permitem que você nomeie grupos específicos em seu inventário e os preencha usando
hostvars.
Atribuir associação de grupo com keyed_groups
Os grupos chaveados atribuem a associação de grupo da mesma forma que os grupos condicionais, mas ao usar um grupo com chave, o nome do grupo também é preenchido dinamicamente.
Adicione o seguinte grupo_chave ao myazure_rm.yml inventário dinâmico:
plugin: azure_rm
include_vm_resource_groups:
- ansible-inventory-test-rg
auth_source: auto
conditional_groups:
linux: "'ubuntu' in image.offer"
windows: "'WindowsServer' in image.offer"
keyed_groups:
- key: tags.applicationRole
Execute o ansible-inventory com a opção --graph.
ansible-inventory -i myazure_rm.yml --graph
@all:
|--@_message_broker:
| |--linux-vm_cdb4
|--@_web_server:
| |--win-vm_3211
|--@linux:
| |--linux-vm_cdb4
|--@ungrouped:
|--@windows:
| |--win-vm_3211
Na saída, você verá mais dois grupos _message_broker e _web_server. Usando um grupo baseado em chave, a tag applicationRole popula os nomes dos grupos e as associações de grupos.
Ponto-chave:
- Por padrão, os grupos chaveados incluem um separador. Para remover o separador, adicione
separator: ""na propriedade de chave.
Executar guias estratégicos com padrões de nome de grupo
Use os grupos criados pelo inventário dinâmico para direcionar subgrupos.
Crie um guia estratégico chamado
win_ping.ymlcom o seguinte conteúdo:--- - hosts: windows gather_facts: false vars_prompt: - name: username prompt: "Enter local username" private: false - name: password prompt: "Enter password" vars: ansible_user: "{{ username }}" ansible_password: "{{ password }}" ansible_connection: winrm ansible_winrm_transport: ntlm ansible_winrm_server_cert_validation: ignore tasks: - name: run win_ping win_ping:Execute o
win_ping.ymlroteiro.ansible-playbook win_ping.yml -i myazure_rm.ymlQuando solicitado, insira o
usernameepasswordna VM do Azure Windows.Enter local username: azureuser Enter password: PLAY [windows] ************************************************************************************************************************************** TASK [run win_ping] ********************************************************************************************************************************* ok: [win-vm_3211] PLAY RECAP ****************************************************************************************************************************************** win-vm_3211 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0Importante
Se você receber o erro
winrm or requests is not installed: No module named 'winrm', instale o pywinrm com o seguinte comando:pip install "pywinrm>=0.3.0"Crie um segundo guia estratégico nomeado
ping.ymlcom o seguinte conteúdo:--- - hosts: all gather_facts: false vars_prompt: - name: username prompt: "Enter ssh user" - name: password prompt: "Enter password for ssh user" vars: ansible_user: "{{ username }}" ansible_password: "{{ password }}" ansible_ssh_common_args: '-o StrictHostKeyChecking=no' tasks: - name: run ping ping:Execute o
ping.ymlroteiro.ansible-playbook ping.yml -i myazure_rm.ymlQuando solicitado, insira o
usernameepasswordna VM Linux do Azure.Enter ssh username: azureuser Enter password for ssh user: PLAY [linux] ******************************************************************************************************* TASK [run ping] **************************************************************************************************** ok: [linux-vm_cdb4] PLAY RECAP ********************************************************************************************************* linux-vm_cdb4 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Limpar os recursos
Execute az group delete para excluir o grupo de recursos. Todos os recursos dentro do grupo de recursos são excluídos.
az group delete --name <resource_group>Verifique se o grupo de recursos foi excluído usando az group show.
az group show --name <resource_group>