示例#1
0
        /// <summary>
        /// 创建一个虚拟机
        /// </summary>
        /// <param name="vmConfig">虚拟机配置信息</param>
        /// <param name="vm">虚拟机权限信息</param>
        /// <returns></returns>
        public static string CreateVM(VMConfig vmConfig, VirtualMachine vm)
        {
            string res = "success";

            if (ManagerType.Equals("Sangfor"))
            {
                SangforInfo info = new SangforInfo();
                info.student_id   = vm.owner_id;
                info.teacher_id   = vm.owner_id;
                info.IsTemplate   = false;
                info.is_exp       = false;
                info.is_exps      = "False";
                info.Name         = vm.vm_name;
                info.TemplateName = vmConfig.TemplateName;
                //vmConfig.Disk = vmConfig.Disk / 1024;

                string result = restful.Create(vmConfig, info.Name, null, null);
                if (!result.StartsWith("error"))
                {
                    info.id = result;
                    SangforDao.Add(info);
                }
            }
            else
            {
                res = manager.Create(vmConfig, vm.vm_name, vm.owner_id);
            }
            return(res);
        }
 /// <summary>
 /// 增加虚拟机记录
 /// </summary>
 /// <param name="info">虚拟机记录</param>
 public static void Add(SangforInfo info)
 {
     using (var dbContext = new DataModels())
     {
         info = dbContext.SangforInfos.Add(info);
         dbContext.SaveChanges();
     }
 }
 /// <summary>
 /// 根据虚拟机id删除记录
 /// </summary>
 /// <param name="id">虚拟机id</param>
 public static void DeleteById(string id)
 {
     using (var dbContext = new DataModels())
     {
         SangforInfo info = dbContext.SangforInfos.Find(id);
         dbContext.SangforInfos.Remove(info);
         dbContext.SaveChanges();
     }
 }
示例#4
0
        public static SangforInfo getInfo(string vmName)
        {
            using (var dbContext = new DataModels())
            {
                SangforInfo info = dbContext.SangforInfos.Find(vmName);

                if (info != null)
                {
                    return(info);
                }
            }
            return(null);
        }
 /// <summary>
 /// 通过虚拟机名称获取虚拟机记录
 /// </summary>
 /// <param name="name">虚拟机名称</param>
 /// <returns></returns>
 public static SangforInfo GetSangforInfoByName(string name)
 {
     using (var dbContext = new DataModels())
     {
         List <string> id = dbContext.SangforInfos.Where(u => u.Name == name).Select(u => u.id).ToList();
         if (id.Count() == 0)
         {
             return(null);
         }
         SangforInfo info = dbContext.SangforInfos.Find(id[0]);
         return(info);
     }
     return(null);
 }
示例#6
0
        /// <summary>
        /// 创建虚拟机
        /// </summary>
        /// <param name="config">虚拟机配置</param>
        /// <param name="vmName">虚拟机名称</param>
        /// <param name="ID">模板id</param>
        /// <param name="hostName">未知参数</param>
        /// <returns>success|error:错误信息</returns>
        public string Create(VMConfig config, string vmName, string ID, string hostName = "")
        {
            SangforInfo info1 = SangforDao.GetSangforInfoByName(config.TemplateName);

            config.Disk = Convert.ToInt64(info1.image_disk);
            string flavorRef = MessageManager.FindFlavor(config.CPU, config.Memory, config.Disk);

            if (flavorRef.Equals("Not Found"))
            {
                flavorRef = MessageManager.CreateFlavor(config);
            }

            string uuid = ConfigurationManager.AppSettings["AcloudNetworks"];
            string zone = ConfigurationManager.AppSettings["AcloudAvailability_zone"];
            string info = "";

            //if (info1 == null)
            //{
            //   return "error";
            //}
            //string serverId = info1.id;
            //PowerOption(serverId, 2);
            //string volumeId = MessageManager.FindVolume(serverId);
            //Dictionary<string, object> data =
            //MessageManager.PackageCreateJsonByVolume(flavorRef, uuid, vmName, zone, volumeId);
            Dictionary <string, object> data =
                MessageManager.PackageCreateJsonByImage(flavorRef, uuid, vmName, zone, info1.id);

            info = APIManager.CreateServer(data);
            string id = MessageManager.AnalyzeCreateInfo(info);

            if (id.Equals("error") == false)
            {
                return(id);
            }
            else if (info.Equals("No Content"))
            {
                return("error:No Content");
            }
            else if (info.Equals("|No Authority"))
            {
                return("error:No Authority");
            }
            else
            {
                return("error" + info);
            }
        }
