{-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} -- Module : Network.AWS.EC2.DescribeInstances -- Copyright : (c) 2013-2014 Brendan Hay -- License : This Source Code Form is subject to the terms of -- the Mozilla Public License, v. 2.0. -- A copy of the MPL can be found in the LICENSE file or -- you can obtain it at http://mozilla.org/MPL/2.0/. -- Maintainer : Brendan Hay -- Stability : experimental -- Portability : non-portable (GHC extensions) -- -- Derived from AWS service descriptions, licensed under Apache 2.0. -- | Describes one or more of your instances. -- -- If you specify one or more instance IDs, Amazon EC2 returns information for -- those instances. If you do not specify instance IDs, Amazon EC2 returns -- information for all relevant instances. If you specify an instance ID that is -- not valid, an error is returned. If you specify an instance that you do not -- own, it is not included in the returned results. -- -- Recently terminated instances might appear in the returned results. This -- interval is usually less than one hour. -- -- module Network.AWS.EC2.DescribeInstances ( -- * Request DescribeInstances -- ** Request constructor , describeInstances -- ** Request lenses , di1DryRun , di1Filters , di1InstanceIds , di1MaxResults , di1NextToken -- * Response , DescribeInstancesResponse -- ** Response constructor , describeInstancesResponse -- ** Response lenses , dirNextToken , dirReservations ) where import Network.AWS.Prelude import Network.AWS.Request.Query import Network.AWS.EC2.Types import qualified GHC.Exts data DescribeInstances = DescribeInstances { _di1DryRun :: Maybe Bool , _di1Filters :: List "Filter" Filter , _di1InstanceIds :: List "InstanceId" Text , _di1MaxResults :: Maybe Int , _di1NextToken :: Maybe Text } deriving (Eq, Show) -- | 'DescribeInstances' constructor. -- -- The fields accessible through corresponding lenses are: -- -- * 'di1DryRun' @::@ 'Maybe' 'Bool' -- -- * 'di1Filters' @::@ ['Filter'] -- -- * 'di1InstanceIds' @::@ ['Text'] -- -- * 'di1MaxResults' @::@ 'Maybe' 'Int' -- -- * 'di1NextToken' @::@ 'Maybe' 'Text' -- describeInstances :: DescribeInstances describeInstances = DescribeInstances { _di1DryRun = Nothing , _di1InstanceIds = mempty , _di1Filters = mempty , _di1NextToken = Nothing , _di1MaxResults = Nothing } di1DryRun :: Lens' DescribeInstances (Maybe Bool) di1DryRun = lens _di1DryRun (\s a -> s { _di1DryRun = a }) -- | One or more filters. -- -- 'architecture' - The instance architecture ('i386' | 'x86_64'). -- -- 'availability-zone' - The Availability Zone of the instance. -- -- 'block-device-mapping.attach-time' - The attach time for an Amazon EBS -- volume mapped to the instance, for example, '2010-09-15T17:15:20.000Z'. -- -- 'block-device-mapping.delete-on-termination' - A Boolean that indicates -- whether the Amazon EBS volume is deleted on instance termination. -- -- 'block-device-mapping.device-name' - The device name for the Amazon EBS -- volume (for example, '/dev/sdh'). -- -- 'block-device-mapping.status' - The status for the Amazon EBS volume ('attaching' | 'attached' | 'detaching' | 'detached'). -- -- 'block-device-mapping.volume-id' - The volume ID of the Amazon EBS volume. -- -- 'client-token' - The idempotency token you provided when you launched the -- instance. -- -- 'dns-name' - The public DNS name of the instance. -- -- 'group-id' - The ID of the security group for the instance. If the instance -- is in EC2-Classic or a default VPC, you can use 'group-name' instead. -- -- 'group-name' - The name of the security group for the instance. If the -- instance is in a nondefault VPC, you must use 'group-id' instead. -- -- 'hypervisor' - The hypervisor type of the instance ('ovm' | 'xen'). -- -- 'iam-instance-profile.arn' - The instance profile associated with the -- instance. Specified as an ARN. -- -- 'image-id' - The ID of the image used to launch the instance. -- -- 'instance-id' - The ID of the instance. -- -- 'instance-lifecycle' - Indicates whether this is a Spot Instance ('spot'). -- -- 'instance-state-code' - The state of the instance, as a 16-bit unsigned -- integer. The high byte is an opaque internal value and should be ignored. The -- low byte is set based on the state represented. The valid values are: 0 -- (pending), 16 (running), 32 (shutting-down), 48 (terminated), 64 (stopping), -- and 80 (stopped). -- -- 'instance-state-name' - The state of the instance ('pending' | 'running' | 'shutting-down' | 'terminated' | 'stopping' | 'stopped'). -- -- 'instance-type' - The type of instance (for example, 'm1.small'). -- -- 'instance.group-id' - The ID of the security group for the instance. If the -- instance is in EC2-Classic or a default VPC, you can use 'instance.group-name' -- instead. -- -- 'instance.group-name' - The name of the security group for the instance. If -- the instance is in a nondefault VPC, you must use 'instance.group-id' instead. -- -- 'ip-address' - The public IP address of the instance. -- -- 'kernel-id' - The kernel ID. -- -- 'key-name' - The name of the key pair used when the instance was launched. -- -- 'launch-index' - When launching multiple instances, this is the index for -- the instance in the launch group (for example, 0, 1, 2, and so on). -- -- 'launch-time' - The time when the instance was launched. -- -- 'monitoring-state' - Indicates whether monitoring is enabled for the -- instance ('disabled' | 'enabled'). -- -- 'owner-id' - The AWS account ID of the instance owner. -- -- 'placement-group-name' - The name of the placement group for the instance. -- -- 'platform' - The platform. Use 'windows' if you have Windows instances; -- otherwise, leave blank. -- -- 'private-dns-name' - The private DNS name of the instance. -- -- 'private-ip-address' - The private IP address of the instance. -- -- 'product-code' - The product code associated with the AMI used to launch the -- instance. -- -- 'product-code.type' - The type of product code ('devpay' | 'marketplace'). -- -- 'ramdisk-id' - The RAM disk ID. -- -- 'reason' - The reason for the current state of the instance (for example, -- shows "User Initiated [date]" when you stop or terminate the instance). -- Similar to the state-reason-code filter. -- -- 'requester-id' - The ID of the entity that launched the instance on your -- behalf (for example, AWS Management Console, Auto Scaling, and so on). -- -- 'reservation-id' - The ID of the instance's reservation. A reservation ID is -- created any time you launch an instance. A reservation ID has a one-to-one -- relationship with an instance launch request, but can be associated with more -- than one instance if you launch multiple instances using the same launch -- request. For example, if you launch one instance, you'll get one reservation -- ID. If you launch ten instances using the same launch request, you'll also -- get one reservation ID. -- -- 'root-device-name' - The name of the root device for the instance (for -- example, '/dev/sda1'). -- -- 'root-device-type' - The type of root device that the instance uses ('ebs' | 'instance-store'). -- -- 'source-dest-check' - Indicates whether the instance performs -- source/destination checking. A value of 'true' means that checking is enabled, -- and 'false' means checking is disabled. The value must be 'false' for the -- instance to perform network address translation (NAT) in your VPC. -- -- 'spot-instance-request-id' - The ID of the Spot Instance request. -- -- 'state-reason-code' - The reason code for the state change. -- -- 'state-reason-message' - A message that describes the state change. -- -- 'subnet-id' - The ID of the subnet for the instance. -- -- 'tag':/key/=/value/ - The key/value combination of a tag assigned to the -- resource, where 'tag':/key/ is the tag's key. -- -- 'tag-key' - The key of a tag assigned to the resource. This filter is -- independent of the 'tag-value' filter. For example, if you use both the filter -- "tag-key=Purpose" and the filter "tag-value=X", you get any resources -- assigned both the tag key Purpose (regardless of what the tag's value is), -- and the tag value X (regardless of what the tag's key is). If you want to -- list only resources where Purpose is X, see the 'tag':/key/=/value/ filter. -- -- 'tag-value' - The value of a tag assigned to the resource. This filter is -- independent of the 'tag-key' filter. -- -- 'tenancy' - The tenancy of an instance ('dedicated' | 'default'). -- -- 'virtualization-type' - The virtualization type of the instance ('paravirtual' -- | 'hvm'). -- -- 'vpc-id' - The ID of the VPC that the instance is running in. -- -- 'network-interface.description' - The description of the network interface. -- -- 'network-interface.subnet-id' - The ID of the subnet for the network -- interface. -- -- 'network-interface.vpc-id' - The ID of the VPC for the network interface. -- -- 'network-interface.network-interface.id' - The ID of the network interface. -- -- 'network-interface.owner-id' - The ID of the owner of the network interface. -- -- 'network-interface.availability-zone' - The Availability Zone for the -- network interface. -- -- 'network-interface.requester-id' - The requester ID for the network -- interface. -- -- 'network-interface.requester-managed' - Indicates whether the network -- interface is being managed by AWS. -- -- 'network-interface.status' - The status of the network interface ('available') -- | 'in-use'). -- -- 'network-interface.mac-address' - The MAC address of the network interface. -- -- 'network-interface-private-dns-name' - The private DNS name of the network -- interface. -- -- 'network-interface.source-destination-check' - Whether the network interface -- performs source/destination checking. A value of 'true' means checking is -- enabled, and 'false' means checking is disabled. The value must be 'false' for -- the network interface to perform network address translation (NAT) in your -- VPC. -- -- 'network-interface.group-id' - The ID of a security group associated with -- the network interface. -- -- 'network-interface.group-name' - The name of a security group associated -- with the network interface. -- -- 'network-interface.attachment.attachment-id' - The ID of the interface -- attachment. -- -- 'network-interface.attachment.instance-id' - The ID of the instance to which -- the network interface is attached. -- -- 'network-interface.attachment.instance-owner-id' - The owner ID of the -- instance to which the network interface is attached. -- -- 'network-interface.addresses.private-ip-address' - The private IP address -- associated with the network interface. -- -- 'network-interface.attachment.device-index' - The device index to which the -- network interface is attached. -- -- 'network-interface.attachment.status' - The status of the attachment ('attaching' | 'attached' | 'detaching' | 'detached'). -- -- 'network-interface.attachment.attach-time' - The time that the network -- interface was attached to an instance. -- -- 'network-interface.attachment.delete-on-termination' - Specifies whether the -- attachment is deleted when an instance is terminated. -- -- 'network-interface.addresses.primary' - Specifies whether the IP address of -- the network interface is the primary private IP address. -- -- 'network-interface.addresses.association.public-ip' - The ID of the -- association of an Elastic IP address with a network interface. -- -- 'network-interface.addresses.association.ip-owner-id' - The owner ID of the -- private IP address associated with the network interface. -- -- 'association.public-ip' - The address of the Elastic IP address bound to the -- network interface. -- -- 'association.ip-owner-id' - The owner of the Elastic IP address associated -- with the network interface. -- -- 'association.allocation-id' - The allocation ID returned when you allocated -- the Elastic IP address for your network interface. -- -- 'association.association-id' - The association ID returned when the network -- interface was associated with an IP address. -- -- di1Filters :: Lens' DescribeInstances [Filter] di1Filters = lens _di1Filters (\s a -> s { _di1Filters = a }) . _List -- | One or more instance IDs. -- -- Default: Describes all your instances. di1InstanceIds :: Lens' DescribeInstances [Text] di1InstanceIds = lens _di1InstanceIds (\s a -> s { _di1InstanceIds = a }) . _List -- | The maximum number of items to return for this call. The call also returns a -- token that you can specify in a subsequent call to get the next set of -- results. If the value is greater than 1000, we return only 1000 items. di1MaxResults :: Lens' DescribeInstances (Maybe Int) di1MaxResults = lens _di1MaxResults (\s a -> s { _di1MaxResults = a }) -- | The token for the next set of items to return. (You received this token from -- a prior call.) di1NextToken :: Lens' DescribeInstances (Maybe Text) di1NextToken = lens _di1NextToken (\s a -> s { _di1NextToken = a }) data DescribeInstancesResponse = DescribeInstancesResponse { _dirNextToken :: Maybe Text , _dirReservations :: List "item" Reservation } deriving (Eq, Show) -- | 'DescribeInstancesResponse' constructor. -- -- The fields accessible through corresponding lenses are: -- -- * 'dirNextToken' @::@ 'Maybe' 'Text' -- -- * 'dirReservations' @::@ ['Reservation'] -- describeInstancesResponse :: DescribeInstancesResponse describeInstancesResponse = DescribeInstancesResponse { _dirReservations = mempty , _dirNextToken = Nothing } -- | The token to use when requesting the next set of items. If there are no -- additional items to return, the string is empty. dirNextToken :: Lens' DescribeInstancesResponse (Maybe Text) dirNextToken = lens _dirNextToken (\s a -> s { _dirNextToken = a }) -- | One or more reservations. dirReservations :: Lens' DescribeInstancesResponse [Reservation] dirReservations = lens _dirReservations (\s a -> s { _dirReservations = a }) . _List instance ToPath DescribeInstances where toPath = const "/" instance ToQuery DescribeInstances where toQuery DescribeInstances{..} = mconcat [ "dryRun" =? _di1DryRun , toQuery _di1Filters , toQuery _di1InstanceIds , "maxResults" =? _di1MaxResults , "nextToken" =? _di1NextToken ] instance ToHeaders DescribeInstances instance AWSRequest DescribeInstances where type Sv DescribeInstances = EC2 type Rs DescribeInstances = DescribeInstancesResponse request = post "DescribeInstances" response = xmlResponse instance FromXML DescribeInstancesResponse where parseXML x = DescribeInstancesResponse <$> x .@? "nextToken" <*> parseXML x instance AWSPager DescribeInstances where page rq rs | stop (rq ^. di1NextToken) = Nothing | otherwise = (\x -> rq & di1NextToken ?~ x) <$> (rs ^. dirNextToken)