Как получить отфильтрованный список виртуальных машин на vcenter с python

Я пытаюсь получить список зарегистрированных виртуальных машин - по их имени - в моем vcenter. Проблема в том, что у меня много vms (~5K), и я делаю это много раз (O(1000)/ час).

Используемые SDK вызывают большой трафик (1-2 МБ / запрос):

  1. pysphere: которые запрашивают все vms и фильтруют на стороне клиента.

  2. pyVmomi, который нужно использовать рекурсию, чтобы перечислить все VMS (я видел SI.content.searchIndex.FindByDnsName на reboot_vm.py, но конфигурация DNS моей машины не соответствует действительности)

Просмотр документации SOAP не помог (попал в RetrievePropertiesEx.objectSet но он ничего не фильтрует), и новый REST (v6.5) тоже не помог (так как мне нужно получить его "путь к хранилищу данных", и все, что я могу получить, это имя)

2 ответа

Вы пробовали использовать сборщик собственности, как в pyVmomi.vmodl.query.PropertyCollector.FilterSpec?

Примеры сообщества pyVmomi содержат примеры использования этого API, такие как https://github.com/vmware/pyvmomi-community-samples/blob/master/samples/filter_vms.py.

vAPI основан на REST, более того, он каждый раз выполняет сетевые запросы, поэтому он будет медленным. Другой способ - использовать VCDB, где хранятся все виртуальные машины (там у нас такая одна, но тут я вам больше не могу помочь), смотрите https://pubs.vmware.com/vsphere-4-esx-vcenter/index.jsp?topic=/com.vmware.vsphere.installclassic.doc_41/install/prep_db/c_preparing_the_vmware_infrastructure_databases.html или https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1025914

Другие вопросы по тегам