正如企业中有多个管理部门一样,在一个虚拟化系统中也分为若干个实体。

测试代码下载

测试环境:

Windows Server 2008 R2 DataCenter

VMWare Workstation 7.1

VMWare vSphere 4.1VMWare vCenter Server 4.1

JDK 1.6 u-21 x64Eclipse For JavaEE 3.6 x64

VMWare vSphere Java API 2.1 GAVMWare vSphere PowerCLI 4.1(PowerShell 2.0)

PowerGUI Script Editor Free Edition x64

 

在VMWare vCenter Server中,其实体结构如下:

虚拟化应用(二)管理 vCenter Server 实体

处于最顶层的是一个服务实例对象,可以简单的认为是一个虚拟服务器。下一级是根目录,是一个容器对象;第三层中的Datacenter并不是物理服务器中的Datacenter,只是一个管理单元,可以是Folder、Datacenter或二者的混合体;

再往下又细分为虚拟机和计算机资源等。实体的种类很多,除了Folder、Datacenter,还有VirtualMachine、ComputerResource、ClusterComputerResource、ResourcePool和HostSystem。本次我们只关注Folder和Datacenter,后续篇章再学习其他实体。

安装好VMWare vCenter Server,使用vClient登录后可以看到这些实体结构:

虚拟化应用(二)管理 vCenter Server 实体

在GUI中可以方便的对实体结构进行管理,如新建、修改、移动、删除文件夹、数据中心等。但是,有时管理员需要同时管理大量的虚拟机,这就需要用程序来自动化管理了。2010.8.25官方放出了vSphere Java API 2.1 GA,这次版本全面支持了前不久发布的vSphere 4.1,修复了一些bug:(英文原文

Bug Fixes
3049871 Missing SetPublicKey in ExtensionManager
3040909 getProfile in HostProfilesManager throws a classcastexceptio
3042149 match version in SessionManager.cloneSession() method
3042167 xml characters not escaped (partial fix with password which is more likely to contain special chars)

同时也放出了vSphere Java API 3.0的开发计划,代码代号"Crescendo"(逐渐增强),具体细节在这篇博客查看。

 

一、下面开始用程序来管理vCenter Server中的部分实体。

  1. 新建一个Java项目,添加vSphere Java API 2.1 GA的Jar包:

虚拟化应用(二)管理 vCenter Server 实体

建议将源代码添加进Eclipse,可以随时查看指定方法或类的源代码:

虚拟化应用(二)管理 vCenter Server 实体

 

  1. 管理实体:

package brooks.chapter6.manageinventory;

import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;

import com.vmware.vim25.mo.Folder;
import com.vmware.vim25.mo.ManagedEntity;
import com.vmware.vim25.mo.SearchIndex;
import com.vmware.vim25.mo.ServiceInstance;
import com.vmware.vim25.mo.Task;

public class EntityManage {

    
/**
     * 
@param args
     * 
@throws MalformedURLException
     * 
@throws RemoteException
     
*/

    
private static void fnAddEntity(URL v_Url, String v_strUserName,
            String v_strUserPass) {
        
try {
            ServiceInstance si 
= new ServiceInstance(v_Url, v_strUserName,
                    v_strUserPass, 
true);
            Folder rootFolder 
= si.getRootFolder();

            Folder secFolder 
= rootFolder.createFolder("cnBlogs");
            secFolder.createDatacenter(
"HomePage");
            secFolder.createDatacenter(
"News");
            secFolder.createDatacenter(
"Blogs");
            secFolder.createDatacenter(
"BBS");
            secFolder.createDatacenter(
"Attention");
            si.getServerConnection().logout();
            System.out.println(
"添加实体成功!");
        } 
catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    
private static void fnDeleteEntity(URL v_Url, String v_strUserName,
            String v_strUserPass) {
        
try {
            ServiceInstance si 
= new ServiceInstance(v_Url, v_strUserName,
                    v_strUserPass, 
true);
            Folder rootFolder 
= si.getRootFolder();

            ManagedEntity[] mes 
= rootFolder.getChildEntity();

            
for (int i = 0; mes != null && i < mes.length; i++) {
                
if ("cnBlogs".equals(mes[i].getName())) {
                    mes[i].destroy_Task();
                }

                
if ("HomePage".equals(mes[i].getName())) {
                    mes[i].destroy_Task();
                }

                
if ("News".equals(mes[i].getName())) {
                    mes[i].destroy_Task();
                }

                
if ("Blogs".equals(mes[i].getName())) {
                    mes[i].destroy_Task();
                }

                
if ("BBS".equals(mes[i].getName())) {
                    mes[i].destroy_Task();
                }

                
if ("Attention".equals(mes[i].getName())) {
                    mes[i].destroy_Task();
                }
            }

            si.getServerConnection().logout();
            System.out.println(
"删除实体成功!");
        } 
catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    
private static void fnMoveEntity(URL v_Url, String v_strUserName,
            String v_strUserPass) {
        
try {
            ServiceInstance si 
= new ServiceInstance(v_Url, v_strUserName,
                    v_strUserPass, 
true);
            Folder rootFolder 
= si.getRootFolder();
            SearchIndex index 
= si.getSearchIndex();

            rootFolder.createFolder(
"Folder1");
            Folder folder2 
= rootFolder.createFolder("Folder2");

            ManagedEntity me 
= index.findByInventoryPath("Folder1");
            folder2.moveIntoFolder_Task(
new ManagedEntity[] { me });
            System.out.println(
"移动实体成功!");
        } 
catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    
private static void fnRenameEntity(URL v_Url, String v_strUserName,
            String v_strUserPass) {
        
try {
            ServiceInstance si 
= new ServiceInstance(v_Url, v_strUserName,
                    v_strUserPass, 
true);
            Folder rootFolder 
= si.getRootFolder();
            Folder folder1 
= rootFolder.createFolder("Folder1");
            Task task 
= folder1.rename_Task("Folder2");
            
if (task.waitForTask() == Task.SUCCESS) {
                System.out.println(
"重命名实体成功!");
            } 
else {
                System.out.println(
"重命名实体失败!");
            }

            si.getServerConnection().logout();
        } 
catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    
public static void main(String[] args) throws MalformedURLException {
        
// TODO Auto-generated method stub
        fnAddEntity(new URL(args[0]), args[1], args[2]);

        fnRenameEntity(
new URL(args[0]), args[1], args[2]);

        fnMoveEntity(
new URL(args[0]), args[1], args[2]);

        fnDeleteEntity(
new URL(args[0]), args[1], args[2]);
    }
}

相关文章:

  • 2021-10-01
  • 2021-11-14
  • 2021-05-09
  • 2022-12-23
  • 2021-06-27
  • 2021-09-13
  • 2021-05-17
  • 2021-10-21
猜你喜欢
  • 2021-08-18
  • 2021-08-12
  • 2021-11-01
  • 2021-11-14
  • 2021-11-20
  • 2021-11-19
  • 2021-07-17
相关资源
相似解决方案