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  }