Вы можете использовать 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] 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 hosts: localhost become: false gather_facts: false collections: - community.vmware pre_tasks: - include_vars: vmware_vars.yml tasks: - name: power on vmware_guest_powerstate: hostname: "{{ hostname }}" username: "{{ username }}" password: "{{ password }}" name: msk-srv01 validate_certs: "{{ validate_certs }}" state: powered-on
Запустите плейбук:
$ ansible-playbook /etc/ansible/vmware/vm_start.yml
Откройте vSphere клиент и проверьте, что ваша ВМ была успешно запущена.
Следующий плейбук позволяет включить службу ntpd на определенном хосте ESXi. Перед использованием плейбука нужно установить набор модулей community.vmware:
$ ansible-galaxy collection install community.vmware
Теперь создайте плейбук (в этом примере мы указали параметры подключения прямо в плейбуке для простоты понимания):
--- - hosts: localhost vars: vcenter_hostname: "192.168.13.70" vcenter_user: "[email protected]" vcenter_password: "passwprd73!" esxi_hostname: "192.168.13.50" esxi_username: "root" esxi_password: "m-032023" tasks: - name: Start Service on esxi host in vcenter community.vmware.vmware_host_service_manager: hostname: "{{ vcenter_hostname }}" username: "{{ vcenter_user }}" password: "{{ vcenter_password }}" esxi_hostname: "{{ esxi_hostname }}" service_name: ntpd state: present #present #absent service_policy: off validate_certs: no delegate_to: localhost
Запустите плейбук:
$ ansible-playbook /etc/ansible/vmware/vm_esxi_start_service.yml
В этой статье мы рассмотрели основы использования Ansible для управления средой VMware.