tag remarks generate example c# vmware esx powercli

c# - remarks - ¿Qué API de VMware debería usar?



remarks c# (1)

Siento tu dolor. Estoy sentado en una diatriba más larga sobre lo dolorosos que son sus API, pero te ahorraré. Esto es lo que funcionó razonablemente bien para mí (me estoy conectando directamente a cajas ESX, pero creo que debería poder construir sobre esto para llegar a donde quiere ir):

(Editar: formateo fijo)

  1. Tome el vSphere PowerCLI here (anteriormente llamado VI Toolkit (for Windows) ); incluye la API de VMware.Vim y las clases de implementación subyacentes requeridas a las que la interfaz difiere (aunque, naturalmente, lo último no es obvio al leer los documentos). Instálelo en su máquina de desarrollo (esto coloca las bibliotecas de implementación .NET VMware.Vim en su caché de ensamblaje global; luego extraeremos las bibliotecas que nos interesan para su portabilidad)

  2. Cree un proyecto de VS y agregue algún código mundial de saludo.

    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. Si eso funciona e imprime algo de información sobre sus máquinas virtuales hasta ahora, todo bien. Si ve algo así como 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. 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. entonces usted sabe que no tiene instalados los archivos de implementación: VMware.Vim.dll es solo la interfaz, y las implementaciones reales por protocolo están en archivos como VimService40.dll que debería haber obtenido con el paso 1.

  4. Una vez que desee implementar este código en alguna parte, debe enviar los dlls de implementación reales con él (una vez más, VMware.vim.dll no es suficiente). Puede usar la línea de comandos (no Explorer, no funcionará) para copiarlos de la caché de ensamblados global.

    Obtenga VimService DLL de 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 ...

  5. Cuando implemente su código en otra máquina, coloque esas DLL en la misma carpeta (o en la ruta) y debe tener una base decente para compilar e implementar código que funcione con las cajas ESX.

Intento escribir una aplicación bastante simple en C # (o al menos, creo que debería ser simple) que sondea vCenter para todos sus servidores ESX, luego cada servidor ESX para todas sus VM. Recopilará algunas estadísticas simples en tiempo real y las desplegará en una base de datos. Easy peasy, ¿verdad? Hmm.

Estoy atrapado tratando de averiguar qué API de VMware debería usar y cada vez me siento más confundido mientras navego por el sitio de documentación terriblemente organizado de VMware. He leído aproximadamente 60 páginas de vSphere Web Services SDK Programmin Guide y aún no tengo idea de cómo obtener datos (pero he aprendido mucho sobre la sopa de letras de VMware ... yippie).

Mi pregunta es por lo tanto: ¿Qué API de VMware debería usar para una aplicación de solo lectura centrada en reunir estadísticas de CPU, memoria, red y disco duro? Necesito recopilar estos datos de una configuración típica de vCenter + multiple-ESX.

Editar: Olvidé mencionar que he escrito satisfactoriamente un script de PowerCLI para hacer lo que he explicado, pero es demasiado lento e inestable para un producto listo para producción (y PowerShell es, en mi opinión, un lenguaje de scripting mal diseñado). Tengo VMware vSphere SDK para .NET , pero la documentación provista es ... breve para decir lo menos. ¿Me estoy perdiendo el SDK real de vSphere para documentos .NET?