You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

ecser.go 1.8 kB

3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package service
  2. import (
  3. pbecs "code.gitlink.org.cn/JCCE/PCM.git/adaptor/pcm_vm/gen/idl"
  4. "context"
  5. "code.gitlink.org.cn/JCCE/PCM.git/common/tenanter"
  6. "github.com/golang/glog"
  7. "github.com/pkg/errors"
  8. )
  9. var (
  10. ErrEcsListNotSupported = errors.New("cloud not supported ecs list")
  11. ErrEcserPanic = errors.New("ecs init panic")
  12. )
  13. type Ecser interface {
  14. CreateEcs(ctx context.Context, req *pbecs.CreateEcsReq) (resp *pbecs.CreateEcsResp, err error) //创建ecs
  15. DeleteEcs(ctx context.Context, req *pbecs.DeleteEcsReq) (resp *pbecs.DeleteEcsResp, err error) //批量删除ecs
  16. UpdateEcs(ctx context.Context, req *pbecs.UpdateEcsReq) (resp *pbecs.UpdateEcsResp, err error) //修改ecs
  17. ListDetail(ctx context.Context, req *pbecs.ListDetailReq) (resp *pbecs.ListDetailResp, err error) //查询ecs详情
  18. ActionEcs(ctx context.Context, req *pbecs.ActionReq) (resp *pbecs.ActionResp, err error) //操作ecs
  19. ListEcsImages(ctx context.Context, req *pbecs.ListImagesReq) (resp *pbecs.ListImagesResp, err error) //查询镜像列表
  20. }
  21. func NewEcsClient(provider pbecs.CloudProvider, region tenanter.Region, tenant tenanter.Tenanter) (ecser Ecser, err error) {
  22. // 部分sdk会在内部panic
  23. defer func() {
  24. if err1 := recover(); err1 != nil {
  25. glog.Errorf("NewEcsClient panic %v", err1)
  26. err = errors.WithMessagef(ErrEcserPanic, "%v", err1)
  27. }
  28. }()
  29. switch provider {
  30. case pbecs.CloudProvider_ali:
  31. return newAliEcsClient(region, tenant)
  32. case pbecs.CloudProvider_tencent:
  33. return newTencentCvmClient(region, tenant)
  34. case pbecs.CloudProvider_huawei:
  35. return newHuaweiEcsClient(region, tenant)
  36. case pbecs.CloudProvider_harvester:
  37. return newHarvesterClient(tenant)
  38. }
  39. err = errors.WithMessagef(ErrEcsListNotSupported, "cloud provider %v region %v", provider, region)
  40. return
  41. }

PCM is positioned as Software stack over Cloud, aiming to build the standards and ecology of heterogeneous cloud collaboration for JCC in a non intrusive and autonomous peer-to-peer manner.