Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Это важно
Ansible 2.8 (или более поздней версии) требуется для запуска примеров сборников схем в этой статье.
Функция динамического инвентаризации Ansible удаляет бремя хранения статических файлов инвентаризации.
В этом руководстве вы используете подключаемый модуль динамического инвентаря Azure для заполнения инвентаря Ansible.
В этой статье вы узнаете, как:
- Настройте две тестовые виртуальные машины.
- Добавление тегов в виртуальные машины Azure
- Создание динамической инвентаризации
- Используйте условные и ключевые группы для заполнения членств в группах
- Запуск сборников схем для групп в динамической инвентаризации
Предпосылки
- Подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
- Субъект-служба Azure: создайте субъект-службу, запишите следующие значения: appId, displayName, password и tenant.
Установите Ansible: выполните одно из следующих параметров:
- Установка и настройка Ansible на виртуальной машине Linux
- Настройте Azure Cloud Shell и , если у вас нет доступа к виртуальной машине Linux, создайте виртуальную машину с помощью Ansible.
Создание виртуальных машин Azure
Войдите на портал Azure.
Откройте Cloud Shell.
Создайте группу ресурсов Azure для хранения виртуальных машин для этого руководства.
Это важно
Группа ресурсов Azure, созданная на этом шаге, должна иметь имя, которое полностью состоит из букв нижнего регистра. В противном случае создание динамической инвентаризации завершится ошибкой.
az group create --resource-group ansible-inventory-test-rg --location eastusСоздайте две виртуальные машины Linux в Azure с помощью одного из следующих методов:
Сборник схемAnsible. Статья о создании базовой виртуальной машины Linux в Azure с помощью Ansible и создании базовой виртуальной машины Windows в Azure с помощью Ansible иллюстрирует создание виртуальной машины из сборника схем Ansible.
Azure CLI — выполните каждую из следующих команд в Cloud Shell, чтобы создать две виртуальные машины:
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>Замените
<password>пароль.
Добавление тегов роли приложения
Теги используются для упорядочивания и классификации ресурсов Azure. Назначение виртуальных машин Azure роли приложения позволяет использовать теги в качестве имен групп в динамической инвентаризации Azure.
Выполните следующие команды, чтобы обновить теги виртуальной машины:
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'
Дополнительные сведения о стратегиях добавления тегов Azure см. в статье "Определение стратегии добавления тегов".
Создание динамической инвентаризации
Ansible предоставляет подключаемый модуль Azure для динамической инвентаризации.
Ниже описано, как использовать подключаемый модуль:
Создать динамический инвентарь с именем
myazure_rm.ymlplugin: azure_rm include_vm_resource_groups: - ansible-inventory-test-rg auth_source: autoКлючевая точка:
- Ansible использует имя и расширение файла инвентаризации для определения плагина инвентаризации, который будет использоваться. Чтобы использовать подключаемый модуль динамической инвентаризации Azure, файл должен заканчиваться
azure_rmи иметь расширение либоyml, либоyaml.
- Ansible использует имя и расширение файла инвентаризации для определения плагина инвентаризации, который будет использоваться. Чтобы использовать подключаемый модуль динамической инвентаризации Azure, файл должен заканчиваться
Выполните следующую команду, чтобы запросить виртуальные машины в группе ресурсов:
ansible-inventory -i myazure_rm.yml --graphПри выполнении команды отображаются результаты, аналогичные следующим выходным данным:
@all: |--@ungrouped: | |--linux-vm_cdb4 | |--win-vm_3211
Обе виртуальные машины принадлежат группе ungrouped, которая является дочерней группой группы all в списке инвентаря Ansible.
Ключевая точка:
- По умолчанию подключаемый модуль динамической инвентаризации Azure возвращает глобально уникальные имена. По этой причине имена виртуальных машин могут содержать дополнительные символы. Это поведение можно отключить, добавив
plain_host_names: yesв динамическую инвентаризацию.
Поиск переменных хоста виртуальных машин Azure
Выполните следующую команду, чтобы просмотреть все 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"
},
...
}
}
},
...
}
}
Извлекая сведения из Azure, динамическая инвентаризация заполняет hostvars для каждой виртуальной машины Azure. Затем они hostvars определяют принадлежность к группам виртуальных машин в инвентаре Ansible.
Назначение членства в группах с помощью conditional_groups
Каждая условная группа состоит из двух частей. Имя группы и условие добавления участника в группу.
Используйте свойство image.offer для создания членства в условной группе для виртуальной машины Linux.
Откройте динамическую инвентаризацию myazure_rm.yml и добавьте следующее 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"
Выполните ansible-inventory с опцией --graph :
ansible-inventory -i myazure_rm.yml --graph
@all:
|--@linux:
| |--linux-vm_cdb4
|--@ungrouped:
|--@windows:
| |--win-vm_3211
Из выходных данных вы увидите, что виртуальные машины больше не связаны с ungrouped группой. Вместо этого каждая виртуальная машина назначается новой группе, созданной динамической инвентаризацией.
Ключевая точка:
- Условные группы позволяют присваивать имена отдельным группам в вашем инвентаре и заполнять их с помощью
hostvars.
Назначьте членство в группах, используя keyed_groups
Ключевые группы назначают членство в группах таким же образом, как и условные группы, но при использовании ключевой группы имя группы также динамически заполняется.
Добавьте следующую ключевую_группу в динамический инвентарь myazure_rm.yml.
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
Выполните ansible-inventory с параметром --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
В выходных данных вы увидите еще две группы _message_broker и _web_server. Используя группировку по ключу, тег applicationRole заполняет имена групп и состав групп.
Ключевая точка:
- По умолчанию ключевые группы включают разделитель. Чтобы удалить разделитель, добавьте
separator: ""в свойство ключа.
Запуск плейбуков с шаблонами имен групп
Используйте группы, созданные динамической инвентаризацией, для целевых подгрупп.
Создайте плейбук, называемый
win_ping.yml, со следующим содержимым:--- - 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:win_ping.ymlЗапустите плейбук.ansible-playbook win_ping.yml -i myazure_rm.ymlПри появлении запроса введите
usernameиpasswordдля виртуальной машины Windows 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=0Это важно
Если вы получите ошибку
winrm or requests is not installed: No module named 'winrm', установите pywinrm со следующей командой:pip install "pywinrm>=0.3.0"Создайте второй плейбук под названием
ping.ymlсо следующим содержимым:--- - 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:ping.ymlЗапустите плейбук.ansible-playbook ping.yml -i myazure_rm.ymlПри появлении запроса введите
usernameиpasswordдля виртуальной машины Linux 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
Очистите ресурсы
Выполните команду az group delete , чтобы удалить группу ресурсов. Все ресурсы в группе ресурсов удаляются.
az group delete --name <resource_group>Убедитесь, что группа ресурсов удалена с помощью az group show.
az group show --name <resource_group>