Рекомендации по разработке модулей VMware
Коллекция Ansible VMware (на Galaxy, репозиторий с исходным кодом) поддерживается рабочей группой VMware. Дополнительную информацию см. на странице сообщества команды.
- Модульное тестирование
Тестирование на собственной инфраструктуре
Для тестирования можно использовать обычную среду VMware. В этом разделе пошагово описано, как самостоятельно запустить набор тестов.
Требования
-
- 2 хоста ESXi (6.5 или 6.7)
-
- с 2 сетевыми адаптерами; второй адаптер должен быть доступен для тестирования
- хост VCSA
- сервер NFS
Для развертывания тестовой среды на гипервизоре подойдут как VMware, так и Libvirt.
Настройка сервера NFS
На сервере NFS должна быть доступна следующая структура каталогов:
$ tree /srv/share/ /srv/share/ ├── isos │ ├── base.iso │ ├── centos.iso │ └── fedora.iso └── vms 2 directories, 3 files
В системе Linux можно предоставить доступ к каталогу через NFS с помощью следующего файла экспорта:
$ cat /etc/exports /srv/share 192.168.122.0/255.255.255.0(rw,anonuid=1000,anongid=1000)
Примечание
При такой настройке владельцем всех новых файлов будет пользователь с UID и GID 1000/1000. Измените настройки так, чтобы они соответствовали UID/GID вашего пользователя.
Службу можно включить следующей командой:
$ sudo systemctl enable --now nfs-server
Настройка установки
Подготовьте файл конфигурации с описанием вашей среды. Файл должен называться test/integration/cloud-config-vcenter.ini и быть основан на test/lib/ansible_test/config/cloud-config-vcenter.ini.template. Например, если вы развернули тестовую среду с помощью vmware-on-libvirt:
[DEFAULT] vcenter_username: administrator@vsphere.local vcenter_password: !234AaAa56 vcenter_hostname: vcenter.test vmware_validate_certs: false esxi1_hostname: esxi1.test esxi1_username: root esxi1_password: root esxi2_hostname: test2.test esxi2_username: root esxi2_password: root
Использование HTTP-прокси
Поддерживается размещение тестовой инфраструктуры за HTTP-прокси. Указать адрес прокси-сервера можно с помощью двух дополнительных ключей:
vmware_proxy_host: esxi1-gw.ws.testing.ansible.com vmware_proxy_port: 11153
Кроме того, может потребоваться изменить переменные в следующих файлах переменных в соответствии с конфигурацией вашей тестовой среды. Если для ее подготовки вы используете vmware-on-libvirt, ничего менять не нужно.
Запуск набора тестов
Когда конфигурация будет готова, запустить тесты можно следующей командой:
source hacking/env-setup VMWARE_TEST_PLATFORM=static ansible-test integration --python 3.7 vmware_host_firewall_manager
vmware_host_firewall_manager — это имя тестируемого модуля.
vmware_guest значительно больше любой другой тестовой роли и выполняется довольно медленно. Некоторые сценарии тестирования можно включить или отключить в файле main.yml.
Модульное тестирование
Покрытие модульными тестами модулей VMware ограничено. Запустить набор тестов можно следующими командами:
source hacking/env-setup ansible-test units --venv --python 3.7 '.*vmware.*'
Стиль кода и рекомендации
Аргумент datacenter для ESXi
Для параметра datacenter не следует по умолчанию использовать ha-datacenter. Иначе пользователь может не заметить, что Ansible незаметно обращается не к тому центру обработки данных.
Параметр esxi_hostname не должен быть обязательным
В зависимости от функциональности ESXi или vCenter некоторые модули могут одинаково работать с обеими системами. В этом случае параметр esxi_hostname должен быть необязательным.
if self.is_vcenter():
esxi_hostname = module.params.get('esxi_hostname')
if not esxi_hostname:
self.module.fail_json("esxi_hostname parameter is mandatory")
self.host = self.get_all_host_objs(cluster_name=cluster_name, esxi_host_name=esxi_hostname)[0]
else:
self.host = find_obj(self.content, [vim.HostSystem], None)
if self.host is None:
self.module.fail_json(msg="Failed to find host system.")
В примерах следует использовать полное имя коллекции (FQCN)
В примерах в документации модулей используйте FQCN. Например, следует использовать community.vmware.vmware_guest вместо просто vmware_guest.
Так примеры не будут зависеть от директивы collections в сценарии.
Функциональные тесты
Написание новых тестов
Если вы пишете новую коллекцию интеграционных тестов, помимо стандартного процесса Ansible интеграционного тестирования следует учесть несколько особенностей VMware.
В наборе тестов используется общий набор заранее определенных переменных, расположенный в роли prepare_vmware_tests. Определенные в ней ресурсы создаются автоматически, если импортировать эту роль в начале теста:
- import_role:
name: prepare_vmware_tests
vars:
setup_datacenter: true
В результате будут готовы к использованию кластер, центр обработки данных, хранилища данных, папка, коммутатор, распределенный коммутатор, хосты ESXi и виртуальные машины.
Не создавайте лишние ресурсы
В большинстве случаев для создания нескольких ресурсов не нужно использовать with_items. Если не делать этого, тесты будут выполняться быстрее, а очистка после них станет проще.
Имена виртуальных машин должны быть предсказуемыми
Если во время теста нужно создать виртуальную машину, используйте test_vm1, test_vm2 или test_vm3. В этом случае очистка будет выполнена автоматически.
Избегайте повторяющегося шаблонного кода в сценариях тестирования
Начиная с Ansible 2.10, в наборе тестов используется modules_defaults. Этот модуль позволяет заранее задать следующие ключи VMware-модулей по умолчанию:
- hostname
- username
- password
- validate_certs
Например, следующий блок:
- name: Add a VMware vSwitch
community.vmware.vmware_vswitch:
hostname: '{{ vcenter_hostname }}'
username: '{{ vcenter_username }}'
password: '{{ vcenter_password }}'
validate_certs: 'no'
esxi_hostname: 'esxi1'
switch_name: "boby"
state: present
можно сократить до следующего:
- name: Add a VMware vSwitch
community.vmware.vmware_vswitch:
esxi_hostname: 'esxi1'
switch_name: "boby"
state: present
Типографические правила
Номенклатура
В документации мы стараемся придерживаться следующих правил:
- VMware, а не VMWare или vmware
- ESXi, а не esxi или ESXI
- vCenter, а не vcenter или VCenter
© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/collections/community/vmware/docsite/dev_guide.html