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);

            DescribeInstanceStatusResponse resp = new DescribeInstanceStatusResponse();

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

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

                foreach (var obj in resp.InstanceStatuses)
                {
                    AddObject(obj);
                }
            }while (!string.IsNullOrEmpty(resp.NextToken));
        }
Exemplo n.º 2
0
        public static DescribeInstanceStatusResponse Unmarshall(UnmarshallerContext context)
        {
            DescribeInstanceStatusResponse describeInstanceStatusResponse = new DescribeInstanceStatusResponse()
            {
                HttpResponse = context.HttpResponse,
                RequestId    = context.StringValue("DescribeInstanceStatus.RequestId"),
                TotalCount   = context.IntegerValue("DescribeInstanceStatus.TotalCount"),
                PageNumber   = context.IntegerValue("DescribeInstanceStatus.PageNumber"),
                PageSize     = context.IntegerValue("DescribeInstanceStatus.PageSize")
            };
            List <DescribeInstanceStatusResponse.InstanceStatus> instanceStatuses = new List <DescribeInstanceStatusResponse.InstanceStatus>();

            for (int i = 0; i < context.Length("DescribeInstanceStatus.InstanceStatuses.Length"); i++)
            {
                DescribeInstanceStatusResponse.InstanceStatus instanceStatus = new DescribeInstanceStatusResponse.InstanceStatus()
                {
                    InstanceId = context.StringValue($"DescribeInstanceStatus.InstanceStatuses[{i}].InstanceId"),
                    Status     = context.EnumValue <DescribeInstanceStatusResponse.InstanceStatus.StatusEnum>($"DescribeInstanceStatus.InstanceStatuses[{i}].Status")
                };
                instanceStatuses.Add(instanceStatus);
            }
            describeInstanceStatusResponse.InstanceStatuses = instanceStatuses;

            return(describeInstanceStatusResponse);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Unmarshaller the response from the service to the response class.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override AmazonWebServiceResponse Unmarshall(XmlUnmarshallerContext context)
        {
            DescribeInstanceStatusResponse response = new DescribeInstanceStatusResponse();

            int originalDepth = context.CurrentDepth;
            int targetDepth   = originalDepth + 1;

            if (context.IsStartOfDocument)
            {
                targetDepth = 2;
            }

            while (context.ReadAtDepth(originalDepth))
            {
                if (context.IsStartElement || context.IsAttribute)
                {
                    if (context.TestExpression("instanceStatusSet/item", targetDepth))
                    {
                        var unmarshaller = InstanceStatusUnmarshaller.Instance;
                        var item         = unmarshaller.Unmarshall(context);
                        response.InstanceStatuses.Add(item);
                        continue;
                    }
                    if (context.TestExpression("nextToken", targetDepth))
                    {
                        var unmarshaller = StringUnmarshaller.Instance;
                        response.NextToken = unmarshaller.Unmarshall(context);
                        continue;
                    }
                }
            }

            return(response);
        }
        public override AmazonWebServiceResponse Unmarshall(XmlUnmarshallerContext context)
        {
            DescribeInstanceStatusResponse response = new DescribeInstanceStatusResponse();

            int targetDepth = 2;

            while (context.Read())
            {
                if (context.IsStartElement || context.IsAttribute)
                {
                    if (context.TestExpression("instanceStatusSet/item", targetDepth))
                    {
                        response.InstanceStatuses.Add(InstanceStatusUnmarshaller.GetInstance().Unmarshall(context));

                        continue;
                    }
                    if (context.TestExpression("nextToken", targetDepth))
                    {
                        response.NextToken = StringUnmarshaller.GetInstance().Unmarshall(context);

                        continue;
                    }
                }
            }


            return(response);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Describes the status of one or more instances. Instance status includes the following components:
        /// Status checks - Amazon EC2 performs status checks on running EC2 instances to identify hardware and software issues. For more information, see Status Checks
        /// for Your Instances and Troubleshooting Instances with Failed Status Checks in the Amazon Elastic Compute Cloud User Guide.
        /// Scheduled events - Amazon EC2 can schedule events (such as reboot, stop, or terminate) for your instances related to hardware issues, software updates, or system maintenance.
        /// For more information, see Scheduled Events for Your Instances in the Amazon Elastic Compute Cloud User Guide.
        /// Instance state - You can manage your instances from the moment you launch them through their termination. For more information, see Instance Lifecycle in the Amazon Elastic Compute Cloud User Guide.
        /// </summary>
        /// <param name="instances">A list of instance IDs to be stopped.</param>
        /// <param name="settings">The <see cref="EC2Settings"/> used during the request to AWS.</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 <InstanceStatus> > DescribeInstances(IList <string> instances, EC2Settings settings, CancellationToken cancellationToken = default(CancellationToken))
        {
            if ((instances == null) || (instances.Count == 0))
            {
                throw new ArgumentNullException("instances");
            }



            //Create Request
            AmazonEC2Client client = this.CreateClient(settings);
            DescribeInstanceStatusRequest request = new DescribeInstanceStatusRequest();

            foreach (string instance in instances)
            {
                request.InstanceIds.Add(instance);
            }



            //Check Response
            DescribeInstanceStatusResponse response = await client.DescribeInstanceStatusAsync(request, cancellationToken);

            if (response.HttpStatusCode == HttpStatusCode.OK)
            {
                _Log.Verbose("Successfully terminated instances '{0}'", string.Join(",", instances));
                return(response.InstanceStatuses);
            }
            else
            {
                _Log.Error("Failed to terminate instances '{0}'", string.Join(",", instances));
                return(new List <InstanceStatus>());
            }
        }
        public static DescribeInstanceStatusResponse Unmarshall(UnmarshallerContext _ctx)
        {
            DescribeInstanceStatusResponse describeInstanceStatusResponse = new DescribeInstanceStatusResponse();

            describeInstanceStatusResponse.HttpResponse   = _ctx.HttpResponse;
            describeInstanceStatusResponse.RequestId      = _ctx.StringValue("DescribeInstanceStatus.RequestId");
            describeInstanceStatusResponse.InstanceId     = _ctx.StringValue("DescribeInstanceStatus.InstanceId");
            describeInstanceStatusResponse.InstanceStatus = _ctx.IntegerValue("DescribeInstanceStatus.InstanceStatus");

            return(describeInstanceStatusResponse);
        }
        void AndGivenAllInstancesAreStopped()
        {
            mockEc2 = new Mock <IAmazonEC2>();
            scope   = DependencyInjection.Init(new MockAwsClientsModule(mockEc2));

            var describeResponse = new DescribeInstanceStatusResponse
            {
                InstanceStatuses = new List <InstanceStatus>
                {
                    new InstanceStatus
                    {
                        InstanceId    = TestDataMother.StackOne.Ec2InstanceIds[0],
                        InstanceState = TestDataMother.Ec2StoppedInstanceState
                    },
                    new InstanceStatus
                    {
                        InstanceId    = TestDataMother.StackOne.Ec2InstanceIds[1],
                        InstanceState = TestDataMother.Ec2StoppedInstanceState
                    }
                }
            };

            mockEc2
            .Setup(ec2 => ec2.DescribeInstanceStatusAsync(It.Is <DescribeInstanceStatusRequest>(req =>
                                                                                                req.InstanceIds.Contains(TestDataMother.StackOne.Ec2InstanceIds[0]) &&
                                                                                                req.InstanceIds.Contains(TestDataMother.StackOne.Ec2InstanceIds[1]) &&
                                                                                                req.IncludeAllInstances == true),
                                                          default(CancellationToken)))
            .ReturnsAsync(describeResponse);

            mockEc2
            .Setup(ec2 => ec2.StartInstancesAsync(It.IsAny <StartInstancesRequest>(), default(CancellationToken)))
            .ReturnsAsync(() => new StartInstancesResponse {
                StartingInstances = new List <InstanceStateChange>
                {
                    new InstanceStateChange {
                        InstanceId = TestDataMother.StackOne.Ec2InstanceIds[0]
                    },
                    new InstanceStateChange {
                        InstanceId = TestDataMother.StackOne.Ec2InstanceIds[1]
                    },
                }
            });
        }
        public static DescribeInstanceStatusResponse Unmarshall(UnmarshallerContext context)
        {
            DescribeInstanceStatusResponse describeInstanceStatusResponse = new DescribeInstanceStatusResponse();

            describeInstanceStatusResponse.HttpResponse = context.HttpResponse;
            describeInstanceStatusResponse.RequestId = context.StringValue("DescribeInstanceStatus.RequestId");
            describeInstanceStatusResponse.TotalCount = context.IntegerValue("DescribeInstanceStatus.TotalCount");
            describeInstanceStatusResponse.PageNumber = context.IntegerValue("DescribeInstanceStatus.PageNumber");
            describeInstanceStatusResponse.PageSize = context.IntegerValue("DescribeInstanceStatus.PageSize");

            List<DescribeInstanceStatusResponse.InstanceStatus> instanceStatuses = new List<DescribeInstanceStatusResponse.InstanceStatus>();
            for (int i = 0; i < context.Length("DescribeInstanceStatus.InstanceStatuses.Length"); i++) {
                DescribeInstanceStatusResponse.InstanceStatus instanceStatus = new DescribeInstanceStatusResponse.InstanceStatus();
                instanceStatus.InstanceId = context.StringValue("DescribeInstanceStatus.InstanceStatuses["+ i +"].InstanceId");
                instanceStatus.Status = context.EnumValue<DescribeInstanceStatusResponse.InstanceStatus.StatusEnum>("DescribeInstanceStatus.InstanceStatuses["+ i +"].Status");

                instanceStatuses.Add(instanceStatus);
            }
            describeInstanceStatusResponse.InstanceStatuses = instanceStatuses;

            return describeInstanceStatusResponse;
        }
Exemplo n.º 9
0
        public static DescribeInstanceStatusResponse Unmarshall(UnmarshallerContext context)
        {
            DescribeInstanceStatusResponse describeInstanceStatusResponse = new DescribeInstanceStatusResponse();

            describeInstanceStatusResponse.HttpResponse = context.HttpResponse;
            describeInstanceStatusResponse.RequestId    = context.StringValue("DescribeInstanceStatus.RequestId");
            describeInstanceStatusResponse.TotalCount   = context.IntegerValue("DescribeInstanceStatus.TotalCount");
            describeInstanceStatusResponse.PageNumber   = context.IntegerValue("DescribeInstanceStatus.PageNumber");
            describeInstanceStatusResponse.PageSize     = context.IntegerValue("DescribeInstanceStatus.PageSize");

            List <DescribeInstanceStatusResponse.DescribeInstanceStatus_InstanceStatus> describeInstanceStatusResponse_instanceStatuses = new List <DescribeInstanceStatusResponse.DescribeInstanceStatus_InstanceStatus>();

            for (int i = 0; i < context.Length("DescribeInstanceStatus.InstanceStatuses.Length"); i++)
            {
                DescribeInstanceStatusResponse.DescribeInstanceStatus_InstanceStatus instanceStatus = new DescribeInstanceStatusResponse.DescribeInstanceStatus_InstanceStatus();
                instanceStatus.InstanceId = context.StringValue("DescribeInstanceStatus.InstanceStatuses[" + i + "].InstanceId");
                instanceStatus.Status     = context.StringValue("DescribeInstanceStatus.InstanceStatuses[" + i + "].Status");

                describeInstanceStatusResponse_instanceStatuses.Add(instanceStatus);
            }
            describeInstanceStatusResponse.InstanceStatuses = describeInstanceStatusResponse_instanceStatuses;

            return(describeInstanceStatusResponse);
        }
        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);
            }
        }