Exemple #1
0
        public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems)
        {
            AmazonEC2Config config = new AmazonEC2Config();

            config.RegionEndpoint = region;
            ConfigureClient(config);
            AmazonEC2Client client = new AmazonEC2Client(creds, config);

            DescribeVolumesResponse resp = new DescribeVolumesResponse();

            do
            {
                DescribeVolumesRequest req = new DescribeVolumesRequest
                {
                    NextToken = resp.NextToken
                    ,
                    MaxResults = maxItems
                };

                resp = client.DescribeVolumes(req);
                CheckError(resp.HttpStatusCode, "200");

                foreach (var obj in resp.Volumes)
                {
                    AddObject(obj);
                }
            }while (!string.IsNullOrEmpty(resp.NextToken));
        }
Exemple #2
0
        private async Task UntilVolumeAttachedStateAsync(string state, bool allowNone = true, CancellationToken?cancellationToken = null)
        {
            CancellationToken token = cancellationToken.HasValue ? cancellationToken.Value : new CancellationToken();

            var describeVolumesRequest = new DescribeVolumesRequest()
            {
                VolumeIds = new List <string>()
                {
                    this.VolumeId
                },
            };

            while (true)
            {
                token.ThrowIfCancellationRequested();
                var describeVolumesResponse = await this.Client.DescribeVolumesAsync(describeVolumesRequest);

                var volume = describeVolumesResponse.Volumes
                             .FirstOrDefault(x => x.VolumeId == this.VolumeId);

                if (volume != null && ((volume.Attachments.Count == 0 && allowNone) || volume.Attachments.FirstOrDefault(x => x.InstanceId == this.Instance.InstanceId).State == state))
                {
                    break;
                }
                else
                {
                    await Task.Delay(1000, token);
                }
            }
        }
        /// <summary>
        /// List all volumes found in region
        /// </summary>
        public static void ListVolumes()
        {
            AmazonEC2 ec2 = Ec2Helper.CreateClient();

            DescribeVolumesRequest  rq = new DescribeVolumesRequest();
            DescribeVolumesResponse rs = ec2.DescribeVolumes(rq);

            foreach (Volume v in rs.DescribeVolumesResult.Volume)
            {
                Console.WriteLine(v.VolumeId);


                DescribeTagsRequest trq = new DescribeTagsRequest();
                trq.WithFilter(new Filter()
                {
                    Name = "resource-id", Value = new List <string>()
                    {
                        v.VolumeId
                    }
                });
                DescribeTagsResponse trs = ec2.DescribeTags(trq);
                foreach (ResourceTag t in trs.DescribeTagsResult.ResourceTag)
                {
                    Console.WriteLine("  " + t.Key + "=" + t.Value);
                }
            }
        }
Exemple #4
0
        private DescribeVolumesResponse GetEbsVolumes()
        {
            DescribeVolumesRequest  request = new DescribeVolumesRequest();
            DescribeVolumesResponse resp    = ec2.DescribeVolumes(request);

            return(resp);
        }
Exemple #5
0
        private async Task UntilVolumeStateAsync(string volumeId, string state, CancellationToken?cancellationToken = null)
        {
            CancellationToken token = cancellationToken.HasValue ? cancellationToken.Value : new CancellationToken();

            var describeVolumesRequest = new DescribeVolumesRequest()
            {
                VolumeIds = new List <string>()
                {
                    volumeId
                },
            };

            while (true)
            {
                token.ThrowIfCancellationRequested();

                var describeVolumesResponse = await this.Client.DescribeVolumesAsync(describeVolumesRequest);

                var status = describeVolumesResponse.Volumes.FirstOrDefault(x => x.VolumeId == volumeId).State;

                if (status == state)
                {
                    break;
                }
                else
                {
                    await Task.Delay(1000, token);
                }
            }
        }
Exemple #6
0
        /// <summary>
        /// List all volumes found in region
        /// </summary>
        public static void ListVolumes()
        {
            var ec2 = Ec2Helper.CreateClient();

            DescribeVolumesRequest  rq = new DescribeVolumesRequest();
            DescribeVolumesResponse rs = ec2.DescribeVolumes(rq);

            foreach (Volume v in rs.Volumes)
            {
                Console.WriteLine(v.VolumeId);


                DescribeTagsRequest trq = new DescribeTagsRequest();
                trq.Filters.Add(new Filter()
                {
                    Name = "resource-id", Values = new List <string>()
                    {
                        v.VolumeId
                    }
                });
                DescribeTagsResponse trs = ec2.DescribeTags(trq);
                foreach (TagDescription t in trs.Tags)
                {
                    Console.WriteLine("  " + t.Key + "=" + t.Value);
                }
            }
        }
Exemple #7
0
        public void Serialize()
        {
            var request = new DescribeVolumesRequest(new[] { "a", "b", "c" });

            string data = string.Join('&', request.ToParams().Select(a => a.Key + "=" + a.Value));

            Assert.Equal("Action=DescribeVolumes&VolumeId.1=a&VolumeId.2=b&VolumeId.3=c", data);
        }
Exemple #8
0
        public void SerializeEmpty()
        {
            var request = new DescribeVolumesRequest();

            string data = string.Join('&', request.ToParams().Select(a => a.Key + "=" + a.Value));

            Assert.Equal("Action=DescribeVolumes", data);
        }
        public async Task <DescribeVolumesResponse> GetEBS(DescribeVolumesRequest describeVolumesRequest)
        {
            using (var eBSClient = new AmazonEC2Client(awsCredentials, RegionEndpoint.GetBySystemName(Region)))
            {
                var response = await eBSClient.DescribeVolumesAsync(describeVolumesRequest);

                return(response);
            }
        }
        public List <Amazon.EC2.Model.Volume> GetVolume(string volumeId)
        {
            DescribeVolumesRequest req = new DescribeVolumesRequest();

            req.VolumeIds = new List <string>()
            {
                volumeId
            };
            return(_service.DescribeVolumes(req).Volumes);
        }
Exemple #11
0
        private static async Task DeleteOrphanEBSVolumes()
        {
            var client = new AmazonEC2Client(RegionEndpoint.APSoutheast2);
            var describeVolumesRequest = new DescribeVolumesRequest();
            var volumes = await client.DescribeVolumesAsync(describeVolumesRequest);

            const string ebsAvailable = "available";

            foreach (var volume in volumes.Volumes.Where(x => x.Attachments.Count == 0 && x.State == ebsAvailable))
            {
                Console.WriteLine($"Deleting volume {volume.VolumeId}...");
                await client.DeleteVolumeAsync(new DeleteVolumeRequest(volume.VolumeId));
            }
        }
Exemple #12
0
        public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems)
        {
            AmazonOpsWorksConfig config = new AmazonOpsWorksConfig();

            config.RegionEndpoint = region;
            ConfigureClient(config);
            AmazonOpsWorksClient client = new AmazonOpsWorksClient(creds, config);

            DescribeVolumesResponse resp = new DescribeVolumesResponse();
            DescribeVolumesRequest  req  = new DescribeVolumesRequest
            {
            };

            resp = client.DescribeVolumes(req);
            CheckError(resp.HttpStatusCode, "200");

            foreach (var obj in resp.Volumes)
            {
                AddObject(obj);
            }
        }
        public List <InstanceDetail> GetVMProperties()
        {
            List <AWSProfile> profile;

            profile = SqlHelper.GetAWSAccounts();
            List <InstanceDetail> profilelist = new List <InstanceDetail>();

            //foreach (var profile_ in profile)
            //{
            //    Amazon.Util.ProfileManager.RegisterProfile(profile_.ProfileName, profile_.Accesskey, profile_.Secretkey);
            //}

            try
            {
                foreach (var profile_ in profile)
                {
                    var regions = Amazon.RegionEndpoint.EnumerableAllRegions;
                    //Amazon.Runtime.AWSCredentials credentials = new Amazon.Runtime.StoredProfileAWSCredentials(profile_.ProfileName);
                    foreach (var r in regions)
                    {
                        string region_;
                        if (r.SystemName != "us-gov-west-1" && r.SystemName != "cn-north-1")
                        {
                            region_ = r.SystemName;
                            var region = RegionEndpoint.GetBySystemName(region_);

                            AmazonEC2Client           ec2            = new AmazonEC2Client(profile_.Accesskey, profile_.Secretkey, region);
                            DescribeInstancesRequest  request        = new DescribeInstancesRequest();
                            DescribeInstancesResponse response       = ec2.DescribeInstances(request);
                            DescribeVolumesRequest    volumeRequest  = new DescribeVolumesRequest();
                            DescribeVolumesResponse   volumeResponse = ec2.DescribeVolumes(volumeRequest);
                            int size = 0;
                            foreach (var volume in volumeResponse.Volumes)
                            {
                                size += volume.Size;
                            }
                            List <Reservation> result = response.Reservations;
                            foreach (var item in result)
                            {
                                List <Instance> results = item.Instances;
                                foreach (var instance in results)
                                {
                                    InstanceDetail p = new InstanceDetail();
                                    p.InstanceId = instance.InstanceId.ToString();
                                    DescribeInstanceStatusRequest req = new DescribeInstanceStatusRequest();
                                    req.InstanceIds.Add(p.InstanceId);
                                    DescribeInstanceStatusResponse resp = ec2.DescribeInstanceStatus(req);
                                    var statuses = resp.InstanceStatuses;
                                    foreach (var status in statuses)
                                    {
                                        p.InstanceState = status.Status.Status;
                                    }

                                    if (p.InstanceState == null)
                                    {
                                        p.InstanceState = "Not Available";
                                    }

                                    p.Region   = r.SystemName;
                                    p.DiskSize = (size / result.Count).ToString() + " GB"; //
                                    if (instance.PublicIpAddress != null)
                                    {
                                        p.IpAddress = instance.PublicIpAddress;
                                    }
                                    else
                                    {
                                        p.IpAddress = "Not Assigned";
                                    }

                                    p.ProfileName   = profile_.ProfileName;
                                    p.InstanceType  = instance.InstanceType;
                                    p.Status        = instance.State.Name.Value;
                                    p.ResourceGroup = "Not Applicable";
                                    if (instance.IamInstanceProfile != null)
                                    {
                                        p.MachineName = instance.IamInstanceProfile.Arn;
                                    }
                                    else
                                    {
                                        p.MachineName = "Not Assigned";
                                    }
                                    p.accountId = profile_.accountId;
                                    var type = instance.InstanceType;
                                    p.Type = "virtualMachines";
                                    var b = instance.Tags.Count;
                                    if (b != 0)
                                    {
                                        p.MachineName = instance.Tags[0].Value;
                                    }
                                    if (instance.Platform != null)
                                    {
                                        p.OSType = instance.Platform;
                                    }
                                    else
                                    {
                                        p.OSType = "Amazon Linux";
                                    }

                                    profilelist.Add(p);
                                }
                            }
                        }
                    }
                }

                return(profilelist);
            }
            catch (Exception e)
            {
                this.log.Error(e);
                return(null);
            }
        }
        /// <summary>
        /// Check for any volumes that have a snapshot scheduled based on the schedule in the snapshotSchedule tag key.
        /// </summary>
        public static void CheckForScheduledSnapshots()
        {
            Console.WriteLine("Checking for scheduled snapshots...");

            AmazonEC2 ec2 = Ec2Helper.CreateClient();

            DescribeVolumesRequest rq = new DescribeVolumesRequest();

            rq.WithFilter(new Filter()
            {
                Name = "tag-key", Value = new List <string>()
                {
                    "snapshotSchedule"
                }
            });
            DescribeVolumesResponse rs = ec2.DescribeVolumes(rq);

            foreach (Volume v in rs.DescribeVolumesResult.Volume)
            {
                string[] sch2 = Ec2Helper.GetTagValue(v.Tag, "snapshotSchedule").Split(' ');

                string volumename = Ec2Helper.GetTagValue(v.Tag, "Name");


                DateTime lastSnap;     // date of last snapshot
                DateTime nextSnap;     // the next backup that should have occured based on last backup
                DateTime nextNextSnap; // the next backup that should occur assuming a backup runs now or ran at the last proper time

                DateTime now = DateTime.UtcNow;

                if (!DateTime.TryParse(Ec2Helper.GetTagValue(v.Tag, "lastSnapshot"), out lastSnap))
                {
                    lastSnap = Convert.ToDateTime("1/1/2010");
                }


                Console.WriteLine("Checking " + v.VolumeId + " / " + volumename + "...");
//sch2 = ("hourly 4 :30 x30days").Split(' ');
//lastSnap = Convert.ToDateTime("2/29/2012 6:00:15pm");
//now = Convert.ToDateTime("2/29/2012 10:00:14pm");



                switch (sch2[0])
                {
                case "hourly":     // hourly, hourly 1 :15, hourly :30, hourly 4 (pass it hours between backups & when on the hour to do it, any order; defaults to every hour on the hour)

                    int ah = GetAfterTheHour(sch2, 0);
                    int hi = GetInt(sch2, 1);

                    nextSnap = lastSnap.AddMinutes(-lastSnap.Minute).AddSeconds(-lastSnap.Second).AddMilliseconds(-lastSnap.Millisecond);
                    nextSnap = nextSnap.AddHours(hi).AddMinutes(ah);

                    // this is not right
                    nextNextSnap = now.AddMinutes(-now.Minute).AddSeconds(-now.Second).AddMilliseconds(-now.Millisecond);
                    nextNextSnap = nextNextSnap.AddMinutes(ah).AddHours(hi);

                    break;

                case "daily":     // daily, 3pm, daily 15:15, daily 3:30pm (times are UTC; defaults to midnight UTC)

                    DateTime hour = GetTime(sch2, Convert.ToDateTime("0:00"));

                    nextSnap = lastSnap.Date.AddDays(1).AddTicks(hour.TimeOfDay.Ticks);

                    nextNextSnap = now.Date.AddDays(1).AddTicks(hour.TimeOfDay.Ticks);

                    break;

                case "weekly":     // weekly, weekly sunday, weekly thursday 3pm (times are UTC; defaults to sunday midnight UTC)

                    DateTime  whour = GetTime(sch2, Convert.ToDateTime("0:00"));
                    DayOfWeek dow   = GetDow(sch2, DayOfWeek.Sunday);

                    if (lastSnap.DayOfWeek >= dow)
                    {
                        nextSnap = lastSnap.Date.AddDays(-(int)lastSnap.DayOfWeek).AddDays(7 + (int)dow).AddTicks(whour.TimeOfDay.Ticks);
                    }
                    else
                    {
                        nextSnap = lastSnap.Date.AddDays(-(int)lastSnap.DayOfWeek).AddDays((int)dow).AddTicks(whour.TimeOfDay.Ticks);
                    }

                    nextNextSnap = now.Date.AddDays(-(int)now.DayOfWeek).AddDays(7 + (int)dow).AddTicks(whour.TimeOfDay.Ticks);
                    if (nextSnap == nextNextSnap)
                    {
                        nextNextSnap = nextNextSnap.AddDays(7);
                    }

                    break;

                default:
                    lastSnap     = now.AddYears(1);
                    nextSnap     = lastSnap;
                    nextNextSnap = lastSnap;
                    break;
                }


//Console.WriteLine("last=" + lastSnap.ToString());
//Console.WriteLine("now=" + now);
//Console.WriteLine("next=" + nextSnap.ToString());
//Console.WriteLine("nextNext=" + nextNextSnap.ToString());
//Console.ReadKey();
//return;
                if (nextSnap <= now)
                {
                    // create snapshot of volume

                    string expires     = "";
                    int    expireHours = GetExpireHours(sch2, 0);
                    if (expireHours > 0)
                    {
                        expires = now.AddHours(expireHours).ToString();
                    }


                    Backup(volumename, "automatic", v.VolumeId, volumename, Ec2Helper.GetInstanceName(v.Attachment[0].InstanceId), expires);


                    // update volume tags

                    CreateTagsRequest rqq = new CreateTagsRequest();

                    rqq.WithResourceId(v.VolumeId);

                    nextSnap = nextSnap.AddSeconds(-nextSnap.Second).AddMilliseconds(-nextSnap.Millisecond);

                    rqq.WithTag(new Tag[] {
                        new Tag {
                            Key = "lastSnapshot", Value = now.ToString()
                        },
                        new Tag {
                            Key = "nextSnapshot", Value = nextNextSnap.ToString()
                        }
                    });

                    var createTagResponse = ec2.CreateTags(rqq);
                }
                else
                {
                    Console.WriteLine("    Next scheduled " + nextSnap.ToString());
                }
            }
        }
Exemple #15
0
 /// <summary>
 /// Describe Volumes
 /// </summary>
 /// <param name="request">Describe Volumes  request</param>
 /// <returns>Describe Volumes  Response from the service</returns>
 /// <remarks>
 /// Describes the status of the indicated or, in lieu of any specified,  all volumes belonging to the caller. Volumes that have been deleted are not described.
 ///
 /// </remarks>
 public DescribeVolumesResponse DescribeVolumes(DescribeVolumesRequest request)
 {
     return(Invoke <DescribeVolumesResponse>("DescribeVolumesResponse.xml"));
 }