contrib/config_ecs_instance_connect/agent/util/metaservertoken.go (31 lines of code) (raw):
package util
import (
"strconv"
"sync"
"time"
)
type Mtoken struct {
token string
expireTimestamp time.Time
l sync.Mutex
}
const (
tokenTimeoutSecond = 60
)
var mt Mtoken
func MetaserverToken() (string, error) {
mt.l.Lock()
defer mt.l.Unlock()
if time.Now().Before(mt.expireTimestamp) {
return mt.token, nil
}
token, err := HttpPutWithHeaders("http://100.100.100.200/latest/api/token", map[string]string{
"X-aliyun-ecs-metadata-token-ttl-seconds": strconv.Itoa(tokenTimeoutSecond + 5),
})
if err != nil {
return "", err
}
mt.expireTimestamp = time.Now().Add(time.Second * time.Duration(tokenTimeoutSecond))
mt.token = token
return mt.token, nil
}