Как получить отфильтрованный список виртуальных машин на vcenter с python
Я пытаюсь получить список зарегистрированных виртуальных машин - по их имени - в моем vcenter. Проблема в том, что у меня много vms (~5K), и я делаю это много раз (O(1000)/ час).
Используемые SDK вызывают большой трафик (1-2 МБ / запрос):
pysphere
: которые запрашивают все vms и фильтруют на стороне клиента.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