Source File
service.go
Belonging Package
github.com/aws/aws-sdk-go/aws/ec2metadata
package ec2metadata
import (
)
ServiceName = "ec2metadata"
disableServiceEnvVar = "AWS_EC2_METADATA_DISABLED"
ttlHeader = "x-aws-ec2-metadata-token-ttl-seconds"
tokenHeader = "x-aws-ec2-metadata-token"
fetchTokenHandlerName = "FetchTokenHandler"
unmarshalMetadataHandlerName = "unmarshalMetadataHandler"
unmarshalTokenHandlerName = "unmarshalTokenHandler"
enableTokenProviderHandlerName = "enableTokenProviderHandler"
defaultTTL = 21600 * time.Second
ttlExpirationWindow = 30 * time.Second
)
type EC2Metadata struct {
*client.Client
}
func ( client.ConfigProvider, ...*aws.Config) *EC2Metadata {
:= .ClientConfig(ServiceName, ...)
return NewClient(*.Config, .Handlers, .Endpoint, .SigningRegion)
}
.MaxRetries = aws.Int(2)
}
.Path = ""
.RawPath = ""
= .String()
}
:= &EC2Metadata{
Client: client.New(
,
metadata.ClientInfo{
ServiceName: ServiceName,
ServiceID: ServiceName,
Endpoint: ,
APIVersion: "latest",
},
,
),
}
:= newTokenProvider(, defaultTTL)
.Handlers.Complete.PushBackNamed(request.NamedHandler{
Name: enableTokenProviderHandlerName,
Fn: .enableTokenProviderHandler,
})
.Handlers.Unmarshal.PushBackNamed(unmarshalHandler)
.Handlers.UnmarshalError.PushBack(unmarshalError)
.Handlers.Validate.Clear()
.Handlers.Validate.PushBack(validateEndpointHandler)
if strings.ToLower(os.Getenv(disableServiceEnvVar)) == "true" {
.Handlers.Send.SwapNamed(request.NamedHandler{
Name: corehandlers.SendHandler.Name,
Fn: func( *request.Request) {
.HTTPResponse = &http.Response{
Header: http.Header{},
}
.Error = awserr.New(
request.CanceledErrorCode,
"EC2 IMDS access disabled via "+disableServiceEnvVar+" env var",
nil)
},
})
}
var unmarshalTokenHandler = request.NamedHandler{
Name: unmarshalTokenHandlerName,
Fn: func( *request.Request) {
defer .HTTPResponse.Body.Close()
var bytes.Buffer
if , := io.Copy(&, .HTTPResponse.Body); != nil {
.Error = awserr.NewRequestFailure(awserr.New(request.ErrCodeSerialization,
"unable to unmarshal EC2 metadata response", ), .HTTPResponse.StatusCode, .RequestID)
return
}
:= .HTTPResponse.Header.Get(ttlHeader)
, := .Data.(*tokenOutput)
if ! {
return
}
, := strconv.ParseInt(, 10, 64)
if != nil {
.Error = awserr.NewRequestFailure(awserr.New(request.ParamFormatErrCode,
"unable to parse EC2 token TTL response", ), .HTTPResponse.StatusCode, .RequestID)
return
}
:= time.Duration() * time.Second
.TTL =
},
}
var unmarshalHandler = request.NamedHandler{
Name: unmarshalMetadataHandlerName,
Fn: func( *request.Request) {
defer .HTTPResponse.Body.Close()
var bytes.Buffer
if , := io.Copy(&, .HTTPResponse.Body); != nil {
.Error = awserr.NewRequestFailure(awserr.New(request.ErrCodeSerialization,
"unable to unmarshal EC2 metadata response", ), .HTTPResponse.StatusCode, .RequestID)
return
}
if , := .Data.(*metadataOutput); {
.Content = .String()
}
},
}
func ( *request.Request) {
defer .HTTPResponse.Body.Close()
var bytes.Buffer
if , := io.Copy(&, .HTTPResponse.Body); != nil {
.Error = awserr.NewRequestFailure(
awserr.New(request.ErrCodeSerialization, "unable to unmarshal EC2 metadata error response", ),
.HTTPResponse.StatusCode, .RequestID)
return
}
.Error = awserr.NewRequestFailure(awserr.New("EC2MetadataError", "failed to make EC2Metadata request", errors.New(.String())),
.HTTPResponse.StatusCode, .RequestID)
}
func ( *request.Request) {
if .ClientInfo.Endpoint == "" {
.Error = aws.ErrMissingEndpoint
}
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |