env.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package providers
  2. import (
  3. "fmt"
  4. "os"
  5. "strconv"
  6. "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth"
  7. )
  8. const (
  9. EnvVarAccessKeyID = "ALICLOUD_ACCESS_KEY"
  10. EnvVarAccessKeySecret = "ALICLOUD_SECRET_KEY"
  11. EnvVarAccessKeyStsToken = "ALICLOUD_ACCESS_KEY_STS_TOKEN"
  12. EnvVarRoleArn = "ALICLOUD_ROLE_ARN"
  13. EnvVarRoleSessionName = "ALICLOUD_ROLE_SESSION_NAME"
  14. EnvVarRoleSessionExpiration = "ALICLOUD_ROLE_SESSION_EXPIRATION"
  15. EnvVarPrivateKey = "ALICLOUD_PRIVATE_KEY"
  16. EnvVarPublicKeyID = "ALICLOUD_PUBLIC_KEY_ID"
  17. EnvVarSessionExpiration = "ALICLOUD_SESSION_EXPIRATION"
  18. EnvVarRoleName = "ALICLOUD_ROLE_NAME"
  19. )
  20. func NewEnvCredentialProvider() Provider {
  21. return &EnvProvider{}
  22. }
  23. type EnvProvider struct{}
  24. func (p *EnvProvider) Retrieve() (auth.Credential, error) {
  25. roleSessionExpiration, err := envVarToInt(EnvVarRoleSessionExpiration)
  26. if err != nil {
  27. return nil, err
  28. }
  29. sessionExpiration, err := envVarToInt(EnvVarSessionExpiration)
  30. if err != nil {
  31. return nil, err
  32. }
  33. c := &Configuration{
  34. AccessKeyID: os.Getenv(EnvVarAccessKeyID),
  35. AccessKeySecret: os.Getenv(EnvVarAccessKeySecret),
  36. AccessKeyStsToken: os.Getenv(EnvVarAccessKeyStsToken),
  37. RoleArn: os.Getenv(EnvVarRoleArn),
  38. RoleSessionName: os.Getenv(EnvVarRoleSessionName),
  39. RoleSessionExpiration: &roleSessionExpiration,
  40. PrivateKey: os.Getenv(EnvVarPrivateKey),
  41. PublicKeyID: os.Getenv(EnvVarPublicKeyID),
  42. SessionExpiration: &sessionExpiration,
  43. RoleName: os.Getenv(EnvVarRoleName),
  44. }
  45. return NewConfigurationCredentialProvider(c).Retrieve()
  46. }
  47. func envVarToInt(envVar string) (int, error) {
  48. asInt := 0
  49. asStr := os.Getenv(envVar)
  50. if asStr != "" {
  51. if i, err := strconv.Atoi(asStr); err != nil {
  52. return 0, fmt.Errorf("error parsing %s: %s", envVar, err)
  53. } else {
  54. asInt = i
  55. }
  56. }
  57. return asInt, nil
  58. }