До появления VCSA (Vcenter Server Appliance) у нас был Windows Vcenter Server.
У нас был установлен PowerCLI локально.
Там мы могли бы сказать
Get-VM -Name * | Sort-Object | %{
....
чтобы получить список всех виртуальных машин, зарегистрированных в Vcenter.
Теперь у нас есть Appliance.
Я также установил vMA (помощник по управлению).
Я зарегистрировал устройство vcenter, я успешно подключился к нему, но не могу просто получить список виртуальных машин, как указано выше.
Он всегда хочет, чтобы я подключился к одному хосту ESXi для выполнения листинга.
Мне это кажется шагом назад.
Как бы вы это сделали?
Вы бы вообще использовали vMA? Может, использовать vCLI? Или придерживайтесь PowerCLI, но тогда мне снова нужно будет установить машину Windows, чтобы запускать мои сценарии ...
Я бы использовал ПК с Windows или сервер с установленным PowerCLI ... PowerCLI - это то место, где движется VMware, поэтому ожидается, что у вас будет система Windows, доступная для взаимодействия с ней.
Итак, хотя можно установить VMware без зависимости от Windows, оказывается, что Windows на самом деле является зависимостью :)
Вы также можете использовать vCenter API, в зависимости от того, что вы планируете делать со списком виртуальных машин ...
Также см: Можно ли развернуть VMware vSphere 5.5 без Windows?
У меня нет опыта работы с vma, но я полагаю, что для вас установлен vmware Perl SDK (согласно этому сообщению практически гетто должно). В нем у вас много утилит, и я думаю, что это то, что вы ищете:
Если вы не хотите вводить учетные данные каждый раз, вам необходимо настроить Credendial магазин первый.
[править] На самом деле, я просто попробовал это, и хотя он вроде работает, он очень медленный, потому что получает всю информацию о каждой сущности. Не очень эффективно. Я просто написал очень маленький скрипт, и это все, что нужно:
#!/usr/bin/perl
use strict;
use warnings;
use VMware::VIRuntime;
# read/validate options and connect to the server
Opts::parse();
Opts::validate();
Util::connect();
my $vm_views =
Vim::find_entity_views(view_type => 'VirtualMachine',
properties => ['name'], );
foreach my $view ( sort @$vm_views) {
print $view->{'name'}, "\n";
}
# disconnect from the server
Util::disconnect();
Это предполагает, что у вас есть файл $ HOME / .visdkrc с правильной информацией:
VI_PROTOCOL=https
VI_SERVER=fqdn
VI_SERVICEPATH=/sdk
VI_USERNAME=username
VI_PASSWORD=pwd
И, как вы сказали, у вас есть vma, все библиотеки уже должны быть там для вас. Этот скрипт получает все виртуальные машины (только их имена менее чем за 1 секунду). Если у вас нет центра сертификации и у вашего виртуального центра есть самоподписанный сертификат, вы должны сначала установить эту envvar, иначе библиотека Perl lwp выйдет из строя при запуске скрипта:
export PERL_LWP_SSL_VERIFY_HOSTNAME=0
Есть другое решение: вы можете просто получить доступ к vCenter DB напрямую для такого рода вещей.
Для справки, вот однострочник, который можно выполнить непосредственно в VCSA с помощью клиента postgres:
/opt/vmware/vpostgres/1.0/bin/psql --pset pager = off --pset footer = off --command 'ВЫБРАТЬ имя ИЗ vpx_vm_config_info ORDER BY name;' -U vc VCDB | хвост -n +3 | голова -n -1 | sed 's / ^ [] * // g'
Я использую head, tail и sed, чтобы отфильтровать неприятные заголовки, пустые строки и пробелы в начале строки соответственно. Может быть, есть более элегантный и короткий способ сделать это, но мне все равно.
Плюсы:
Минусы: