Vmware Vsphere WebService之vijava 開發一-vcenter連接、及集群信息獲取


開始是通過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或者其他集群的對象,我們就能夠獲取到集群對象關聯的屬性,從而完成對集群的操作和監控。這一篇是關於集群的幾個簡單方法,完成更具體的需求還需要多多嘗試。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM