c# मुझे कौन से वीएमवेयर एपीआई का उपयोग करना चाहिए?



vmware esx (1)

मैं C # (या कम से कम, मुझे लगता है कि यह सरल होना चाहिए) में एक काफी सरल अनुप्रयोग लिखने की कोशिश कर रहा हूं, जो अपने सभी ईएसएक्स सर्वरों के लिए एक वीसीएनआर और उसके सभी वीएम के लिए प्रत्येक ईएसएक्स सर्वर का चुनाव करता है। यह एक डेटाबेस में कुछ सरल, वास्तविक समय के आँकड़े और प्लॉप उन्हें एकत्रित करेगा। आसान मटर, सही? हम्म।

मैं यह जानने की कोशिश कर रहा हूं कि मुझे किस VMware API का उपयोग करना चाहिए और मैं अधिक भ्रमित हो रहा हूं जितना अधिक मैं VMware के बहुत ही व्यवस्थित प्रलेखन साइट को ब्राउज़ करता हूं। मैंने vSphere Web Services SDK Programmin Guide के लगभग 60 पृष्ठों के माध्यम से पढ़ा है और अभी भी पता नहीं है कि डेटा कैसे प्राप्त किया जाए (लेकिन मैंने VMware के अल्फाबेट सूप ... yippie के बारे में एक टन सीखा है)।

मेरा सवाल इस प्रकार है: मुझे सीपीएम, मेमोरी, नेटवर्क और हार्डड्राइव के आंकड़ों को इकट्ठा करने के लिए केंद्रित वीएमवेयर एपीआई का उपयोग केवल पढ़ने के लिए ही करना चाहिए? मुझे एक विशिष्ट vCenter + एकाधिक-ईएसएक्स सेटअप से इस डेटा को इकट्ठा करने की आवश्यकता है।

संपादित करें: मैं यह उल्लेख करना भूल गया कि मैंने जो कुछ भी समझाया है, उसे करने के लिए मैंने सफलतापूर्वक एक PowerCLI स्क्रिप्ट लिखी है, लेकिन उत्पादन-तैयार उत्पाद (और PowerShell, imo, एक खराब डिज़ाइन की गई स्क्रिप्टिंग भाषा) के लिए बहुत धीमी और अस्थिर है। मेरे पास .NET के लिए VMware vSphere SDK है , लेकिन प्रदान किया गया दस्तावेज है ... कम से कम कहने के लिए संक्षिप्त। क्या मुझे .NET डॉक्स के लिए असली vSphere SDK याद आ रही है?


मै तुम्हारा दर्द समझ सकता हू। मैं लंबे समय तक इस बात पर बैठा रहा हूं कि उनके एपीआई कितने दर्दनाक हैं, लेकिन मैं आपको छोड़ दूंगा। यहां मेरे लिए बहुत अच्छी तरह से काम किया गया है (मैं सीधे ईएक्सएक्स बक्से से जुड़ रहा हूं, लेकिन मुझे लगता है कि आपको इस पर निर्माण करने में सक्षम होना चाहिए कि आप कहां जाना चाहते हैं):

(संपादित करें: निश्चित स्वरूपण)

  1. here vSphere PowerCLI पकड़ो (पहले जिसे VI Toolkit (for Windows) कहा जाता है VI Toolkit (for Windows) ); इसमें VMware.Vim API और आवश्यक अंतर्निहित कार्यान्वयन कक्षाएं शामिल हैं जो इंटरफ़ेस को ख़राब करती हैं (हालांकि स्वाभाविक रूप से, बाद में डॉक्स पढ़ने से स्पष्ट नहीं है)। इसे अपने देव मशीन पर स्थापित करें (यह आपके ग्लोबल असेंबली कैश में .NET VMware.Vim कार्यान्वयन पुस्तकालयों को डालता है; हम बाद में पोर्टेबिलिटी के लिए हमारे द्वारा देखभाल की जाने वाली पुस्तकालयों को निकाल देंगे)

  2. एक वीएस प्रोजेक्ट बनाएं, और कुछ हैलो वर्ल्ड कोड में फेंक दें।

    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. जैसी कोई चीज़ देखते हैं 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. तब आप जानते हैं कि आपके पास वास्तविक कार्यान्वयन फ़ाइलें स्थापित नहीं हैं: VMware.Vim.dll सिर्फ इंटरफ़ेस है, और वास्तविक प्रति-प्रोटोकॉल कार्यान्वयन VimService40.dll जैसी फ़ाइलों में हैं जिन्हें आपको चरण 1 के साथ प्राप्त करना चाहिए।

  4. एक बार जब आप इस कोड को कहीं पर तैनात करना चाहते हैं, तो आपको इसके साथ वास्तविक कार्यान्वयन dll भेजना होगा (फिर, VMware.vim.dll पर्याप्त नहीं है)। ग्लोबल असेंबली कैश से बाहर निकालने के लिए आप कमांड लाइन (एक्सप्लोरर नहीं, यह काम नहीं करेगा) का उपयोग कर सकते हैं।

    GAC से VimService DLL प्राप्त करें:

    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. जब आप अपना कोड किसी अन्य मशीन पर तैनात करते हैं, तो उन DLL को एक ही फ़ोल्डर में (या पथ पर) डालें और आपके पास ESX बॉक्स के साथ काम करने वाले कोड के निर्माण और तैनाती के लिए एक अच्छा आधार होना चाहिए।





powercli