通过XenServer提供SDK删除一个VM

最近在研究XenServer提供的SDK,其中的C#引用深深的让我无奈了……(其他的没看)

重要的部分一个注释都没有…

而且官方给出的SDK中的方法、属性等的命名真心让我十分之蛋疼…

写这玩意的时候,开发机用的是2G内存的Win7,运行XenServer的是我的本本,运行在VMware中,分配了2G的内存(本本4G)

本来以为会很顺利,结果……………………写的时候,本本没死(这个很正常……)但开发机死了………………蓝屏了………………蓝屏的内容还没来得及看就自动重启了……………………

其他的就没什么好说的了,两种删除方式,直接上代码:

try
{
    if (MvcApplication.session == null)
    {
        MvcApplication.session = new Session(ConfigurationManager.AppSettings["IP"], int.Parse(ConfigurationManager.AppSettings["Port"]));
        MvcApplication.session.login_with_password(ConfigurationManager.AppSettings["UserName"], ConfigurationManager.AppSettings["Password"]);
    }
    XenAPI.Session session = MvcApplication.session;

    #region 删除1
    //这里假设所有的VM名称全都是唯一的
    List<XenRef<VM>> vmRefs = VM.get_by_name_label(session, "vm1231");
    //是否成功获得
    if (vmRefs.Count >= 1)
    {
        //干掉他……
        VM.destroy(session, vmRefs[0]);
    }
    #endregion

    #region 删除2
    //获取所有
    vmRefs = VM.get_all(session);
    //遍历所有
    foreach (XenRef<VM> vmRef in vmRefs)
    {
        //获得VM实体
        VM vm = VM.get_record(session, vmRef);
        //判断VM的名称是否为vm123(这样会删除所有名为vm123的)
        if (vm.name_label == "vm123")
        {
            //干掉他
            VM.destroy(session, vmRef);
        }
    }
    #endregion
}
catch (System.Net.WebException webex)
{//连接到服务器失败

}
catch (XenAPI.Failure failure)
{
    if (failure.Message == "Could not authenticate session. Check your access credentials and try again.")
    { //验证失败,请检查账号密码

    }
    else if (failure.Message.IndexOf("Object has been deleted.VM") >= 0)
    { //该VM不存在
        string error = failure.ErrorDescription[2] + "不存在!";
    }
}
catch (Exception ex)
{
    throw ex;
}

刚开始学习操作XenServer,对于其中的方法深感无奈,为什么无奈自己看下代码就知道了:

        public static string get_name_label(Session session, string _vm)
        {
            return (string)session.proxy.vm_get_name_label(session.uuid, (_vm != null) ? _vm : "").parse();
        }

        public static string get_name_description(Session session, string _vm)
        {
            return (string)session.proxy.vm_get_name_description(session.uuid, (_vm != null) ? _vm : "").parse();
        }

        public static long get_user_version(Session session, string _vm)
        {
            return long.Parse((string)session.proxy.vm_get_user_version(session.uuid, (_vm != null) ? _vm : "").parse());
        }

        public static bool get_is_a_template(Session session, string _vm)
        {
            return (bool)session.proxy.vm_get_is_a_template(session.uuid, (_vm != null) ? _vm : "").parse();
        }

        public static XenRef<VDI> get_suspend_VDI(Session session, string _vm)
        {
            return XenRef<VDI>.Create(session.proxy.vm_get_suspend_vdi(session.uuid, (_vm != null) ? _vm : "").parse());
        }

看到这些我很悲伤………………
就连英文注释都没有………………
而且跟我的命名习惯冲突,不知道为何,这SDK写的全都是下划线-_-|||

5 Replies to “通过XenServer提供SDK删除一个VM”

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据