| @@ -0,0 +1,128 @@ | |||
| package pod | |||
| import ( | |||
| "context" | |||
| "sync" | |||
| "gitlink.org.cn/JCCE/PCM/adaptor/pod_adaptor/service/poder" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "github.com/golang/glog" | |||
| "github.com/pkg/errors" | |||
| ) | |||
| //ListDetail returns the detail of pod instances | |||
| func ListDetail(ctx context.Context, req *pbpod.ListDetailReq) (*pbpod.ListDetailResp, error) { | |||
| var ( | |||
| pod poder.Poder | |||
| ) | |||
| tenanters, err := tenanter.GetTenanters(req.Provider) | |||
| if err != nil { | |||
| return nil, errors.WithMessage(err, "getTenanters error") | |||
| } | |||
| region, err := tenanter.NewRegion(req.Provider, req.RegionId) | |||
| if err != nil { | |||
| return nil, errors.WithMessagef(err, "provider %v regionId %v", req.Provider, req.RegionId) | |||
| } | |||
| for _, tenanter := range tenanters { | |||
| if req.AccountName == "" || tenanter.AccountName() == req.AccountName { | |||
| if pod, err = poder.NewPodClient(req.Provider, region, tenanter); err != nil { | |||
| return nil, errors.WithMessage(err, "NewPodClient error") | |||
| } | |||
| break | |||
| } | |||
| } | |||
| return pod.ListDetail(ctx, req) | |||
| } | |||
| //List returns the list of pod instances | |||
| func List(ctx context.Context, req *pbpod.ListReq) (*pbpod.ListResp, error) { | |||
| var ( | |||
| wg sync.WaitGroup | |||
| mutex sync.Mutex | |||
| podes []*pbpod.PodInstance | |||
| ) | |||
| tenanters, err := tenanter.GetTenanters(req.Provider) | |||
| if err != nil { | |||
| return nil, errors.WithMessage(err, "getTenanters error") | |||
| } | |||
| regions := tenanter.GetAllRegionIds(req.Provider) | |||
| wg.Add(len(tenanters) * len(regions)) | |||
| for _, t := range tenanters { | |||
| for _, region := range regions { | |||
| go func(tenant tenanter.Tenanter, region tenanter.Region) { | |||
| defer wg.Done() | |||
| pod, err := poder.NewPodClient(req.Provider, region, tenant) | |||
| if err != nil { | |||
| glog.Errorf("New Pod Client error %v", err) | |||
| return | |||
| } | |||
| request := &pbpod.ListDetailReq{ | |||
| Provider: req.Provider, | |||
| AccountName: tenant.AccountName(), | |||
| RegionId: region.GetId(), | |||
| PageNumber: 1, | |||
| PageSize: 20, | |||
| NextToken: "", | |||
| } | |||
| for { | |||
| resp, err := pod.ListDetail(ctx, request) | |||
| if err != nil { | |||
| glog.Errorf("ListDetail error %v", err) | |||
| return | |||
| } | |||
| mutex.Lock() | |||
| podes = append(podes, resp.Pods...) | |||
| mutex.Unlock() | |||
| if resp.Finished { | |||
| break | |||
| } | |||
| request.PageNumber, request.PageSize, request.NextToken = resp.PageNumber, resp.PageSize, resp.NextToken | |||
| } | |||
| }(t, region) | |||
| } | |||
| } | |||
| wg.Wait() | |||
| return &pbpod.ListResp{Pods: podes}, nil | |||
| } | |||
| // ListAll returns all pod instances | |||
| func ListAll(ctx context.Context) (*pbpod.ListResp, error) { | |||
| var ( | |||
| wg sync.WaitGroup | |||
| mutex sync.Mutex | |||
| podes []*pbpod.PodInstance | |||
| ) | |||
| wg.Add(len(pbtenant.CloudProvider_name)) | |||
| for k := range pbtenant.CloudProvider_name { | |||
| go func(provider int32) { | |||
| defer wg.Done() | |||
| resp, err := List(ctx, &pbpod.ListReq{Provider: pbtenant.CloudProvider(provider)}) | |||
| if err != nil { | |||
| glog.Errorf("List error %v", err) | |||
| return | |||
| } | |||
| mutex.Lock() | |||
| podes = append(podes, resp.Pods...) | |||
| mutex.Unlock() | |||
| }(k) | |||
| } | |||
| wg.Wait() | |||
| return &pbpod.ListResp{Pods: podes}, nil | |||
| } | |||
| @@ -0,0 +1,83 @@ | |||
| package pod | |||
| import ( | |||
| "context" | |||
| "testing" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| ) | |||
| func TestListDetail(t *testing.T) { | |||
| type args struct { | |||
| req *pbpod.ListDetailReq | |||
| } | |||
| tests := []struct { | |||
| name string | |||
| args args | |||
| wantErr bool | |||
| }{ | |||
| {name: "ali", args: args{req: &pbpod.ListDetailReq{Provider: pbtenant.CloudProvider_ali, RegionId: int32(pbtenant.AliRegionId_ali_cn_hangzhou), PageNumber: 1, PageSize: 10}}, wantErr: false}, | |||
| {name: "tencent", args: args{req: &pbpod.ListDetailReq{Provider: pbtenant.CloudProvider_tencent, RegionId: int32(pbtenant.TencentRegionId_tc_ap_beijing), PageNumber: 1, PageSize: 10}}, wantErr: false}, | |||
| {name: "aws", args: args{req: &pbpod.ListDetailReq{Provider: pbtenant.CloudProvider_aws, RegionId: int32(pbtenant.AwsRegionId_aws_us_east_2), PageNumber: 1, PageSize: 10}}, wantErr: false}, | |||
| } | |||
| for _, tt := range tests { | |||
| t.Run(tt.name, func(t *testing.T) { | |||
| got, err := ListDetail(context.Background(), tt.args.req) | |||
| if (err != nil) != tt.wantErr { | |||
| t.Errorf("ListDetail() error = %+v, wantErr %v", err, tt.wantErr) | |||
| return | |||
| } | |||
| t.Log(got) | |||
| }) | |||
| } | |||
| } | |||
| func TestList(t *testing.T) { | |||
| type args struct { | |||
| req *pbpod.ListReq | |||
| } | |||
| tests := []struct { | |||
| name string | |||
| args args | |||
| wantErr bool | |||
| }{ | |||
| {name: "ali", args: args{req: &pbpod.ListReq{Provider: pbtenant.CloudProvider_ali}}, wantErr: false}, | |||
| {name: "tencent", args: args{req: &pbpod.ListReq{Provider: pbtenant.CloudProvider_tencent}}, wantErr: false}, | |||
| {name: "huawei", args: args{req: &pbpod.ListReq{Provider: pbtenant.CloudProvider_huawei}}, wantErr: false}, | |||
| {name: "aws", args: args{req: &pbpod.ListReq{Provider: pbtenant.CloudProvider_aws}}, wantErr: false}, | |||
| } | |||
| for _, tt := range tests { | |||
| t.Run(tt.name, func(t *testing.T) { | |||
| got, err := List(context.Background(), tt.args.req) | |||
| if (err != nil) != tt.wantErr { | |||
| t.Errorf("List() error = %+v, wantErr %v", err, tt.wantErr) | |||
| return | |||
| } | |||
| t.Log(got) | |||
| }) | |||
| } | |||
| } | |||
| func TestListAll(t *testing.T) { | |||
| type args struct { | |||
| req *pbpod.ListReq | |||
| } | |||
| tests := []struct { | |||
| name string | |||
| args args | |||
| wantErr bool | |||
| }{ | |||
| {name: "all", args: args{req: &pbpod.ListReq{}}, wantErr: false}, | |||
| } | |||
| for _, tt := range tests { | |||
| t.Run(tt.name, func(t *testing.T) { | |||
| got, err := ListAll(context.Background()) | |||
| if (err != nil) != tt.wantErr { | |||
| t.Errorf("ListAll() error = %+v, wantErr %v", err, tt.wantErr) | |||
| return | |||
| } | |||
| t.Log(got) | |||
| }) | |||
| } | |||
| } | |||
| @@ -0,0 +1,33 @@ | |||
| package pod | |||
| import ( | |||
| "os" | |||
| "testing" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| ) | |||
| var ( | |||
| aliTenant, tcTenant, hwTenant, awsTenant []tenanter.Tenanter | |||
| ) | |||
| func TestMain(m *testing.M) { | |||
| err := tenanter.LoadCloudConfigs("../../../../configs/config.yaml") | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| if aliTenant, err = tenanter.GetTenanters(pbtenant.CloudProvider_ali); err != nil { | |||
| panic("get aliTenant failed") | |||
| } | |||
| if tcTenant, err = tenanter.GetTenanters(pbtenant.CloudProvider_tencent); err != nil { | |||
| panic("get tcTenant failed") | |||
| } | |||
| if hwTenant, err = tenanter.GetTenanters(pbtenant.CloudProvider_huawei); err != nil { | |||
| panic("get hwTenant failed") | |||
| } | |||
| //if awsTenant, err = tenanter.GetTenanters(pbtenant.CloudProvider_aws); err != nil { | |||
| // panic("get awsTenant failed") | |||
| //} | |||
| os.Exit(m.Run()) | |||
| } | |||
| @@ -0,0 +1,95 @@ | |||
| package poder | |||
| import ( | |||
| "context" | |||
| "sync" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests" | |||
| alipod "github.com/aliyun/alibaba-cloud-sdk-go/services/eci" | |||
| "github.com/pkg/errors" | |||
| ) | |||
| var aliClientMutex sync.Mutex | |||
| type AliPod struct { | |||
| cli *alipod.Client | |||
| region tenanter.Region | |||
| tenanter tenanter.Tenanter | |||
| } | |||
| func newAliPodClient(region tenanter.Region, tenant tenanter.Tenanter) (Poder, error) { | |||
| var ( | |||
| client *alipod.Client | |||
| err error | |||
| ) | |||
| switch t := tenant.(type) { | |||
| case *tenanter.AccessKeyTenant: | |||
| // 阿里云的sdk有一个 map 的并发问题,go test 加上-race 能检测出来,所以这里加一个锁 | |||
| aliClientMutex.Lock() | |||
| client, err = alipod.NewClientWithAccessKey(region.GetName(), t.GetId(), t.GetSecret()) | |||
| aliClientMutex.Unlock() | |||
| default: | |||
| } | |||
| if err != nil { | |||
| return nil, errors.Wrap(err, "init ali pod client error") | |||
| } | |||
| return &AliPod{ | |||
| cli: client, | |||
| region: region, | |||
| tenanter: tenant, | |||
| }, nil | |||
| } | |||
| func (pod *AliPod) ListDetail(ctx context.Context, req *pbpod.ListDetailReq) (*pbpod.ListDetailResp, error) { | |||
| request := alipod.CreateDescribeContainerGroupsRequest() | |||
| request.Limit = requests.NewInteger(int(req.PageSize)) | |||
| request.RegionId = pod.region.GetName() | |||
| request.NextToken = req.NextToken | |||
| resp, err := pod.cli.DescribeContainerGroups(request) | |||
| if err != nil { | |||
| return nil, errors.Wrap(err, "Aliyun ListDetail error") | |||
| } | |||
| var podes = make([]*pbpod.PodInstance, len(resp.ContainerGroups)) | |||
| for k, v := range resp.ContainerGroups { | |||
| podes[k] = &pbpod.PodInstance{ | |||
| Provider: pbtenant.CloudProvider_ali, | |||
| AccountName: pod.tenanter.AccountName(), | |||
| InstanceId: v.ContainerGroupId, | |||
| InstanceName: v.ContainerGroupName, | |||
| RegionName: pod.region.GetName(), | |||
| PublicIps: v.InternetIp, | |||
| InstanceType: v.InstanceType, | |||
| Cpu: int32(v.Cpu), | |||
| Memory: int32(v.Memory), | |||
| //Description: v.Description, | |||
| Status: v.Status, | |||
| CreationTime: v.CreationTime, | |||
| ExpireTime: v.ExpiredTime, | |||
| //InnerIps: v.IntranetIp, | |||
| VpcId: v.VpcId, | |||
| //SecurityGroupId: v.SecurityGroupId | |||
| } | |||
| } | |||
| isFinished := false | |||
| if len(podes) < int(req.PageSize) { | |||
| isFinished = true | |||
| } | |||
| return &pbpod.ListDetailResp{ | |||
| Pods: podes, | |||
| Finished: isFinished, | |||
| PageNumber: req.PageNumber + 1, | |||
| PageSize: req.PageSize, | |||
| NextToken: resp.NextToken, | |||
| RequestId: resp.RequestId, | |||
| }, nil | |||
| } | |||
| @@ -0,0 +1,33 @@ | |||
| package poder | |||
| import ( | |||
| "os" | |||
| "testing" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| ) | |||
| var ( | |||
| aliTenant, tcTenant, hwTenant, awsTenant []tenanter.Tenanter | |||
| ) | |||
| func TestMain(m *testing.M) { | |||
| err := tenanter.LoadCloudConfigs("../../../config.yaml") | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| if aliTenant, err = tenanter.GetTenanters(pbtenant.CloudProvider_ali); err != nil { | |||
| panic("get aliTenant failed") | |||
| } | |||
| if tcTenant, err = tenanter.GetTenanters(pbtenant.CloudProvider_tencent); err != nil { | |||
| panic("get tcTenant failed") | |||
| } | |||
| if hwTenant, err = tenanter.GetTenanters(pbtenant.CloudProvider_huawei); err != nil { | |||
| panic("get hwTenant failed") | |||
| } | |||
| if awsTenant, err = tenanter.GetTenanters(pbtenant.CloudProvider_aws); err != nil { | |||
| panic("get awsTenant failed") | |||
| } | |||
| os.Exit(m.Run()) | |||
| } | |||
| @@ -0,0 +1,46 @@ | |||
| package poder | |||
| import ( | |||
| "context" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "github.com/golang/glog" | |||
| "github.com/pkg/errors" | |||
| ) | |||
| var ( | |||
| ErrPodListNotSupported = errors.New("cloud not supported pod list") | |||
| ErrPoderPanic = errors.New("pod init panic") | |||
| ) | |||
| type Poder interface { | |||
| ListDetail(ctx context.Context, req *pbpod.ListDetailReq) (resp *pbpod.ListDetailResp, err error) | |||
| } | |||
| func NewPodClient(provider pbtenant.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 pbtenant.CloudProvider_ali: | |||
| return newAliPodClient(region, tenant) | |||
| //case pbtenant.CloudProvider_tencent: | |||
| // return newTencentPodClient(region, tenant) | |||
| //case pbtenant.CloudProvider_huawei: | |||
| // return newHuaweiPodClient(region, tenant) | |||
| //TODO aws | |||
| //case pbtenant.CloudProvider_aws: | |||
| // return newAwsPodClient(region, tenant) | |||
| } | |||
| err = errors.WithMessagef(ErrPodListNotSupported, "cloud provider %v region %v", provider, region) | |||
| return | |||
| } | |||
| @@ -0,0 +1,70 @@ | |||
| package poder | |||
| import ( | |||
| "context" | |||
| "testing" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| ) | |||
| func TestEcser_ListDetail(t *testing.T) { | |||
| region, _ := tenanter.NewRegion(pbtenant.CloudProvider_ali, int32(pbtenant.AliRegionId_ali_cn_hangzhou)) | |||
| ali, _ := NewEcsClient(pbtenant.CloudProvider_ali, region, aliTenant[0]) | |||
| aliFailed, _ := NewEcsClient(pbtenant.CloudProvider_ali, region, tenanter.NewTenantWithAccessKey("empty", "", "")) | |||
| region, _ = tenanter.NewRegion(pbtenant.CloudProvider_tencent, int32(pbtenant.TencentRegionId_tc_ap_beijing)) | |||
| tc, _ := NewEcsClient(pbtenant.CloudProvider_tencent, region, tcTenant[0]) | |||
| tcFailed, _ := NewEcsClient(pbtenant.CloudProvider_tencent, region, tenanter.NewTenantWithAccessKey("empty", "", "")) | |||
| region, _ = tenanter.NewRegion(pbtenant.CloudProvider_huawei, int32(pbtenant.HuaweiRegionId_hw_cn_southwest_2)) | |||
| hw, _ := NewEcsClient(pbtenant.CloudProvider_huawei, region, hwTenant[0]) | |||
| // hwFailed, _ := newHuaweiEcsClient(int32(pbtenant.HuaweiRegionId_hw_cn_north_1), tenanter.NewTenantWithAccessKey("empty", "", "", "")) | |||
| region, _ = tenanter.NewRegion(pbtenant.CloudProvider_aws, int32(pbtenant.AwsRegionId_aws_us_east_2)) | |||
| aws, _ := NewEcsClient(pbtenant.CloudProvider_aws, region, awsTenant[0]) | |||
| // google, _ := NewGoogleEcsClient(tenanter.NewTenantWithAccessKey("", "")) | |||
| type args struct { | |||
| req *pbecs.ListDetailReq | |||
| } | |||
| tests := []struct { | |||
| name string | |||
| fields Ecser | |||
| args args | |||
| wantErr bool | |||
| }{ | |||
| {name: "ali wrong cli", fields: aliFailed, args: args{&pbecs.ListDetailReq{PageNumber: 1, PageSize: 1}}, wantErr: true}, | |||
| {name: "ali wrong page number", fields: ali, args: args{&pbecs.ListDetailReq{PageNumber: 0, PageSize: 1}}, wantErr: true}, | |||
| {name: "ali wrong page size", fields: ali, args: args{&pbecs.ListDetailReq{PageNumber: 1, PageSize: 0}}, wantErr: true}, | |||
| {name: "ali right cli", fields: ali, args: args{&pbecs.ListDetailReq{PageNumber: 1, PageSize: 10}}, wantErr: false}, | |||
| {name: "tc wrong cli", fields: tcFailed, args: args{&pbecs.ListDetailReq{PageNumber: 1, PageSize: 1}}, wantErr: true}, | |||
| {name: "tc wrong page number", fields: tc, args: args{&pbecs.ListDetailReq{PageNumber: 0, PageSize: 1}}, wantErr: true}, | |||
| {name: "tc wrong page size", fields: tc, args: args{&pbecs.ListDetailReq{PageNumber: 1, PageSize: 0}}, wantErr: true}, | |||
| {name: "tc right cli", fields: tc, args: args{&pbecs.ListDetailReq{PageNumber: 1, PageSize: 10}}, wantErr: false}, | |||
| // {name: "hw wrong cli", fields: hwFailed, args: args{pageNumber: 1, pageSize: 1}, wantErr: true}, | |||
| {name: "hw right cli", fields: hw, args: args{&pbecs.ListDetailReq{PageNumber: 1, PageSize: 10}}, wantErr: false}, | |||
| {name: "aws right cli", fields: aws, args: args{&pbecs.ListDetailReq{PageNumber: 1, PageSize: 10}}, wantErr: false}, | |||
| // {name: "right cli", fields: google, args: args{pageNumber: 1, pageSize: 10}, wantErr: false}, | |||
| } | |||
| for _, tt := range tests { | |||
| t.Run(tt.name, func(t *testing.T) { | |||
| resp, err := tt.fields.ListDetail(context.Background(), tt.args.req) | |||
| if (err != nil) != tt.wantErr { | |||
| t.Errorf("ListDetail() error = %+v, wantErr %v", err, tt.wantErr) | |||
| return | |||
| } | |||
| t.Logf("%+v", err) | |||
| if err == nil { | |||
| t.Log(resp) | |||
| } | |||
| }) | |||
| } | |||
| } | |||
| @@ -2,16 +2,18 @@ package ecs | |||
| import ( | |||
| "context" | |||
| "sync" | |||
| "gitlink.org.cn/JCCE/PCM/adaptor/vm_adaptor/service/ecser" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "sync" | |||
| "github.com/golang/glog" | |||
| "github.com/pkg/errors" | |||
| ) | |||
| //ListDetail returns the detail of ecs instances | |||
| func ListDetail(ctx context.Context, req *pbecs.ListDetailReq) (*pbecs.ListDetailResp, error) { | |||
| var ( | |||
| ecs ecser.Ecser | |||
| @@ -39,6 +41,7 @@ func ListDetail(ctx context.Context, req *pbecs.ListDetailReq) (*pbecs.ListDetai | |||
| return ecs.ListDetail(ctx, req) | |||
| } | |||
| //List returns the list of ecs instances | |||
| func List(ctx context.Context, req *pbecs.ListReq) (*pbecs.ListResp, error) { | |||
| var ( | |||
| wg sync.WaitGroup | |||
| @@ -87,7 +90,6 @@ func List(ctx context.Context, req *pbecs.ListReq) (*pbecs.ListResp, error) { | |||
| request.PageNumber, request.PageSize, request.NextToken = resp.PageNumber, resp.PageSize, resp.NextToken | |||
| } | |||
| }(t, region) | |||
| } | |||
| } | |||
| wg.Wait() | |||
| @@ -95,6 +97,7 @@ func List(ctx context.Context, req *pbecs.ListReq) (*pbecs.ListResp, error) { | |||
| return &pbecs.ListResp{Ecses: ecses}, nil | |||
| } | |||
| // ListAll returns all ecs instances | |||
| func ListAll(ctx context.Context) (*pbecs.ListResp, error) { | |||
| var ( | |||
| wg sync.WaitGroup | |||
| @@ -2,6 +2,9 @@ package server | |||
| import ( | |||
| "context" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/demo" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| ) | |||
| @@ -10,6 +13,7 @@ type Server struct { | |||
| // 使用unsafe可以强制让编译器检查是否实现了相关方法 | |||
| demo.UnsafeDemoServiceServer | |||
| pbecs.UnsafeEcsServiceServer | |||
| pbpod.UnimplementedPodServiceServer | |||
| } | |||
| func (s *Server) Echo(ctx context.Context, req *demo.StringMessage) (*demo.StringMessage, error) { | |||
| @@ -2,6 +2,7 @@ package server | |||
| import ( | |||
| "context" | |||
| "gitlink.org.cn/JCCE/PCM/adaptor/vm_adaptor/server/ecs" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| @@ -10,6 +11,7 @@ import ( | |||
| "google.golang.org/grpc/status" | |||
| ) | |||
| // ListEcsDetail return ecs detail | |||
| func (s *Server) ListEcsDetail(ctx context.Context, req *pbecs.ListDetailReq) (*pbecs.ListDetailResp, error) { | |||
| resp, err := ecs.ListDetail(ctx, req) | |||
| if err != nil { | |||
| @@ -19,6 +21,7 @@ func (s *Server) ListEcsDetail(ctx context.Context, req *pbecs.ListDetailReq) (* | |||
| return resp, nil | |||
| } | |||
| //ListEcs return ecs list | |||
| func (s *Server) ListEcs(ctx context.Context, req *pbecs.ListReq) (*pbecs.ListResp, error) { | |||
| resp, err := ecs.List(ctx, req) | |||
| if err != nil { | |||
| @@ -28,6 +31,7 @@ func (s *Server) ListEcs(ctx context.Context, req *pbecs.ListReq) (*pbecs.ListRe | |||
| return resp, nil | |||
| } | |||
| // ListEcsAll return all ecs | |||
| func (s *Server) ListEcsAll(ctx context.Context, req *pbecs.ListAllReq) (*pbecs.ListResp, error) { | |||
| resp, err := ecs.ListAll(ctx) | |||
| if err != nil { | |||
| @@ -0,0 +1,32 @@ | |||
| package server | |||
| import ( | |||
| "context" | |||
| "gitlink.org.cn/JCCE/PCM/adaptor/pod_adaptor/server/pod" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "github.com/golang/glog" | |||
| "google.golang.org/grpc/codes" | |||
| "google.golang.org/grpc/status" | |||
| ) | |||
| // ListPodDetail return pod detail | |||
| func (s *Server) ListPodDetail(ctx context.Context, req *pbpod.ListDetailReq) (*pbpod.ListDetailResp, error) { | |||
| resp, err := pod.ListDetail(ctx, req) | |||
| if err != nil { | |||
| glog.Errorf("ListPodDetail error %+v", err) | |||
| return nil, status.Errorf(codes.Internal, err.Error()) | |||
| } | |||
| return resp, nil | |||
| } | |||
| //ListPod return pod list | |||
| func (s *Server) ListPod(ctx context.Context, req *pbpod.ListReq) (*pbpod.ListResp, error) { | |||
| resp, err := pod.List(ctx, req) | |||
| if err != nil { | |||
| glog.Errorf("ListPod error %+v", err) | |||
| return nil, status.Errorf(codes.Internal, err.Error()) | |||
| } | |||
| return resp, nil | |||
| } | |||
| @@ -28,11 +28,13 @@ require ( | |||
| github.com/golang/protobuf v1.5.2 // indirect | |||
| github.com/google/gofuzz v1.0.0 // indirect | |||
| github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d // indirect | |||
| github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 // indirect | |||
| github.com/imdario/mergo v0.3.5 // indirect | |||
| github.com/jmespath/go-jmespath v0.4.0 // indirect | |||
| github.com/json-iterator/go v1.1.10 // indirect | |||
| github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect | |||
| github.com/modern-go/reflect2 v1.0.1 // indirect | |||
| github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect | |||
| github.com/smartystreets/goconvey v1.7.2 // indirect | |||
| github.com/spf13/pflag v1.0.1 // indirect | |||
| golang.org/x/crypto v0.0.0-20210920023735-84f357641f63 // indirect | |||
| @@ -43,6 +45,7 @@ require ( | |||
| golang.org/x/text v0.3.7 // indirect | |||
| golang.org/x/time v0.0.0-20191024005414-555d28b269f0 // indirect | |||
| google.golang.org/appengine v1.6.6 // indirect | |||
| gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect | |||
| gopkg.in/inf.v0 v0.9.0 // indirect | |||
| gopkg.in/ini.v1 v1.66.2 // indirect | |||
| gopkg.in/yaml.v2 v2.4.0 // indirect | |||
| @@ -35,7 +35,7 @@ message EcsInstance { | |||
| string expire_time = 13; | |||
| // 内网ip | |||
| repeated string inner_ips = 14; | |||
| // vcp id | |||
| // vpc id | |||
| string vpc_id = 15; | |||
| // 资源组id | |||
| string resource_group_id = 16; | |||
| @@ -0,0 +1,163 @@ | |||
| syntax = "proto3"; | |||
| package pbpod; | |||
| option go_package = "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod"; | |||
| import "idl/pbtenant/tenant.proto"; | |||
| import "google/api/annotations.proto"; | |||
| message PodInstance { | |||
| // 云类型 | |||
| pbtenant.CloudProvider provider = 1; | |||
| // 账号名称 | |||
| string account_name = 2; | |||
| // 实例id | |||
| string instance_id = 3; | |||
| // 实例名称 | |||
| string instance_name = 4; | |||
| // 地域,数据中心 | |||
| string region_name = 5; | |||
| // 公网ip | |||
| string public_ips = 6; | |||
| // 实例类型 | |||
| string instance_type = 7; | |||
| // vcpu数 | |||
| int32 cpu = 8; | |||
| // 内存MB | |||
| int32 memory = 9; | |||
| // 实例描述 | |||
| string description = 10; | |||
| // 状态 | |||
| string status = 11; | |||
| // 创建时间,ISO8601 | |||
| string creation_time = 12; | |||
| // 过期时间 | |||
| string expire_time = 13; | |||
| // 内网ip | |||
| repeated string inner_ips = 14; | |||
| // vpc id | |||
| string vpc_id = 15; | |||
| // 安全组id | |||
| string security_group_id = 16; | |||
| // 子网Id | |||
| string SubnetId = 17; | |||
| // 容器实例 | |||
| Container Container = 18; | |||
| } | |||
| message Container { | |||
| // 容器镜像 | |||
| string image = 1; | |||
| // 容器名称 | |||
| string name = 2; | |||
| // vcpu数 | |||
| int32 cpu = 3; | |||
| // 内存MB | |||
| int32 memory = 4; | |||
| // 重启次数 | |||
| int32 restart_count = 5; | |||
| } | |||
| message ListDetailReq { | |||
| // 云名称 | |||
| pbtenant.CloudProvider provider = 1; | |||
| // 账户名称,根据config.yaml中的配置,默认为第一个配置的账户 | |||
| string account_name = 2; | |||
| // 区域Id,参考 tenant.proto 中的各个云的区域 | |||
| int32 region_id = 3; | |||
| // 分页相关参数,页码 | |||
| int32 page_number = 4; | |||
| // 分页相关参数,每页数量 | |||
| int32 page_size = 5; | |||
| // 分页相关参数,下一页的token | |||
| string next_token = 6; | |||
| } | |||
| message ListDetailResp { | |||
| // pod 容器组集合 | |||
| repeated PodInstance pods = 1; | |||
| // 查询是否完成,如果为否-false,则可以将下面三个分页参数填入到请求中,继续查询 | |||
| bool finished = 2; | |||
| // 分页相关参数,页码 | |||
| int32 page_number = 3; | |||
| // 分页相关参数,每页数量 | |||
| int32 page_size = 4; | |||
| // 分页相关参数,下一页的token | |||
| string next_token = 5; | |||
| // 请求id,出现问题后提供给云厂商,排查问题 | |||
| string request_id = 6; | |||
| } | |||
| message ListReq { | |||
| // 云名称 | |||
| pbtenant.CloudProvider provider = 1; | |||
| } | |||
| message ListResp { | |||
| // Pod 容器组集合 | |||
| repeated PodInstance pods = 1; | |||
| } | |||
| message CreateReq { | |||
| // 云名称 | |||
| pbtenant.CloudProvider provider = 1; | |||
| // 账户名称,根据config.yaml中的配置,默认为第一个配置的账户 | |||
| string account_name = 2; | |||
| // 区域Id,参考 tenant.proto 中的各个云的区域 | |||
| int32 region_id = 3; | |||
| // 镜像地址 | |||
| string container_image = 4; | |||
| // 容器名称 | |||
| string container_name = 5; | |||
| // 容器实例名称 | |||
| string container_group_name = 6; | |||
| // vcpu数 | |||
| int32 cpu = 7; | |||
| // 内存MB | |||
| int32 memory = 8; | |||
| // namespace (华为云cci必需) | |||
| string namespace = 9; | |||
| // 安全组id(腾讯云eks必需) | |||
| repeated string security_group_id = 10; | |||
| //subnet_id 子网id (腾讯云eks必需) | |||
| repeated string subnet_id = 11; | |||
| // vpc id (腾讯云eks必需) | |||
| string vpc_id = 12; | |||
| } | |||
| message CreateRep { | |||
| repeated string id = 1; | |||
| string request_id = 2; | |||
| } | |||
| // 容器组类产品接口 | |||
| // 阿里云 - ECI | |||
| // 腾讯云 - EKS | |||
| // 华为云 - CCI | |||
| service PodService { | |||
| // 创建pod - 支持云类型、区域 | |||
| rpc CreatePod(CreateReq) returns (CreateRep) { | |||
| option (google.api.http) = { | |||
| post : "/apis/pod/create" | |||
| body : "*" | |||
| }; | |||
| } | |||
| // 查询Pod明细 - 支持云类型、区域、账户、分页等过滤条件 | |||
| rpc ListPodDetail(ListDetailReq) returns (ListDetailResp) { | |||
| option (google.api.http) = { | |||
| post : "/apis/pod/detail" | |||
| body : "*" | |||
| }; | |||
| } | |||
| // 查询pod全量 - 根据云类型 | |||
| rpc ListPod(ListReq) returns (ListResp) { | |||
| option (google.api.http) = { | |||
| post : "/apis/pod" | |||
| body : "*" | |||
| }; | |||
| } | |||
| } | |||
| @@ -30,6 +30,8 @@ enum CloudProduct { | |||
| product_domain = 3; | |||
| // 4 - OSS类产品:阿里云OSS | |||
| product_oss = 4; | |||
| // 5 - POD类产品:阿里云ECI,华为云CCI,腾讯云EKS | |||
| product_pod = 5; | |||
| } | |||
| // 云配置信息 | |||
| @@ -148,7 +150,7 @@ service TenantService { | |||
| description : "所有云租户的认证服务" | |||
| external_docs : { | |||
| url : "https://gitlink.org.cn/JCCE/PCM" | |||
| description: "Find out more about CloudFitter" | |||
| description: "Find out more about PCM" | |||
| } | |||
| }; | |||
| @@ -55,7 +55,7 @@ type EcsInstance struct { | |||
| ExpireTime string `protobuf:"bytes,13,opt,name=expire_time,json=expireTime,proto3" json:"expire_time,omitempty"` | |||
| // 内网ip | |||
| InnerIps []string `protobuf:"bytes,14,rep,name=inner_ips,json=innerIps,proto3" json:"inner_ips,omitempty"` | |||
| // vcp id | |||
| // vpc id | |||
| VpcId string `protobuf:"bytes,15,opt,name=vpc_id,json=vpcId,proto3" json:"vpc_id,omitempty"` | |||
| // 资源组id | |||
| ResourceGroupId string `protobuf:"bytes,16,opt,name=resource_group_id,json=resourceGroupId,proto3" json:"resource_group_id,omitempty"` | |||
| @@ -0,0 +1,329 @@ | |||
| // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. | |||
| // source: idl/pbpod/pod.proto | |||
| /* | |||
| Package pbpod is a reverse proxy. | |||
| It translates gRPC into RESTful JSON APIs. | |||
| */ | |||
| package pbpod | |||
| import ( | |||
| "context" | |||
| "io" | |||
| "net/http" | |||
| "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" | |||
| "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" | |||
| "google.golang.org/grpc" | |||
| "google.golang.org/grpc/codes" | |||
| "google.golang.org/grpc/grpclog" | |||
| "google.golang.org/grpc/metadata" | |||
| "google.golang.org/grpc/status" | |||
| "google.golang.org/protobuf/proto" | |||
| ) | |||
| // Suppress "imported and not used" errors | |||
| var _ codes.Code | |||
| var _ io.Reader | |||
| var _ status.Status | |||
| var _ = runtime.String | |||
| var _ = utilities.NewDoubleArray | |||
| var _ = metadata.Join | |||
| func request_PodService_CreatePod_0(ctx context.Context, marshaler runtime.Marshaler, client PodServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | |||
| var protoReq CreateReq | |||
| var metadata runtime.ServerMetadata | |||
| newReader, berr := utilities.IOReaderFactory(req.Body) | |||
| if berr != nil { | |||
| return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) | |||
| } | |||
| if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { | |||
| return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | |||
| } | |||
| msg, err := client.CreatePod(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) | |||
| return msg, metadata, err | |||
| } | |||
| func local_request_PodService_CreatePod_0(ctx context.Context, marshaler runtime.Marshaler, server PodServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | |||
| var protoReq CreateReq | |||
| var metadata runtime.ServerMetadata | |||
| newReader, berr := utilities.IOReaderFactory(req.Body) | |||
| if berr != nil { | |||
| return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) | |||
| } | |||
| if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { | |||
| return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | |||
| } | |||
| msg, err := server.CreatePod(ctx, &protoReq) | |||
| return msg, metadata, err | |||
| } | |||
| func request_PodService_ListPodDetail_0(ctx context.Context, marshaler runtime.Marshaler, client PodServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | |||
| var protoReq ListDetailReq | |||
| var metadata runtime.ServerMetadata | |||
| newReader, berr := utilities.IOReaderFactory(req.Body) | |||
| if berr != nil { | |||
| return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) | |||
| } | |||
| if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { | |||
| return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | |||
| } | |||
| msg, err := client.ListPodDetail(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) | |||
| return msg, metadata, err | |||
| } | |||
| func local_request_PodService_ListPodDetail_0(ctx context.Context, marshaler runtime.Marshaler, server PodServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | |||
| var protoReq ListDetailReq | |||
| var metadata runtime.ServerMetadata | |||
| newReader, berr := utilities.IOReaderFactory(req.Body) | |||
| if berr != nil { | |||
| return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) | |||
| } | |||
| if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { | |||
| return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | |||
| } | |||
| msg, err := server.ListPodDetail(ctx, &protoReq) | |||
| return msg, metadata, err | |||
| } | |||
| func request_PodService_ListPod_0(ctx context.Context, marshaler runtime.Marshaler, client PodServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | |||
| var protoReq ListReq | |||
| var metadata runtime.ServerMetadata | |||
| newReader, berr := utilities.IOReaderFactory(req.Body) | |||
| if berr != nil { | |||
| return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) | |||
| } | |||
| if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { | |||
| return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | |||
| } | |||
| msg, err := client.ListPod(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) | |||
| return msg, metadata, err | |||
| } | |||
| func local_request_PodService_ListPod_0(ctx context.Context, marshaler runtime.Marshaler, server PodServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | |||
| var protoReq ListReq | |||
| var metadata runtime.ServerMetadata | |||
| newReader, berr := utilities.IOReaderFactory(req.Body) | |||
| if berr != nil { | |||
| return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) | |||
| } | |||
| if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { | |||
| return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | |||
| } | |||
| msg, err := server.ListPod(ctx, &protoReq) | |||
| return msg, metadata, err | |||
| } | |||
| // RegisterPodServiceHandlerServer registers the http handlers for service PodService to "mux". | |||
| // UnaryRPC :call PodServiceServer directly. | |||
| // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. | |||
| // Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterPodServiceHandlerFromEndpoint instead. | |||
| func RegisterPodServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server PodServiceServer) error { | |||
| mux.Handle("POST", pattern_PodService_CreatePod_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | |||
| ctx, cancel := context.WithCancel(req.Context()) | |||
| defer cancel() | |||
| var stream runtime.ServerTransportStream | |||
| ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) | |||
| inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | |||
| rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/pbpod.PodService/CreatePod") | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| resp, md, err := local_request_PodService_CreatePod_0(rctx, inboundMarshaler, server, req, pathParams) | |||
| md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) | |||
| ctx = runtime.NewServerMetadataContext(ctx, md) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| forward_PodService_CreatePod_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | |||
| }) | |||
| mux.Handle("POST", pattern_PodService_ListPodDetail_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | |||
| ctx, cancel := context.WithCancel(req.Context()) | |||
| defer cancel() | |||
| var stream runtime.ServerTransportStream | |||
| ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) | |||
| inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | |||
| rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/pbpod.PodService/ListPodDetail") | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| resp, md, err := local_request_PodService_ListPodDetail_0(rctx, inboundMarshaler, server, req, pathParams) | |||
| md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) | |||
| ctx = runtime.NewServerMetadataContext(ctx, md) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| forward_PodService_ListPodDetail_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | |||
| }) | |||
| mux.Handle("POST", pattern_PodService_ListPod_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | |||
| ctx, cancel := context.WithCancel(req.Context()) | |||
| defer cancel() | |||
| var stream runtime.ServerTransportStream | |||
| ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) | |||
| inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | |||
| rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/pbpod.PodService/ListPod") | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| resp, md, err := local_request_PodService_ListPod_0(rctx, inboundMarshaler, server, req, pathParams) | |||
| md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) | |||
| ctx = runtime.NewServerMetadataContext(ctx, md) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| forward_PodService_ListPod_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | |||
| }) | |||
| return nil | |||
| } | |||
| // RegisterPodServiceHandlerFromEndpoint is same as RegisterPodServiceHandler but | |||
| // automatically dials to "endpoint" and closes the connection when "ctx" gets done. | |||
| func RegisterPodServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { | |||
| conn, err := grpc.Dial(endpoint, opts...) | |||
| if err != nil { | |||
| return err | |||
| } | |||
| defer func() { | |||
| if err != nil { | |||
| if cerr := conn.Close(); cerr != nil { | |||
| grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) | |||
| } | |||
| return | |||
| } | |||
| go func() { | |||
| <-ctx.Done() | |||
| if cerr := conn.Close(); cerr != nil { | |||
| grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) | |||
| } | |||
| }() | |||
| }() | |||
| return RegisterPodServiceHandler(ctx, mux, conn) | |||
| } | |||
| // RegisterPodServiceHandler registers the http handlers for service PodService to "mux". | |||
| // The handlers forward requests to the grpc endpoint over "conn". | |||
| func RegisterPodServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { | |||
| return RegisterPodServiceHandlerClient(ctx, mux, NewPodServiceClient(conn)) | |||
| } | |||
| // RegisterPodServiceHandlerClient registers the http handlers for service PodService | |||
| // to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "PodServiceClient". | |||
| // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "PodServiceClient" | |||
| // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in | |||
| // "PodServiceClient" to call the correct interceptors. | |||
| func RegisterPodServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client PodServiceClient) error { | |||
| mux.Handle("POST", pattern_PodService_CreatePod_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | |||
| ctx, cancel := context.WithCancel(req.Context()) | |||
| defer cancel() | |||
| inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | |||
| rctx, err := runtime.AnnotateContext(ctx, mux, req, "/pbpod.PodService/CreatePod") | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| resp, md, err := request_PodService_CreatePod_0(rctx, inboundMarshaler, client, req, pathParams) | |||
| ctx = runtime.NewServerMetadataContext(ctx, md) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| forward_PodService_CreatePod_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | |||
| }) | |||
| mux.Handle("POST", pattern_PodService_ListPodDetail_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | |||
| ctx, cancel := context.WithCancel(req.Context()) | |||
| defer cancel() | |||
| inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | |||
| rctx, err := runtime.AnnotateContext(ctx, mux, req, "/pbpod.PodService/ListPodDetail") | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| resp, md, err := request_PodService_ListPodDetail_0(rctx, inboundMarshaler, client, req, pathParams) | |||
| ctx = runtime.NewServerMetadataContext(ctx, md) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| forward_PodService_ListPodDetail_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | |||
| }) | |||
| mux.Handle("POST", pattern_PodService_ListPod_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { | |||
| ctx, cancel := context.WithCancel(req.Context()) | |||
| defer cancel() | |||
| inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) | |||
| rctx, err := runtime.AnnotateContext(ctx, mux, req, "/pbpod.PodService/ListPod") | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| resp, md, err := request_PodService_ListPod_0(rctx, inboundMarshaler, client, req, pathParams) | |||
| ctx = runtime.NewServerMetadataContext(ctx, md) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| forward_PodService_ListPod_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | |||
| }) | |||
| return nil | |||
| } | |||
| var ( | |||
| pattern_PodService_CreatePod_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"apis", "pod", "create"}, "")) | |||
| pattern_PodService_ListPodDetail_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"apis", "pod", "detail"}, "")) | |||
| pattern_PodService_ListPod_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"apis", "pod"}, "")) | |||
| ) | |||
| var ( | |||
| forward_PodService_CreatePod_0 = runtime.ForwardResponseMessage | |||
| forward_PodService_ListPodDetail_0 = runtime.ForwardResponseMessage | |||
| forward_PodService_ListPod_0 = runtime.ForwardResponseMessage | |||
| ) | |||
| @@ -0,0 +1,183 @@ | |||
| // Code generated by protoc-gen-go-grpc. DO NOT EDIT. | |||
| // versions: | |||
| // - protoc-gen-go-grpc v1.2.0 | |||
| // - protoc (unknown) | |||
| // source: idl/pbpod/pod.proto | |||
| package pbpod | |||
| import ( | |||
| context "context" | |||
| grpc "google.golang.org/grpc" | |||
| codes "google.golang.org/grpc/codes" | |||
| status "google.golang.org/grpc/status" | |||
| ) | |||
| // This is a compile-time assertion to ensure that this generated file | |||
| // is compatible with the grpc package it is being compiled against. | |||
| // Requires gRPC-Go v1.32.0 or later. | |||
| const _ = grpc.SupportPackageIsVersion7 | |||
| // PodServiceClient is the client API for PodService service. | |||
| // | |||
| // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. | |||
| type PodServiceClient interface { | |||
| // 创建pod - 支持云类型、区域 | |||
| CreatePod(ctx context.Context, in *CreateReq, opts ...grpc.CallOption) (*CreateRep, error) | |||
| // 查询Pod明细 - 支持云类型、区域、账户、分页等过滤条件 | |||
| ListPodDetail(ctx context.Context, in *ListDetailReq, opts ...grpc.CallOption) (*ListDetailResp, error) | |||
| // 查询pod全量 - 根据云类型 | |||
| ListPod(ctx context.Context, in *ListReq, opts ...grpc.CallOption) (*ListResp, error) | |||
| } | |||
| type podServiceClient struct { | |||
| cc grpc.ClientConnInterface | |||
| } | |||
| func NewPodServiceClient(cc grpc.ClientConnInterface) PodServiceClient { | |||
| return &podServiceClient{cc} | |||
| } | |||
| func (c *podServiceClient) CreatePod(ctx context.Context, in *CreateReq, opts ...grpc.CallOption) (*CreateRep, error) { | |||
| out := new(CreateRep) | |||
| err := c.cc.Invoke(ctx, "/pbpod.PodService/CreatePod", in, out, opts...) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| return out, nil | |||
| } | |||
| func (c *podServiceClient) ListPodDetail(ctx context.Context, in *ListDetailReq, opts ...grpc.CallOption) (*ListDetailResp, error) { | |||
| out := new(ListDetailResp) | |||
| err := c.cc.Invoke(ctx, "/pbpod.PodService/ListPodDetail", in, out, opts...) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| return out, nil | |||
| } | |||
| func (c *podServiceClient) ListPod(ctx context.Context, in *ListReq, opts ...grpc.CallOption) (*ListResp, error) { | |||
| out := new(ListResp) | |||
| err := c.cc.Invoke(ctx, "/pbpod.PodService/ListPod", in, out, opts...) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| return out, nil | |||
| } | |||
| // PodServiceServer is the server API for PodService service. | |||
| // All implementations must embed UnimplementedPodServiceServer | |||
| // for forward compatibility | |||
| type PodServiceServer interface { | |||
| // 创建pod - 支持云类型、区域 | |||
| CreatePod(context.Context, *CreateReq) (*CreateRep, error) | |||
| // 查询Pod明细 - 支持云类型、区域、账户、分页等过滤条件 | |||
| ListPodDetail(context.Context, *ListDetailReq) (*ListDetailResp, error) | |||
| // 查询pod全量 - 根据云类型 | |||
| ListPod(context.Context, *ListReq) (*ListResp, error) | |||
| mustEmbedUnimplementedPodServiceServer() | |||
| } | |||
| // UnimplementedPodServiceServer must be embedded to have forward compatible implementations. | |||
| type UnimplementedPodServiceServer struct { | |||
| } | |||
| func (UnimplementedPodServiceServer) CreatePod(context.Context, *CreateReq) (*CreateRep, error) { | |||
| return nil, status.Errorf(codes.Unimplemented, "method CreatePod not implemented") | |||
| } | |||
| func (UnimplementedPodServiceServer) ListPodDetail(context.Context, *ListDetailReq) (*ListDetailResp, error) { | |||
| return nil, status.Errorf(codes.Unimplemented, "method ListPodDetail not implemented") | |||
| } | |||
| func (UnimplementedPodServiceServer) ListPod(context.Context, *ListReq) (*ListResp, error) { | |||
| return nil, status.Errorf(codes.Unimplemented, "method ListPod not implemented") | |||
| } | |||
| func (UnimplementedPodServiceServer) mustEmbedUnimplementedPodServiceServer() {} | |||
| // UnsafePodServiceServer may be embedded to opt out of forward compatibility for this service. | |||
| // Use of this interface is not recommended, as added methods to PodServiceServer will | |||
| // result in compilation errors. | |||
| type UnsafePodServiceServer interface { | |||
| mustEmbedUnimplementedPodServiceServer() | |||
| } | |||
| func RegisterPodServiceServer(s grpc.ServiceRegistrar, srv PodServiceServer) { | |||
| s.RegisterService(&PodService_ServiceDesc, srv) | |||
| } | |||
| func _PodService_CreatePod_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | |||
| in := new(CreateReq) | |||
| if err := dec(in); err != nil { | |||
| return nil, err | |||
| } | |||
| if interceptor == nil { | |||
| return srv.(PodServiceServer).CreatePod(ctx, in) | |||
| } | |||
| info := &grpc.UnaryServerInfo{ | |||
| Server: srv, | |||
| FullMethod: "/pbpod.PodService/CreatePod", | |||
| } | |||
| handler := func(ctx context.Context, req interface{}) (interface{}, error) { | |||
| return srv.(PodServiceServer).CreatePod(ctx, req.(*CreateReq)) | |||
| } | |||
| return interceptor(ctx, in, info, handler) | |||
| } | |||
| func _PodService_ListPodDetail_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | |||
| in := new(ListDetailReq) | |||
| if err := dec(in); err != nil { | |||
| return nil, err | |||
| } | |||
| if interceptor == nil { | |||
| return srv.(PodServiceServer).ListPodDetail(ctx, in) | |||
| } | |||
| info := &grpc.UnaryServerInfo{ | |||
| Server: srv, | |||
| FullMethod: "/pbpod.PodService/ListPodDetail", | |||
| } | |||
| handler := func(ctx context.Context, req interface{}) (interface{}, error) { | |||
| return srv.(PodServiceServer).ListPodDetail(ctx, req.(*ListDetailReq)) | |||
| } | |||
| return interceptor(ctx, in, info, handler) | |||
| } | |||
| func _PodService_ListPod_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | |||
| in := new(ListReq) | |||
| if err := dec(in); err != nil { | |||
| return nil, err | |||
| } | |||
| if interceptor == nil { | |||
| return srv.(PodServiceServer).ListPod(ctx, in) | |||
| } | |||
| info := &grpc.UnaryServerInfo{ | |||
| Server: srv, | |||
| FullMethod: "/pbpod.PodService/ListPod", | |||
| } | |||
| handler := func(ctx context.Context, req interface{}) (interface{}, error) { | |||
| return srv.(PodServiceServer).ListPod(ctx, req.(*ListReq)) | |||
| } | |||
| return interceptor(ctx, in, info, handler) | |||
| } | |||
| // PodService_ServiceDesc is the grpc.ServiceDesc for PodService service. | |||
| // It's only intended for direct use with grpc.RegisterService, | |||
| // and not to be introspected or modified (even as a copy) | |||
| var PodService_ServiceDesc = grpc.ServiceDesc{ | |||
| ServiceName: "pbpod.PodService", | |||
| HandlerType: (*PodServiceServer)(nil), | |||
| Methods: []grpc.MethodDesc{ | |||
| { | |||
| MethodName: "CreatePod", | |||
| Handler: _PodService_CreatePod_Handler, | |||
| }, | |||
| { | |||
| MethodName: "ListPodDetail", | |||
| Handler: _PodService_ListPodDetail_Handler, | |||
| }, | |||
| { | |||
| MethodName: "ListPod", | |||
| Handler: _PodService_ListPod_Handler, | |||
| }, | |||
| }, | |||
| Streams: []grpc.StreamDesc{}, | |||
| Metadata: "idl/pbpod/pod.proto", | |||
| } | |||
| @@ -93,6 +93,8 @@ const ( | |||
| CloudProduct_product_domain CloudProduct = 3 | |||
| // 4 - OSS类产品:阿里云OSS | |||
| CloudProduct_product_oss CloudProduct = 4 | |||
| // 5 - POD类产品:阿里云ECI,华为云CCI,腾讯云EKS | |||
| CloudProduct_product_pod CloudProduct = 5 | |||
| ) | |||
| // Enum value maps for CloudProduct. | |||
| @@ -103,6 +105,7 @@ var ( | |||
| 2: "product_rds", | |||
| 3: "product_domain", | |||
| 4: "product_oss", | |||
| 5: "product_pod", | |||
| } | |||
| CloudProduct_value = map[string]int32{ | |||
| "product_all": 0, | |||
| @@ -110,6 +113,7 @@ var ( | |||
| "product_rds": 2, | |||
| "product_domain": 3, | |||
| "product_oss": 4, | |||
| "product_pod": 5, | |||
| } | |||
| ) | |||
| @@ -686,127 +690,128 @@ var file_idl_pbtenant_tenant_proto_rawDesc = []byte{ | |||
| 0x3a, 0x0a, 0x0d, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, | |||
| 0x12, 0x07, 0x0a, 0x03, 0x61, 0x6c, 0x69, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x74, 0x65, 0x6e, | |||
| 0x63, 0x65, 0x6e, 0x74, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x68, 0x75, 0x61, 0x77, 0x65, 0x69, | |||
| 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x61, 0x77, 0x73, 0x10, 0x03, 0x2a, 0x66, 0x0a, 0x0c, 0x43, | |||
| 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x61, 0x77, 0x73, 0x10, 0x03, 0x2a, 0x77, 0x0a, 0x0c, 0x43, | |||
| 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x0f, 0x0a, 0x0b, 0x70, | |||
| 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, | |||
| 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x65, 0x63, 0x73, 0x10, 0x01, 0x12, 0x0f, 0x0a, | |||
| 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x72, 0x64, 0x73, 0x10, 0x02, 0x12, 0x12, | |||
| 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, | |||
| 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x6f, 0x73, | |||
| 0x73, 0x10, 0x04, 0x2a, 0x86, 0x04, 0x0a, 0x0b, 0x41, 0x6c, 0x69, 0x52, 0x65, 0x67, 0x69, 0x6f, | |||
| 0x6e, 0x49, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x61, 0x6c, 0x69, 0x5f, 0x61, 0x6c, 0x6c, 0x10, 0x00, | |||
| 0x12, 0x12, 0x0a, 0x0e, 0x61, 0x6c, 0x69, 0x5f, 0x63, 0x6e, 0x5f, 0x71, 0x69, 0x6e, 0x67, 0x64, | |||
| 0x61, 0x6f, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x61, 0x6c, 0x69, 0x5f, 0x63, 0x6e, 0x5f, 0x62, | |||
| 0x65, 0x69, 0x6a, 0x69, 0x6e, 0x67, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x61, 0x6c, 0x69, 0x5f, | |||
| 0x63, 0x6e, 0x5f, 0x7a, 0x68, 0x61, 0x6e, 0x67, 0x6a, 0x69, 0x61, 0x6b, 0x6f, 0x75, 0x10, 0x03, | |||
| 0x12, 0x14, 0x0a, 0x10, 0x61, 0x6c, 0x69, 0x5f, 0x63, 0x6e, 0x5f, 0x68, 0x75, 0x68, 0x65, 0x68, | |||
| 0x61, 0x6f, 0x74, 0x65, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x61, 0x6c, 0x69, 0x5f, 0x63, 0x6e, | |||
| 0x5f, 0x77, 0x75, 0x6c, 0x61, 0x6e, 0x63, 0x68, 0x61, 0x62, 0x75, 0x10, 0x05, 0x12, 0x13, 0x0a, | |||
| 0x0f, 0x61, 0x6c, 0x69, 0x5f, 0x63, 0x6e, 0x5f, 0x68, 0x61, 0x6e, 0x67, 0x7a, 0x68, 0x6f, 0x75, | |||
| 0x10, 0x06, 0x12, 0x13, 0x0a, 0x0f, 0x61, 0x6c, 0x69, 0x5f, 0x63, 0x6e, 0x5f, 0x73, 0x68, 0x61, | |||
| 0x6e, 0x67, 0x68, 0x61, 0x69, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x61, 0x6c, 0x69, 0x5f, 0x63, | |||
| 0x6e, 0x5f, 0x73, 0x68, 0x65, 0x6e, 0x7a, 0x68, 0x65, 0x6e, 0x10, 0x08, 0x12, 0x11, 0x0a, 0x0d, | |||
| 0x61, 0x6c, 0x69, 0x5f, 0x63, 0x6e, 0x5f, 0x68, 0x65, 0x79, 0x75, 0x61, 0x6e, 0x10, 0x09, 0x12, | |||
| 0x14, 0x0a, 0x10, 0x61, 0x6c, 0x69, 0x5f, 0x63, 0x6e, 0x5f, 0x67, 0x75, 0x61, 0x6e, 0x67, 0x7a, | |||
| 0x68, 0x6f, 0x75, 0x10, 0x0a, 0x12, 0x12, 0x0a, 0x0e, 0x61, 0x6c, 0x69, 0x5f, 0x63, 0x6e, 0x5f, | |||
| 0x63, 0x68, 0x65, 0x6e, 0x67, 0x64, 0x75, 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x61, 0x6c, 0x69, | |||
| 0x5f, 0x63, 0x6e, 0x5f, 0x68, 0x6f, 0x6e, 0x67, 0x6b, 0x6f, 0x6e, 0x67, 0x10, 0x0c, 0x12, 0x16, | |||
| 0x0a, 0x12, 0x61, 0x6c, 0x69, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x65, 0x61, | |||
| 0x73, 0x74, 0x5f, 0x31, 0x10, 0x0d, 0x12, 0x16, 0x0a, 0x12, 0x61, 0x6c, 0x69, 0x5f, 0x61, 0x70, | |||
| 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x32, 0x10, 0x0e, 0x12, 0x16, | |||
| 0x0a, 0x12, 0x61, 0x6c, 0x69, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x65, 0x61, | |||
| 0x73, 0x74, 0x5f, 0x33, 0x10, 0x0f, 0x12, 0x16, 0x0a, 0x12, 0x61, 0x6c, 0x69, 0x5f, 0x61, 0x70, | |||
| 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x35, 0x10, 0x10, 0x12, 0x12, | |||
| 0x0a, 0x0e, 0x61, 0x6c, 0x69, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x5f, 0x31, | |||
| 0x10, 0x11, 0x12, 0x16, 0x0a, 0x12, 0x61, 0x6c, 0x69, 0x5f, 0x61, 0x70, 0x5f, 0x6e, 0x6f, 0x72, | |||
| 0x74, 0x68, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x12, 0x12, 0x11, 0x0a, 0x0d, 0x61, 0x6c, | |||
| 0x69, 0x5f, 0x75, 0x73, 0x5f, 0x77, 0x65, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x13, 0x12, 0x11, 0x0a, | |||
| 0x0d, 0x61, 0x6c, 0x69, 0x5f, 0x75, 0x73, 0x5f, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x14, | |||
| 0x12, 0x14, 0x0a, 0x10, 0x61, 0x6c, 0x69, 0x5f, 0x65, 0x75, 0x5f, 0x63, 0x65, 0x6e, 0x74, 0x72, | |||
| 0x61, 0x6c, 0x5f, 0x31, 0x10, 0x15, 0x12, 0x11, 0x0a, 0x0d, 0x61, 0x6c, 0x69, 0x5f, 0x65, 0x75, | |||
| 0x5f, 0x77, 0x65, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x16, 0x12, 0x11, 0x0a, 0x0d, 0x61, 0x6c, 0x69, | |||
| 0x5f, 0x6d, 0x65, 0x5f, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x17, 0x2a, 0xa1, 0x03, 0x0a, | |||
| 0x0f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, | |||
| 0x12, 0x0a, 0x0a, 0x06, 0x74, 0x63, 0x5f, 0x61, 0x6c, 0x6c, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, | |||
| 0x74, 0x63, 0x5f, 0x61, 0x70, 0x5f, 0x62, 0x61, 0x6e, 0x67, 0x6b, 0x6f, 0x6b, 0x10, 0x01, 0x12, | |||
| 0x11, 0x0a, 0x0d, 0x74, 0x63, 0x5f, 0x61, 0x70, 0x5f, 0x62, 0x65, 0x69, 0x6a, 0x69, 0x6e, 0x67, | |||
| 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x74, 0x63, 0x5f, 0x61, 0x70, 0x5f, 0x63, 0x68, 0x65, 0x6e, | |||
| 0x67, 0x64, 0x75, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x74, 0x63, 0x5f, 0x61, 0x70, 0x5f, 0x63, | |||
| 0x68, 0x6f, 0x6e, 0x67, 0x71, 0x69, 0x6e, 0x67, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x74, 0x63, | |||
| 0x5f, 0x61, 0x70, 0x5f, 0x67, 0x75, 0x61, 0x6e, 0x67, 0x7a, 0x68, 0x6f, 0x75, 0x10, 0x05, 0x12, | |||
| 0x18, 0x0a, 0x14, 0x74, 0x63, 0x5f, 0x61, 0x70, 0x5f, 0x67, 0x75, 0x61, 0x6e, 0x67, 0x7a, 0x68, | |||
| 0x6f, 0x75, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x10, 0x06, 0x12, 0x12, 0x0a, 0x0e, 0x74, 0x63, 0x5f, | |||
| 0x61, 0x70, 0x5f, 0x68, 0x6f, 0x6e, 0x67, 0x6b, 0x6f, 0x6e, 0x67, 0x10, 0x07, 0x12, 0x10, 0x0a, | |||
| 0x0c, 0x74, 0x63, 0x5f, 0x61, 0x70, 0x5f, 0x6d, 0x75, 0x6d, 0x62, 0x61, 0x69, 0x10, 0x08, 0x12, | |||
| 0x0f, 0x0a, 0x0b, 0x74, 0x63, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x65, 0x6f, 0x75, 0x6c, 0x10, 0x09, | |||
| 0x12, 0x12, 0x0a, 0x0e, 0x74, 0x63, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x68, 0x61, 0x6e, 0x67, 0x68, | |||
| 0x61, 0x69, 0x10, 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x74, 0x63, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x68, | |||
| 0x61, 0x6e, 0x67, 0x68, 0x61, 0x69, 0x5f, 0x66, 0x73, 0x69, 0x10, 0x0b, 0x12, 0x16, 0x0a, 0x12, | |||
| 0x74, 0x63, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x68, 0x65, 0x6e, 0x7a, 0x68, 0x65, 0x6e, 0x5f, 0x66, | |||
| 0x73, 0x69, 0x10, 0x0c, 0x12, 0x13, 0x0a, 0x0f, 0x74, 0x63, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x69, | |||
| 0x6e, 0x67, 0x61, 0x70, 0x6f, 0x72, 0x65, 0x10, 0x0d, 0x12, 0x0f, 0x0a, 0x0b, 0x74, 0x63, 0x5f, | |||
| 0x61, 0x70, 0x5f, 0x74, 0x6f, 0x6b, 0x79, 0x6f, 0x10, 0x0e, 0x12, 0x13, 0x0a, 0x0f, 0x74, 0x63, | |||
| 0x5f, 0x65, 0x75, 0x5f, 0x66, 0x72, 0x61, 0x6e, 0x6b, 0x66, 0x75, 0x72, 0x74, 0x10, 0x0f, 0x12, | |||
| 0x10, 0x0a, 0x0c, 0x74, 0x63, 0x5f, 0x65, 0x75, 0x5f, 0x6d, 0x6f, 0x73, 0x63, 0x6f, 0x77, 0x10, | |||
| 0x10, 0x12, 0x11, 0x0a, 0x0d, 0x74, 0x63, 0x5f, 0x6e, 0x61, 0x5f, 0x61, 0x73, 0x68, 0x62, 0x75, | |||
| 0x72, 0x6e, 0x10, 0x11, 0x12, 0x17, 0x0a, 0x13, 0x74, 0x63, 0x5f, 0x6e, 0x61, 0x5f, 0x73, 0x69, | |||
| 0x6c, 0x69, 0x63, 0x6f, 0x6e, 0x76, 0x61, 0x6c, 0x6c, 0x65, 0x79, 0x10, 0x12, 0x12, 0x11, 0x0a, | |||
| 0x0d, 0x74, 0x63, 0x5f, 0x6e, 0x61, 0x5f, 0x74, 0x6f, 0x72, 0x6f, 0x6e, 0x74, 0x6f, 0x10, 0x13, | |||
| 0x2a, 0xe8, 0x01, 0x0a, 0x0e, 0x48, 0x75, 0x61, 0x77, 0x65, 0x69, 0x52, 0x65, 0x67, 0x69, 0x6f, | |||
| 0x6e, 0x49, 0x64, 0x12, 0x0a, 0x0a, 0x06, 0x68, 0x77, 0x5f, 0x61, 0x6c, 0x6c, 0x10, 0x00, 0x12, | |||
| 0x11, 0x0a, 0x0d, 0x68, 0x77, 0x5f, 0x63, 0x6e, 0x5f, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x5f, 0x31, | |||
| 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x68, 0x77, 0x5f, 0x63, 0x6e, 0x5f, 0x6e, 0x6f, 0x72, 0x74, | |||
| 0x68, 0x5f, 0x34, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x68, 0x77, 0x5f, 0x63, 0x6e, 0x5f, 0x73, | |||
| 0x6f, 0x75, 0x74, 0x68, 0x5f, 0x31, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x68, 0x77, 0x5f, 0x63, | |||
| 0x6e, 0x5f, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x32, 0x10, 0x04, 0x12, 0x10, 0x0a, 0x0c, 0x68, 0x77, | |||
| 0x5f, 0x63, 0x6e, 0x5f, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x33, 0x10, 0x05, 0x12, 0x15, 0x0a, 0x11, | |||
| 0x68, 0x77, 0x5f, 0x63, 0x6e, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x77, 0x65, 0x73, 0x74, 0x5f, | |||
| 0x32, 0x10, 0x06, 0x12, 0x15, 0x0a, 0x11, 0x68, 0x77, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x6f, 0x75, | |||
| 0x74, 0x68, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x07, 0x12, 0x15, 0x0a, 0x11, 0x68, 0x77, | |||
| 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x32, 0x10, | |||
| 0x08, 0x12, 0x15, 0x0a, 0x11, 0x68, 0x77, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, | |||
| 0x65, 0x61, 0x73, 0x74, 0x5f, 0x33, 0x10, 0x09, 0x12, 0x11, 0x0a, 0x0d, 0x68, 0x77, 0x5f, 0x61, | |||
| 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x5f, 0x31, 0x10, 0x0a, 0x2a, 0xcd, 0x03, 0x0a, 0x0b, | |||
| 0x41, 0x77, 0x73, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x61, | |||
| 0x77, 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x61, 0x77, 0x73, 0x5f, | |||
| 0x75, 0x73, 0x5f, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x32, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x61, | |||
| 0x77, 0x73, 0x5f, 0x75, 0x73, 0x5f, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x02, 0x12, 0x11, | |||
| 0x0a, 0x0d, 0x61, 0x77, 0x73, 0x5f, 0x75, 0x73, 0x5f, 0x77, 0x65, 0x73, 0x74, 0x5f, 0x31, 0x10, | |||
| 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x61, 0x77, 0x73, 0x5f, 0x75, 0x73, 0x5f, 0x77, 0x65, 0x73, 0x74, | |||
| 0x5f, 0x32, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x61, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x5f, 0x73, | |||
| 0x6f, 0x75, 0x74, 0x68, 0x5f, 0x31, 0x10, 0x05, 0x12, 0x11, 0x0a, 0x0d, 0x61, 0x77, 0x73, 0x5f, | |||
| 0x61, 0x70, 0x5f, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x06, 0x12, 0x12, 0x0a, 0x0e, 0x61, | |||
| 0x77, 0x73, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x5f, 0x31, 0x10, 0x07, 0x12, | |||
| 0x16, 0x0a, 0x12, 0x61, 0x77, 0x73, 0x5f, 0x61, 0x70, 0x5f, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x65, | |||
| 0x61, 0x73, 0x74, 0x5f, 0x33, 0x10, 0x08, 0x12, 0x16, 0x0a, 0x12, 0x61, 0x77, 0x73, 0x5f, 0x61, | |||
| 0x70, 0x5f, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x32, 0x10, 0x09, 0x12, | |||
| 0x16, 0x0a, 0x12, 0x61, 0x77, 0x73, 0x5f, 0x61, 0x70, 0x5f, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x65, | |||
| 0x61, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x61, 0x77, 0x73, 0x5f, 0x61, | |||
| 0x70, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x32, 0x10, 0x0b, 0x12, | |||
| 0x16, 0x0a, 0x12, 0x61, 0x77, 0x73, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x65, | |||
| 0x61, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x0c, 0x12, 0x14, 0x0a, 0x10, 0x61, 0x77, 0x73, 0x5f, 0x63, | |||
| 0x61, 0x5f, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x5f, 0x31, 0x10, 0x0d, 0x12, 0x14, 0x0a, | |||
| 0x10, 0x61, 0x77, 0x73, 0x5f, 0x65, 0x75, 0x5f, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x5f, | |||
| 0x31, 0x10, 0x0e, 0x12, 0x11, 0x0a, 0x0d, 0x61, 0x77, 0x73, 0x5f, 0x65, 0x75, 0x5f, 0x77, 0x65, | |||
| 0x73, 0x74, 0x5f, 0x31, 0x10, 0x0f, 0x12, 0x11, 0x0a, 0x0d, 0x61, 0x77, 0x73, 0x5f, 0x65, 0x75, | |||
| 0x5f, 0x77, 0x65, 0x73, 0x74, 0x5f, 0x32, 0x10, 0x10, 0x12, 0x12, 0x0a, 0x0e, 0x61, 0x77, 0x73, | |||
| 0x5f, 0x65, 0x75, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x5f, 0x31, 0x10, 0x11, 0x12, 0x11, 0x0a, | |||
| 0x0d, 0x61, 0x77, 0x73, 0x5f, 0x65, 0x75, 0x5f, 0x77, 0x65, 0x73, 0x74, 0x5f, 0x33, 0x10, 0x12, | |||
| 0x12, 0x12, 0x0a, 0x0e, 0x61, 0x77, 0x73, 0x5f, 0x65, 0x75, 0x5f, 0x6e, 0x6f, 0x72, 0x74, 0x68, | |||
| 0x5f, 0x31, 0x10, 0x13, 0x12, 0x12, 0x0a, 0x0e, 0x61, 0x77, 0x73, 0x5f, 0x6d, 0x65, 0x5f, 0x73, | |||
| 0x6f, 0x75, 0x74, 0x68, 0x5f, 0x31, 0x10, 0x14, 0x12, 0x11, 0x0a, 0x0d, 0x61, 0x77, 0x73, 0x5f, | |||
| 0x73, 0x61, 0x5f, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x15, 0x32, 0x78, 0x0a, 0x0d, 0x54, | |||
| 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x67, 0x92, 0x41, | |||
| 0x64, 0x12, 0x1e, 0xe6, 0x89, 0x80, 0xe6, 0x9c, 0x89, 0xe4, 0xba, 0x91, 0xe7, 0xa7, 0x9f, 0xe6, | |||
| 0x88, 0xb7, 0xe7, 0x9a, 0x84, 0xe8, 0xae, 0xa4, 0xe8, 0xaf, 0x81, 0xe6, 0x9c, 0x8d, 0xe5, 0x8a, | |||
| 0xa1, 0x1a, 0x42, 0x0a, 0x1f, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, | |||
| 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x46, 0x69, | |||
| 0x74, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, | |||
| 0x74, 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x63, 0x6e, 0x2f, 0x4a, 0x43, 0x43, | |||
| 0x45, 0x2f, 0x50, 0x43, 0x4d, 0x42, 0x30, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x6c, 0x69, 0x6e, 0x6b, | |||
| 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x63, 0x6e, 0x2f, 0x4a, 0x43, 0x43, 0x45, 0x2f, 0x50, 0x43, 0x4d, | |||
| 0x2f, 0x6c, 0x61, 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x2f, 0x69, 0x64, 0x6c, 0x2f, 0x70, | |||
| 0x62, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | |||
| 0x73, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x70, | |||
| 0x6f, 0x64, 0x10, 0x05, 0x2a, 0x86, 0x04, 0x0a, 0x0b, 0x41, 0x6c, 0x69, 0x52, 0x65, 0x67, 0x69, | |||
| 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x61, 0x6c, 0x69, 0x5f, 0x61, 0x6c, 0x6c, 0x10, | |||
| 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x61, 0x6c, 0x69, 0x5f, 0x63, 0x6e, 0x5f, 0x71, 0x69, 0x6e, 0x67, | |||
| 0x64, 0x61, 0x6f, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x61, 0x6c, 0x69, 0x5f, 0x63, 0x6e, 0x5f, | |||
| 0x62, 0x65, 0x69, 0x6a, 0x69, 0x6e, 0x67, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x61, 0x6c, 0x69, | |||
| 0x5f, 0x63, 0x6e, 0x5f, 0x7a, 0x68, 0x61, 0x6e, 0x67, 0x6a, 0x69, 0x61, 0x6b, 0x6f, 0x75, 0x10, | |||
| 0x03, 0x12, 0x14, 0x0a, 0x10, 0x61, 0x6c, 0x69, 0x5f, 0x63, 0x6e, 0x5f, 0x68, 0x75, 0x68, 0x65, | |||
| 0x68, 0x61, 0x6f, 0x74, 0x65, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x61, 0x6c, 0x69, 0x5f, 0x63, | |||
| 0x6e, 0x5f, 0x77, 0x75, 0x6c, 0x61, 0x6e, 0x63, 0x68, 0x61, 0x62, 0x75, 0x10, 0x05, 0x12, 0x13, | |||
| 0x0a, 0x0f, 0x61, 0x6c, 0x69, 0x5f, 0x63, 0x6e, 0x5f, 0x68, 0x61, 0x6e, 0x67, 0x7a, 0x68, 0x6f, | |||
| 0x75, 0x10, 0x06, 0x12, 0x13, 0x0a, 0x0f, 0x61, 0x6c, 0x69, 0x5f, 0x63, 0x6e, 0x5f, 0x73, 0x68, | |||
| 0x61, 0x6e, 0x67, 0x68, 0x61, 0x69, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x61, 0x6c, 0x69, 0x5f, | |||
| 0x63, 0x6e, 0x5f, 0x73, 0x68, 0x65, 0x6e, 0x7a, 0x68, 0x65, 0x6e, 0x10, 0x08, 0x12, 0x11, 0x0a, | |||
| 0x0d, 0x61, 0x6c, 0x69, 0x5f, 0x63, 0x6e, 0x5f, 0x68, 0x65, 0x79, 0x75, 0x61, 0x6e, 0x10, 0x09, | |||
| 0x12, 0x14, 0x0a, 0x10, 0x61, 0x6c, 0x69, 0x5f, 0x63, 0x6e, 0x5f, 0x67, 0x75, 0x61, 0x6e, 0x67, | |||
| 0x7a, 0x68, 0x6f, 0x75, 0x10, 0x0a, 0x12, 0x12, 0x0a, 0x0e, 0x61, 0x6c, 0x69, 0x5f, 0x63, 0x6e, | |||
| 0x5f, 0x63, 0x68, 0x65, 0x6e, 0x67, 0x64, 0x75, 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x61, 0x6c, | |||
| 0x69, 0x5f, 0x63, 0x6e, 0x5f, 0x68, 0x6f, 0x6e, 0x67, 0x6b, 0x6f, 0x6e, 0x67, 0x10, 0x0c, 0x12, | |||
| 0x16, 0x0a, 0x12, 0x61, 0x6c, 0x69, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x65, | |||
| 0x61, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x0d, 0x12, 0x16, 0x0a, 0x12, 0x61, 0x6c, 0x69, 0x5f, 0x61, | |||
| 0x70, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x32, 0x10, 0x0e, 0x12, | |||
| 0x16, 0x0a, 0x12, 0x61, 0x6c, 0x69, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x65, | |||
| 0x61, 0x73, 0x74, 0x5f, 0x33, 0x10, 0x0f, 0x12, 0x16, 0x0a, 0x12, 0x61, 0x6c, 0x69, 0x5f, 0x61, | |||
| 0x70, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x35, 0x10, 0x10, 0x12, | |||
| 0x12, 0x0a, 0x0e, 0x61, 0x6c, 0x69, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x5f, | |||
| 0x31, 0x10, 0x11, 0x12, 0x16, 0x0a, 0x12, 0x61, 0x6c, 0x69, 0x5f, 0x61, 0x70, 0x5f, 0x6e, 0x6f, | |||
| 0x72, 0x74, 0x68, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x12, 0x12, 0x11, 0x0a, 0x0d, 0x61, | |||
| 0x6c, 0x69, 0x5f, 0x75, 0x73, 0x5f, 0x77, 0x65, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x13, 0x12, 0x11, | |||
| 0x0a, 0x0d, 0x61, 0x6c, 0x69, 0x5f, 0x75, 0x73, 0x5f, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x10, | |||
| 0x14, 0x12, 0x14, 0x0a, 0x10, 0x61, 0x6c, 0x69, 0x5f, 0x65, 0x75, 0x5f, 0x63, 0x65, 0x6e, 0x74, | |||
| 0x72, 0x61, 0x6c, 0x5f, 0x31, 0x10, 0x15, 0x12, 0x11, 0x0a, 0x0d, 0x61, 0x6c, 0x69, 0x5f, 0x65, | |||
| 0x75, 0x5f, 0x77, 0x65, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x16, 0x12, 0x11, 0x0a, 0x0d, 0x61, 0x6c, | |||
| 0x69, 0x5f, 0x6d, 0x65, 0x5f, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x17, 0x2a, 0xa1, 0x03, | |||
| 0x0a, 0x0f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, | |||
| 0x64, 0x12, 0x0a, 0x0a, 0x06, 0x74, 0x63, 0x5f, 0x61, 0x6c, 0x6c, 0x10, 0x00, 0x12, 0x11, 0x0a, | |||
| 0x0d, 0x74, 0x63, 0x5f, 0x61, 0x70, 0x5f, 0x62, 0x61, 0x6e, 0x67, 0x6b, 0x6f, 0x6b, 0x10, 0x01, | |||
| 0x12, 0x11, 0x0a, 0x0d, 0x74, 0x63, 0x5f, 0x61, 0x70, 0x5f, 0x62, 0x65, 0x69, 0x6a, 0x69, 0x6e, | |||
| 0x67, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x74, 0x63, 0x5f, 0x61, 0x70, 0x5f, 0x63, 0x68, 0x65, | |||
| 0x6e, 0x67, 0x64, 0x75, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x74, 0x63, 0x5f, 0x61, 0x70, 0x5f, | |||
| 0x63, 0x68, 0x6f, 0x6e, 0x67, 0x71, 0x69, 0x6e, 0x67, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x74, | |||
| 0x63, 0x5f, 0x61, 0x70, 0x5f, 0x67, 0x75, 0x61, 0x6e, 0x67, 0x7a, 0x68, 0x6f, 0x75, 0x10, 0x05, | |||
| 0x12, 0x18, 0x0a, 0x14, 0x74, 0x63, 0x5f, 0x61, 0x70, 0x5f, 0x67, 0x75, 0x61, 0x6e, 0x67, 0x7a, | |||
| 0x68, 0x6f, 0x75, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x10, 0x06, 0x12, 0x12, 0x0a, 0x0e, 0x74, 0x63, | |||
| 0x5f, 0x61, 0x70, 0x5f, 0x68, 0x6f, 0x6e, 0x67, 0x6b, 0x6f, 0x6e, 0x67, 0x10, 0x07, 0x12, 0x10, | |||
| 0x0a, 0x0c, 0x74, 0x63, 0x5f, 0x61, 0x70, 0x5f, 0x6d, 0x75, 0x6d, 0x62, 0x61, 0x69, 0x10, 0x08, | |||
| 0x12, 0x0f, 0x0a, 0x0b, 0x74, 0x63, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x65, 0x6f, 0x75, 0x6c, 0x10, | |||
| 0x09, 0x12, 0x12, 0x0a, 0x0e, 0x74, 0x63, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x68, 0x61, 0x6e, 0x67, | |||
| 0x68, 0x61, 0x69, 0x10, 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x74, 0x63, 0x5f, 0x61, 0x70, 0x5f, 0x73, | |||
| 0x68, 0x61, 0x6e, 0x67, 0x68, 0x61, 0x69, 0x5f, 0x66, 0x73, 0x69, 0x10, 0x0b, 0x12, 0x16, 0x0a, | |||
| 0x12, 0x74, 0x63, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x68, 0x65, 0x6e, 0x7a, 0x68, 0x65, 0x6e, 0x5f, | |||
| 0x66, 0x73, 0x69, 0x10, 0x0c, 0x12, 0x13, 0x0a, 0x0f, 0x74, 0x63, 0x5f, 0x61, 0x70, 0x5f, 0x73, | |||
| 0x69, 0x6e, 0x67, 0x61, 0x70, 0x6f, 0x72, 0x65, 0x10, 0x0d, 0x12, 0x0f, 0x0a, 0x0b, 0x74, 0x63, | |||
| 0x5f, 0x61, 0x70, 0x5f, 0x74, 0x6f, 0x6b, 0x79, 0x6f, 0x10, 0x0e, 0x12, 0x13, 0x0a, 0x0f, 0x74, | |||
| 0x63, 0x5f, 0x65, 0x75, 0x5f, 0x66, 0x72, 0x61, 0x6e, 0x6b, 0x66, 0x75, 0x72, 0x74, 0x10, 0x0f, | |||
| 0x12, 0x10, 0x0a, 0x0c, 0x74, 0x63, 0x5f, 0x65, 0x75, 0x5f, 0x6d, 0x6f, 0x73, 0x63, 0x6f, 0x77, | |||
| 0x10, 0x10, 0x12, 0x11, 0x0a, 0x0d, 0x74, 0x63, 0x5f, 0x6e, 0x61, 0x5f, 0x61, 0x73, 0x68, 0x62, | |||
| 0x75, 0x72, 0x6e, 0x10, 0x11, 0x12, 0x17, 0x0a, 0x13, 0x74, 0x63, 0x5f, 0x6e, 0x61, 0x5f, 0x73, | |||
| 0x69, 0x6c, 0x69, 0x63, 0x6f, 0x6e, 0x76, 0x61, 0x6c, 0x6c, 0x65, 0x79, 0x10, 0x12, 0x12, 0x11, | |||
| 0x0a, 0x0d, 0x74, 0x63, 0x5f, 0x6e, 0x61, 0x5f, 0x74, 0x6f, 0x72, 0x6f, 0x6e, 0x74, 0x6f, 0x10, | |||
| 0x13, 0x2a, 0xe8, 0x01, 0x0a, 0x0e, 0x48, 0x75, 0x61, 0x77, 0x65, 0x69, 0x52, 0x65, 0x67, 0x69, | |||
| 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x0a, 0x0a, 0x06, 0x68, 0x77, 0x5f, 0x61, 0x6c, 0x6c, 0x10, 0x00, | |||
| 0x12, 0x11, 0x0a, 0x0d, 0x68, 0x77, 0x5f, 0x63, 0x6e, 0x5f, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x5f, | |||
| 0x31, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x68, 0x77, 0x5f, 0x63, 0x6e, 0x5f, 0x6e, 0x6f, 0x72, | |||
| 0x74, 0x68, 0x5f, 0x34, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x68, 0x77, 0x5f, 0x63, 0x6e, 0x5f, | |||
| 0x73, 0x6f, 0x75, 0x74, 0x68, 0x5f, 0x31, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x68, 0x77, 0x5f, | |||
| 0x63, 0x6e, 0x5f, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x32, 0x10, 0x04, 0x12, 0x10, 0x0a, 0x0c, 0x68, | |||
| 0x77, 0x5f, 0x63, 0x6e, 0x5f, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x33, 0x10, 0x05, 0x12, 0x15, 0x0a, | |||
| 0x11, 0x68, 0x77, 0x5f, 0x63, 0x6e, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x77, 0x65, 0x73, 0x74, | |||
| 0x5f, 0x32, 0x10, 0x06, 0x12, 0x15, 0x0a, 0x11, 0x68, 0x77, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x6f, | |||
| 0x75, 0x74, 0x68, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x07, 0x12, 0x15, 0x0a, 0x11, 0x68, | |||
| 0x77, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x32, | |||
| 0x10, 0x08, 0x12, 0x15, 0x0a, 0x11, 0x68, 0x77, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x6f, 0x75, 0x74, | |||
| 0x68, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x33, 0x10, 0x09, 0x12, 0x11, 0x0a, 0x0d, 0x68, 0x77, 0x5f, | |||
| 0x61, 0x66, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x5f, 0x31, 0x10, 0x0a, 0x2a, 0xcd, 0x03, 0x0a, | |||
| 0x0b, 0x41, 0x77, 0x73, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x0b, 0x0a, 0x07, | |||
| 0x61, 0x77, 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x61, 0x77, 0x73, | |||
| 0x5f, 0x75, 0x73, 0x5f, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x32, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, | |||
| 0x61, 0x77, 0x73, 0x5f, 0x75, 0x73, 0x5f, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x02, 0x12, | |||
| 0x11, 0x0a, 0x0d, 0x61, 0x77, 0x73, 0x5f, 0x75, 0x73, 0x5f, 0x77, 0x65, 0x73, 0x74, 0x5f, 0x31, | |||
| 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x61, 0x77, 0x73, 0x5f, 0x75, 0x73, 0x5f, 0x77, 0x65, 0x73, | |||
| 0x74, 0x5f, 0x32, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x61, 0x77, 0x73, 0x5f, 0x61, 0x66, 0x5f, | |||
| 0x73, 0x6f, 0x75, 0x74, 0x68, 0x5f, 0x31, 0x10, 0x05, 0x12, 0x11, 0x0a, 0x0d, 0x61, 0x77, 0x73, | |||
| 0x5f, 0x61, 0x70, 0x5f, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x06, 0x12, 0x12, 0x0a, 0x0e, | |||
| 0x61, 0x77, 0x73, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x5f, 0x31, 0x10, 0x07, | |||
| 0x12, 0x16, 0x0a, 0x12, 0x61, 0x77, 0x73, 0x5f, 0x61, 0x70, 0x5f, 0x6e, 0x6f, 0x72, 0x74, 0x68, | |||
| 0x65, 0x61, 0x73, 0x74, 0x5f, 0x33, 0x10, 0x08, 0x12, 0x16, 0x0a, 0x12, 0x61, 0x77, 0x73, 0x5f, | |||
| 0x61, 0x70, 0x5f, 0x6e, 0x6f, 0x72, 0x74, 0x68, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x32, 0x10, 0x09, | |||
| 0x12, 0x16, 0x0a, 0x12, 0x61, 0x77, 0x73, 0x5f, 0x61, 0x70, 0x5f, 0x6e, 0x6f, 0x72, 0x74, 0x68, | |||
| 0x65, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x0a, 0x12, 0x16, 0x0a, 0x12, 0x61, 0x77, 0x73, 0x5f, | |||
| 0x61, 0x70, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x32, 0x10, 0x0b, | |||
| 0x12, 0x16, 0x0a, 0x12, 0x61, 0x77, 0x73, 0x5f, 0x61, 0x70, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, | |||
| 0x65, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x0c, 0x12, 0x14, 0x0a, 0x10, 0x61, 0x77, 0x73, 0x5f, | |||
| 0x63, 0x61, 0x5f, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, 0x5f, 0x31, 0x10, 0x0d, 0x12, 0x14, | |||
| 0x0a, 0x10, 0x61, 0x77, 0x73, 0x5f, 0x65, 0x75, 0x5f, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x61, 0x6c, | |||
| 0x5f, 0x31, 0x10, 0x0e, 0x12, 0x11, 0x0a, 0x0d, 0x61, 0x77, 0x73, 0x5f, 0x65, 0x75, 0x5f, 0x77, | |||
| 0x65, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x0f, 0x12, 0x11, 0x0a, 0x0d, 0x61, 0x77, 0x73, 0x5f, 0x65, | |||
| 0x75, 0x5f, 0x77, 0x65, 0x73, 0x74, 0x5f, 0x32, 0x10, 0x10, 0x12, 0x12, 0x0a, 0x0e, 0x61, 0x77, | |||
| 0x73, 0x5f, 0x65, 0x75, 0x5f, 0x73, 0x6f, 0x75, 0x74, 0x68, 0x5f, 0x31, 0x10, 0x11, 0x12, 0x11, | |||
| 0x0a, 0x0d, 0x61, 0x77, 0x73, 0x5f, 0x65, 0x75, 0x5f, 0x77, 0x65, 0x73, 0x74, 0x5f, 0x33, 0x10, | |||
| 0x12, 0x12, 0x12, 0x0a, 0x0e, 0x61, 0x77, 0x73, 0x5f, 0x65, 0x75, 0x5f, 0x6e, 0x6f, 0x72, 0x74, | |||
| 0x68, 0x5f, 0x31, 0x10, 0x13, 0x12, 0x12, 0x0a, 0x0e, 0x61, 0x77, 0x73, 0x5f, 0x6d, 0x65, 0x5f, | |||
| 0x73, 0x6f, 0x75, 0x74, 0x68, 0x5f, 0x31, 0x10, 0x14, 0x12, 0x11, 0x0a, 0x0d, 0x61, 0x77, 0x73, | |||
| 0x5f, 0x73, 0x61, 0x5f, 0x65, 0x61, 0x73, 0x74, 0x5f, 0x31, 0x10, 0x15, 0x32, 0x70, 0x0a, 0x0d, | |||
| 0x54, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x5f, 0x92, | |||
| 0x41, 0x5c, 0x12, 0x1e, 0xe6, 0x89, 0x80, 0xe6, 0x9c, 0x89, 0xe4, 0xba, 0x91, 0xe7, 0xa7, 0x9f, | |||
| 0xe6, 0x88, 0xb7, 0xe7, 0x9a, 0x84, 0xe8, 0xae, 0xa4, 0xe8, 0xaf, 0x81, 0xe6, 0x9c, 0x8d, 0xe5, | |||
| 0x8a, 0xa1, 0x1a, 0x3a, 0x0a, 0x17, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, | |||
| 0x6f, 0x72, 0x65, 0x20, 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x50, 0x43, 0x4d, 0x12, 0x1f, 0x68, | |||
| 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x6f, | |||
| 0x72, 0x67, 0x2e, 0x63, 0x6e, 0x2f, 0x4a, 0x43, 0x43, 0x45, 0x2f, 0x50, 0x43, 0x4d, 0x42, 0x30, | |||
| 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x6f, 0x72, 0x67, 0x2e, 0x63, 0x6e, | |||
| 0x2f, 0x4a, 0x43, 0x43, 0x45, 0x2f, 0x50, 0x43, 0x4d, 0x2f, 0x6c, 0x61, 0x6e, 0x5f, 0x74, 0x72, | |||
| 0x61, 0x6e, 0x73, 0x2f, 0x69, 0x64, 0x6c, 0x2f, 0x70, 0x62, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, | |||
| 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | |||
| } | |||
| var ( | |||
| @@ -0,0 +1,99 @@ | |||
| { | |||
| "swagger": "2.0", | |||
| "info": { | |||
| "title": "idl/demo/demo.proto", | |||
| "version": "version not set" | |||
| }, | |||
| "tags": [ | |||
| { | |||
| "name": "DemoService" | |||
| } | |||
| ], | |||
| "consumes": [ | |||
| "application/json" | |||
| ], | |||
| "produces": [ | |||
| "application/json" | |||
| ], | |||
| "paths": { | |||
| "/apis/demo": { | |||
| "post": { | |||
| "summary": "Echo 样例接口", | |||
| "operationId": "DemoService_Echo", | |||
| "responses": { | |||
| "200": { | |||
| "description": "A successful response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/demoStringMessage" | |||
| } | |||
| }, | |||
| "default": { | |||
| "description": "An unexpected error response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/rpcStatus" | |||
| } | |||
| } | |||
| }, | |||
| "parameters": [ | |||
| { | |||
| "name": "body", | |||
| "in": "body", | |||
| "required": true, | |||
| "schema": { | |||
| "$ref": "#/definitions/demoStringMessage" | |||
| } | |||
| } | |||
| ], | |||
| "tags": [ | |||
| "DemoService" | |||
| ], | |||
| "deprecated": true, | |||
| "security": [], | |||
| "externalDocs": { | |||
| "description": "Find out more about the interface", | |||
| "url": "https://github.com/grpc-ecosystem/grpc-gateway" | |||
| } | |||
| } | |||
| } | |||
| }, | |||
| "definitions": { | |||
| "demoStringMessage": { | |||
| "type": "object", | |||
| "properties": { | |||
| "value": { | |||
| "type": "string" | |||
| } | |||
| } | |||
| }, | |||
| "protobufAny": { | |||
| "type": "object", | |||
| "properties": { | |||
| "typeUrl": { | |||
| "type": "string" | |||
| }, | |||
| "value": { | |||
| "type": "string", | |||
| "format": "byte" | |||
| } | |||
| } | |||
| }, | |||
| "rpcStatus": { | |||
| "type": "object", | |||
| "properties": { | |||
| "code": { | |||
| "type": "integer", | |||
| "format": "int32" | |||
| }, | |||
| "message": { | |||
| "type": "string" | |||
| }, | |||
| "details": { | |||
| "type": "array", | |||
| "items": { | |||
| "$ref": "#/definitions/protobufAny" | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -1,44 +1,30 @@ | |||
| { | |||
| "swagger": "2.0", | |||
| "info": { | |||
| "title": "idl/pbecs/ecs.proto", | |||
| "version": "version not set" | |||
| }, | |||
| "tags": [ | |||
| { | |||
| "name": "EcsService" | |||
| } | |||
| ], | |||
| "consumes": [ | |||
| "application/json" | |||
| ], | |||
| "produces": [ | |||
| "application/json" | |||
| ], | |||
| "swagger": "2.0", | |||
| "info": { | |||
| "title": "idl/demo/demo.proto", | |||
| "version": "version not set" | |||
| }, | |||
| "paths": { | |||
| "/apis/demo": { | |||
| "/apis/ecs": { | |||
| "post": { | |||
| "security": [], | |||
| "tags": [ | |||
| "DemoService" | |||
| ], | |||
| "summary": "Echo 样例接口", | |||
| "externalDocs": { | |||
| "description": "Find out more about the interface", | |||
| "url": "https://github.com/grpc-ecosystem/grpc-gateway" | |||
| }, | |||
| "operationId": "DemoService_Echo", | |||
| "deprecated": true, | |||
| "parameters": [ | |||
| { | |||
| "name": "body", | |||
| "in": "body", | |||
| "required": true, | |||
| "schema": { | |||
| "$ref": "#/definitions/demoStringMessage" | |||
| } | |||
| } | |||
| ], | |||
| "summary": "查询ECS全量 - 根据云类型", | |||
| "operationId": "EcsService_ListEcs", | |||
| "responses": { | |||
| "200": { | |||
| "description": "A successful response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/demoStringMessage" | |||
| "$ref": "#/definitions/pbecsListResp" | |||
| } | |||
| }, | |||
| "default": { | |||
| @@ -47,16 +33,7 @@ | |||
| "$ref": "#/definitions/rpcStatus" | |||
| } | |||
| } | |||
| } | |||
| } | |||
| }, | |||
| "/apis/ecs": { | |||
| "post": { | |||
| "tags": [ | |||
| "EcsService" | |||
| ], | |||
| "summary": "查询ECS全量 - 根据云类型", | |||
| "operationId": "EcsService_ListEcs", | |||
| }, | |||
| "parameters": [ | |||
| { | |||
| "name": "body", | |||
| @@ -67,6 +44,15 @@ | |||
| } | |||
| } | |||
| ], | |||
| "tags": [ | |||
| "EcsService" | |||
| ] | |||
| } | |||
| }, | |||
| "/apis/ecs/all": { | |||
| "post": { | |||
| "summary": "查询所有云的ECS", | |||
| "operationId": "EcsService_ListEcsAll", | |||
| "responses": { | |||
| "200": { | |||
| "description": "A successful response.", | |||
| @@ -80,16 +66,7 @@ | |||
| "$ref": "#/definitions/rpcStatus" | |||
| } | |||
| } | |||
| } | |||
| } | |||
| }, | |||
| "/apis/ecs/all": { | |||
| "post": { | |||
| "tags": [ | |||
| "EcsService" | |||
| ], | |||
| "summary": "查询所有云的ECS", | |||
| "operationId": "EcsService_ListEcsAll", | |||
| }, | |||
| "parameters": [ | |||
| { | |||
| "name": "body", | |||
| @@ -100,11 +77,20 @@ | |||
| } | |||
| } | |||
| ], | |||
| "tags": [ | |||
| "EcsService" | |||
| ] | |||
| } | |||
| }, | |||
| "/apis/ecs/detail": { | |||
| "post": { | |||
| "summary": "查询ECS明细 - 支持云类型、区域、账户、分页等过滤条件", | |||
| "operationId": "EcsService_ListEcsDetail", | |||
| "responses": { | |||
| "200": { | |||
| "description": "A successful response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/pbecsListResp" | |||
| "$ref": "#/definitions/pbecsListDetailResp" | |||
| } | |||
| }, | |||
| "default": { | |||
| @@ -113,16 +99,7 @@ | |||
| "$ref": "#/definitions/rpcStatus" | |||
| } | |||
| } | |||
| } | |||
| } | |||
| }, | |||
| "/apis/ecs/detail": { | |||
| "post": { | |||
| "tags": [ | |||
| "EcsService" | |||
| ], | |||
| "summary": "查询ECS明细 - 支持云类型、区域、账户、分页等过滤条件", | |||
| "operationId": "EcsService_ListEcsDetail", | |||
| }, | |||
| "parameters": [ | |||
| { | |||
| "name": "body", | |||
| @@ -133,110 +110,91 @@ | |||
| } | |||
| } | |||
| ], | |||
| "responses": { | |||
| "200": { | |||
| "description": "A successful response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/pbecsListDetailResp" | |||
| } | |||
| }, | |||
| "default": { | |||
| "description": "An unexpected error response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/rpcStatus" | |||
| } | |||
| } | |||
| } | |||
| "tags": [ | |||
| "EcsService" | |||
| ] | |||
| } | |||
| } | |||
| }, | |||
| "definitions": { | |||
| "demoStringMessage": { | |||
| "type": "object", | |||
| "properties": { | |||
| "value": { | |||
| "type": "string" | |||
| } | |||
| } | |||
| }, | |||
| "pbecsEcsInstance": { | |||
| "type": "object", | |||
| "properties": { | |||
| "provider": { | |||
| "$ref": "#/definitions/pbtenantCloudProvider", | |||
| "title": "云类型" | |||
| }, | |||
| "accountName": { | |||
| "type": "string", | |||
| "title": "账号名称" | |||
| }, | |||
| "chargeType": { | |||
| "type": "string", | |||
| "title": "收费类型" | |||
| }, | |||
| "cpu": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "vcpu数" | |||
| }, | |||
| "creationTime": { | |||
| "instanceId": { | |||
| "type": "string", | |||
| "title": "创建时间,ISO8601" | |||
| "title": "实例id" | |||
| }, | |||
| "description": { | |||
| "instanceName": { | |||
| "type": "string", | |||
| "title": "实例描述" | |||
| "title": "实例名称" | |||
| }, | |||
| "expireTime": { | |||
| "regionName": { | |||
| "type": "string", | |||
| "title": "过期时间" | |||
| "title": "地域,数据中心" | |||
| }, | |||
| "innerIps": { | |||
| "publicIps": { | |||
| "type": "array", | |||
| "title": "内网ip", | |||
| "items": { | |||
| "type": "string" | |||
| } | |||
| }, | |||
| "instanceId": { | |||
| "type": "string", | |||
| "title": "实例id" | |||
| }, | |||
| "instanceName": { | |||
| "type": "string", | |||
| "title": "实例名称" | |||
| }, | |||
| "title": "公网ip" | |||
| }, | |||
| "instanceType": { | |||
| "type": "string", | |||
| "title": "实例类型" | |||
| }, | |||
| "cpu": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "vcpu数" | |||
| }, | |||
| "memory": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "内存MB" | |||
| }, | |||
| "provider": { | |||
| "title": "云类型", | |||
| "$ref": "#/definitions/pbtenantCloudProvider" | |||
| "description": { | |||
| "type": "string", | |||
| "title": "实例描述" | |||
| }, | |||
| "publicIps": { | |||
| "status": { | |||
| "type": "string", | |||
| "title": "状态" | |||
| }, | |||
| "creationTime": { | |||
| "type": "string", | |||
| "title": "创建时间,ISO8601" | |||
| }, | |||
| "expireTime": { | |||
| "type": "string", | |||
| "title": "过期时间" | |||
| }, | |||
| "innerIps": { | |||
| "type": "array", | |||
| "title": "公网ip", | |||
| "items": { | |||
| "type": "string" | |||
| } | |||
| }, | |||
| "title": "内网ip" | |||
| }, | |||
| "regionName": { | |||
| "vpcId": { | |||
| "type": "string", | |||
| "title": "地域,数据中心" | |||
| "title": "vpc id" | |||
| }, | |||
| "resourceGroupId": { | |||
| "type": "string", | |||
| "title": "资源组id" | |||
| }, | |||
| "status": { | |||
| "type": "string", | |||
| "title": "状态" | |||
| }, | |||
| "vpcId": { | |||
| "chargeType": { | |||
| "type": "string", | |||
| "title": "vcp id" | |||
| "title": "收费类型" | |||
| } | |||
| } | |||
| }, | |||
| @@ -246,13 +204,18 @@ | |||
| "pbecsListDetailReq": { | |||
| "type": "object", | |||
| "properties": { | |||
| "provider": { | |||
| "$ref": "#/definitions/pbtenantCloudProvider", | |||
| "title": "云名称" | |||
| }, | |||
| "accountName": { | |||
| "type": "string", | |||
| "title": "账户名称,根据config.yaml中的配置,默认为第一个配置的账户" | |||
| }, | |||
| "nextToken": { | |||
| "type": "string", | |||
| "title": "分页相关参数,下一页的token" | |||
| "regionId": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "区域Id,参考 tenant.proto 中的各个云的区域" | |||
| }, | |||
| "pageNumber": { | |||
| "type": "integer", | |||
| @@ -264,14 +227,9 @@ | |||
| "format": "int32", | |||
| "title": "分页相关参数,每页数量" | |||
| }, | |||
| "provider": { | |||
| "title": "云名称", | |||
| "$ref": "#/definitions/pbtenantCloudProvider" | |||
| }, | |||
| "regionId": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "区域Id,参考 tenant.proto 中的各个云的区域" | |||
| "nextToken": { | |||
| "type": "string", | |||
| "title": "分页相关参数,下一页的token" | |||
| } | |||
| } | |||
| }, | |||
| @@ -280,19 +238,15 @@ | |||
| "properties": { | |||
| "ecses": { | |||
| "type": "array", | |||
| "title": "Ecs 机器集合", | |||
| "items": { | |||
| "$ref": "#/definitions/pbecsEcsInstance" | |||
| } | |||
| }, | |||
| "title": "Ecs 机器集合" | |||
| }, | |||
| "finished": { | |||
| "type": "boolean", | |||
| "title": "查询是否完成,如果为否-false,则可以将下面三个分页参数填入到请求中,继续查询" | |||
| }, | |||
| "nextToken": { | |||
| "type": "string", | |||
| "title": "分页相关参数,下一页的token" | |||
| }, | |||
| "pageNumber": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| @@ -303,6 +257,10 @@ | |||
| "format": "int32", | |||
| "title": "分页相关参数,每页数量" | |||
| }, | |||
| "nextToken": { | |||
| "type": "string", | |||
| "title": "分页相关参数,下一页的token" | |||
| }, | |||
| "requestId": { | |||
| "type": "string", | |||
| "title": "请求id,出现问题后提供给云厂商,排查问题" | |||
| @@ -313,8 +271,8 @@ | |||
| "type": "object", | |||
| "properties": { | |||
| "provider": { | |||
| "title": "云名称", | |||
| "$ref": "#/definitions/pbtenantCloudProvider" | |||
| "$ref": "#/definitions/pbtenantCloudProvider", | |||
| "title": "云名称" | |||
| } | |||
| } | |||
| }, | |||
| @@ -323,24 +281,24 @@ | |||
| "properties": { | |||
| "ecses": { | |||
| "type": "array", | |||
| "title": "Ecs 机器集合", | |||
| "items": { | |||
| "$ref": "#/definitions/pbecsEcsInstance" | |||
| } | |||
| }, | |||
| "title": "Ecs 机器集合" | |||
| } | |||
| } | |||
| }, | |||
| "pbtenantCloudProvider": { | |||
| "description": "- ali: 0 - 阿里云\n - tencent: 1 - 腾讯云\n - huawei: 2 - 华为云\n - aws: 3 - 亚马逊云", | |||
| "type": "string", | |||
| "title": "云提供商", | |||
| "default": "ali", | |||
| "enum": [ | |||
| "ali", | |||
| "tencent", | |||
| "huawei", | |||
| "aws" | |||
| ] | |||
| ], | |||
| "default": "ali", | |||
| "description": "- ali: 0 - 阿里云\n - tencent: 1 - 腾讯云\n - huawei: 2 - 华为云\n - aws: 3 - 亚马逊云", | |||
| "title": "云提供商" | |||
| }, | |||
| "protobufAny": { | |||
| "type": "object", | |||
| @@ -361,24 +319,16 @@ | |||
| "type": "integer", | |||
| "format": "int32" | |||
| }, | |||
| "message": { | |||
| "type": "string" | |||
| }, | |||
| "details": { | |||
| "type": "array", | |||
| "items": { | |||
| "$ref": "#/definitions/protobufAny" | |||
| } | |||
| }, | |||
| "message": { | |||
| "type": "string" | |||
| } | |||
| } | |||
| } | |||
| }, | |||
| "tags": [ | |||
| { | |||
| "name": "DemoService" | |||
| }, | |||
| { | |||
| "name": "EcsService" | |||
| } | |||
| ] | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,436 @@ | |||
| { | |||
| "swagger": "2.0", | |||
| "info": { | |||
| "title": "idl/pbpod/pod.proto", | |||
| "version": "version not set" | |||
| }, | |||
| "tags": [ | |||
| { | |||
| "name": "PodService" | |||
| } | |||
| ], | |||
| "consumes": [ | |||
| "application/json" | |||
| ], | |||
| "produces": [ | |||
| "application/json" | |||
| ], | |||
| "paths": { | |||
| "/apis/pod": { | |||
| "post": { | |||
| "summary": "查询pod全量 - 根据云类型", | |||
| "operationId": "PodService_ListPod", | |||
| "responses": { | |||
| "200": { | |||
| "description": "A successful response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/pbpodListResp" | |||
| } | |||
| }, | |||
| "default": { | |||
| "description": "An unexpected error response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/rpcStatus" | |||
| } | |||
| } | |||
| }, | |||
| "parameters": [ | |||
| { | |||
| "name": "body", | |||
| "in": "body", | |||
| "required": true, | |||
| "schema": { | |||
| "$ref": "#/definitions/pbpodListReq" | |||
| } | |||
| } | |||
| ], | |||
| "tags": [ | |||
| "PodService" | |||
| ] | |||
| } | |||
| }, | |||
| "/apis/pod/create": { | |||
| "post": { | |||
| "summary": "创建pod - 支持云类型、区域", | |||
| "operationId": "PodService_CreatePod", | |||
| "responses": { | |||
| "200": { | |||
| "description": "A successful response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/pbpodCreateRep" | |||
| } | |||
| }, | |||
| "default": { | |||
| "description": "An unexpected error response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/rpcStatus" | |||
| } | |||
| } | |||
| }, | |||
| "parameters": [ | |||
| { | |||
| "name": "body", | |||
| "in": "body", | |||
| "required": true, | |||
| "schema": { | |||
| "$ref": "#/definitions/pbpodCreateReq" | |||
| } | |||
| } | |||
| ], | |||
| "tags": [ | |||
| "PodService" | |||
| ] | |||
| } | |||
| }, | |||
| "/apis/pod/detail": { | |||
| "post": { | |||
| "summary": "查询Pod明细 - 支持云类型、区域、账户、分页等过滤条件", | |||
| "operationId": "PodService_ListPodDetail", | |||
| "responses": { | |||
| "200": { | |||
| "description": "A successful response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/pbpodListDetailResp" | |||
| } | |||
| }, | |||
| "default": { | |||
| "description": "An unexpected error response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/rpcStatus" | |||
| } | |||
| } | |||
| }, | |||
| "parameters": [ | |||
| { | |||
| "name": "body", | |||
| "in": "body", | |||
| "required": true, | |||
| "schema": { | |||
| "$ref": "#/definitions/pbpodListDetailReq" | |||
| } | |||
| } | |||
| ], | |||
| "tags": [ | |||
| "PodService" | |||
| ] | |||
| } | |||
| } | |||
| }, | |||
| "definitions": { | |||
| "pbpodContainer": { | |||
| "type": "object", | |||
| "properties": { | |||
| "image": { | |||
| "type": "string", | |||
| "title": "容器镜像" | |||
| }, | |||
| "name": { | |||
| "type": "string", | |||
| "title": "容器名称" | |||
| }, | |||
| "cpu": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "vcpu数" | |||
| }, | |||
| "memory": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "内存MB" | |||
| }, | |||
| "restartCount": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "重启次数" | |||
| } | |||
| } | |||
| }, | |||
| "pbpodCreateRep": { | |||
| "type": "object", | |||
| "properties": { | |||
| "id": { | |||
| "type": "array", | |||
| "items": { | |||
| "type": "string" | |||
| } | |||
| }, | |||
| "requestId": { | |||
| "type": "string" | |||
| } | |||
| } | |||
| }, | |||
| "pbpodCreateReq": { | |||
| "type": "object", | |||
| "properties": { | |||
| "provider": { | |||
| "$ref": "#/definitions/pbtenantCloudProvider", | |||
| "title": "云名称" | |||
| }, | |||
| "accountName": { | |||
| "type": "string", | |||
| "title": "账户名称,根据config.yaml中的配置,默认为第一个配置的账户" | |||
| }, | |||
| "regionId": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "区域Id,参考 tenant.proto 中的各个云的区域" | |||
| }, | |||
| "containerImage": { | |||
| "type": "string", | |||
| "title": "镜像地址" | |||
| }, | |||
| "containerName": { | |||
| "type": "string", | |||
| "title": "容器名称" | |||
| }, | |||
| "containerGroupName": { | |||
| "type": "string", | |||
| "title": "容器实例名称" | |||
| }, | |||
| "cpu": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "vcpu数" | |||
| }, | |||
| "memory": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "内存MB" | |||
| }, | |||
| "namespace": { | |||
| "type": "string", | |||
| "title": "namespace (华为云cci必需)" | |||
| }, | |||
| "securityGroupId": { | |||
| "type": "array", | |||
| "items": { | |||
| "type": "string" | |||
| }, | |||
| "title": "安全组id(腾讯云eks必需)" | |||
| }, | |||
| "subnetId": { | |||
| "type": "array", | |||
| "items": { | |||
| "type": "string" | |||
| }, | |||
| "title": "subnet_id 子网id (腾讯云eks必需)" | |||
| }, | |||
| "vpcId": { | |||
| "type": "string", | |||
| "title": "vpc id (腾讯云eks必需)" | |||
| } | |||
| } | |||
| }, | |||
| "pbpodListDetailReq": { | |||
| "type": "object", | |||
| "properties": { | |||
| "provider": { | |||
| "$ref": "#/definitions/pbtenantCloudProvider", | |||
| "title": "云名称" | |||
| }, | |||
| "accountName": { | |||
| "type": "string", | |||
| "title": "账户名称,根据config.yaml中的配置,默认为第一个配置的账户" | |||
| }, | |||
| "regionId": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "区域Id,参考 tenant.proto 中的各个云的区域" | |||
| }, | |||
| "pageNumber": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "分页相关参数,页码" | |||
| }, | |||
| "pageSize": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "分页相关参数,每页数量" | |||
| }, | |||
| "nextToken": { | |||
| "type": "string", | |||
| "title": "分页相关参数,下一页的token" | |||
| } | |||
| } | |||
| }, | |||
| "pbpodListDetailResp": { | |||
| "type": "object", | |||
| "properties": { | |||
| "pods": { | |||
| "type": "array", | |||
| "items": { | |||
| "$ref": "#/definitions/pbpodPodInstance" | |||
| }, | |||
| "title": "pod 容器组集合" | |||
| }, | |||
| "finished": { | |||
| "type": "boolean", | |||
| "title": "查询是否完成,如果为否-false,则可以将下面三个分页参数填入到请求中,继续查询" | |||
| }, | |||
| "pageNumber": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "分页相关参数,页码" | |||
| }, | |||
| "pageSize": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "分页相关参数,每页数量" | |||
| }, | |||
| "nextToken": { | |||
| "type": "string", | |||
| "title": "分页相关参数,下一页的token" | |||
| }, | |||
| "requestId": { | |||
| "type": "string", | |||
| "title": "请求id,出现问题后提供给云厂商,排查问题" | |||
| } | |||
| } | |||
| }, | |||
| "pbpodListReq": { | |||
| "type": "object", | |||
| "properties": { | |||
| "provider": { | |||
| "$ref": "#/definitions/pbtenantCloudProvider", | |||
| "title": "云名称" | |||
| } | |||
| } | |||
| }, | |||
| "pbpodListResp": { | |||
| "type": "object", | |||
| "properties": { | |||
| "pods": { | |||
| "type": "array", | |||
| "items": { | |||
| "$ref": "#/definitions/pbpodPodInstance" | |||
| }, | |||
| "title": "Pod 容器组集合" | |||
| } | |||
| } | |||
| }, | |||
| "pbpodPodInstance": { | |||
| "type": "object", | |||
| "properties": { | |||
| "provider": { | |||
| "$ref": "#/definitions/pbtenantCloudProvider", | |||
| "title": "云类型" | |||
| }, | |||
| "accountName": { | |||
| "type": "string", | |||
| "title": "账号名称" | |||
| }, | |||
| "instanceId": { | |||
| "type": "string", | |||
| "title": "实例id" | |||
| }, | |||
| "instanceName": { | |||
| "type": "string", | |||
| "title": "实例名称" | |||
| }, | |||
| "regionName": { | |||
| "type": "string", | |||
| "title": "地域,数据中心" | |||
| }, | |||
| "publicIps": { | |||
| "type": "string", | |||
| "title": "公网ip" | |||
| }, | |||
| "instanceType": { | |||
| "type": "string", | |||
| "title": "实例类型" | |||
| }, | |||
| "cpu": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "vcpu数" | |||
| }, | |||
| "memory": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "内存MB" | |||
| }, | |||
| "description": { | |||
| "type": "string", | |||
| "title": "实例描述" | |||
| }, | |||
| "status": { | |||
| "type": "string", | |||
| "title": "状态" | |||
| }, | |||
| "creationTime": { | |||
| "type": "string", | |||
| "title": "创建时间,ISO8601" | |||
| }, | |||
| "expireTime": { | |||
| "type": "string", | |||
| "title": "过期时间" | |||
| }, | |||
| "innerIps": { | |||
| "type": "array", | |||
| "items": { | |||
| "type": "string" | |||
| }, | |||
| "title": "内网ip" | |||
| }, | |||
| "vpcId": { | |||
| "type": "string", | |||
| "title": "vpc id" | |||
| }, | |||
| "securityGroupId": { | |||
| "type": "string", | |||
| "title": "安全组id" | |||
| }, | |||
| "SubnetId": { | |||
| "type": "string", | |||
| "title": "子网Id" | |||
| }, | |||
| "Container": { | |||
| "$ref": "#/definitions/pbpodContainer", | |||
| "title": "容器实例" | |||
| } | |||
| } | |||
| }, | |||
| "pbtenantCloudProvider": { | |||
| "type": "string", | |||
| "enum": [ | |||
| "ali", | |||
| "tencent", | |||
| "huawei", | |||
| "aws" | |||
| ], | |||
| "default": "ali", | |||
| "description": "- ali: 0 - 阿里云\n - tencent: 1 - 腾讯云\n - huawei: 2 - 华为云\n - aws: 3 - 亚马逊云", | |||
| "title": "云提供商" | |||
| }, | |||
| "protobufAny": { | |||
| "type": "object", | |||
| "properties": { | |||
| "typeUrl": { | |||
| "type": "string" | |||
| }, | |||
| "value": { | |||
| "type": "string", | |||
| "format": "byte" | |||
| } | |||
| } | |||
| }, | |||
| "rpcStatus": { | |||
| "type": "object", | |||
| "properties": { | |||
| "code": { | |||
| "type": "integer", | |||
| "format": "int32" | |||
| }, | |||
| "message": { | |||
| "type": "string" | |||
| }, | |||
| "details": { | |||
| "type": "array", | |||
| "items": { | |||
| "$ref": "#/definitions/protobufAny" | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,46 @@ | |||
| { | |||
| "swagger": "2.0", | |||
| "info": { | |||
| "title": "idl/pbtenant/tenant.proto", | |||
| "version": "version not set" | |||
| }, | |||
| "consumes": [ | |||
| "application/json" | |||
| ], | |||
| "produces": [ | |||
| "application/json" | |||
| ], | |||
| "paths": {}, | |||
| "definitions": { | |||
| "protobufAny": { | |||
| "type": "object", | |||
| "properties": { | |||
| "typeUrl": { | |||
| "type": "string" | |||
| }, | |||
| "value": { | |||
| "type": "string", | |||
| "format": "byte" | |||
| } | |||
| } | |||
| }, | |||
| "rpcStatus": { | |||
| "type": "object", | |||
| "properties": { | |||
| "code": { | |||
| "type": "integer", | |||
| "format": "int32" | |||
| }, | |||
| "message": { | |||
| "type": "string" | |||
| }, | |||
| "details": { | |||
| "type": "array", | |||
| "items": { | |||
| "$ref": "#/definitions/protobufAny" | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -3,16 +3,17 @@ package main | |||
| import ( | |||
| "context" | |||
| "flag" | |||
| "gitlink.org.cn/JCCE/PCM/common/server" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/demo" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "net" | |||
| "net/http" | |||
| "github.com/golang/glog" | |||
| "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" | |||
| "github.com/pkg/errors" | |||
| "gitlink.org.cn/JCCE/PCM/common/server" | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/demo" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "google.golang.org/grpc" | |||
| ) | |||
| @@ -35,6 +36,8 @@ func run() error { | |||
| return errors.Wrap(err, "RegisterDemoServiceHandlerFromEndpoint error") | |||
| } else if err = pbecs.RegisterEcsServiceHandlerFromEndpoint(ctx, mux, *grpcServerEndpoint, opts); err != nil { | |||
| return errors.Wrap(err, "RegisterEcsServiceHandlerFromEndpoint error") | |||
| } else if err = pbpod.RegisterPodServiceHandlerFromEndpoint(ctx, mux, *grpcServerEndpoint, opts); err != nil { | |||
| return errors.Wrap(err, "RegisterPoderviceHandlerFromEndpoint error") | |||
| } | |||
| // Start HTTP server (and proxy calls to gRPC server endpoint) | |||
| @@ -65,6 +68,7 @@ func main() { | |||
| s := grpc.NewServer() | |||
| demo.RegisterDemoServiceServer(s, &server.Server{}) | |||
| pbecs.RegisterEcsServiceServer(s, &server.Server{}) | |||
| pbpod.RegisterPodServiceServer(s, &server.Server{}) | |||
| if err = s.Serve(lis); err != nil { | |||
| glog.Fatalf("failed to serve: %v", err) | |||