Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Внимание
Для выполнения примеров сборников схем из этой статьи требуется 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.yml
plugin: 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
в динамическую инвентаризацию.
Поиск виртуальной машины hostvars
Выполните следующую команду, чтобы просмотреть все 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-vm.
Откройте динамический список инвентаризации 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
Группы с ключами назначают членство в группе так же, как и условные группы, но при использовании группы с ключом, имя группы также динамически заполняется.
Добавьте следующую keyed_group в 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
для виртуальной машины 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=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>