pcm-coordinator/adaptor/pcm_pod/service/poder.go

51 lines
1.6 KiB
Go

package poder
import (
pbpod "code.gitlink.org.cn/JCCE/PCM.git/adaptor/pcm_pod/gen/idl"
"code.gitlink.org.cn/JCCE/PCM.git/common/tenanter"
"context"
"github.com/golang/glog"
"github.com/pkg/errors"
)
var (
ErrPodListNotSupported = errors.New("cloud not supported pcm_pod list")
ErrPoderPanic = errors.New("pcm_pod init panic")
)
type Poder interface {
ListPodDetail(ctx context.Context, req *pbpod.ListPodDetailReq) (resp *pbpod.ListPodDetailResp, err error)
CreatePod(ctx context.Context, req *pbpod.CreatePodReq) (resp *pbpod.CreatePodResp, err error)
DeletePod(ctx context.Context, req *pbpod.DeletePodReq) (*pbpod.DeletePodResp, error)
UpdatePod(ctx context.Context, req *pbpod.UpdatePodReq) (*pbpod.UpdatePodResp, error)
GetPodRegion(ctx context.Context, req *pbpod.GetPodRegionReq) (*pbpod.GetPodRegionResp, error)
}
func NewPodClient(provider pbpod.CloudProvider, region tenanter.Region, tenant tenanter.Tenanter) (poder Poder, err error) {
// 部分sdk会在内部panic
defer func() {
if err1 := recover(); err1 != nil {
glog.Errorf("NewPodClient panic %v", err1)
err = errors.WithMessagef(ErrPoderPanic, "%v", err1)
}
}()
switch provider {
case pbpod.CloudProvider_ali:
return newAliEciClient(region, tenant)
case pbpod.CloudProvider_tencent:
return newTencentEksClient(region, tenant)
case pbpod.CloudProvider_huawei:
return newHuaweiCciClient(region, tenant)
case pbpod.CloudProvider_k8s:
return newK8SClient(tenant)
//TODO aws
//case pbtenant.CloudProvider_aws:
// return newAwsPodClient(region, tenant)
}
err = errors.WithMessagef(ErrPodListNotSupported, "cloud provider %v region %v", provider, region)
return
}