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)); }
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); } } }
private DescribeVolumesResponse GetEbsVolumes() { DescribeVolumesRequest request = new DescribeVolumesRequest(); DescribeVolumesResponse resp = ec2.DescribeVolumes(request); return(resp); }
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); } } }
/// <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); } } }
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); }
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); }
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)); } }
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()); } } }
/// <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")); }