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

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

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

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

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

1 ответов


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

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

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

  2. создайте проект VS и добавьте код hello world.

    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("----------------");        
    

    }

  3. если это работает и распечатывает некоторую информацию о Ваших VMs, то пока все идет хорошо. Если вы видите что-то вроде 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.Напор.dll - это просто интерфейс, а фактические реализации для каждого протокола находятся в файлах, таких как VimService40.dll, которую вы должны были получить с шагом 1.

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

    получить DLL VIMSERVICE из GAC:

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