Вы можете использовать Ansible для автоматизации некоторых задач в вашей инфраструктуре VMware. Можно автоматизировать настройку ESXi хостов, управлять сетевыми настройками, запускать, останавливать и удалять ВМ, разворачивать виртуальные машины из шаблонов, устанавливать обновления на хостах ESXi и тд. В этой статье мы покажем, как начать использовать Ansible для управления средой VMware.
Итак, предполагаем, что у вас уже установлен хост с Ansible (в нашем примере это сервер с Ubuntu 22.04).
В Ansible есть большое количество модулей для управления инфраструктурой VMware, подавляющее большинство из них основаны на pyVmomi (Python SDK, позволяющий использовать VMware vSphere API). Установите pyVmomi с помощью менеджера pip:
$ sudo pip install pyvmomi
Чтобы разрешить использовать плагин динамической инвентаризации 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
Добавим список ваших хостов 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
Теперь вы можете проверить доступность всех ESXi:
$ ansible all_esxi_hosts -m ping
Если вы не сохраняли пароль в файле hosts, можно запросить его интерактивно:
$ ansible all_esxi_hosts -m ping --ask-pass
Черех Ansible вы можете выполнить любые команды на всех ваших ESXi хостах. Для запуска команды на удаленных ESXi используется режим команд Ansible ad-hoc. Например, вы хотите получить версию ESXi на всех хостах:
$ ansible all_esxi_hosts -m shell -a "vmware -vl"
Таким образом можно запустить любую 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
Откройте vSphere клиент и проверьте, что ваша ВМ была успешно запущена.
Следующий плейбук позволяет включить службу 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
В этой статье мы рассмотрели основы использования Ansible для управления средой VMware.