/// <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); }
private static FileInfo CreateProgramTraceFile(VMConfig config, string tx_hash) { FileInfo result = null; if (config.IsVmTrace) { DirectoryInfo directory = new DirectoryInfo(@"./vm_trace/"); result = new FileInfo(directory.FullName + tx_hash + @".json"); { if (result.Exists) { if (!result.IsReadOnly) { result = null; } } else { try { Directory.CreateDirectory(directory.FullName); File.Create(result.FullName); } catch { } } } } return(result); }
///// <summary> ///// 批量创建虚拟机 ///// </summary> ///// <param name="config">虚拟机配置</param> ///// <param name="vmNameList">虚拟机名称</param> ///// <param name="IDList">未知参数</param> ///// <param name="hostName">未知参数</param> ///// <returns></returns> public string Create(VMConfig config, List <string> vmNameList, List <string> IDList, string teacherId = "", string hostName = "") { // string vmName = vmNameList[0]; // string flavorRef = MessageManager.FindFlavor(config.CPU, config.Memory, config.Disk); // string uuid = MysqlManager.FindNetworks(); // string zone = MysqlManager.FindZone(); string info = ""; // if (MysqlManager.FindServer(vmName).Equals("Not Found") == false) // return "Used Name"; // if (MysqlManager.IsImage(config.TemplateName)) // { // string imgRef = MysqlManager.FindServer(config.TemplateName); // Dictionary<string, object> data = MessageManager.PackageCreateJsonByImage(flavorRef, uuid, vmName, zone, imgRef,2); // info = APIManager.CreateServer(data); // } // else // { // string serverId = MysqlManager.FindServer(config.TemplateName); // string volumeId = MessageManager.FindVolume(serverId); // Dictionary<string, object> data = MessageManager.PackageCreateJsonByVolume(flavorRef, uuid, vmName, zone, volumeId,2); // info = APIManager.CreateServer(data); // } // /*string id = MessageManager.AnalyzeCreateInfo(info, vmName); // if (id.Equals("error") == false) // { // MysqlManager.AddServer(id, vmName); // return "Create Success"; // }*/ return(info); }
public IActionResult CreateVM([FromBody] VMConfig vmConfig) { Task.Run(async() => { try { await SaveRequestLogToDB(vmConfig); var publicIPAddress = await azure.PublicIPAddresses.Define("AzureMgmtPublicIP" + RandomString(5)).WithRegion(location).WithExistingResourceGroup(groupName).WithDynamicIP().CreateAsync(); var networkInterface = await azure.NetworkInterfaces.Define("AzureMgmtNIC" + RandomString(5)).WithRegion(location).WithExistingResourceGroup(groupName).WithExistingPrimaryNetwork(network).WithSubnet("AzureMgmtSubnet").WithPrimaryPrivateIPAddressDynamic().WithExistingPrimaryPublicIPAddress(publicIPAddress).CreateAsync(); var size = GetVMSize(vmConfig); await azure.VirtualMachines.Define(vmConfig.VMName) .WithRegion(location) .WithExistingResourceGroup(groupName) .WithExistingPrimaryNetworkInterface(networkInterface) .WithLatestWindowsImage("MicrosoftWindowsServer", "WindowsServer", "2012-R2-Datacenter") .WithAdminUsername("dumpatipavankumar") .WithAdminPassword("Airforce@22") .WithComputerName(vmConfig.VMName) .WithExistingAvailabilitySet(availabilitySet) .WithSize(size) .CreateAsync(); } catch (Exception ex) { var message = "Message: " + ex.Message + " InnerException: " + ex.StackTrace.ToString(); await SaveRequestLogToDB(vmConfig, message); } }); return(Ok()); }
public string Create(VMConfig config, string vmName, string ID, string teacher_id, string hostName = "") { VCManagerService vms = new VCManagerService(); string[] vmNameList = { vmName }; string[] IDList = { ID }; return(vms.CreateFromTemplate(config.TemplateName, vmNameList, "0", IDList, teacher_id, "true", config.CPU.ToString(), config.Memory.ToString(), config.Disk.ToString(), hostName, "")); }
public static void SaveProgramTraceFile(VMConfig config, string tx_hash, string content) { FileInfo file = CreateProgramTraceFile(config, tx_hash); if (file != null) { WriteStringToFile(file, content); } }
private List <VMConfig> Deserialize(List <dynamic> vmList) { List <VMConfig> ret = new List <VMConfig>(); foreach (var vmInfo in vmList) { string ip = vmInfo.IPAddress.ToString(); if (ip != null && !ip.Equals("Unavailable")) { List <string> ips = ip .Replace("[", "").Replace("]", "").Replace("\"", "").Replace("\r", "").Replace("\n", "") .Replace(" ", "") .Split(',') .Where(s => s.StartsWith(ipPrefix)).ToList(); ip = string.Join(",", ips); } VMStatus status = new VMStatus { IPAddress = ip, HostName = vmInfo.hostName.ToString(), PowerState = vmInfo.powerState.ToString(), RunTimeState = vmInfo.runTimeState.ToString() }; VMConfig vm = new VMConfig { Name = vmInfo.vmName.ToString(), CPU = int.Parse(vmInfo.CPUByNum.ToString()), Memory = long.Parse(vmInfo.memoryByMb.ToString()), Disk = long.Parse(vmInfo.diskByB.ToString()) / 1024 / 1024, IsTemplate = bool.Parse(vmInfo.isTemplate.ToString()), GuestFullName = vmInfo.guestFullName.ToString(), AdvancedConfig = "", Status = status, student_id = vmInfo.studentID.ToString(), teacher_id = vmInfo.teacherID.ToString(), admin_id = vmInfo.adminID.ToString(), is_exps = vmInfo.isExperimental.ToString() }; if (vm.is_exps != null && vm.is_exps.Equals("True")) { vm.is_exp = true; } else if (vm.is_exps != null && vm.is_exps.Equals("False")) { vm.is_exp = false; } else { vm.is_exp = false; } ret.Add(vm); } return(ret); }
/// <summary> /// Saves the request log to database. /// </summary> /// <param name="vmConfig">The VM configuration.</param> private static async Task SaveRequestLogToDB(VMConfig vmConfig, string exceptionMessage = "NA") { VMRequestLogEntity vmRequestLogEntity = new VMRequestLogEntity(vmConfig.VMName, vmConfig.VMSize) { VMName = vmConfig.VMName, VMSize = vmConfig.VMSize, ErrorMessage = exceptionMessage }; await CosmosDBStorageHelper.InsertOrMergeEntityAsync(table, vmRequestLogEntity); }
/// <summary> /// 获取虚拟机信息 /// </summary> /// <param name="vmName">虚拟机名称</param> /// <returns>虚拟机信息(VMConfig)|null</returns> public VMConfig GetVMInfo(string id) { //string id = MysqlManager.FindServer(vmName); if (id.Equals("Not Found")) { return(null); } VMConfig vMConfig = MessageManager.GetServerDetail(id); return(vMConfig); }
/// <summary> /// 采用新逻辑批量创建虚拟机,用于优化多台创建的情况 /// </summary> public void CreateNewLogic(VMConfig config, List <SangforInfo> infos) { List <string> nameList = new List <string>(); List <string> newNameList = new List <string>(); //nameList.Add(config.Name); newNameList.Add(config.TemplateName); int num = 0; while (true) { List <string> idList = new List <string>(); nameList = new List <string>(); foreach (string name in newNameList) { nameList.Add(name); } if (num == infos.Count()) { break; } foreach (string name in nameList) { config.TemplateName = name; string id = Create(config, infos[num].Name, null, null); if (!id.StartsWith("error")) { infos[num].id = id; idList.Add(id); SangforDao.Add(infos[num]); newNameList.Add(infos[num].Name); } num++; if (num == infos.Count()) { break; } } Thread.Sleep(180000); foreach (string id in idList) { PowerOption(id, 2); } Thread.Sleep(120000); } }
/// <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="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); }
public static string CreateFlavor(VMConfig config) { Dictionary <string, object> data = new Dictionary <string, object>(); Dictionary <string, object> flavor = new Dictionary <string, object>(); flavor.Add("name", config.Name + "_" + config.Memory.ToString() + "_" + config.CPU.ToString() + "_" + config.Disk.ToString()); flavor.Add("ram", config.Memory); flavor.Add("vcpus", config.CPU); flavor.Add("disk", config.Disk); data.Add("flavor", flavor); string result = APIManager.CreateFlavor(data); var param = HttpUtil.Deserialize(JObject.Parse(result)); if (param == null) { return(null); } return(param["flavor"]["id"]); }
/// <summary> /// Gets the size of the VM. /// </summary> /// <param name="vmConfig">The VM configuration.</param> /// <returns>the size of the VM</returns> private static VirtualMachineSizeTypes GetVMSize(VMConfig vmConfig) { VirtualMachineSizeTypes size; if (vmConfig.VMSize == "StandardD1") { size = VirtualMachineSizeTypes.StandardD1; } else if (vmConfig.VMSize == "StandardD2") { size = VirtualMachineSizeTypes.StandardD2; } else { size = VirtualMachineSizeTypes.StandardD11; } return(size); }
/// <summary> /// 批量获取虚拟机信息 /// </summary> /// <param name="vmNameList">虚拟机名称列表</param> /// <returns>虚拟机信息列表(List<VMConfig>)</returns> public List <VMConfig> GetVMList(List <string> idList) { List <VMConfig> vMConfigs = new List <VMConfig>(); foreach (string id in idList) { if (id == null) { continue; } VMConfig vMConfig = MessageManager.GetServerDetail(id); if (vMConfig == null) { continue; } vMConfigs.Add(vMConfig); } return(vMConfigs); }
/// <summary> /// 获取虚拟机信息并封装 /// </summary> /// <param name="id">虚拟机id</param> /// <returns>虚拟机信息(VMConfig)</returns> public static VMConfig GetServerDetail(string id) { try { VMConfig vMConfig = new VMConfig(); var param = HttpUtil.Deserialize(JObject.Parse(APIManager.GetServer(id))); if (param == null || param["error"] != null) { return(null); } vMConfig.Name = param["server"]["name"]; vMConfig.Status = new VMStatus(); vMConfig.Status.PowerState = param["server"]["status"].ToString(); if (param["server"]["addresses"].ToString().Equals("{}") == false) { vMConfig.Status.IPAddress = param["server"]["addresses"]["子网1"][0]["addr"].ToString(); } string flavorRef = param["server"]["flavor"]["id"]; //if (param["server"]["image"] != null) //{ // string imageRef = param["server"]["image"]["id"]; // param = HttpUtil.Deserialize(JObject.Parse(APIManager.GetImage(imageRef))); // vMConfig.GuestFullName = param["image"]["name"]; //} param = HttpUtil.Deserialize(JObject.Parse(APIManager.GetFlavor(flavorRef))); vMConfig.Memory = param["flavor"]["ram"]; vMConfig.CPU = param["flavor"]["vcpus"]; vMConfig.Disk = param["flavor"]["disk"]; vMConfig.Disk = vMConfig.Disk * 1024; return(vMConfig); } catch { return(null); } }
/// <summary> /// 创建虚拟机 /// </summary> /// <param name="config">虚拟机配置</param> /// <param name="vmNameList">虚拟机名列表</param> /// <param name="hostName">创建位置</param> /// <returns></returns> public string Create(VMConfig config, List <string> vmNameList, List <string> IDList, string teacherId, string hostName = "") { string[] vmNames = vmNameList.ToArray(); string[] IDs = IDList.ToArray(); return(vms.CreateFromTemplate(config.TemplateName, vmNames, "0", IDs, teacherId, "true", config.CPU.ToString(), config.Memory.ToString(), config.Disk.ToString(), hostName, "")); }
/// <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); }
/// <summary> /// 获取用户对某虚拟机的权限 /// </summary> /// <param name="vmName">虚拟机名称</param> /// <param name="userId">id</param> /// <returns> /// 0:无权限 /// 1:仅有开关机权限 /// 2:有完全权限 /// </returns> public static int GetPermissionForVM(string vmName, string userId) { VMConfig config = null; if (ManagerType.Equals("Sangfor")) { List <VMConfig> configs = GetAllVm(); configs = configs.Where(c => c.Name == vmName).ToList(); if (configs.Count() != 0) { config = configs[0]; } } else { config = manager.GetVMByName(vmName); } if (config == null) { return(0); } if (config.student_id == null) { return(2); } User user = UserDao.GetUserById(userId); if (user.role == 4) { return(2); } if (config.is_exps.Equals("False")) { if (config.student_id.Equals(userId) || config.teacher_id.Equals(userId)) { return(2); } if (user.role == 3) { User owner = UserDao.GetUserById(config.student_id); if (owner == null) { return(0); } if (owner.department_id.Equals(user.department_id) == true) { return(2); } else { return(0); } } return(0); } else { if (config.teacher_id == userId) { return(2); } if (config.student_id == userId) { return(1); } if (user.role == 3) { User owner = UserDao.GetUserById(config.teacher_id); if (owner == null) { return(0); } if (owner.department_id.Equals(user.department_id) == true) { return(2); } else { return(0); } } } return(0); }