设为首页 收藏本站
查看: 1523|回复: 0

[经验分享] 虚拟化应用(二)管理 vCenter Server 实体

[复制链接]

尚未签到

发表于 2015-4-4 17:23:41 | 显示全部楼层 |阅读模式
  正如企业中有多个管理部门一样,在一个虚拟化系统中也分为若干个实体。
测试代码下载
测试环境:
Windows Server 2008 R2 DataCenter
VMWare Workstation 7.1
VMWare vSphere 4.1、VMWarevCenter Server 4.1
JDK 1.6 u-21 x64、Eclipse ForJavaEE 3.6 x64
VMWare vSphere Java API 2.1 GA、VMWarevSphere PowerCLI 4.1(PowerShell 2.0)
  PowerGUI Script Editor Free Edition x64
  
  在VMWare vCenter Server中,其实体结构如下:
DSC0000.png
  处于最顶层的是一个服务实例对象,可以简单的认为是一个虚拟服务器。下一级是根目录,是一个容器对象;第三层中的Datacenter并不是物理服务器中的Datacenter,只是一个管理单元,可以是Folder、Datacenter或二者的混合体;
  再往下又细分为虚拟机和计算机资源等。实体的种类很多,除了Folder、Datacenter,还有VirtualMachine、ComputerResource、ClusterComputerResource、ResourcePool和HostSystem。本次我们只关注Folder和Datacenter,后续篇章再学习其他实体。
  安装好VMWare vCenter Server,使用vClient登录后可以看到这些实体结构:
DSC0001.png
  在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中的部分实体。

  • 新建一个Java项目,添加vSphere Java API 2.1 GA的Jar包:
DSC0002.png
  建议将源代码添加进Eclipse,可以随时查看指定方法或类的源代码:
DSC0003.png
  

  • 管理实体:
  
DSC0004.gif DSC0005.gif 代码

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.getName())) {
                    mes.destroy_Task();
                }
                if ("HomePage".equals(mes.getName())) {
                    mes.destroy_Task();
                }
                if ("News".equals(mes.getName())) {
                    mes.destroy_Task();
                }
                if ("Blogs".equals(mes.getName())) {
                    mes.destroy_Task();
                }
                if ("BBS".equals(mes.getName())) {
                    mes.destroy_Task();
                }
                if ("Attention".equals(mes.getName())) {
                    mes.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]);
    }
}
  

  
  配置下命令行参数:
DSC0006.png
  
  二、使用PowerShell来管理实体。
  vSphere PowerCLI提供了丰富的命令,今天偶然在网上找到一个PDF,还不错:
DSC0007.png
  将PowerShell按不同类别进行了分类,非常便于查找、使用,注意这是2009年7月14日官方发布的,最新版中可能有部分改动,请参照最新官方文档。
  
  2.1、管理Folder。
  2.1.1、如果你还没有添加PSSnapin,则先进行添加:
  Add-PSSnapinVMWare.VimAutomation.Core
  
  2.1.2、连接vCenter Server:
  Connect-VIServer-Server192.168.220.1-Protocolhttps-Port 444 -UserBrooksPC\Administrator-Password******-CredentialFalse(请用你的vCenter Server的IP、端口号、用户名、密码进行替换):
  运行结果:
DSC0008.png
  
  2.1.3、获取根目录:
  Get-Folder &#8211;NoRecursion
  运行结果:
DSC0009.png
  
  2.1.4、在根目录中新建一个Folder:
  New-Folder-NameFolder0-LocationBrooks
  运行结果:
DSC00010.png
DSC00011.png
  
  2.1.5、重命名Folder:
  Set-Folder-FolderFolder0-NameFolder2
  运行结果:
DSC00012.png
DSC00013.png
  这个命令有点不太完善,未能提供根据路径定位到具体Folder的方法,若有Folder重名,但位于不同Folder中,则该命令会失败。
  
  2.1.6、移动Folder:
  Move-Folder-FolderFolder2-DestinationcnBlogs
  运行结果:
DSC00014.png
DSC00015.png
  
  2.1.6、删除Folder:
  删除时会提示确认,这里居然没有提供不确认的参数,难以批量删除。
DSC00016.png
DSC00017.png
  
  2.1.7、获取所有Datacenter:
  Get-Datacenter
  运行结果:
DSC00018.png
  
  2.1.8、创建一个Datacenter:
  New-Datacenter-Namedc1-LocationcnBlogs
  运行结果:
DSC00019.png
DSC00020.png
  
  2.1.9、重命名Datacenter:
  Set-Datacenter-Namedc2-Datacenterdc1
  注意-Name是修改后的名字。
  运行结果:
DSC00021.png
DSC00022.png
  
  2.1.10、移动Datacenter时有点问题,遇到一个错误,若有朋友知道解决方法,请指教:
  Move-Datacenter -Datacenter dc2 -Destination cnBlogs
DSC00023.png
  
  2.1.11、删除Datacenter:
  Remove-Datacenter-Datacenterdc2
  运行结果:
DSC00024.png
  依然会先提示确认。
  
  小结
  本次我们熟悉了下vCenter Server中的实体架构,能够使用其对象模型和PowerShell脚本进行简单的管理,可以看到,脚本管理非常高效。其实除了VMWare vSphere,Hyper-V、思捷的Xen Server均提供了PowerShell的扩展,后续篇章会继续深入学习ESX和vCenter Server,以及PowerShell在虚拟化管理中的应用。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-53833-1-1.html 上篇帖子: ESXi update遇到了Lonading /lsi_mr3.v00的解决方法 下篇帖子: Vcenter server所需要开放的端口
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表