開始是通過java代碼調用vsphere提供的原始接口,從而控制vcenter的操作。當第一個版本做完之后發現代碼執行的速度特別慢,后來在網上看到有人用vijava(對vsphere原始接口封裝)編程,自己就試着換了幾個接口發現代碼執行速度很快。所以第二版都換了vijava操作。下面就和大家一起學習下如何通過vijava控制vcenter。
首先去github上下載vijava項目,然后將其導入自己的項目。
利用vijava完成vcenter連接類的創建:所有代碼都可以之間運行。
package com.iking.vmware.connection; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.xml.ws.soap.SOAPFaultException; import com.iking.exception.VcenterException; import com.iking.vmware.bean.VsphereConst; import com.iking.vmware.vim25.mo.InventoryNavigator; import com.iking.vmware.vim25.mo.ManagedEntity; import com.iking.vmware.vim25.mo.ServerConnection; import com.iking.vmware.vim25.mo.ServiceInstance; /** * @description 操作vcenter的連接和斷開,以及定義公共應用類 * @date 2017年2月8日14:35:38 * @version 1.1 * @author DiWk */ public class ConnectedVimServiceBase { public ServiceInstance si = null; /** * @description 鏈接vcenter * @date 2017年2月8日14:23:37 * @version 1.1 * @author DiWk */ public void connect(String url, String userName, String passWord) { try { si = new ServiceInstance(new URL("https://" + url + "/sdk"), userName, passWord, true); } catch (SOAPFaultException sfe) { VcenterException.printSoapFaultException(sfe); } catch (Exception e) { e.printStackTrace(); } } /** * @description 斷開vcenter鏈接 * @date 2017年2月8日14:23:37 * @version 1.1 * @author DiWk */ public void disconnect() { try { si.getServerConnection().logout(); } catch (SOAPFaultException sfe) { VcenterException.printSoapFaultException(sfe); } catch (Exception e) { e.printStackTrace(); } } /** * @description 獲取鏈接URL * @date 2017年2月8日14:23:37 * @version 1.1 * @author DiWk */ public URL getUrl() { ServerConnection serverConnection = si.getServerConnection(); URL url = null; if (serverConnection != null) { url = serverConnection.getUrl(); } else { return null; } return url; }
利用vijava對獲取集群對象及相關信息:
package com.iking.vmware.cluster; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.xml.ws.soap.SOAPFaultException; import com.iking.exception.VcenterException; import com.iking.vmware.connection.ConnectedVimServiceBase; import com.iking.vmware.vim25.ClusterComputeResourceSummary; import com.iking.vmware.vim25.mo.ClusterComputeResource; import com.iking.vmware.vim25.mo.Datastore; import com.iking.vmware.vim25.mo.InventoryNavigator; import com.iking.vmware.vim25.mo.ManagedEntity; /** * @description 操作vcenter中的集群對象 * @date 2017年2月8日14:35:38 * @version 1.1 * @author DiWk */ public class ClusterComputerResourceSummary { private ConnectedVimServiceBase cs = null; //連接類聲明 public ConnectedVimServiceBase getCs() { return cs; } public void setCs(ConnectedVimServiceBase cs) { this.cs = cs; } /** * @description 獲取vcenter中所有的集群對象 * @date 2017年2月3日10:42:09 * @return clusterList 集群對象集合 * @version 1.1 * @author DiWk */ public List<ClusterComputeResource> getClusterList() { List<ClusterComputeResource> clusterList = new ArrayList<ClusterComputeResource>(); ClusterComputeResource clusterComputeResource = null; try { ManagedEntity[] managedEntities = new InventoryNavigator(cs.si.getRootFolder()) .searchManagedEntities("ClusterComputeResource"); if (managedEntities != null && managedEntities.length > 0) { for (ManagedEntity managedEntity : managedEntities) { clusterComputeResource = (ClusterComputeResource) managedEntity; clusterList.add(clusterComputeResource); } } else { return null; } } catch (SOAPFaultException sfe) { VcenterException.printSoapFaultException(sfe); } catch (Exception e) { e.printStackTrace(); } return clusterList; } /** * @description 根據集群名稱獲取對應的集群對象 * @date 2017年2月3日10:44:02 * @return clusterList 集群對象集合 * @version 1.1 * @author DiWk */ public List<ClusterComputeResource> getClusterListByName(List<String> ClustersName) { List<ClusterComputeResource> clusterList = new ArrayList<ClusterComputeResource>(); ClusterComputeResource clusterComputeResource = null; try { if (ClustersName == null || ClustersName.size() < 0) { return null; } List<ClusterComputeResource> clusterList2 = getClusterList(); if (clusterList2 == null || clusterList2.size() < 0) { return null; } for (String string : ClustersName) { for (ClusterComputeResource clusterComputeResource2 : clusterList2) { if (clusterComputeResource2.getName().equals(string)) { clusterList.add(clusterComputeResource); } } } } catch (SOAPFaultException sfe) { VcenterException.printSoapFaultException(sfe); } catch (Exception e) { e.printStackTrace(); } return clusterList; } /** * @description 根據集群名稱獲取對應的集群summary * @date 2017年2月3日10:54:18 * @return clusterSumList 集群對象summary集合 * @version 1.1 * @author DiWk */ public List<ClusterComputeResourceSummary> getClusterComputeResourceSummary(List<String> ClustersName) { List<ClusterComputeResourceSummary> clusterSumList = new ArrayList<ClusterComputeResourceSummary>(); List<ClusterComputeResource> clusterListByName = null; try { clusterListByName = getClusterListByName(ClustersName); if (clusterListByName != null && clusterListByName.size() > 0) { for (ClusterComputeResource cluster : clusterListByName) { ClusterComputeResourceSummary summary = (ClusterComputeResourceSummary) cluster.getSummary(); clusterSumList.add(summary); } } else { return null; } } catch (SOAPFaultException sfe) { VcenterException.printSoapFaultException(sfe); } catch (Exception e) { e.printStackTrace(); } return clusterSumList; } /** * @description 根據集群名稱獲取集群關聯的數據存儲 * @date 2017年2月3日11:02:09 * @return clusterDataStore 集群所關聯的數據存儲的集合 * @version 1.1 * @author DiWk */ public List<Datastore> getDataStoreByClusterNm(List<String> ClustersName) { List<Datastore> clusterDataStore = new ArrayList<Datastore>(); List<ClusterComputeResource> clusterListByName = null; try { clusterListByName = getClusterListByName(ClustersName); if (clusterListByName != null && clusterListByName.size() > 0) { for (ClusterComputeResource cluster : clusterListByName) { Datastore[] datastores = cluster.getDatastores(); clusterDataStore.addAll(Arrays.asList(datastores)); } } else { return null; } } catch (SOAPFaultException sfe) { VcenterException.printSoapFaultException(sfe); } catch (Exception e) { e.printStackTrace(); } return clusterDataStore; } //集群測試方法 public static void main(String[] args) { ConnectedVimServiceBase cs = new ConnectedVimServiceBase(); cs.connect("192.168.1.253", "administrator@vsphere.local","Iking!@#456"); ClusterComputerResourceSummary cluster = new ClusterComputerResourceSummary(); cluster.setCs(cs); List<ClusterComputeResource> clusterList = cluster.getClusterList(); if (clusterList != null && clusterList.size() > 0) { for (ClusterComputeResource clusterComputeResource : clusterList) { System.out.println(clusterComputeResource.getName()); } } } }
vijava將集群對象和其屬性進行了封裝,當獲取到ClusterComputeResource、ClusterComputeResourceSummary或者其他集群的對象,我們就能夠獲取到集群對象關聯的屬性,從而完成對集群的操作和監控。這一篇是關於集群的幾個簡單方法,完成更具體的需求還需要多多嘗試。