Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Importante
Se requiere Ansible 2.8 (o posterior) para ejecutar los cuadernos de estrategias de ejemplo de este artículo.
La característica de inventario dinámico de Ansible elimina la carga de mantener archivos de inventario estáticos.
En este tutorial, usará el complemento de inventario dinámico de Azure para rellenar el inventario de Ansible.
En este artículo aprenderá a:
- Configure dos máquinas virtuales de prueba.
- Adición de etiquetas a máquinas virtuales de Azure
- Generación de un inventario dinámico
- Uso de grupos condicionales y basados en claves para rellenar las membresías de grupos
- Ejecución de cuadernos de estrategias en grupos dentro del inventario dinámico
Prerrequisitos
- Suscripción de Azure: si no tiene una suscripción de Azure, cree una cuenta gratuita antes de comenzar.
- Entidad de servicio de Azure: cree una entidad de servicio y tome nota de los siguientes valores: appId, displayName, password y tenant.
Instale Ansible: realice una de las siguientes opciones:
- Instalación y configuración de Ansible en una máquina virtual Linux
- Configure Azure Cloud Shell y, si no tiene acceso a una máquina virtual Linux, cree una máquina virtual con Ansible.
Creación de VM de Azure
Inicie sesión en Azure Portal.
Abra Cloud Shell.
Cree un grupo de recursos de Azure para almacenar las máquinas virtuales de este tutorial.
Importante
El grupo de recursos de Azure que cree en este paso debe tener un nombre que sea totalmente en minúsculas. De lo contrario, se producirá un error en la generación del inventario dinámico.
az group create --resource-group ansible-inventory-test-rg --location eastusCree dos máquinas virtuales Linux en Azure mediante una de las técnicas siguientes:
Cuaderno de estrategias de Ansible: en el artículo Creación de una máquina virtual Linux básica en Azure con Ansible y Creación de una máquina virtual Windows básica en Azure con Ansible se muestra cómo crear una máquina virtual a partir de un cuaderno de estrategias de Ansible.
CLI de Azure : emita cada uno de los siguientes comandos en Cloud Shell para crear las dos máquinas virtuales:
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>Reemplace la
<password>contraseña.
Adición de etiquetas de rol de aplicación
Las etiquetas se usan para organizar y clasificar los recursos de Azure. La asignación de las máquinas virtuales de Azure a un rol de aplicación permite usar las etiquetas como nombres de grupo dentro del inventario dinámico de Azure.
Ejecute los comandos siguientes para actualizar las etiquetas de máquina virtual:
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'
Obtenga más información sobre las estrategias de etiquetado de Azure en Definición de la estrategia de etiquetado.
Generación de un inventario dinámico
Ansible proporciona un complemento de inventario dinámico de Azure.
Los pasos siguientes le guiarán por el uso del complemento:
Creación de un inventario dinámico denominado
myazure_rm.ymlplugin: azure_rm include_vm_resource_groups: - ansible-inventory-test-rg auth_source: autoPunto clave:
- Ansible usa el nombre de archivo de inventario y la extensión para identificar qué complemento de inventario se va a usar. Para usar el complemento de inventario dinámico de Azure, el archivo debe terminar con
azure_rmy tener una extensión deymloyaml.
- Ansible usa el nombre de archivo de inventario y la extensión para identificar qué complemento de inventario se va a usar. Para usar el complemento de inventario dinámico de Azure, el archivo debe terminar con
Ejecute el siguiente comando para consultar las máquinas virtuales dentro del grupo de recursos:
ansible-inventory -i myazure_rm.yml --graphAl ejecutar el comando, verá resultados similares a los siguientes:
@all: |--@ungrouped: | |--linux-vm_cdb4 | |--win-vm_3211
Ambas máquinas virtuales pertenecen al ungrouped grupo, que es un elemento secundario del all grupo en el inventario de Ansible.
Punto clave:
- De forma predeterminada, el complemento de inventario dinámico de Azure devuelve nombres únicos globales. Por este motivo, los nombres de máquina virtual pueden contener caracteres adicionales. Puede deshabilitar ese comportamiento agregando
plain_host_names: yesal inventario dinámico.
Encuentre variables de hosts de máquina virtual de Azure
Ejecute el siguiente comando para ver todos los hostvarselementos :
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"
},
...
}
}
},
...
}
}
Al extraer información de Azure, el inventario dinámico rellena en hostvars para cada VM de Azure. A hostvars continuación, se utilizan para determinar las pertenencias a grupos de máquinas virtuales dentro del inventario de Ansible.
Asignar membresía de grupo con conditional_groups
Cada grupo condicional se compone de dos partes. El nombre del grupo y la condición para agregar un miembro al grupo.
Use la propiedad image.offer para crear la pertenencia a grupos condicionales para linux-vm.
Abra el myazure_rm.yml inventario dinámico y agregue lo siguiente 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"
Ejecute el ansible-inventory con la opción --graph:
ansible-inventory -i myazure_rm.yml --graph
@all:
|--@linux:
| |--linux-vm_cdb4
|--@ungrouped:
|--@windows:
| |--win-vm_3211
En la salida, puede ver que las máquinas virtuales ya no están asociadas al ungrouped grupo. En su lugar, cada máquina virtual se asigna a un nuevo grupo creado por el inventario dinámico.
Punto clave:
- Los grupos condicionales permiten asignar un nombre a grupos específicos dentro del inventario y rellenarlos mediante
hostvars.
Asignar pertenencia a grupos con keyed_groups
Los grupos con claves asignan la pertenencia a grupos de la misma manera que los grupos condicionales, pero cuando se usa un grupo con claves, el nombre del grupo también se rellena dinámicamente.
Agregue los siguientes keyed_group al myazure_rm.yml inventario 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
Ejecute el ansible-inventory con la opción --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
En la salida, verán dos grupos más _message_broker y _web_server. Mediante el uso de un grupo con clave, la applicationRole etiqueta rellena los nombres de grupo y las pertenencias a grupos.
Punto clave:
- De forma predeterminada, los grupos con claves incluyen un separador. Para quitar el separador, agregue
separator: ""en la propiedad clave.
Ejecutar cuadernos de estrategias con patrones de nombre de grupo
Use los grupos creados por el inventario dinámico para dirigirse a subgrupos.
Cree un cuaderno de estrategias llamado
win_ping.ymlcon el siguiente contenido:--- - 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:Ejecute el cuaderno de
win_ping.ymlestrategias.ansible-playbook win_ping.yml -i myazure_rm.ymlCuando se le solicite, introduzca el
usernamey elpasswordpara la máquina virtual Windows de Azure.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
Si recibe el error
winrm or requests is not installed: No module named 'winrm', instale pywinrm con el comando siguiente:pip install "pywinrm>=0.3.0"Cree un segundo cuaderno de estrategias denominado
ping.ymlcon el siguiente contenido:--- - 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:Ejecute el cuaderno de
ping.ymlestrategias.ansible-playbook ping.yml -i myazure_rm.ymlCuando se le solicite, escriba los valores de
usernameypasswordpara la máquina virtual Linux de 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
Limpieza de recursos
Ejecute az group delete para eliminar el grupo de recursos. Se eliminan todos los recursos del grupo de recursos.
az group delete --name <resource_group>Compruebe que el grupo de recursos se eliminó mediante az group show.
az group show --name <resource_group>