/// <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(); } }
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); }
/// <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); } }
/// <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(); } }
/// <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); } }
/// <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); }