2011-03-30 18 views
35

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

मैं यह पता लगाने की कोशिश कर रहा हूं कि कौन सी वीएमवेयर एपीआई का उपयोग करना चाहिए और मैं और अधिक भ्रमित हो रहा हूं जितना मैं वीएमवेयर की बहुत संगठित प्रलेखन साइट ब्राउज़ करता हूं। मैंने vSphere वेब सर्विसेज एसडीके प्रोग्रामिन गाइड के 60 पृष्ठों के माध्यम से पढ़ा है और डेटा प्राप्त करने के लिए अभी भी नहीं है (लेकिन मैंने वीएमवेयर के वर्णमाला सूप के बारे में एक टन सीखा है ... yippie)।

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

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

+1

FYI करें, vSphere एसडीके के लिए एपीआई दस्तावेज़ यहाँ है: http://www.vmware.com/support/developer/vc-sdk/visdk41pubs/ApiReference/index.html हालांकि, सुंदर इसके साथ अनुभव किया जा रहा नेट में और दूसरों को इसे शुरू करने के लिए, मैं दिल से नीचे दिए गए उत्तर से Vmware.Vim असेंबली की अनुशंसा करता हूं। केवल चेतावनी यह है कि यदि आप शिपिंग सॉफ्टवेयर हैं तो यह पुनर्वितरण योग्य नहीं है। लेकिन आंतरिक स्वचालन सामग्री के लिए, यह बहुत अच्छा है। –

+0

हम उत्पाद को शिपिंग करने जा रहे थे, भगवान का शुक्र है कि इसे बंद कर दिया गया (जब मैंने उन्हें विश्वास दिलाया कि हम 10x सुरक्षा मुद्दों के साथ वीएमवेयर के मौजूदा अनुप्रयोगों को डुप्लिकेट कर रहे थे)। अद्यतन के लिए धन्यवाद। –

उत्तर

45

मुझे आपका दर्द महसूस होता है। मैं लंबे समय से बैठा हूं कि उनके एपीआई कितने दर्दनाक हैं, लेकिन मैं आपको छोड़ दूंगा।

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

    यहाँ (मैं बक्से ESX को सीधे जोड़ने रहा हूँ, लेकिन मुझे लगता है कि आप प्राप्त करने के लिए इस पर निर्माण करने के लिए सक्षम होना चाहिए कि आप कहाँ जाना चाहते हैं) मेरे लिए काफी अच्छा काम किया है
  1. vSphere PowerCLIhere (जिसे पहले 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. जैसा कुछ दिखाई देता है तो आप जानते हैं कि आपके पास वास्तविक कार्यान्वयन फ़ाइलें इंस्टॉल नहीं हैं: VMware.Vim.dll केवल इंटरफ़ेस है, और वास्तविक प्रति-प्रोटोकॉल कार्यान्वयन VimService40.dll जैसी फ़ाइलों में हैं जिन्हें आपको प्राप्त करना चाहिए था चरण 1.

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

+2

महान उत्तर, धन्यवाद! मैंने वास्तव में VMware.Vim का उपयोग करके एक परीक्षण कार्यक्रम लिखा है, और अब मुझे पता है कि मुझे इसकी आवश्यकता है, मैं इसे और अधिक खोजूंगा। साइड नोट, इस तरह के लाभकारी asshattery है क्यों मैं आमतौर पर स्रोत समाधान खोलने के लिए चिपक जाता है ... –

+0

धन्यवाद बहुत @ coffeetocode। आपके जवाब ने मुझे बहुत मदद की। चीयर्स ..... –

+0

मैंने इस विषय के बारे में बहुत समय पहले लिखा है, शायद यह अभी भी उपयोगी है ?! https://communities.vmware.com/message/1806388?tstart=0#1806388 – Kjellski

संबंधित मुद्दे