Использование Ansible для управления инфраструктурой VMware

Вы можете использовать Ansible для автоматизации некоторых задач в вашей инфраструктуре VMware. Можно автоматизировать настройку ESXi хостов, управлять сетевыми настройками, запускать, останавливать и удалять ВМ, разворачивать виртуальные машины из шаблонов, устанавливать обновления на хостах ESXi и тд. В этой статье мы покажем, как начать использовать Ansible для управления средой VMware.

Итак, предполагаем, что у вас уже установлен хост с Ansible (в нашем примере это сервер с Ubuntu 22.04).

В предыдущей статье мы показали, как использовать Ansible для управления хостами Windows .

В Ansible есть большое количество модулей для управления инфраструктурой VMware, подавляющее большинство из них основаны на pyVmomi (Python SDK, позволяющий использовать VMware vSphere API). Установите pyVmomi с помощью менеджера pip:

$ sudo pip install pyvmomi

установить pyvmomi для ansible

Чтобы разрешить использовать плагин динамической инвентаризации VMware, включите плагин vmware_vm_inventory в конфигурационном файле ansible.cfg:

[inventory]_x000D_enable_plugins = vmware_vm_inventory, host_list, script, auto, yaml, ini, toml

Теперь создайте простой vmware_vars.yml файл, который содержит переменные для доступа к vCenter/ отдельно стоящему хосту ESXi:

plugin: vmware_vm_inventory strict: False hostname: 192.168.13.70 username: [email protected] password: passwprd732@ validate_certs: False with_tags: True

Теперь вы можете выполнить команду инвентаризации и получить список виртуальных машин на сервере vCenter или ESXi.

$ ansible-inventory --list -i /etc/ansible/vmware/vmware.yml

Можно представить список ВМ в иерархической форме:

$ ansible-inventory --graph -i /etc/ansible/vmware/vmware.yml

ansible-inventory инвентаризация хостов esxi

Добавим список ваших хостов ESXi в файл /etc/ansible/hosts:

[all_esxi_hosts]
esxi1 ansible_host=192.168.13.50
esxi2 ansible_host=192.168.13.51
esxi3 ansible_host=192.168.13.52

Задайте значения переменных для этой группы хостов:

[all_esxi_hosts:vars]
ansible_user=root
ansible_python_interpreter=/bin/python
ansible_ssh_pass=P@ssw0rdd

файл hosts для esxi

В этом примере мы указали пароль root для подключения к хостам ESXi в открытом виде. В продуктивной среде нужно настроить SSH аутентификацию на ESXi.

Теперь вы можете проверить доступность всех ESXi:

$ ansible all_esxi_hosts -m ping

Если вы не сохраняли пароль в файле hosts, можно запросить его интерактивно:

$ ansible all_esxi_hosts -m ping --ask-pass

ansible проверить доступность хостов esxi ping

Черех Ansible вы можете выполнить любые команды на всех ваших ESXi хостах. Для запуска команды на удаленных ESXi используется режим команд Ansible ad-hoc. Например, вы хотите получить версию ESXi на всех хостах:

$ ansible all_esxi_hosts -m shell -a "vmware -vl"

выполнить команду на всех хостах esxi через ansible

Таким образом можно запустить любую shell команду на всех хостах (на ESXi должен быть включен SSH ).

Теперь создадим простой плейбук Ansible vm_start.ymlдля включения определенной виртуальной машины на vCenter. Данный плейбук будет использовать учетные данные для подключения из файла vmware_vars.yml

- name: start vm _x000D_ hosts: localhost_x000D_ become: false_x000D_ gather_facts: false_x000D_ collections:_x000D_ - community.vmware_x000D_ pre_tasks:_x000D_ - include_vars: vmware_vars.yml_x000D_ tasks:_x000D_ - name: power on_x000D_ vmware_guest_powerstate:_x000D_ hostname: "{{ hostname }}"_x000D_ username: "{{ username }}"_x000D_ password: "{{ password }}"_x000D_ name: msk-srv01_x000D_ validate_certs: "{{ validate_certs }}"_x000D_ state: powered-on

Запустите плейбук:

$ ansible-playbook /etc/ansible/vmware/vm_start.yml

плейбук ansible для запуска ВМ

Откройте vSphere клиент и проверьте, что ваша ВМ была успешно запущена.

виртуальная машина vmware была успено запущена через ansible

Следующий плейбук позволяет включить службу ntpd на определенном хосте ESXi. Перед использованием плейбука нужно установить набор модулей community.vmware:

$ ansible-galaxy collection install community.vmware

Теперь создайте плейбук (в этом примере мы указали параметры подключения прямо в плейбуке для простоты понимания):

---_x000D_- hosts: localhost_x000D_ vars:_x000D_ vcenter_hostname: "192.168.13.70"_x000D_ vcenter_user: "[email protected]"_x000D_ vcenter_password: "passwprd73!"_x000D_ esxi_hostname: "192.168.13.50"_x000D_ esxi_username: "root"_x000D_ esxi_password: "m-032023"_x000D_ tasks: _x000D_ - name: Start Service on esxi host in vcenter_x000D_ community.vmware.vmware_host_service_manager:_x000D_ hostname: "{{ vcenter_hostname }}"_x000D_ username: "{{ vcenter_user }}"_x000D_ password: "{{ vcenter_password }}"_x000D_ esxi_hostname: "{{ esxi_hostname }}"_x000D_ service_name: ntpd_x000D_ state: present #present #absent_x000D_ service_policy: off _x000D_ validate_certs: no_x000D_ delegate_to: localhost_x000D_

Запустите плейбук:

$ ansible-playbook /etc/ansible/vmware/vm_esxi_start_service.yml

Обратите внимание, что вы не сможете изменить настройки бесплатного VMware Hypervisor из Ansible. В этой редакции ESXi API доступны только на чтение.

В этой статье мы рассмотрели основы использования Ansible для управления средой VMware.

EnglishRussianUkrainian