public void OnTimer(object sender, System.Timers.ElapsedEventArgs args) { eventLog.WriteEntry(LogMessaging.SERVICE_MONITORING, EventLogEntryType.Information); string date = Utility.GetRoute53Date(); string authValue = Utility.GetAWSR53_SHA1AuthorizationValue(Keys.ACCESS_KEY_ID, Keys.SECRET_KEY, date); string externalIp = Utility.GetExternalIp(); ListHostedZonesResponse listHostedZonesResponse = API.GetListHostedZones(date, authValue); var hostedZone = listHostedZonesResponse.HostedZones.Where(x => x.Name == "pierrethelusma.com.").SingleOrDefault(); ListResourceRecordSetsResponse listResourceRecordSetsResponse = API.GetListResourceRecordSets(date, authValue, hostedZone.Id); var resourceRecordSet = listResourceRecordSetsResponse.ResourceRecordSets.Where(x => x.Name == "home.pierrethelusma.com." && x.Type == "A").SingleOrDefault(); ChangeResourceRecordSetsResponse changeResourceRecordSetsResponse = new ChangeResourceRecordSetsResponse(); if (resourceRecordSet == null) { eventLog.WriteEntry(LogMessaging.SERVICE_CREATING_DNS_ENTRY, EventLogEntryType.Information); changeResourceRecordSetsResponse = API.PostChangeResourceRecordSets(date, authValue, externalIp, hostedZone.Id, "home.pierrethelusma.com.", "A", "600", "CREATE"); } else { if (!resourceRecordSet.ResourceRecords.Any(x => x.Value == externalIp)) { eventLog.WriteEntry(LogMessaging.SERVICE_UPDATING_DNS_ENTRY, EventLogEntryType.Information); changeResourceRecordSetsResponse = API.PostChangeResourceRecordSets(date, authValue, externalIp, hostedZone.Id, "home.pierrethelusma.com.", "A", "600", "UPSERT"); } } }
public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems) { AmazonRoute53Config config = new AmazonRoute53Config(); config.RegionEndpoint = region; ConfigureClient(config); AmazonRoute53Client client = new AmazonRoute53Client(creds, config); ListHostedZonesResponse resp = new ListHostedZonesResponse(); do { ListHostedZonesRequest req = new ListHostedZonesRequest { Marker = resp.NextMarker , MaxItems = maxItems.ToString() }; resp = client.ListHostedZones(req); CheckError(resp.HttpStatusCode, "200"); foreach (var obj in resp.HostedZones) { AddObject(obj); } }while (!string.IsNullOrEmpty(resp.NextMarker)); }
public override AmazonWebServiceResponse Unmarshall(XmlUnmarshallerContext context) { ListHostedZonesResponse response = new ListHostedZonesResponse(); UnmarshallResult(context, response); return(response); }
private static void UnmarshallResult(XmlUnmarshallerContext context, ListHostedZonesResponse response) { int originalDepth = context.CurrentDepth; int targetDepth = originalDepth + 1; if (context.IsStartOfDocument) { targetDepth += 2; } while (context.Read()) { if (context.IsStartElement || context.IsAttribute) { if (context.TestExpression("HostedZones/HostedZone", targetDepth)) { response.HostedZones.Add(HostedZoneUnmarshaller.GetInstance().Unmarshall(context)); continue; } if (context.TestExpression("Marker", targetDepth)) { response.Marker = StringUnmarshaller.GetInstance().Unmarshall(context); continue; } if (context.TestExpression("IsTruncated", targetDepth)) { response.IsTruncated = BoolUnmarshaller.GetInstance().Unmarshall(context); continue; } if (context.TestExpression("NextMarker", targetDepth)) { response.NextMarker = StringUnmarshaller.GetInstance().Unmarshall(context); continue; } if (context.TestExpression("MaxItems", targetDepth)) { response.MaxItems = StringUnmarshaller.GetInstance().Unmarshall(context); continue; } } else if (context.IsEndElement && context.CurrentDepth < originalDepth) { return; } } return; }
private async Task <ListHostedZonesResponse> listAwsHostedZonesAsync() { logger.LogInformation($"Getting List of hosted zones..."); ListHostedZonesRequest request = new ListHostedZonesRequest { }; ListHostedZonesResponse zone = await TheRoute53Client().ListHostedZonesAsync(request); return(zone); }
public override AmazonWebServiceResponse Unmarshall(XmlUnmarshallerContext context) { ListHostedZonesResponse response = new ListHostedZonesResponse(); while (context.Read()) { if (context.IsStartElement) { response.ListHostedZonesResult = ListHostedZonesResultUnmarshaller.GetInstance().Unmarshall(context); break; } } return(response); }
/// <summary> /// Retrieve a list of your hosted zones. /// </summary> /// <param name="settings">The <see cref="Route53Settings"/> required to connect to Route53.</param> /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param> public async Task <IList <HostedZone> > GetHostedZones(Route53Settings settings, CancellationToken cancellationToken = default(CancellationToken)) { ListHostedZonesRequest request = new ListHostedZonesRequest(); AmazonRoute53Client client = this.GetClient(settings); ListHostedZonesResponse response = await client.ListHostedZonesAsync(request); if (response.HttpStatusCode == HttpStatusCode.OK) { _Log.Verbose("Listing hosted zones"); return(response.HostedZones); } else { _Log.Error("Could not list hosted zones"); return(null); } }
public async Task <HostedZone[]> ListHostedZonesAsync(CancellationToken cancellationToken = default(CancellationToken)) { ListHostedZonesResponse response = null; var results = new List <HostedZone>(); while ((response = await _locker.Lock(() => _client.ListHostedZonesAsync(new ListHostedZonesRequest() { Marker = response?.NextMarker, }, cancellationToken: cancellationToken).EnsureSuccessAsync())) != null) { if (!response.HostedZones.IsNullOrEmpty()) { results.AddRange(response.HostedZones); } if (!response.IsTruncated) { break; } } return(results.ToArray()); }
private ListHostedZonesResponse GetHostedZones() { ListHostedZonesResponse resp = route53.ListHostedZones(); return(resp); }
void MonitorFunction() { Thread.CurrentThread.Name = "MonitorThread"; Program.TraceLine("Monitoring thread started..."); Program.MonitorMessage = "Monitor starting..."; while (true) { try { //TEST ZONE { } //Now continues normally lock (Ec2Lock) { if (!RunMonitoring) { return; } } DescribeInstancesResponse respEc2 = GetRunningInstances(); UpdateClassOfObjects(currentStatusEc2, respEc2.DescribeInstancesResult.Reservation); Program.MonitorMessage = "Updated EC2s..."; foreach (ZAwsEc2 ec2Instance in CurrentEc2s) { lock (Ec2Lock) { if (!RunMonitoring) { return; } } ec2Instance.UpdateInfo(); Program.MonitorMessage = "Updated EC2 " + ec2Instance.Name; } lock (Ec2Lock) { if (!RunMonitoring) { return; } } DescribeAddressesResponse respElasitIp = GetElasticIps(); UpdateClassOfObjects(currentStatusElIps, respElasitIp.DescribeAddressesResult.Address); Program.MonitorMessage = "Updated elastic IPs"; lock (Ec2Lock) { if (!RunMonitoring) { return; } } ListHostedZonesResponse route53Zones = GetHostedZones(); UpdateClassOfObjects(currentHostedZones, route53Zones.ListHostedZonesResult.HostedZones); Program.MonitorMessage = "Updated hosted zones..."; foreach (ZAwsHostedZone zone in CurrentHostedZones) { lock (Ec2Lock) { if (!RunMonitoring) { return; } } zone.UpdateInfo(); Program.MonitorMessage = "Updated zone " + zone.Name; } /* * We will not be checking S3 service, because that actually costs money! * lock (Ec2Lock) { if (!RunMonitoring) { return; } } * ListBucketsResponse s3Buckects = GetBuckets(); * UpdateClassOfObjects(currentS3Buckets, s3Buckects.Buckets); * Program.MonitorMessage = "Updated S3 Buckets..."; * */ lock (Ec2Lock) { if (!RunMonitoring) { return; } } DescribeSnapshotsResponse respEc2Snapshots = GetSnapshots(); UpdateClassOfObjects(currentSnapshots, respEc2Snapshots.DescribeSnapshotsResult.Snapshot); Program.MonitorMessage = "Updated EC2 Snapshots..."; lock (Ec2Lock) { if (!RunMonitoring) { return; } } DescribeKeyPairsResponse respKeyPairs = GetKeyPairs(); UpdateClassOfObjects(currentKeyPairs, respKeyPairs.DescribeKeyPairsResult.KeyPair); Program.MonitorMessage = "Updated KeyPairs..."; lock (Ec2Lock) { if (!RunMonitoring) { return; } } DescribeSecurityGroupsResponse respSecGroups = GetSecurityGroups(); UpdateClassOfObjects(currentSecGroups, respSecGroups.DescribeSecurityGroupsResult.SecurityGroup); Program.MonitorMessage = "Updated Sec Groups..."; lock (Ec2Lock) { if (!RunMonitoring) { return; } } DescribeImagesResponse respAmis = GetAmis(); UpdateClassOfObjects(currentAmis, respAmis.DescribeImagesResult.Image); Program.MonitorMessage = "Updated AMIs..."; lock (Ec2Lock) { if (!RunMonitoring) { return; } } DescribeVolumesResponse respEbsVolumes = GetEbsVolumes(); UpdateClassOfObjects(currentEbsVolumes, respEbsVolumes.DescribeVolumesResult.Volume); Program.MonitorMessage = "Updated EBS volumes..."; lock (Ec2Lock) { if (!RunMonitoring) { return; } } DescribeSpotInstanceRequestsResponse respSpotRequests = GetSpotRequests(); UpdateClassOfObjects(currentSpotRequests, respSpotRequests.DescribeSpotInstanceRequestsResult.SpotInstanceRequest); Program.MonitorMessage = "Updated spot requests..."; lock (Ec2Lock) { if (!RunMonitoring) { return; } } if (ThreadInRecovery) { Program.TraceLine("Monitoring working fine again..."); ThreadInRecovery = false; } } catch (Exception ex) { Program.TraceLine("Monitoring thread encountered an error. Will restart in {0}...", ex, ThreadInRecovery ? "1 minute" : "5 seconds"); Program.MonitorMessage = "Monitor paused..."; for (int i = 0; i < (ThreadInRecovery ? 600 : 50); i++) { lock (Ec2Lock) { if (!RunMonitoring) { return; } } Thread.Sleep(100); } Program.TraceLine("Monitoring thread trying to recover..."); Program.MonitorMessage = "Monitor restarting..."; ThreadInRecovery = true; } finally { if (!RunMonitoring) { Program.MonitorMessage = "Monitor stopped."; } } } }
public bool PrepareChallengeForValidation(string dnsKeyName, string dnsKeyValue) { try { route53Client = new AmazonRoute53Client(); HostedZone zone = null; if (zoneId != null) { GetHostedZoneResponse zoneResp = route53Client.GetHostedZone(new Amazon.Route53.Model.GetHostedZoneRequest { Id = zoneId }); zone = zoneResp.HostedZone; } else { ListHostedZonesResponse zones = route53Client.ListHostedZones(); string recordToZone = dnsKeyName; while (recordToZone.IndexOf('.') > 0) { recordToZone = recordToZone.Substring(recordToZone.IndexOf('.') + 1); zone = zones.HostedZones.Where(z => z.Name.Contains(recordToZone)).FirstOrDefault(); if (zone != null) { break; } } } if (zone == null) { logger.Error("Could not find DNS zone"); return(false); } ListResourceRecordSetsResponse txtRecordsResponse = route53Client.ListResourceRecordSets(new ListResourceRecordSetsRequest { StartRecordName = dnsKeyName, StartRecordType = "TXT", MaxItems = "1", HostedZoneId = zone.Id }); ResourceRecordSet txtRecord = txtRecordsResponse.ResourceRecordSets.FirstOrDefault(r => (r.Name == dnsKeyName || r.Name == dnsKeyName + ".") && r.Type.Value == "TXT"); if (txtRecord != null) { ApplyDnsChange(zone, txtRecord, ChangeAction.DELETE); } txtRecord = new ResourceRecordSet() { Name = dnsKeyName, TTL = 5, Type = RRType.TXT, ResourceRecords = new List <ResourceRecord> { new ResourceRecord { Value = "\"" + dnsKeyValue + "\"" } } }; ApplyDnsChange(zone, txtRecord, ChangeAction.UPSERT); } catch (AmazonRoute53Exception exp) { logger.Error($"Could not update AWS Route53 record: ", exp); return(false); } return(true); }