java獲取配置文件內容,用Java獲取vSphere相關數據

 2023-10-08 阅读 31 评论 0

摘要:2019獨角獸企業重金招聘Python工程師標準>>> 1.到官網下載SDK,VMware-vSphere-SDK-6.0.0-2561048.zip解壓下來會有5個目錄,VMware-vSphere-SDK里面有幾種類型的包,它們的功能在解壓下來的vSphereManagementSDKReadme.html有說明,通常每

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

1.到官網下載SDK,VMware-vSphere-SDK-6.0.0-2561048.zip解壓下來會有5個目錄,VMware-vSphere-SDK里面有幾種類型的包,它們的功能在解壓下來的vSphereManagementSDKReadme.html有說明,通常每個包里面都有依賴包,例子。
2.這邊根據需求選取vsphere-ws包,導入vsphere-ws\java\JAXWS\lib下面的包到工程

不了解它的內部結構使用它的SDK還真沒那么簡單,先看它幾個基本概念:

java獲取配置文件內容,vSphere API
Managed Object(MO)?? 服務(services)和組件(components),服務包括 PropertyCollector, SearchIndex、PerformanceManager 和 ViewManager 等,組件包括 VirtualMachine、Datastore 和 Folder 等,他們都直接或間接繼承自 ManagedEntity 抽象類,可以通過api看ManagedEntity 的子孫類,
Managed Object Reference(MOR) 客戶端對象,可以理解為客戶端通過mor對象調用服務端mo的方法,
Data Objects 封裝了MO的數據,客戶端發送數據到服務端。

vSphere Inventory 介紹
vSphere inventory 其實就是 一堆對象組成的結構。在 vSphere inventory 中包含了以下三種類型的對象:
????在 datacenter 中被管理的系統,比如 Host、VirtualMachine、VirtualApp 等。
????具有一定功能的組件,比如 ComputeResource、DataStore,、Network 等。
????負責組織歸類的組件,它們負責把 datacenter 中的對象按照層級關系組織起來形成了一個樹狀結構,比如 Folder 和 DataCenter。
下面圖出自 vSphere Web Servicess SDK Programming Guide,給出了 inventory 的結構。

使用 SDK 開發自己的 vSphere 客戶端程序,首要的問題就是如何訪問和遍歷在 vSphere Inventory 中的對象。下面我們將介紹這方面的內容。

java導出數據庫數據csv?ServiceInstance 對象在 inventory 的結構樹中處于根位置,因此遍歷整個 inventory 或者要查找 inventory 中的某個對象,必須先從 ServiceInstance 開始。ServiceInstance 類中最重要的一個屬性(property,可以理解為類的成員變量)是 content,它指向數據類型(Data Object)ServiceContent 的一個實例。
ServiceContent 類含有很多該 vSphere 服務實例的重要屬性和服務的引用,比如整個 inventory 的 root folder,session manager,property collector(用于查找和遍歷對象),以及 EventManager, TaskManager 等。下面的類圖展示了 ServiceInstance 和 ServiceContent 的部分屬性。

?

使用 PropertyCollector 查詢對象
vSphere API 中,PropertyCollector 類是用來遍歷、查詢和監控 MO 的狀態的。使用 PropertyCollector 時,要指定一或多個 filter 來限定查找的范圍,而每個 filter 都含有一組對象來描述(XXXSpec):
????查詢或遍歷的起點,即從上文描述的 inventory 樹的哪個節點開始遍歷。
????查詢的路徑。
????要查詢哪些對象及它們的哪些屬性。
PropertyCollector 中的 filter 只對當前 session 有效,因此 PropertyCollector 不能在 session 中共享。vSphere server 會給當前 session 創建一個默認的 PropertyCollector 實例。當然也可以自己在多線程中創建多個 PropertyCollector 實例,以便進行互相獨立的查詢操作。
PropertyCollector 有兩種方法來獲取數據:
????調用 RetrievePropertiesEx/ContinueRetrievePropertiesEx 一次性的獲取數據。
????如果想持續獲得 inventory 中數據對象的狀態變化,可以使用 WaitForUpdatesEx 方法。第一次調用這個方法會得到目標對象的初始數據,后續調用會得到相對上一次調用時的增量變化值。

?

Java?使用API獲取數據
第一步要做的就是到api文檔根據inventory路徑找到對應的對象,然后用該對象獲取數據。
例如:找到最上層HostSystem,然后依次往下找自己想要的,根據每個層次下面的屬性來獲取數據

代碼例子

官方例子:https://developercenter.vmware.com/samples?id=772&h=Java 這是獲取集群的cpu核數,其例子VMwareConnection中封裝了登錄和獲取MOR對象,所以我們只需要把它copy過來使用即可,

java獲取session參數?查詢所有主機的名稱及其cpu和內存,根據api文檔定位到對應的屬性,代碼如下:

public static void findAllHosts() {try {//查詢所有物理機List<ObjectContent> contents = conn.findAllObjects("HostSystem", "name","summary.hardware.memorySize","summary.hardware.numCpuCores");for (com.vmware.vim25.ObjectContent content : contents) {//下面獲取屬性List<DynamicProperty> propSet = content.getPropSet();for (DynamicProperty dynamicProperty : propSet) {String propertyName = dynamicProperty.getName();Object val = dynamicProperty.getVal();if("name".equals(propertyName)) {System.out.print(val + " ");} else if("summary.hardware.memorySize".equals(propertyName)) {System.out.print(val + " ");} else if("summary.hardware.numCpuCores".equals(propertyName)) {System.out.print(val + " ");}}System.out.println();}} catch (Exception e) {logger.error("", e);}
}

?

轉載于:https://my.oschina.net/chengxiaoyuan/blog/674026

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/131781.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息