1package imds 2 3import ( 4 "context" 5 "encoding/json" 6 "fmt" 7 "io" 8 "time" 9 10 "github.com/aws/smithy-go" 11 smithyio "github.com/aws/smithy-go/io" 12 "github.com/aws/smithy-go/middleware" 13 smithyhttp "github.com/aws/smithy-go/transport/http" 14) 15 16const getInstanceIdentityDocumentPath = getDynamicDataPath + "/instance-identity/document" 17 18// GetInstanceIdentityDocument retrieves an identity document describing an 19// instance. Error is returned if the request fails or is unable to parse 20// the response. 21func (c *Client) GetInstanceIdentityDocument( 22 ctx context.Context, params *GetInstanceIdentityDocumentInput, optFns ...func(*Options), 23) ( 24 *GetInstanceIdentityDocumentOutput, error, 25) { 26 if params == nil { 27 params = &GetInstanceIdentityDocumentInput{} 28 } 29 30 result, metadata, err := c.invokeOperation(ctx, "GetInstanceIdentityDocument", params, optFns, 31 addGetInstanceIdentityDocumentMiddleware, 32 ) 33 if err != nil { 34 return nil, err 35 } 36 37 out := result.(*GetInstanceIdentityDocumentOutput) 38 out.ResultMetadata = metadata 39 return out, nil 40} 41 42// GetInstanceIdentityDocumentInput provides the input parameters for 43// GetInstanceIdentityDocument operation. 44type GetInstanceIdentityDocumentInput struct{} 45 46// GetInstanceIdentityDocumentOutput provides the output parameters for 47// GetInstanceIdentityDocument operation. 48type GetInstanceIdentityDocumentOutput struct { 49 InstanceIdentityDocument 50 51 ResultMetadata middleware.Metadata 52} 53 54func addGetInstanceIdentityDocumentMiddleware(stack *middleware.Stack, options Options) error { 55 return addAPIRequestMiddleware(stack, 56 options, 57 buildGetInstanceIdentityDocumentPath, 58 buildGetInstanceIdentityDocumentOutput, 59 ) 60} 61 62func buildGetInstanceIdentityDocumentPath(params interface{}) (string, error) { 63 return getInstanceIdentityDocumentPath, nil 64} 65 66func buildGetInstanceIdentityDocumentOutput(resp *smithyhttp.Response) (interface{}, error) { 67 defer resp.Body.Close() 68 69 var buff [1024]byte 70 ringBuffer := smithyio.NewRingBuffer(buff[:]) 71 body := io.TeeReader(resp.Body, ringBuffer) 72 73 output := &GetInstanceIdentityDocumentOutput{} 74 if err := json.NewDecoder(body).Decode(&output.InstanceIdentityDocument); err != nil { 75 return nil, &smithy.DeserializationError{ 76 Err: fmt.Errorf("failed to decode instance identity document, %w", err), 77 Snapshot: ringBuffer.Bytes(), 78 } 79 } 80 81 return output, nil 82} 83 84// InstanceIdentityDocument provides the shape for unmarshaling 85// an instance identity document 86type InstanceIdentityDocument struct { 87 DevpayProductCodes []string `json:"devpayProductCodes"` 88 MarketplaceProductCodes []string `json:"marketplaceProductCodes"` 89 AvailabilityZone string `json:"availabilityZone"` 90 PrivateIP string `json:"privateIp"` 91 Version string `json:"version"` 92 Region string `json:"region"` 93 InstanceID string `json:"instanceId"` 94 BillingProducts []string `json:"billingProducts"` 95 InstanceType string `json:"instanceType"` 96 AccountID string `json:"accountId"` 97 PendingTime time.Time `json:"pendingTime"` 98 ImageID string `json:"imageId"` 99 KernelID string `json:"kernelId"` 100 RamdiskID string `json:"ramdiskId"` 101 Architecture string `json:"architecture"` 102} 103