|
- package service
-
- import (
- pbecs "code.gitlink.org.cn/JCCE/PCM.git/adaptor/pcm_vm/gen/idl"
- "context"
-
- "code.gitlink.org.cn/JCCE/PCM.git/common/tenanter"
- "github.com/golang/glog"
- "github.com/pkg/errors"
- )
-
- var (
- ErrEcsListNotSupported = errors.New("cloud not supported ecs list")
- ErrEcserPanic = errors.New("ecs init panic")
- )
-
- type Ecser interface {
- CreateEcs(ctx context.Context, req *pbecs.CreateEcsReq) (resp *pbecs.CreateEcsResp, err error) //创建ecs
- DeleteEcs(ctx context.Context, req *pbecs.DeleteEcsReq) (resp *pbecs.DeleteEcsResp, err error) //批量删除ecs
- UpdateEcs(ctx context.Context, req *pbecs.UpdateEcsReq) (resp *pbecs.UpdateEcsResp, err error) //修改ecs
- ListDetail(ctx context.Context, req *pbecs.ListDetailReq) (resp *pbecs.ListDetailResp, err error) //查询ecs详情
- ActionEcs(ctx context.Context, req *pbecs.ActionReq) (resp *pbecs.ActionResp, err error) //操作ecs
- ListEcsImages(ctx context.Context, req *pbecs.ListImagesReq) (resp *pbecs.ListImagesResp, err error) //查询镜像列表
- }
-
- func NewEcsClient(provider pbecs.CloudProvider, region tenanter.Region, tenant tenanter.Tenanter) (ecser Ecser, err error) {
- // 部分sdk会在内部panic
- defer func() {
- if err1 := recover(); err1 != nil {
- glog.Errorf("NewEcsClient panic %v", err1)
- err = errors.WithMessagef(ErrEcserPanic, "%v", err1)
- }
- }()
-
- switch provider {
- case pbecs.CloudProvider_ali:
- return newAliEcsClient(region, tenant)
- case pbecs.CloudProvider_tencent:
- return newTencentCvmClient(region, tenant)
- case pbecs.CloudProvider_huawei:
- return newHuaweiEcsClient(region, tenant)
- case pbecs.CloudProvider_harvester:
- return newHarvesterClient(tenant)
- }
-
- err = errors.WithMessagef(ErrEcsListNotSupported, "cloud provider %v region %v", provider, region)
- return
- }
|