api_op_GetInstanceIdentityDocument.go (3525B)
1 package imds 2 3 import ( 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 16 const 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. 21 func (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. 44 type GetInstanceIdentityDocumentInput struct{} 45 46 // GetInstanceIdentityDocumentOutput provides the output parameters for 47 // GetInstanceIdentityDocument operation. 48 type GetInstanceIdentityDocumentOutput struct { 49 InstanceIdentityDocument 50 51 ResultMetadata middleware.Metadata 52 } 53 54 func addGetInstanceIdentityDocumentMiddleware(stack *middleware.Stack, options Options) error { 55 return addAPIRequestMiddleware(stack, 56 options, 57 buildGetInstanceIdentityDocumentPath, 58 buildGetInstanceIdentityDocumentOutput, 59 ) 60 } 61 62 func buildGetInstanceIdentityDocumentPath(params interface{}) (string, error) { 63 return getInstanceIdentityDocumentPath, nil 64 } 65 66 func buildGetInstanceIdentityDocumentOutput(resp *smithyhttp.Response) (v interface{}, err error) { 67 defer func() { 68 closeErr := resp.Body.Close() 69 if err == nil { 70 err = closeErr 71 } else if closeErr != nil { 72 err = fmt.Errorf("response body close error: %v, original error: %w", closeErr, err) 73 } 74 }() 75 76 var buff [1024]byte 77 ringBuffer := smithyio.NewRingBuffer(buff[:]) 78 body := io.TeeReader(resp.Body, ringBuffer) 79 80 output := &GetInstanceIdentityDocumentOutput{} 81 if err = json.NewDecoder(body).Decode(&output.InstanceIdentityDocument); err != nil { 82 return nil, &smithy.DeserializationError{ 83 Err: fmt.Errorf("failed to decode instance identity document, %w", err), 84 Snapshot: ringBuffer.Bytes(), 85 } 86 } 87 88 return output, nil 89 } 90 91 // InstanceIdentityDocument provides the shape for unmarshaling 92 // an instance identity document 93 type InstanceIdentityDocument struct { 94 DevpayProductCodes []string `json:"devpayProductCodes"` 95 MarketplaceProductCodes []string `json:"marketplaceProductCodes"` 96 AvailabilityZone string `json:"availabilityZone"` 97 PrivateIP string `json:"privateIp"` 98 Version string `json:"version"` 99 Region string `json:"region"` 100 InstanceID string `json:"instanceId"` 101 BillingProducts []string `json:"billingProducts"` 102 InstanceType string `json:"instanceType"` 103 AccountID string `json:"accountId"` 104 PendingTime time.Time `json:"pendingTime"` 105 ImageID string `json:"imageId"` 106 KernelID string `json:"kernelId"` 107 RamdiskID string `json:"ramdiskId"` 108 Architecture string `json:"architecture"` 109 }