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

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

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

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

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

$ sudo pip install pyvmomi

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

Чтобы разрешить использовать плагин динамической инвентаризации 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

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 
  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

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

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

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

Следующий плейбук позволяет включить службу 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

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

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

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