private async void OnDnsZoneChange(DnsZoneViewModel zone) { currentZone = zone; AddRecordCommand.RaiseCanExecuteChanged(); EditRecordCommand.RaiseCanExecuteChanged(); if (zone == null) { Loading = false; IsEnabled = true; Records.Clear(); return; } await LoadDnsRecordsAsync(); }
public async Task AddDnsRecordAsync(DnsZoneViewModel dnsZone, string hostName, string type, Dictionary<string, object> options, List<Dictionary<string, string>> records, bool overwrite = false) { await Task.Run( delegate { lock (runspace) { var pipe = runspace.CreatePipeline(); var rs = new Command("New-AzureDnsRecordSet"); rs.Parameters.Add("Name", hostName); rs.Parameters.Add("ZoneName", dnsZone.Name); rs.Parameters.Add("ResourceGroupName", dnsZone.ResourceGroupName); rs.Parameters.Add("RecordType", type); foreach (var item in options) { rs.Parameters.Add(item.Key, item.Value); } if (overwrite) { rs.Parameters.Add("Overwrite"); rs.Parameters.Add("Force"); } pipe.Commands.Add(rs); foreach (var record in records) { var ip = new Command("Add-AzureDnsRecordConfig"); foreach (var item in record) { ip.Parameters.Add(item.Key, item.Value); } pipe.Commands.Add(ip); } pipe.Commands.Add(new Command("Set-AzureDnsRecordSet")); LogCommand(pipe.Commands); pipe.Invoke(); if (pipe.HadErrors) { dynamic error = pipe.Error.Read(); Exception ex = error.Exception; throw new Exception("Can't create " + type + " record", ex); } } }); }
public async Task<IList<DnsRecordViewModel>> GetAzureDnsRecordsAsync(DnsZoneViewModel zone) { return await Task.Run( delegate { lock (runspace) { try { var ps = PowerShell.Create(); ps.Runspace = runspace; ps.AddCommand("Get-AzureDnsRecordSet") .AddParameter("ResourceGroupName", zone.ResourceGroupName) .AddParameter("ZoneName", zone.Name); LogCommand(ps.Commands.Commands); var items = ps.Invoke(); dynamic records = items[0].BaseObject; var result = new List<DnsRecordViewModel>(); foreach (var item in records) { string recordType = item.RecordType.ToString(); var record = new DnsRecordViewModel(); record.Name = item.Name; record.RecordType = (RecordType) Enum.Parse(typeof (RecordType), recordType); var reader = container.Resolve<IDnsRecordReader>(recordType); var list = new List<BaseDnsRecord>(); foreach (var r in item.Records) { list.Add(reader.Read(r)); } record.Records = list; result.Add(record); } return result; } catch (Exception) { return new List<DnsRecordViewModel>(); } } }); }
public async Task RemoveRecordSetAsync(DnsZoneViewModel dnsZone, DnsRecordViewModel record) { await Task.Run( delegate { lock (runspace) { var pipe = runspace.CreatePipeline(); var rs = new Command("Remove-AzureDnsRecordSet"); rs.Parameters.Add("Name", record.Name); rs.Parameters.Add("RecordType", record.RecordType.ToString()); rs.Parameters.Add("ZoneName", dnsZone.Name); rs.Parameters.Add("ResourceGroupName", dnsZone.ResourceGroupName); rs.Parameters.Add("Force"); pipe.Commands.Add(rs); LogCommand(pipe.Commands); pipe.Invoke(); } }); }
public async Task<IList<DnsZoneViewModel>> GetAzureDnsZoneAsync() { return await Task.Run( delegate { lock (runspace) { var pipe = runspace.CreatePipeline(); pipe.Commands.Add(new Command("Get-AzureResourceGroup")); pipe.Commands.Add(new Command("Get-AzureDnsZone")); LogCommand(pipe.Commands); var result = pipe.Invoke(); var list = new List<DnsZoneViewModel>(); foreach (var o in result) { dynamic zoneList = o.BaseObject; foreach (var item in zoneList) { var zone = new DnsZoneViewModel(); zone.Name = item.Name; zone.ResourceGroupName = item.ResourceGroupName; list.Add(zone); } } return list; } }); }