github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/provider/equinix/credentials.go (about) 1 // Copyright 2020 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package equinix 5 6 import ( 7 "os" 8 9 "github.com/juju/errors" 10 11 "github.com/juju/juju/cloud" 12 "github.com/juju/juju/environs" 13 ) 14 15 type environProviderCredentials struct{} 16 17 // CredentialSchemas is part of the environs.ProviderCredentials interface. 18 func (environProviderCredentials) CredentialSchemas() map[cloud.AuthType]cloud.CredentialSchema { 19 return map[cloud.AuthType]cloud.CredentialSchema{ 20 cloud.AccessKeyAuthType: { 21 { 22 "project-id", 23 cloud.CredentialAttr{ 24 Description: "Packet project ID", 25 }, 26 }, { 27 "api-token", 28 cloud.CredentialAttr{ 29 Description: "Packet API token", 30 Hidden: true, 31 }, 32 }, 33 }, 34 } 35 } 36 37 // DetectCredentials is part of the environs.ProviderCredentials interface. 38 func (e environProviderCredentials) DetectCredentials(cloudName string) (*cloud.CloudCredential, error) { 39 type accessKeyValues struct { 40 ProjectID string 41 AuthToken string 42 } 43 creds := accessKeyValues{} 44 result := cloud.CloudCredential{ 45 AuthCredentials: make(map[string]cloud.Credential), 46 } 47 48 if val, present := os.LookupEnv("METAL_AUTH_TOKEN"); present { 49 creds.AuthToken = val 50 } else { 51 logger.Debugf("METAL_AUTH_TOKEN environment variable not set") 52 return nil, errors.NotFoundf("equinix metal auth token") 53 } 54 55 if val, present := os.LookupEnv("METAL_PROJECT_ID"); present { 56 creds.ProjectID = val 57 } else { 58 logger.Debugf("METAL_PROJECT_ID environment variable not set") 59 return nil, errors.NotFoundf("equinix metal project ID") 60 } 61 62 result.AuthCredentials["default"] = cloud.NewCredential( 63 cloud.AccessKeyAuthType, 64 map[string]string{ 65 "project-id": creds.ProjectID, 66 "api-token": creds.AuthToken, 67 }, 68 ) 69 70 return &result, nil 71 } 72 73 // FinalizeCredential is part of the environs.ProviderCredentials interface. 74 func (environProviderCredentials) FinalizeCredential(_ environs.FinalizeCredentialContext, args environs.FinalizeCredentialParams) (*cloud.Credential, error) { 75 return &args.Credential, nil 76 }