packer-cn/builder/jdcloud/credential_config.go

88 lines
2.2 KiB
Go

package jdcloud
import (
"fmt"
"os"
"github.com/hashicorp/packer-plugin-sdk/template/interpolate"
"github.com/jdcloud-api/jdcloud-sdk-go/core"
vm "github.com/jdcloud-api/jdcloud-sdk-go/services/vm/client"
vpc "github.com/jdcloud-api/jdcloud-sdk-go/services/vpc/client"
)
type JDCloudCredentialConfig struct {
AccessKey string `mapstructure:"access_key"`
SecretKey string `mapstructure:"secret_key"`
RegionId string `mapstructure:"region_id"`
Az string `mapstructure:"az"`
}
func (jd *JDCloudCredentialConfig) Prepare(ctx *interpolate.Context) []error {
errorArray := []error{}
if jd == nil {
return append(errorArray, fmt.Errorf("[PRE-FLIGHT] Empty JDCloudCredentialConfig detected"))
}
if err := jd.ValidateKeyPair(); err != nil {
errorArray = append(errorArray, err)
}
if err := jd.validateRegion(); err != nil {
errorArray = append(errorArray, err)
}
if err := jd.validateAz(); err != nil {
errorArray = append(errorArray, err)
}
if len(errorArray) != 0 {
return errorArray
}
credential := core.NewCredentials(jd.AccessKey, jd.SecretKey)
VmClient = vm.NewVmClient(credential)
VpcClient = vpc.NewVpcClient(credential)
Region = jd.RegionId
return nil
}
func (jd *JDCloudCredentialConfig) ValidateKeyPair() error {
if jd.AccessKey == "" {
jd.AccessKey = os.Getenv("JDCLOUD_ACCESS_KEY")
}
if jd.SecretKey == "" {
jd.SecretKey = os.Getenv("JDCLOUD_SECRET_KEY")
}
if jd.AccessKey == "" || jd.SecretKey == "" {
return fmt.Errorf("[PRE-FLIGHT] We can't find your key pairs," +
"write them here {access_key=xxx , secret_key=xxx} " +
"or export them as env-variable, {export JDCLOUD_ACCESS_KEY=xxx, export JDCLOUD_SECRET_KEY=xxx} ")
}
return nil
}
func (jd *JDCloudCredentialConfig) validateRegion() error {
regionArray := []string{"cn-north-1", "cn-south-1", "cn-east-1", "cn-east-2"}
for _, item := range regionArray {
if item == jd.RegionId {
return nil
}
}
return fmt.Errorf("[PRE-FLIGHT] Invalid RegionId:%s. "+
"Legit RegionId are: {cn-north-1, cn-south-1, cn-east-1, cn-east-2}", jd.RegionId)
}
func (jd *JDCloudCredentialConfig) validateAz() error {
if len(jd.Az) == 0 {
return fmt.Errorf("[PRE-FLIGHT] az info missing")
}
return nil
}