示例#7
0
 /// <summary>
 /// 删除虚拟机
 /// </summary>
 /// <param name="vmName"></param>
 /// <returns></returns>
 public static string DeleteVM(string vmName)
 {
     if (ManagerType.Equals("Sangfor"))
     {
         SangforInfo info = SangforDao.GetSangforInfoByName(vmName);
         if (info != null)
         {
             restful.Delete(info.id);
         }
         return("");
     }
     else
     {
         return(manager.Delete(vmName));
     }
 }
        /// <summary>
        /// 合并数据
        /// </summary>
        /// <param name="vmConfigs">统一虚拟机数据</param>
        /// <returns></returns>
        public static List <VMConfig> MergeData(List <VMConfig> vmConfigs)
        {
            using (var dbContext = new DataModels())
            {
                RESTful restful = new RESTful();
                foreach (VMConfig config in vmConfigs)
                {
                    SangforInfo info = GetSangforInfoByName(config.Name);
                    config.admin_id     = info.admin_id;
                    config.teacher_id   = info.teacher_id;
                    config.student_id   = info.student_id;
                    config.is_exp       = info.is_exp;
                    config.is_exps      = info.is_exps;
                    config.IsTemplate   = info.IsTemplate;
                    config.TemplateName = info.TemplateName;
                    config.console_url  = restful.OpenConsole(info.id);

                    if (config.Status.PowerState.Equals("ACTIVE"))
                    {
                        config.Status.PowerState = "poweredOn";
                    }
                    else
                    {
                        config.Status.PowerState = "poweredOff";
                    }
                }
                List <SangforInfo> infos = dbContext.SangforInfos.ToList();
                infos = infos.Where(u => u.IsTemplate == true).ToList();
                foreach (SangforInfo info in infos)
                {
                    VMConfig config = new VMConfig();
                    config.admin_id     = info.admin_id;
                    config.teacher_id   = info.teacher_id;
                    config.student_id   = info.student_id;
                    config.is_exp       = info.is_exp;
                    config.is_exps      = info.is_exps;
                    config.IsTemplate   = info.IsTemplate;
                    config.TemplateName = info.TemplateName;
                    config.Name         = info.Name;
                    vmConfigs.Add(config);
                }
            }
            return(vmConfigs);
        }
        /// <summary>
        /// 更改虚拟机类型
        /// </summary>
        /// <param name="vmName">虚拟机名称</param>
        /// <param name="operateType">操作方式</param>
        public static void ChangeVMTemplate(string vmName, int operateType)
        {
            SangforInfo info = GetSangforInfoByName(vmName);

            using (var dbContext = new DataModels())
            {
                info = dbContext.SangforInfos.Find(info.id);
                if (operateType == 0)
                {
                    info.IsTemplate = false;
                }
                else
                {
                    info.IsTemplate = true;
                }

                dbContext.SaveChanges();
            }
        }
示例#10
0
        /// <summary>
        /// 开启关闭虚拟机
        /// </summary>
        /// <param name="vmName">虚拟机名称</param>
        /// <param name="option">1为开机 2为关机</param>
        /// <returns>success|error:错误信息</returns>
        public string PowerOption(string id, int option)
        {
            //string id = MysqlManager.FindServer(vmName);
            string info = "";

            //处理传参是name的情况
            SangforInfo sang = SangforDao.GetSangforInfoByName(id);

            if (sang != null)
            {
                id = sang.id;
            }


            if (option == 2)
            {
                info = APIManager.OffServer(id);
            }
            else if (option == 1)
            {
                info = APIManager.OnServer(id);
            }
            if (info == "")
            {
                return("success");
            }
            else if (info.Equals("No Content"))
            {
                return("error:No Content");
            }
            else if (info.Equals("|No Authority"))
            {
                return("error:No Authority");
            }
            else
            {
                return("error:" + info);
            }
        }
示例#11
0
        /// <summary>
        /// 为实验创建虚拟机
        /// </summary>
        /// <param name="vmConfig">虚拟机配置</param>
        /// <param name="vmName">虚拟机名</param>
        /// <param name="expId">实验id</param>
        /// <returns></returns>
        public static string CreateVMsForExp(VMConfig vmConfig, int applyId, string stulist)
        {
            Experiment exp = ExperimentDao.GetExperimentByApplyId(applyId);

            Course course = CourseDao.GetCourseInfoById((int)exp.course_id);

            vmConfig.Name = exp.vm_name;
            string teacherId = course.teacher_id;

            string[]      ids    = stulist.Split(' ');
            List <string> stuIds = new List <string>();

            foreach (string id in ids)
            {
                if (id != null && id.Length != 0)
                {
                    stuIds.Add(id);
                }
            }
            string[] names = new string[stuIds.Count()];
            string   res   = "success";


            for (int i = 0; i < stuIds.Count(); ++i)
            {
                names[i] = vmConfig.Name + "_" + stuIds[i];
            }
            if (ManagerType.Equals("Sangfor"))
            {
                List <SangforInfo> infoList = new List <SangforInfo>();
                for (int i = 0; i < stuIds.Count(); ++i)
                {
                    SangforInfo info = new SangforInfo();
                    info.student_id   = stuIds[i];
                    info.teacher_id   = teacherId;
                    info.IsTemplate   = false;
                    info.is_exp       = true;
                    info.is_exps      = "True";
                    info.Name         = names[i];
                    info.TemplateName = vmConfig.TemplateName;
                    infoList.Add(info);
                }
                //vmConfig.Disk = vmConfig.Disk / 1024;

                foreach (SangforInfo info in infoList)
                {
                    string result = restful.Create(vmConfig, info.Name, null, null);
                    if (!result.StartsWith("error"))
                    {
                        info.id = result;
                        SangforDao.Add(info);
                    }
                }
                // 使用新逻辑创建,优化创建时间
                //restful.CreateNewLogic(vmConfig,infoList);
            }
            else
            {
                res = manager.Create(vmConfig, names.ToList(), stuIds.ToList(), teacherId);
            }

            return(res);
        }