public async void CreateRaidAsync(List <PhysicalDisk> disks, Enclousure enclousure, string level, string name, long capacity, long optimal) { try { var idrac = new StorageController(server); IdracJob job = await idrac.CreateVirtualDiskAsync(disks, enclousure, level, capacity, optimal, name); var load = new LoadWindow(server, job) { Title = server.Host }; load.Closed += (object sender, EventArgs e) => { var window = (LoadWindow)sender; job = window.Job; if (job.JobState.Contains("Completed")) { MessageBox.Show("Raid criado com sucesso !", "Sucesso", MessageBoxButton.OK, MessageBoxImage.Information); } }; load.Show(); } catch (Exception ex) { MessageBox.Show(string.Format("Falha ao criar o Job {0}", ex.Message), "Erro", MessageBoxButton.OK, MessageBoxImage.Error); } }
/// <summary> /// Retorna todos os discos associados a uma determinada Controladora /// </summary> /// <param name="enclousure">Controladora que abriga os discos</param> /// <returns>Lista com todos os discos da controladora</returns> public async Task <List <PhysicalDisk> > GetPhysicalDisksAsync(Enclousure enclousure) { if (enclousure == null) { throw new ArgumentNullException("enclousure", "O argumento não pode ser nulo"); } List <PhysicalDisk> disks = new List <PhysicalDisk>(); foreach (var item in enclousure.Drives) { disks.Add(await GetResourceAsync <PhysicalDisk>(BaseUri + item.Id)); } return(disks); }
/// <summary> /// Retorna todos os discos virtuais de uma enclousure /// </summary> /// <param name="enclousure">Enclousure onde estão os discos</param> /// <returns>Lista com todos os discos virtuais</returns> public async Task <List <VirtualDisk> > GetVirtualDisksAsync(Enclousure enclousure) { if (enclousure == null) { throw new ArgumentNullException("enclousure", "O argumento não pode ser nulo"); } string location = enclousure.Volumes.Id; using (var request = new HttpRequestMessage(HttpMethod.Get, BaseUri + location)) { request.Headers.Authorization = Credentials; using (var response = await Client.SendAsync(request)) { if (response.StatusCode == System.Net.HttpStatusCode.Forbidden) { throw new UnauthorizedAccessException("Acesso negado, verifique usuario/senha"); } if (!response.IsSuccessStatusCode) { throw new HttpRequestException(string.Format("Falha ao obter discos virtuais {0}", response.ReasonPhrase)); } var volumesCollection = new { Members = new List <OdataObject>() }; string jsonData = await response.Content.ReadAsStringAsync(); var collection = JsonConvert.DeserializeAnonymousType(jsonData, volumesCollection); var virtualDisks = new List <VirtualDisk>(); foreach (var item in collection.Members) { virtualDisks.Add(await GetResourceAsync <VirtualDisk>(BaseUri + item.Id)); } return(virtualDisks); } } }
/// <summary> /// Cria um disco virtual /// </summary> /// <param name="disks">Lsta de discos fisicos</param> /// <param name="enclousure">Enclousure resposavel pelos discos</param> /// <param name="level">Nivel de Raid</param> /// <param name="name">Nome do disco virtual</param> /// <returns></returns> public async Task <IdracJob> CreateVirtualDiskAsync(List <PhysicalDisk> disks, Enclousure enclousure, string level, string name) { List <OdataObject> drives = new List <OdataObject>(); foreach (var disk in disks) { drives.Add(new OdataObject() { Id = disk.OdataId }); } var content = new { VolumeType = level, Drives = drives, Name = name, }; var jsonContent = JsonConvert.SerializeObject(content); var httpContent = new StringContent(jsonContent, Encoding.UTF8, "application/json"); var idrac = new JobController(Server); return(await idrac.CreateJobAsync(string.Format("{0}{1}/Volumes", BaseUri, enclousure.OdataId), httpContent)); }