Spec-Zone.ru › Ansible

Рекомендации по разработке модулей VMware

Коллекция Ansible VMware (на Galaxy, репозиторий с исходным кодом) поддерживается рабочей группой VMware. Дополнительную информацию см. на странице сообщества команды.

  • Тестирование на собственной инфраструктуре

    • Требования

      • Настройка сервера NFS
    • Настройка установки
    • Использование HTTP-прокси
    • Запуск набора тестов
  • Модульное тестирование
  • Стиль кода и рекомендации

    • Аргумент datacenter для ESXi
    • Параметр esxi_hostname не должен быть обязательным
    • В примерах следует использовать полное имя коллекции (FQCN)
    • Функциональные тесты

      • Написание новых тестов
      • Не создавайте лишние ресурсы
      • Имена виртуальных машин должны быть предсказуемыми
      • Избегайте повторяющегося шаблонного кода в сценариях тестирования
  • Типографические правила

    • Номенклатура

Тестирование на собственной инфраструктуре

Для тестирования можно использовать обычную среду VMware. В этом разделе пошагово описано, как самостоятельно запустить набор тестов.

Требования

  • 2 хоста ESXi (6.5 или 6.7)
    • с 2 сетевыми адаптерами; второй адаптер должен быть доступен для тестирования
  • хост VCSA
  • сервер NFS
  • Зависимости Python:
    • pyvmomi
    • requests

Для развертывания тестовой среды на гипервизоре подойдут как 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API