Example #1
0
        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));
        }
Example #3
0
        public override AmazonWebServiceResponse Unmarshall(XmlUnmarshallerContext context)
        {
            ListHostedZonesResponse response = new ListHostedZonesResponse();

            UnmarshallResult(context, response);

            return(response);
        }
Example #4
0
        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;
        }
Example #5
0
        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);
        }
Example #7
0
        /// <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);
            }
        }
Example #8
0
        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());
        }
Example #9
0
        private ListHostedZonesResponse GetHostedZones()
        {
            ListHostedZonesResponse resp = route53.ListHostedZones();

            return(resp);
        }
Example #10
0
        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.";
                    }
                }
            }
        }
Example #11
0
        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);
        }