Подтвердить что ты не робот

Какой API VMware я должен использовать?

Я пытаюсь написать довольно простое приложение на С# (или, по крайней мере, я думаю, оно должно быть простым), который опросит vCenter для всех своих серверов ESX, а затем каждый сервер ESX для всех своих виртуальных машин. Он будет собирать некоторые простые статистические данные в реальном времени и внедрять их в базу данных. Легкий peasy, не так ли? Хм.

Я застрял, пытаясь выяснить, какой VMware API я должен использовать, и я становлюсь более смущенным, тем больше я просматриваю ужасно организованный сайт документации VMware. Я прочитал около 60 страниц руководства по программе SDK vSphere Web Services SDK и до сих пор не знаю, как получить данные (но я узнал тонну о супе с алфавитом VMware... yippie).

Мой вопрос таков: какой VMware API я должен использовать для приложения только для чтения, ориентированного на сбор статистики CPU, памяти, сети и жесткого диска? Мне нужно собрать эти данные из типичной установки vCenter + multiple-ESX.

Изменить: Я забыл упомянуть, что я успешно написал PowerCLI script, чтобы сделать то, что я объяснил, но он слишком медленный и нестабильный для готового продукта (и PowerShell - это imo, плохо разработанный язык сценариев). У меня есть VMware vSphere SDK для .NET, но предоставленная документация... краткая, если не сказать больше. Мне не хватает реального vSphere SDK для .NET docs?

4b9b3361

Ответ 1

Я чувствую твою боль. Я сижу на длинном раздумье о том, насколько болезненны их API, но я пощажу вас. Вот то, что для меня работало достаточно хорошо (я напрямую подключаюсь к ESX-боксам, но думаю, что вы сможете построить это, чтобы добраться туда, куда вы хотите):

(Изменить: форматирование исправлено)

  • Возьмите vSphere PowerCLI здесь (ранее называемый VI Toolkit (for Windows)); он включает в себя API VMware.Vim и требуемые базовые классы реализации, к которым обращается интерфейс (хотя, естественно, позже не видно из чтения документов). Установите его на своем компьютере-разработчике (это добавит библиотеки реализации .NET VMware.Vim в ваш глобальный кэш сборок, мы позже извлечем библиотеки, о которых мы заботимся о переносимости)

  • Создайте проект VS и введите какой-нибудь приветственный мировой код.

    using VMware.Vim;
    
    //some namespace, some class, some method...
    
    VimClient c = new VimClient();
    ServiceContent sc = c.Connect("hostnameOrIpHere");
    UserSession us = c.Login("usernameHere", "passwordHere");
    
    IList<VMware.Vim.EntityViewBase> vms = c.FindEntityViews(typeof(VMware.Vim.VirtualMachine), null, null, null);
    foreach (VMware.Vim.EntityViewBase tmp in vms)
    {
        VMware.Vim.VirtualMachine vm = (VMware.Vim.VirtualMachine)tmp;
        Console.WriteLine((bool)(vm.Guest.GuestState.Equals("running") ? true : false));
        Console.WriteLine(new Uri(ENDPOINTURL_PREFIX + (vm.Guest.IpAddress != null ? vm.Guest.IpAddress : "0.0.0.0") + ENDPOINTURL_SUFFIX));
        Console.WriteLine((string)vm.Client.ServiceUrl);
        Console.WriteLine(vm.Guest.HostName != null ? (string)vm.Guest.HostName : "");
        Console.WriteLine("----------------");        
    

    }

  • Если это работает и печатает некоторую информацию о ваших виртуальных машинах, то пока, так хорошо. Если вы видите что-то вроде System.IO.FileNotFoundException: Could not load file or assembly 'VimService40, Version=4.0.0.0, Culture=neutral, Public KeyToken=10980b081e887e9f' or one of its dependencies. The system cannot find the file specified., то вы знаете, что у вас нет фактических файлов реализации: VMware.Vim.dll - это просто интерфейс, а фактические реализации для каждого протокола находятся в таких файлах, как VimService40.dll, которые вы должны иметь получил с шагом 1.

  • Как только вы захотите развернуть этот код где-то, вам нужно отправить с ним фактические библиотеки dll (опять же, VMware.vim.dll не хватает). Вы можете использовать командную строку (не Explorer, она не будет работать), чтобы скопировать их из глобального сборочного кэша.

    Получить VimService DLL из GAC:

    cd %windir%\assembly\GAC_MSIL
    cp VimService20\2.0.0.0__10980b081e887e9f\VimService20.dll %HOMEDRIVE%\%HOMEPATH%\Desktop
    cp VimService20.XmlSerializers\2.0.0.0__10980b081e887e9f\VimService20.XmlSerializers.dll %HOMEDRIVE%\%HOMEPATH%
    cp VimService25\2.5.0.0__10980b081e887e9f\VimService20.dll %HOMEDRIVE%\%HOMEPATH%\Desktop
    cp VimService25.XmlSerializers\2.5.0.0__10980b081e887e9f\VimService20.XmlSerializers.dll %HOMEDRIVE%\%HOMEPATH%
    ... etc, for all the VimService versions you might use ...
    
  • Когда вы разворачиваете свой код на другой компьютер, поместите эти библиотеки в одну и ту же папку (или на путь), и у вас должна быть достойная основа для создания и развертывания кода, который работает с полями ESX.