| @@ -0,0 +1,33 @@ | |||
| # Binaries for programs and plugins | |||
| *.exe | |||
| *.exe~ | |||
| *.dll | |||
| *.so | |||
| *.dylib | |||
| PCM | |||
| # Test binary, built with `go test -c` | |||
| *.test | |||
| # Output of the go coverage tool, specifically when used with LiteIDE | |||
| *.out | |||
| coverage.txt | |||
| # Dependency directories (remove the comment below to include it) | |||
| vendor/ | |||
| # buf for protobuf | |||
| buf.lock | |||
| # idea project | |||
| .idea/ | |||
| .vscode/ | |||
| # remove go sum | |||
| go.sum | |||
| # config file | |||
| aksk.conf | |||
| config.yaml | |||
| log/ | |||
| @@ -0,0 +1,64 @@ | |||
| # This files contains all configuration options for analysis running. | |||
| # More details please refer to: https://golangci-lint.run/usage/configuration/ | |||
| run: | |||
| # timeout for analysis, e.g. 30s, 5m, default is 1m | |||
| timeout: 5m | |||
| # which dirs to skip: issues from them won't be reported; | |||
| # can use regexp here: generated.*, regexp is applied on full path; | |||
| # default value is empty list, but default dirs are skipped independently | |||
| # from this option's value (see skip-dirs-use-default). | |||
| # "/" will be replaced by current OS file path separator to properly work | |||
| # on Windows. | |||
| skip-dirs: | |||
| - hack/tools/preferredimports # This code is directly lifted from the Kubernetes codebase, skip checking | |||
| # default is true. Enables skipping of directories: | |||
| # vendor$, third_party$, testdata$, examples$, Godeps$, builtin$ | |||
| skip-dirs-use-default: true | |||
| # One of 'readonly' and 'vendor'. | |||
| # - readonly: the go command is disallowed from the implicit automatic updating of go.mod described above. | |||
| # Instead, it fails when any changes to go.mod are needed. This setting is most useful to check | |||
| # that go.mod does not need updates, such as in a continuous integration and testing system. | |||
| # - vendor: the go command assumes that the vendor directory holds the correct copies of dependencies and ignores | |||
| # the dependency descriptions in go.mod. | |||
| modules-download-mode: readonly | |||
| linters: | |||
| enable: | |||
| # linters maintained by golang.org | |||
| - gofmt | |||
| - goimports | |||
| - govet | |||
| # linters default enabled by golangci-lint . | |||
| - deadcode | |||
| - errcheck | |||
| - gosimple | |||
| - ineffassign | |||
| - staticcheck | |||
| - structcheck | |||
| - typecheck | |||
| - unused | |||
| - varcheck | |||
| # other linters supported by golangci-lint. | |||
| - gocyclo | |||
| - gosec | |||
| - whitespace | |||
| - revive | |||
| linters-settings: | |||
| goimports: | |||
| local-prefixes: github.com/karmada-io/karmada | |||
| gocyclo: | |||
| # minimal cyclomatic complexity to report | |||
| min-complexity: 15 | |||
| issues: | |||
| # The list of ids of default excludes to include or disable. By default it's empty. | |||
| include: | |||
| # disable excluding of issues about comments from revive | |||
| # see https://golangci-lint.run/usage/configuration/#command-line-options for more info | |||
| - EXC0012 | |||
| - EXC0013 | |||
| - EXC0014 | |||
| @@ -1,26 +0,0 @@ | |||
| [pod_create_conf] | |||
| region_id=cn-hangzhou | |||
| #容器实例名称(pod名) 对应阿里 ContainerGroupName(阿里必需) | |||
| container_group_name=pcm-test-ali-pod | |||
| #镜像地址 对应阿里 Container.Image(阿里必需) | |||
| container_image=registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx | |||
| #容器名称 对应阿里 Container.Name(阿里必需) | |||
| container_name=pcm-test-ali-container | |||
| [pod_delete_conf] | |||
| # 地域id | |||
| region_id=cn-hangzhou | |||
| #容器实例ID | |||
| container_group_id=eci-bp1c3eqfq98nz2kbiooo | |||
| [pod_list_conf] | |||
| # 地域id | |||
| region_id=cn-hangzhou | |||
| [pod_update_conf] | |||
| # 地域id | |||
| region_id=cn-hangzhou | |||
| #容器实例ID | |||
| container_group_id=eci-bp1c3eqfq98nz2kbiooo | |||
| #可选 这里用重启策略做更新测试 | |||
| restart_policy=Never | |||
| @@ -1,121 +0,0 @@ | |||
| package eci | |||
| import ( | |||
| "PCM/adaptor/container_api_adaptor/common/auth/aksk" | |||
| "PCM/adaptor/container_api_adaptor/common/config" | |||
| "fmt" | |||
| "github.com/aliyun/alibaba-cloud-sdk-go/services/eci" | |||
| ) | |||
| // CreateContainerGroup 创建 | |||
| func CreateContainerGroup(cloudStack string, akskPath string, configPath string) string { | |||
| var client *eci.Client | |||
| configCommon, _ := config.PCMconfig(configPath) | |||
| configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| //创建客户端 | |||
| client, _ = eci.NewClientWithAccessKey(configCommon.RegionId, configAksk.AccessKey, configAksk.SecretKey) | |||
| // 生成创建请求 | |||
| createContainerRequest := eci.CreateCreateContainerGroupRequest() | |||
| // 必需参数 | |||
| //区域ID | |||
| createContainerRequest.RegionId = configCommon.RegionId | |||
| //POD名称 | |||
| createContainerRequest.ContainerGroupName = configCommon.ContainerGroupName | |||
| //容器名称和镜像名称 | |||
| createContainerRequestContainer := make([]eci.CreateContainerGroupContainer, 1) | |||
| createContainerRequestContainer[0].Image = configCommon.ContainerImage | |||
| createContainerRequestContainer[0].Name = configCommon.ContainerName | |||
| createContainerRequest.Container = &createContainerRequestContainer | |||
| client.GetConfig().MaxRetryTime = 0 | |||
| createContainerGroupResponse, err := client.CreateContainerGroup(createContainerRequest) | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| containerGroupId := createContainerGroupResponse.ContainerGroupId | |||
| fmt.Println("Alibaba ContainerGroup created:", containerGroupId) | |||
| return containerGroupId | |||
| } | |||
| // DescribeContainerGroup 查询Pod | |||
| func DescribeContainerGroup(cloudStack string, akskPath string, configPath string) eci.DescribeContainerGroupsContainerGroup0 { | |||
| var client *eci.Client | |||
| configCommon, _ := config.PCMconfig(configPath) | |||
| configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| client, _ = eci.NewClientWithAccessKey(configCommon.RegionId, configAksk.AccessKey, configAksk.SecretKey) | |||
| // 生成查询请求 | |||
| describeContainerGroupsRequest := eci.CreateDescribeContainerGroupsRequest() | |||
| describeContainerGroupsRequest.RegionId = configCommon.RegionIdList | |||
| describeContainerGroupsResponse, err := client.DescribeContainerGroups(describeContainerGroupsRequest) | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| describeContainerGroupNumber := len(describeContainerGroupsResponse.ContainerGroups) | |||
| //当前区域没有Pod情形的处理 | |||
| if describeContainerGroupsResponse.TotalCount != 1 && describeContainerGroupNumber != 1 { | |||
| fmt.Println("Invalid ContainerGroups count", describeContainerGroupsResponse.TotalCount, describeContainerGroupNumber) | |||
| panic("Invalid ContainerGroups count") | |||
| } | |||
| fmt.Println("Alibaba ContainerGroup Name:", describeContainerGroupsResponse.ContainerGroups[0].ContainerGroupName, "\n", | |||
| "ContainerGroup Id:", describeContainerGroupsResponse.ContainerGroups[0].ContainerGroupId) | |||
| return describeContainerGroupsResponse.ContainerGroups[0] | |||
| } | |||
| // UpdateContainerGroup 更新Pod | |||
| func UpdateContainerGroup(cloudStack string, akskPath string, configPath string) string { | |||
| var client *eci.Client | |||
| configCommon, _ := config.PCMconfig(configPath) | |||
| configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| client, _ = eci.NewClientWithAccessKey(configCommon.RegionId, configAksk.AccessKey, configAksk.SecretKey) | |||
| //生成更新请求 | |||
| updateContainerGroupRequest := eci.CreateUpdateContainerGroupRequest() | |||
| updateContainerGroupRequest.RegionId = configCommon.RegionIdUpdate | |||
| updateContainerGroupRequest.ContainerGroupId = configCommon.ContainerGroupIdUpdate | |||
| //容器实体内容,这里测试可以修改配置文件中的重启策略 | |||
| updateContainerRequestContainer := make([]eci.UpdateContainerGroupContainer, 1) | |||
| updateContainerRequestContainer[0].Image = configCommon.ContainerImage | |||
| updateContainerRequestContainer[0].Name = configCommon.ContainerName | |||
| updateContainerGroupRequest.Container = &updateContainerRequestContainer | |||
| updateContainerGroupRequest.RestartPolicy = configCommon.RestartPolicyUpdate | |||
| updateContainerGroupResponse, err := client.UpdateContainerGroup(updateContainerGroupRequest) | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| requestId := updateContainerGroupResponse.RequestId | |||
| fmt.Println("Alibaba ContainerGroup: ", configCommon.ContainerGroupIdUpdate, " Updated with request ID:", requestId) | |||
| return requestId | |||
| } | |||
| // DeleteContainerGroup 删除Pod | |||
| func DeleteContainerGroup(cloudStack string, akskPath string, configPath string) string { | |||
| var client *eci.Client | |||
| configCommon, _ := config.PCMconfig(configPath) | |||
| configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| client, _ = eci.NewClientWithAccessKey(configCommon.RegionId, configAksk.AccessKey, configAksk.SecretKey) | |||
| //生成删除请求 | |||
| deleteContainerGroupRequest := eci.CreateDeleteContainerGroupRequest() | |||
| deleteContainerGroupRequest.RegionId = configCommon.RegionIdDelete | |||
| deleteContainerGroupRequest.ContainerGroupId = configCommon.ContainerGroupIdDelete | |||
| deleteContainerGroupResponse, err := client.DeleteContainerGroup(deleteContainerGroupRequest) | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| requestId := deleteContainerGroupResponse.RequestId | |||
| fmt.Println("Alibaba ContainerGroup: ", configCommon.ContainerGroupIdUpdate, " Deleted with request ID:", requestId) | |||
| return requestId | |||
| } | |||
| @@ -1,99 +0,0 @@ | |||
| package api | |||
| import ( | |||
| "PCM/adaptor/container_api_adaptor/alibaba/eci" | |||
| cciAksk "PCM/adaptor/container_api_adaptor/huawei/pkg/auth/aksk" | |||
| cci "PCM/adaptor/container_api_adaptor/huawei/resources/pod" | |||
| "PCM/adaptor/container_api_adaptor/tencent/eks" | |||
| ) | |||
| //CreatePod 创建Pod通用方法 | |||
| func CreatePod(cloudStack string, akskPath string, configPath string) { | |||
| switch cloudStack { | |||
| case "alibaba": | |||
| eci.CreateContainerGroup(cloudStack, akskPath, configPath) | |||
| case "huawei": | |||
| cs, err := cciAksk.NewClient(cloudStack, akskPath, configPath) | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| _, err = cci.CreatePod(cs, configPath) | |||
| if err != nil { | |||
| return | |||
| } | |||
| case "tencent": | |||
| eks.CreateEksInstance(cloudStack, akskPath, configPath) | |||
| } | |||
| } | |||
| // DeletePod 删除Pod 通用方法 | |||
| func DeletePod(cloudStack string, akskPath string, configPath string) { | |||
| switch cloudStack { | |||
| case "alibaba": | |||
| eci.DeleteContainerGroup(cloudStack, akskPath, configPath) | |||
| case "huawei": | |||
| cs, err := cciAksk.NewClient(cloudStack, akskPath, configPath) | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| err = cci.DeletePod(cs, configPath) | |||
| if err != nil { | |||
| return | |||
| } | |||
| case "tencent": | |||
| eks.DeleteEksInstance(cloudStack, akskPath, configPath) | |||
| } | |||
| } | |||
| //UpdatePod 更新Pod通用方法 | |||
| func UpdatePod(cloudStack string, akskPath string, configPath string) { | |||
| switch cloudStack { | |||
| case "alibaba": | |||
| eci.UpdateContainerGroup(cloudStack, akskPath, configPath) | |||
| case "huawei": | |||
| cs, err := cciAksk.NewClient(cloudStack, akskPath, configPath) | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| _, err = cci.UpdatePod(cs, configPath) | |||
| if err != nil { | |||
| return | |||
| } | |||
| case "tencent": | |||
| eks.UpdateEksInstance(cloudStack, akskPath, configPath) | |||
| } | |||
| } | |||
| //ListPod 查询Pod通用方法 | |||
| func ListPod(cloudStack string, akskPath string, configPath string) { | |||
| switch cloudStack { | |||
| case "alibaba": | |||
| eci.DescribeContainerGroup(cloudStack, akskPath, configPath) | |||
| case "huawei": | |||
| cs, err := cciAksk.NewClient(cloudStack, akskPath, configPath) | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| _, err = cci.ListPod(cs, configPath) | |||
| if err != nil { | |||
| return | |||
| } | |||
| case "tencent": | |||
| eks.ListEksInstance(cloudStack, akskPath, configPath) | |||
| } | |||
| } | |||
| @@ -1,43 +0,0 @@ | |||
| package aksk | |||
| import ( | |||
| "fmt" | |||
| "github.com/Unknwon/goconfig" | |||
| "os" | |||
| ) | |||
| type AkskContainerConfig struct { | |||
| AccessKey string | |||
| SecretKey string | |||
| } | |||
| func AkskConfig(cloudStack string, akskPath string) (AkskContainerConfig, error) { | |||
| var cfg *goconfig.ConfigFile | |||
| config, err := goconfig.LoadConfigFile(akskPath) | |||
| if err != nil { | |||
| fmt.Println("get config file error:", err.Error()) | |||
| os.Exit(-1) | |||
| } | |||
| cfg = config | |||
| var accessKey string | |||
| var secretKey string | |||
| switch cloudStack { | |||
| case "alibaba": | |||
| accessKey, _ = cfg.GetValue(cloudStack, "access_key") | |||
| secretKey, _ = cfg.GetValue(cloudStack, "secret_key") | |||
| case "huawei": | |||
| accessKey, _ = cfg.GetValue(cloudStack, "access_key") | |||
| secretKey, _ = cfg.GetValue(cloudStack, "secret_key") | |||
| case "tencent": | |||
| accessKey, _ = cfg.GetValue(cloudStack, "access_key") | |||
| secretKey, _ = cfg.GetValue(cloudStack, "secret_key") | |||
| } | |||
| var akskConfig = AkskContainerConfig{ | |||
| AccessKey: accessKey, | |||
| SecretKey: secretKey, | |||
| } | |||
| return akskConfig, nil | |||
| } | |||
| @@ -1,14 +0,0 @@ | |||
| #阿里 | |||
| [alibaba] | |||
| access_key = | |||
| secret_key = | |||
| #华为 | |||
| [huawei] | |||
| access_key = | |||
| secret_key = | |||
| #腾讯 | |||
| [tencent] | |||
| access_key = | |||
| secret_key = | |||
| @@ -1,133 +0,0 @@ | |||
| package config | |||
| import ( | |||
| "fmt" | |||
| "github.com/Unknwon/goconfig" | |||
| "os" | |||
| "strconv" | |||
| ) | |||
| type PCMContainerConfig struct { | |||
| RegionId string | |||
| ContainerGroupName string | |||
| ContainerImage string | |||
| ContainerName string | |||
| CpuPod string | |||
| MemoryPod string | |||
| CpuContainer string | |||
| MemoryContainer string | |||
| CpuPodFloat float64 | |||
| MemoryPodFloat float64 | |||
| CpuContainerFloat float64 | |||
| MemoryContainerFloat float64 | |||
| NameSpace string | |||
| SecurityGroupId string | |||
| SubnetId string | |||
| VpcId string | |||
| RegionIdDelete string | |||
| ContainerGroupIdDelete string | |||
| RegionIdList string | |||
| NamespaceUpdate string | |||
| RegionIdUpdate string | |||
| ContainerImageUpdate string | |||
| ContainerNameUpdate string | |||
| CpuPodUpdate string | |||
| MemoryPodUpdate string | |||
| ContainerGroupNameUpdate string | |||
| ContainerGroupIdUpdate string | |||
| RestartPolicyUpdate string | |||
| NamespaceDelete string | |||
| ContainerGroupNameDelete string | |||
| } | |||
| func PCMconfig(configPath string) (PCMContainerConfig, error) { | |||
| //加载配置文件 | |||
| var cfg *goconfig.ConfigFile | |||
| config, err := goconfig.LoadConfigFile(configPath) | |||
| if err != nil { | |||
| fmt.Println("get config file error:", err.Error()) | |||
| os.Exit(-1) | |||
| } | |||
| cfg = config | |||
| //[创建]通用创建必需信息 | |||
| regionId, _ := cfg.GetValue("pod_create_conf", "region_id") | |||
| containerGroupName, _ := cfg.GetValue("pod_create_conf", "container_group_name") | |||
| containerImage, _ := cfg.GetValue("pod_create_conf", "container_image") | |||
| containerName, _ := cfg.GetValue("pod_create_conf", "container_name") | |||
| //[创建]阿里创建必需(unique) | |||
| //[创建]腾讯创建必需(unique) | |||
| cpuPod, _ := cfg.GetValue("pod_create_conf", "cpu_pod") | |||
| memoryPod, _ := cfg.GetValue("pod_create_conf", "memory_pod") | |||
| cpuPodFloat, _ := strconv.ParseFloat(cpuPod, 64) | |||
| memoryPodFloat, _ := strconv.ParseFloat(memoryPod, 64) | |||
| securityGroupId, _ := cfg.GetValue("pod_create_conf", "security_group_id") | |||
| subnetId, _ := cfg.GetValue("pod_create_conf", "subnet_id") | |||
| vpcId, _ := cfg.GetValue("pod_create_conf", "vpc_id") | |||
| //[创建]华为创建必需(unique) | |||
| nameSpace, _ := cfg.GetValue("pod_create_conf", "namespace") | |||
| //[创建]非必需参数 | |||
| cpuContainer, _ := cfg.GetValue("pod_create_conf", "cpu_container") | |||
| memoryContainer, _ := cfg.GetValue("pod_create_conf", "memory_container") | |||
| cpuContainerFloat, _ := strconv.ParseFloat(cpuContainer, 64) | |||
| memoryContainerFloat, _ := strconv.ParseFloat(memoryContainer, 64) | |||
| //[删除]通用删除配置信息 | |||
| regionIdDelete, _ := cfg.GetValue("pod_delete_conf", "region_id") | |||
| containerGroupIdDelete, _ := cfg.GetValue("pod_delete_conf", "container_group_id") | |||
| nameSpaceDelete, _ := cfg.GetValue("pod_delete_conf", "namespace") | |||
| containerGroupNameDelete, _ := cfg.GetValue("pod_delete_conf", "container_group_name") | |||
| //[查询]通用查询配置信息 | |||
| regionIdList, _ := cfg.GetValue("pod_list_conf", "region_id") | |||
| //[更新]通用更新配置信息 | |||
| regionIdUpdate, _ := cfg.GetValue("pod_update_conf", "region_id") | |||
| namespaceUpdate, _ := cfg.GetValue("pod_update_conf", "namespace") | |||
| containerGroupIdUpdate, _ := cfg.GetValue("pod_update_conf", "container_group_id") | |||
| restartPolicyUpdate, _ := cfg.GetValue("pod_update_conf", "restart_policy") | |||
| ContainerNameUpdate, _ := cfg.GetValue("pod_update_conf", "container_name") | |||
| CpuPodUpdate, _ := cfg.GetValue("pod_update_conf", "cpu_pod") | |||
| MemoryPodUpdate, _ := cfg.GetValue("pod_update_conf", "memory_pod") | |||
| ContainerGroupNameUpdate, _ := cfg.GetValue("pod_update_conf", "container_group_name") | |||
| var configCommon = PCMContainerConfig{ | |||
| RegionId: regionId, | |||
| ContainerGroupName: containerGroupName, | |||
| ContainerImage: containerImage, | |||
| ContainerName: containerName, | |||
| CpuPod: cpuPod, | |||
| MemoryPod: memoryPod, | |||
| CpuContainer: cpuContainer, | |||
| MemoryContainer: memoryContainer, | |||
| CpuPodFloat: cpuPodFloat, | |||
| MemoryPodFloat: memoryPodFloat, | |||
| CpuContainerFloat: cpuContainerFloat, | |||
| MemoryContainerFloat: memoryContainerFloat, | |||
| NameSpace: nameSpace, | |||
| SecurityGroupId: securityGroupId, | |||
| SubnetId: subnetId, | |||
| VpcId: vpcId, | |||
| RegionIdDelete: regionIdDelete, | |||
| ContainerGroupIdDelete: containerGroupIdDelete, | |||
| RegionIdList: regionIdList, | |||
| RegionIdUpdate: regionIdUpdate, | |||
| NamespaceUpdate: namespaceUpdate, | |||
| ContainerGroupIdUpdate: containerGroupIdUpdate, | |||
| RestartPolicyUpdate: restartPolicyUpdate, | |||
| ContainerImageUpdate: containerName, | |||
| ContainerNameUpdate: ContainerNameUpdate, | |||
| CpuPodUpdate: CpuPodUpdate, | |||
| MemoryPodUpdate: MemoryPodUpdate, | |||
| ContainerGroupNameUpdate: ContainerGroupNameUpdate, | |||
| NamespaceDelete: nameSpaceDelete, | |||
| ContainerGroupNameDelete: containerGroupNameDelete, | |||
| } | |||
| return configCommon, nil | |||
| } | |||
| @@ -1,45 +0,0 @@ | |||
| [container_conf] | |||
| [pod_create_conf] | |||
| #测试账号ak | |||
| access_key = | |||
| secret_key = | |||
| #region | |||
| region_id= | |||
| #容器实例名称(pod名) | |||
| container_group_name= | |||
| #镜像地址 | |||
| container_image= | |||
| #容器名称 | |||
| container_name= | |||
| #namespace 华为CCI基于K8S namespace进行管理,需要单独提供namespace (华为必需) | |||
| namespace= | |||
| #Pod拥有核数 对应腾讯 Cpu(腾讯必需) | |||
| cpu_pod=1 | |||
| #Pod拥有内存大小 对应腾讯 Memory(腾讯必需) | |||
| memory_pod=2 | |||
| #安全组ID 对应腾讯 SecurityGroupIds(腾讯必需) | |||
| security_group_id= | |||
| #子网ID 对应腾讯 SubnetId(腾讯必需) | |||
| subnet_id= | |||
| #VPC ID 对应腾讯 VpcId(腾讯必需) | |||
| vpc_id= | |||
| ##考虑多个函数分成不同的配置组 | |||
| ##用户可以在请求中指定任务在各厂商调度比例 | |||
| ##地域、厂商、用户AKSK等信息通过独立的配置文件进行导入 | |||
| [pod_create_conf] | |||
| #可选项,框架可以不必过于细节 | |||
| ali_count=10000 | |||
| huawei_count=10000 | |||
| tencent_count=20000 | |||
| hangzhou_count=20000 | |||
| shanghai_count=20000 | |||
| [pod_delete_conf] | |||
| [pod_update_conf] | |||
| [pod_list_conf] | |||
| @@ -1,29 +0,0 @@ | |||
| package main | |||
| func main() { | |||
| aliConfigPath := "adaptor/container_api_adaptor/alibaba/eci/config_eci.conf" | |||
| huaweiConfigPath := "adaptor/container_api_adaptor/huawei/cci/config_cci.conf" | |||
| tencentConfigPath := "adaptor/container_api_adaptor/tencent/eks/config_eks.conf" | |||
| akskPath := "adaptor/container_api_adaptor/common/auth/aksk/aksk.conf" | |||
| println(aliConfigPath) | |||
| println(huaweiConfigPath) | |||
| println(tencentConfigPath) | |||
| println(akskPath) | |||
| //api.CreatePod("alibaba", akskPath, aliConfigPath) | |||
| //api.ListPod("alibaba", akskPath, aliConfigPath) | |||
| //api.UpdatePod("alibaba", akskPath, aliConfigPath) | |||
| //api.DeletePod("alibaba", akskPath, aliConfigPath) | |||
| //api.CreatePod("huawei", akskPath, huaweiConfigPath) | |||
| //api.ListPod("huawei", akskPath, huaweiConfigPath) | |||
| //api.UpdatePod("huawei", akskPath, huaweiConfigPath) | |||
| //api.DeletePod("huawei", akskPath, huaweiConfigPath) | |||
| //api.CreatePod("tencent", akskPath, tencentConfigPath) | |||
| //api.ListPod("tencent", akskPath, tencentConfigPath) | |||
| //api.UpdatePod("tencent", akskPath, tencentConfigPath) | |||
| //api.DeletePod("tencent", akskPath, tencentConfigPath) | |||
| } | |||
| @@ -1,39 +0,0 @@ | |||
| [pod_create_conf] | |||
| #region 对应华为 Region (华为创建Namespace必需) | |||
| region_id=cn-north-4 | |||
| #namespace 华为CCI基于K8S namespace进行管理,需要单独提供namespace 对应Pod.ObjectMeta.Namespace (华为必需) | |||
| namespace=test-k8s-client-namespace1 | |||
| #容器实例名称(pod名) 对应华为 Pod.ObjectMeta.Name (华为必需) | |||
| container_group_name=pcm-test-huawei-pod | |||
| #镜像地址 对应华为 Pod.PodSpec.Containers.Container.Image (华为必需) | |||
| container_image=library/nginx:stable-alpine-perl | |||
| #容器名称 对应华为 Pod.PodSpec.Containers.Container.Name (华为必需) | |||
| container_name=pcm-test-huawei-container | |||
| #Pod拥有核数 对应华为 Pod.PodSpec.Containers.Container.Resources.Limits.ResourceCPU (华为必需) | |||
| cpu_pod=500m | |||
| #Pod拥有内存大小 对应华为 Pod.PodSpec.Containers.Container.Resources.Limits.ResourceMemory (华为必需) | |||
| memory_pod=1024Mi | |||
| [pod_delete_conf] | |||
| # 地域id | |||
| namespace=test-k8s-client-namespace1 | |||
| #容器实例名称(pod名) 对应华为 Pod.ObjectMeta.Name (华为必需) | |||
| container_group_name=pcm-test-huawei-pod | |||
| [pod_list_conf] | |||
| # 地域id | |||
| region_id=cn-hangzhou | |||
| [pod_update_conf] | |||
| #容器实例名称(pod名) 对应华为 Pod.ObjectMeta.Name (华为必需) | |||
| container_group_name=pcm-test-huawei-pod | |||
| #镜像地址 对应华为 Pod.PodSpec.Containers.Container.Image (华为必需) | |||
| container_image=library/nginx:stable-alpine-perl | |||
| #容器名称 对应华为 Pod.PodSpec.Containers.Container.Name (华为必需) | |||
| container_name=pcm-test-huawei-container-new | |||
| #Pod拥有核数 对应华为 Pod.PodSpec.Containers.Container.Resources.Limits.ResourceCPU (华为必需) | |||
| cpu_pod=500m | |||
| #Pod拥有内存大小 对应华为 Pod.PodSpec.Containers.Container.Resources.Limits.ResourceMemory (华为必需) | |||
| memory_pod=2048Mi | |||
| namespace=test-k8s-client-namespace1 | |||
| restart_policy=Always | |||
| @@ -1,4 +0,0 @@ | |||
| // +k8s:deepcopy-gen=package | |||
| // +groupName=networking.cci.io | |||
| // +groupGoName=NetworkingCCI | |||
| package v1beta1 | |||
| @@ -1,51 +0,0 @@ | |||
| /* | |||
| Copyright 2015 The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| package v1beta1 | |||
| import ( | |||
| metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | |||
| "k8s.io/apimachinery/pkg/runtime" | |||
| "k8s.io/apimachinery/pkg/runtime/schema" | |||
| ) | |||
| // GroupName is the group name use in this package | |||
| const GroupName = "networking.cci.io" | |||
| // SchemeGroupVersion is group version used to register these objects | |||
| var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta1"} | |||
| // Resource takes an unqualified resource and returns a Group qualified GroupResource | |||
| func Resource(resource string) schema.GroupResource { | |||
| return SchemeGroupVersion.WithResource(resource).GroupResource() | |||
| } | |||
| var ( | |||
| // localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. | |||
| SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) | |||
| localSchemeBuilder = &SchemeBuilder | |||
| AddToScheme = localSchemeBuilder.AddToScheme | |||
| ) | |||
| // Adds the list of known types to the given scheme. | |||
| func addKnownTypes(scheme *runtime.Scheme) error { | |||
| scheme.AddKnownTypes(SchemeGroupVersion, | |||
| &Network{}, | |||
| &NetworkList{}, | |||
| ) | |||
| // Add the watch version that applies | |||
| metav1.AddToGroupVersion(scheme, SchemeGroupVersion) | |||
| return nil | |||
| } | |||
| @@ -1,87 +0,0 @@ | |||
| /* | |||
| Copyright (c) 2017 OpenStack Foundation. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| package v1beta1 | |||
| import ( | |||
| metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | |||
| ) | |||
| // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object | |||
| // NetworkList is a list of network resource in container. | |||
| type NetworkList struct { | |||
| metav1.TypeMeta `json:",inline"` | |||
| // Standard list metadata. | |||
| // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata | |||
| // +optional | |||
| metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` | |||
| Items []Network `json:"items" protobuf:"bytes,2,rep,name=items"` | |||
| } | |||
| // +genclient | |||
| // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object | |||
| // Network is a network resource in container. | |||
| type Network struct { | |||
| metav1.TypeMeta `json:",inline"` | |||
| // +optional | |||
| metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` | |||
| // Spec defines the attributes on a network | |||
| // +optional | |||
| Spec NetworkSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` | |||
| // Status describes the network status | |||
| // +optional | |||
| Status NetworkStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` | |||
| } | |||
| // NetworkSpec describes the attributes on a network resource. | |||
| type NetworkSpec struct { | |||
| // network type | |||
| NetworkType string `json:"networkType,omitempty" protobuf:"bytes,5,opt,name=networkType"` | |||
| // ID of the VPC to attach | |||
| AttachedVPC string `json:"attachedVPC,omitempty" protobuf:"bytes,4,opt,name=attachedVPC"` | |||
| // network ID | |||
| NetworkID string `json:"networkID,omitempty" protobuf:"bytes,7,opt,name=networkID"` | |||
| // Subnet ID | |||
| SubnetID string `json:"subnetID,omitempty" protobuf:"bytes,8,opt,name=subnetID"` | |||
| // available zone | |||
| AvailableZone string `json:"availableZone,omitempty" protobuf:"bytes,9,opt,name=availableZone"` | |||
| // The CIDR of the network | |||
| CIDR string `json:"cidr,omitempty" protobuf:"bytes,3,opt,name=cidr"` | |||
| } | |||
| // NetworkStatus describes the status of a network | |||
| type NetworkStatus struct { | |||
| // State describes the network state | |||
| // +optional | |||
| State string `json:"state" protobuf:"bytes,1,opt,name=state"` | |||
| // Message describes why network is in current state | |||
| // +optional | |||
| Message string `json:"message,omitempty" protobuf:"bytes,2,opt,name=message"` | |||
| } | |||
| const ( | |||
| // NetworkInitializing means the network is initializing | |||
| NetworkInitializing = "Initializing" | |||
| // NetworkPending means the network is processing | |||
| NetworkPending = "Pending" | |||
| // NetworkActive means the network is available | |||
| NetworkActive = "Active" | |||
| // NetworkFailed means the network is not available | |||
| NetworkFailed = "Failed" | |||
| // NetworkTerminating means the network is undergoing graceful termination | |||
| NetworkTerminating = "Terminating" | |||
| ) | |||
| @@ -1,119 +0,0 @@ | |||
| //go:build !ignore_autogenerated | |||
| // +build !ignore_autogenerated | |||
| /* | |||
| Copyright The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| // Code generated by deepcopy-gen. DO NOT EDIT. | |||
| package v1beta1 | |||
| import ( | |||
| runtime "k8s.io/apimachinery/pkg/runtime" | |||
| ) | |||
| // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. | |||
| func (in *Network) DeepCopyInto(out *Network) { | |||
| *out = *in | |||
| out.TypeMeta = in.TypeMeta | |||
| in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) | |||
| out.Spec = in.Spec | |||
| out.Status = in.Status | |||
| return | |||
| } | |||
| // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Network. | |||
| func (in *Network) DeepCopy() *Network { | |||
| if in == nil { | |||
| return nil | |||
| } | |||
| out := new(Network) | |||
| in.DeepCopyInto(out) | |||
| return out | |||
| } | |||
| // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. | |||
| func (in *Network) DeepCopyObject() runtime.Object { | |||
| if c := in.DeepCopy(); c != nil { | |||
| return c | |||
| } | |||
| return nil | |||
| } | |||
| // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. | |||
| func (in *NetworkList) DeepCopyInto(out *NetworkList) { | |||
| *out = *in | |||
| out.TypeMeta = in.TypeMeta | |||
| in.ListMeta.DeepCopyInto(&out.ListMeta) | |||
| if in.Items != nil { | |||
| in, out := &in.Items, &out.Items | |||
| *out = make([]Network, len(*in)) | |||
| for i := range *in { | |||
| (*in)[i].DeepCopyInto(&(*out)[i]) | |||
| } | |||
| } | |||
| return | |||
| } | |||
| // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkList. | |||
| func (in *NetworkList) DeepCopy() *NetworkList { | |||
| if in == nil { | |||
| return nil | |||
| } | |||
| out := new(NetworkList) | |||
| in.DeepCopyInto(out) | |||
| return out | |||
| } | |||
| // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. | |||
| func (in *NetworkList) DeepCopyObject() runtime.Object { | |||
| if c := in.DeepCopy(); c != nil { | |||
| return c | |||
| } | |||
| return nil | |||
| } | |||
| // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. | |||
| func (in *NetworkSpec) DeepCopyInto(out *NetworkSpec) { | |||
| *out = *in | |||
| return | |||
| } | |||
| // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkSpec. | |||
| func (in *NetworkSpec) DeepCopy() *NetworkSpec { | |||
| if in == nil { | |||
| return nil | |||
| } | |||
| out := new(NetworkSpec) | |||
| in.DeepCopyInto(out) | |||
| return out | |||
| } | |||
| // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. | |||
| func (in *NetworkStatus) DeepCopyInto(out *NetworkStatus) { | |||
| *out = *in | |||
| return | |||
| } | |||
| // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkStatus. | |||
| func (in *NetworkStatus) DeepCopy() *NetworkStatus { | |||
| if in == nil { | |||
| return nil | |||
| } | |||
| out := new(NetworkStatus) | |||
| in.DeepCopyInto(out) | |||
| return out | |||
| } | |||
| @@ -1,91 +0,0 @@ | |||
| package aksk | |||
| import ( | |||
| "PCM/adaptor/container_api_adaptor/common/auth/aksk" | |||
| "PCM/adaptor/container_api_adaptor/common/config" | |||
| clientset "PCM/adaptor/container_api_adaptor/huawei/pkg/client/networking.cci.io/v1beta1" | |||
| "fmt" | |||
| "k8s.io/client-go/kubernetes" | |||
| "k8s.io/client-go/tools/clientcmd" | |||
| "k8s.io/client-go/tools/clientcmd/api" | |||
| ) | |||
| const ( | |||
| apiVersion = "client.authentication.k8s.io/v1beta1" | |||
| // 云容器实例 CCI,参考https://developer.huaweicloud.com/endpoint | |||
| //cciEndpoint = "https://cci.cn-north-4.myhuaweicloud.com" | |||
| // 统一身份认证服务 IAM,参考https://developer.huaweicloud.com/endpoint | |||
| iamEndpoint = "https://iam.myhuaweicloud.com" | |||
| // 地区和终端节点,参考https://developer.huaweicloud.com/endpoint | |||
| //projectName = "cn-north-4" | |||
| // 获取AK/SK参考: https://support.huaweicloud.com/devg-cci/cci_kubectl_01.html#cci_kubectl_01__section17023744719 | |||
| //ak = "ATQTIWUT9K66VRMMXKVY" | |||
| //sk = "Wa0aixDVuhZOfDZGWvgIJQBHnyiDlGdgDn1Ai5Yy" | |||
| DomainId = "0a4e7f245680f3040fdfc011720e50a0" //账号ID,可以在我的凭证获取 | |||
| ProjectId = "0a62ffb0d48026c12fbfc011b8d23f0b" //项目ID,可以在我的凭证获取 | |||
| SecurityGroupID = "5157f1d1-fe7d-47a1-beaf-aee027b99755" //安全组ID,可以在安全组控制台获取 | |||
| AvailableZone = "cn-north-4a" //az名称,例如cn-north-1a、cn-north-4a或cn-east-3a | |||
| VpcID = "0333b519-7903-49e8-908e-ed56216fe921" //虚拟私有云的ID,可在VPC控制台获取 | |||
| Cidr = "10.0.0.0/10" //子网网段,例如192.168.128.0/18 | |||
| NetworkID = "2a14ac3f-07f7-4479-9930-3ea06a888f54" //<子网的网络ID,可在VPC控制台 > 子网中获取> | |||
| SubnetID = "0dea26d7-2544-424c-b7aa-620b206fce35" //<子网ID,可在VPC控制台 > 子网获取> | |||
| ) | |||
| // NewClient 通过AK/SK认证创建Clientset | |||
| func NewClient(cloudStack string, akskPath string, configPath string) (*kubernetes.Clientset, error) { | |||
| configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| configCommon, _ := config.PCMconfig(configPath) | |||
| ak := configAksk.AccessKey | |||
| sk := configAksk.SecretKey | |||
| regionId := configCommon.RegionId | |||
| cciEndpoint := "https://cci." + regionId + ".myhuaweicloud.com" | |||
| cciConfig, err := clientcmd.BuildConfigFromFlags(cciEndpoint, "") | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| var optionArgs []string | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--iam-endpoint=%s", iamEndpoint)) | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--project-name=%s", regionId)) | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--ak=%s", ak)) | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--sk=%s", sk)) | |||
| cciConfig.ExecProvider = &api.ExecConfig{ | |||
| Command: "cci-iam-authenticator", | |||
| APIVersion: apiVersion, | |||
| Args: append([]string{"token"}, optionArgs...), | |||
| Env: make([]api.ExecEnvVar, 0), | |||
| } | |||
| return kubernetes.NewForConfig(cciConfig) | |||
| } | |||
| func NewNetworkClient(cloudStack string, akskPath string, configPath string) (*clientset.Clientset, error) { | |||
| configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| configCommon, _ := config.PCMconfig(configPath) | |||
| ak := configAksk.AccessKey | |||
| sk := configAksk.SecretKey | |||
| regionId := configCommon.RegionId | |||
| cciEndpoint := "https://cci." + regionId + ".myhuaweicloud.com" | |||
| configFromFlags, err := clientcmd.BuildConfigFromFlags(cciEndpoint, "") | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| var optionArgs []string | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--iam-endpoint=%s", iamEndpoint)) | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--project-name=%s", regionId)) | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--ak=%s", ak)) | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--sk=%s", sk)) | |||
| configFromFlags.ExecProvider = &api.ExecConfig{ | |||
| Command: "cci-iam-authenticator", | |||
| APIVersion: apiVersion, | |||
| Args: append([]string{"token"}, optionArgs...), | |||
| Env: make([]api.ExecEnvVar, 0), | |||
| } | |||
| return clientset.NewForConfig(configFromFlags) | |||
| } | |||
| @@ -1,16 +0,0 @@ | |||
| package kubeconfig | |||
| import ( | |||
| "k8s.io/client-go/kubernetes" | |||
| "k8s.io/client-go/tools/clientcmd" | |||
| ) | |||
| // NewClient 通过kubeconfig配置文件创建Clientset | |||
| // kubeconfig配置文件需包含认证相关信息,具体请参考《cci-iam-authenticator使用参考》生成kubeconfig配置文件:https://support.huaweicloud.com/devg-cci/cci_kubectl_03.html | |||
| func NewClient() (*kubernetes.Clientset, error) { | |||
| config, err := clientcmd.BuildConfigFromFlags("", "/path/to/kubeconfig") | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| return kubernetes.NewForConfig(config) | |||
| } | |||
| @@ -1,45 +0,0 @@ | |||
| package password | |||
| import ( | |||
| "fmt" | |||
| "k8s.io/client-go/kubernetes" | |||
| "k8s.io/client-go/tools/clientcmd" | |||
| "k8s.io/client-go/tools/clientcmd/api" | |||
| ) | |||
| const ( | |||
| apiVersion = "client.authentication.k8s.io/v1beta1" | |||
| // 云容器实例 CCI,参考https://developer.huaweicloud.com/endpoint | |||
| cciEndpoint = "<例如华北-北京四: https://cci.cn-north-4.myhuaweicloud.com>" | |||
| // 统一身份认证服务 IAM,参考https://developer.huaweicloud.com/endpoint | |||
| iamEndpoint = "<例如华北-北京四: https://iam.cn-north-4.myhuaweicloud.com>" | |||
| // 地区和终端节点,参考https://developer.huaweicloud.com/endpoint | |||
| projectName = "<例如华北-北京四: cn-north-4>" | |||
| userName = "<Your Account User Name>" | |||
| domainName = "<Your Account Domain Name>" | |||
| password = "<Your Account Password>" | |||
| ) | |||
| // NewClient 通过username/password创建Clientset | |||
| func NewClient() (*kubernetes.Clientset, error) { | |||
| config, err := clientcmd.BuildConfigFromFlags(cciEndpoint, "") | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| var optionArgs []string | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--iam-endpoint=%s", iamEndpoint)) | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--project-name=%s", projectName)) | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--token-only=false")) | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--domain-name=%s", domainName)) | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--user-name=%s", userName)) | |||
| optionArgs = append(optionArgs, fmt.Sprintf("--password=%s", password)) | |||
| config.ExecProvider = &api.ExecConfig{ | |||
| Command: "cci-iam-authenticator", | |||
| APIVersion: apiVersion, | |||
| Args: append([]string{"token"}, optionArgs...), | |||
| Env: make([]api.ExecEnvVar, 0), | |||
| } | |||
| return kubernetes.NewForConfig(config) | |||
| } | |||
| @@ -1,90 +0,0 @@ | |||
| /* | |||
| Copyright The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| // Code generated by client-gen. DO NOT EDIT. | |||
| package v1beta1 | |||
| import ( | |||
| networkingcciv1beta1 "PCM/adaptor/container_api_adaptor/huawei/pkg/client/networking.cci.io/v1beta1/typed/networking.cci.io/v1beta1" | |||
| discovery "k8s.io/client-go/discovery" | |||
| rest "k8s.io/client-go/rest" | |||
| flowcontrol "k8s.io/client-go/util/flowcontrol" | |||
| ) | |||
| type Interface interface { | |||
| Discovery() discovery.DiscoveryInterface | |||
| NetworkingCCIV1beta1() networkingcciv1beta1.NetworkingCCIV1beta1Interface | |||
| } | |||
| // Clientset contains the clients for groups. Each group has exactly one | |||
| // version included in a Clientset. | |||
| type Clientset struct { | |||
| *discovery.DiscoveryClient | |||
| networkingCCIV1beta1 *networkingcciv1beta1.NetworkingCCIV1beta1Client | |||
| } | |||
| // NetworkingCCIV1beta1 retrieves the NetworkingCCIV1beta1Client | |||
| func (c *Clientset) NetworkingCCIV1beta1() networkingcciv1beta1.NetworkingCCIV1beta1Interface { | |||
| return c.networkingCCIV1beta1 | |||
| } | |||
| // Discovery retrieves the DiscoveryClient | |||
| func (c *Clientset) Discovery() discovery.DiscoveryInterface { | |||
| if c == nil { | |||
| return nil | |||
| } | |||
| return c.DiscoveryClient | |||
| } | |||
| // NewForConfig creates a new Clientset for the given config. | |||
| func NewForConfig(c *rest.Config) (*Clientset, error) { | |||
| configShallowCopy := *c | |||
| if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { | |||
| configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) | |||
| } | |||
| var cs Clientset | |||
| var err error | |||
| cs.networkingCCIV1beta1, err = networkingcciv1beta1.NewForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| return &cs, nil | |||
| } | |||
| // NewForConfigOrDie creates a new Clientset for the given config and | |||
| // panics if there is an error in the config. | |||
| func NewForConfigOrDie(c *rest.Config) *Clientset { | |||
| var cs Clientset | |||
| cs.networkingCCIV1beta1 = networkingcciv1beta1.NewForConfigOrDie(c) | |||
| cs.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c) | |||
| return &cs | |||
| } | |||
| // New creates a new Clientset for the given RESTClient. | |||
| func New(c rest.Interface) *Clientset { | |||
| var cs Clientset | |||
| cs.networkingCCIV1beta1 = networkingcciv1beta1.New(c) | |||
| cs.DiscoveryClient = discovery.NewDiscoveryClient(c) | |||
| return &cs | |||
| } | |||
| @@ -1,20 +0,0 @@ | |||
| /* | |||
| Copyright The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| // Code generated by client-gen. DO NOT EDIT. | |||
| // This package has the automatically generated clientset. | |||
| package v1beta1 | |||
| @@ -1,82 +0,0 @@ | |||
| /* | |||
| Copyright The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| // Code generated by client-gen. DO NOT EDIT. | |||
| package fake | |||
| import ( | |||
| clientset "PCM/adaptor/container_api_adaptor/huawei/pkg/client/networking.cci.io/v1beta1" | |||
| networkingcciv1beta1 "PCM/adaptor/container_api_adaptor/huawei/pkg/client/networking.cci.io/v1beta1/typed/networking.cci.io/v1beta1" | |||
| fakenetworkingcciv1beta1 "PCM/adaptor/container_api_adaptor/huawei/pkg/client/networking.cci.io/v1beta1/typed/networking.cci.io/v1beta1/fake" | |||
| "k8s.io/apimachinery/pkg/runtime" | |||
| "k8s.io/apimachinery/pkg/watch" | |||
| "k8s.io/client-go/discovery" | |||
| fakediscovery "k8s.io/client-go/discovery/fake" | |||
| "k8s.io/client-go/testing" | |||
| ) | |||
| // NewSimpleClientset returns a clientset that will respond with the provided objects. | |||
| // It's backed by a very simple object tracker that processes creates, updates and deletions as-is, | |||
| // without applying any validations and/or defaults. It shouldn't be considered a replacement | |||
| // for a real clientset and is mostly useful in simple unit tests. | |||
| func NewSimpleClientset(objects ...runtime.Object) *Clientset { | |||
| o := testing.NewObjectTracker(scheme, codecs.UniversalDecoder()) | |||
| for _, obj := range objects { | |||
| if err := o.Add(obj); err != nil { | |||
| panic(err) | |||
| } | |||
| } | |||
| cs := &Clientset{tracker: o} | |||
| cs.discovery = &fakediscovery.FakeDiscovery{Fake: &cs.Fake} | |||
| cs.AddReactor("*", "*", testing.ObjectReaction(o)) | |||
| cs.AddWatchReactor("*", func(action testing.Action) (handled bool, ret watch.Interface, err error) { | |||
| gvr := action.GetResource() | |||
| ns := action.GetNamespace() | |||
| watch, err := o.Watch(gvr, ns) | |||
| if err != nil { | |||
| return false, nil, err | |||
| } | |||
| return true, watch, nil | |||
| }) | |||
| return cs | |||
| } | |||
| // Clientset implements clientset.Interface. Meant to be embedded into a | |||
| // struct to get a default implementation. This makes faking out just the method | |||
| // you want to test easier. | |||
| type Clientset struct { | |||
| testing.Fake | |||
| discovery *fakediscovery.FakeDiscovery | |||
| tracker testing.ObjectTracker | |||
| } | |||
| func (c *Clientset) Discovery() discovery.DiscoveryInterface { | |||
| return c.discovery | |||
| } | |||
| func (c *Clientset) Tracker() testing.ObjectTracker { | |||
| return c.tracker | |||
| } | |||
| var _ clientset.Interface = &Clientset{} | |||
| // NetworkingCCIV1beta1 retrieves the NetworkingCCIV1beta1Client | |||
| func (c *Clientset) NetworkingCCIV1beta1() networkingcciv1beta1.NetworkingCCIV1beta1Interface { | |||
| return &fakenetworkingcciv1beta1.FakeNetworkingCCIV1beta1{Fake: &c.Fake} | |||
| } | |||
| @@ -1,20 +0,0 @@ | |||
| /* | |||
| Copyright The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| // Code generated by client-gen. DO NOT EDIT. | |||
| // This package has the automatically generated fake clientset. | |||
| package fake | |||
| @@ -1,56 +0,0 @@ | |||
| /* | |||
| Copyright The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| // Code generated by client-gen. DO NOT EDIT. | |||
| package fake | |||
| import ( | |||
| networkingcciv1beta1 "PCM/adaptor/container_api_adaptor/huawei/pkg/apis/networking.cci.io/v1beta1" | |||
| v1 "k8s.io/apimachinery/pkg/apis/meta/v1" | |||
| runtime "k8s.io/apimachinery/pkg/runtime" | |||
| schema "k8s.io/apimachinery/pkg/runtime/schema" | |||
| serializer "k8s.io/apimachinery/pkg/runtime/serializer" | |||
| utilruntime "k8s.io/apimachinery/pkg/util/runtime" | |||
| ) | |||
| var scheme = runtime.NewScheme() | |||
| var codecs = serializer.NewCodecFactory(scheme) | |||
| var parameterCodec = runtime.NewParameterCodec(scheme) | |||
| var localSchemeBuilder = runtime.SchemeBuilder{ | |||
| networkingcciv1beta1.AddToScheme, | |||
| } | |||
| // AddToScheme adds all types of this clientset into the given scheme. This allows composition | |||
| // of clientsets, like in: | |||
| // | |||
| // import ( | |||
| // "k8s.io/client-go/kubernetes" | |||
| // clientsetscheme "k8s.io/client-go/kubernetes/scheme" | |||
| // aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" | |||
| // ) | |||
| // | |||
| // kclientset, _ := kubernetes.NewForConfig(c) | |||
| // _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) | |||
| // | |||
| // After this, RawExtensions in Kubernetes types will serialize kube-aggregator types | |||
| // correctly. | |||
| var AddToScheme = localSchemeBuilder.AddToScheme | |||
| func init() { | |||
| v1.AddToGroupVersion(scheme, schema.GroupVersion{Version: "v1"}) | |||
| utilruntime.Must(AddToScheme(scheme)) | |||
| } | |||
| @@ -1,20 +0,0 @@ | |||
| /* | |||
| Copyright The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| // Code generated by client-gen. DO NOT EDIT. | |||
| // This package contains the scheme of the automatically generated clientset. | |||
| package scheme | |||
| @@ -1,56 +0,0 @@ | |||
| /* | |||
| Copyright The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| // Code generated by client-gen. DO NOT EDIT. | |||
| package scheme | |||
| import ( | |||
| networkingcciv1beta1 "PCM/adaptor/container_api_adaptor/huawei/pkg/apis/networking.cci.io/v1beta1" | |||
| v1 "k8s.io/apimachinery/pkg/apis/meta/v1" | |||
| runtime "k8s.io/apimachinery/pkg/runtime" | |||
| schema "k8s.io/apimachinery/pkg/runtime/schema" | |||
| serializer "k8s.io/apimachinery/pkg/runtime/serializer" | |||
| utilruntime "k8s.io/apimachinery/pkg/util/runtime" | |||
| ) | |||
| var Scheme = runtime.NewScheme() | |||
| var Codecs = serializer.NewCodecFactory(Scheme) | |||
| var ParameterCodec = runtime.NewParameterCodec(Scheme) | |||
| var localSchemeBuilder = runtime.SchemeBuilder{ | |||
| networkingcciv1beta1.AddToScheme, | |||
| } | |||
| // AddToScheme adds all types of this clientset into the given scheme. This allows composition | |||
| // of clientsets, like in: | |||
| // | |||
| // import ( | |||
| // "k8s.io/client-go/kubernetes" | |||
| // clientsetscheme "k8s.io/client-go/kubernetes/scheme" | |||
| // aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" | |||
| // ) | |||
| // | |||
| // kclientset, _ := kubernetes.NewForConfig(c) | |||
| // _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) | |||
| // | |||
| // After this, RawExtensions in Kubernetes types will serialize kube-aggregator types | |||
| // correctly. | |||
| var AddToScheme = localSchemeBuilder.AddToScheme | |||
| func init() { | |||
| v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) | |||
| utilruntime.Must(AddToScheme(Scheme)) | |||
| } | |||
| @@ -1,20 +0,0 @@ | |||
| /* | |||
| Copyright The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| // Code generated by client-gen. DO NOT EDIT. | |||
| // This package has the automatically generated typed clients. | |||
| package v1beta1 | |||
| @@ -1,20 +0,0 @@ | |||
| /* | |||
| Copyright The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| // Code generated by client-gen. DO NOT EDIT. | |||
| // Package fake has the automatically generated clients. | |||
| package fake | |||
| @@ -1,140 +0,0 @@ | |||
| /* | |||
| Copyright The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| // Code generated by client-gen. DO NOT EDIT. | |||
| package fake | |||
| import ( | |||
| v1beta1 "PCM/adaptor/container_api_adaptor/huawei/pkg/apis/networking.cci.io/v1beta1" | |||
| v1 "k8s.io/apimachinery/pkg/apis/meta/v1" | |||
| labels "k8s.io/apimachinery/pkg/labels" | |||
| schema "k8s.io/apimachinery/pkg/runtime/schema" | |||
| types "k8s.io/apimachinery/pkg/types" | |||
| watch "k8s.io/apimachinery/pkg/watch" | |||
| testing "k8s.io/client-go/testing" | |||
| ) | |||
| // FakeNetworks implements NetworkInterface | |||
| type FakeNetworks struct { | |||
| Fake *FakeNetworkingCCIV1beta1 | |||
| ns string | |||
| } | |||
| var networksResource = schema.GroupVersionResource{Group: "networking.cci.io", Version: "v1beta1", Resource: "networks"} | |||
| var networksKind = schema.GroupVersionKind{Group: "networking.cci.io", Version: "v1beta1", Kind: "Network"} | |||
| // Get takes name of the network, and returns the corresponding network object, and an error if there is any. | |||
| func (c *FakeNetworks) Get(name string, options v1.GetOptions) (result *v1beta1.Network, err error) { | |||
| obj, err := c.Fake. | |||
| Invokes(testing.NewGetAction(networksResource, c.ns, name), &v1beta1.Network{}) | |||
| if obj == nil { | |||
| return nil, err | |||
| } | |||
| return obj.(*v1beta1.Network), err | |||
| } | |||
| // List takes label and field selectors, and returns the list of Networks that match those selectors. | |||
| func (c *FakeNetworks) List(opts v1.ListOptions) (result *v1beta1.NetworkList, err error) { | |||
| obj, err := c.Fake. | |||
| Invokes(testing.NewListAction(networksResource, networksKind, c.ns, opts), &v1beta1.NetworkList{}) | |||
| if obj == nil { | |||
| return nil, err | |||
| } | |||
| label, _, _ := testing.ExtractFromListOptions(opts) | |||
| if label == nil { | |||
| label = labels.Everything() | |||
| } | |||
| list := &v1beta1.NetworkList{ListMeta: obj.(*v1beta1.NetworkList).ListMeta} | |||
| for _, item := range obj.(*v1beta1.NetworkList).Items { | |||
| if label.Matches(labels.Set(item.Labels)) { | |||
| list.Items = append(list.Items, item) | |||
| } | |||
| } | |||
| return list, err | |||
| } | |||
| // Watch returns a watch.Interface that watches the requested networks. | |||
| func (c *FakeNetworks) Watch(opts v1.ListOptions) (watch.Interface, error) { | |||
| return c.Fake. | |||
| InvokesWatch(testing.NewWatchAction(networksResource, c.ns, opts)) | |||
| } | |||
| // Create takes the representation of a network and creates it. Returns the server's representation of the network, and an error, if there is any. | |||
| func (c *FakeNetworks) Create(network *v1beta1.Network) (result *v1beta1.Network, err error) { | |||
| obj, err := c.Fake. | |||
| Invokes(testing.NewCreateAction(networksResource, c.ns, network), &v1beta1.Network{}) | |||
| if obj == nil { | |||
| return nil, err | |||
| } | |||
| return obj.(*v1beta1.Network), err | |||
| } | |||
| // Update takes the representation of a network and updates it. Returns the server's representation of the network, and an error, if there is any. | |||
| func (c *FakeNetworks) Update(network *v1beta1.Network) (result *v1beta1.Network, err error) { | |||
| obj, err := c.Fake. | |||
| Invokes(testing.NewUpdateAction(networksResource, c.ns, network), &v1beta1.Network{}) | |||
| if obj == nil { | |||
| return nil, err | |||
| } | |||
| return obj.(*v1beta1.Network), err | |||
| } | |||
| // UpdateStatus was generated because the type contains a Status member. | |||
| // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). | |||
| func (c *FakeNetworks) UpdateStatus(network *v1beta1.Network) (*v1beta1.Network, error) { | |||
| obj, err := c.Fake. | |||
| Invokes(testing.NewUpdateSubresourceAction(networksResource, "status", c.ns, network), &v1beta1.Network{}) | |||
| if obj == nil { | |||
| return nil, err | |||
| } | |||
| return obj.(*v1beta1.Network), err | |||
| } | |||
| // Delete takes name of the network and deletes it. Returns an error if one occurs. | |||
| func (c *FakeNetworks) Delete(name string, options *v1.DeleteOptions) error { | |||
| _, err := c.Fake. | |||
| Invokes(testing.NewDeleteAction(networksResource, c.ns, name), &v1beta1.Network{}) | |||
| return err | |||
| } | |||
| // DeleteCollection deletes a collection of objects. | |||
| func (c *FakeNetworks) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { | |||
| action := testing.NewDeleteCollectionAction(networksResource, c.ns, listOptions) | |||
| _, err := c.Fake.Invokes(action, &v1beta1.NetworkList{}) | |||
| return err | |||
| } | |||
| // Patch applies the patch and returns the patched network. | |||
| func (c *FakeNetworks) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.Network, err error) { | |||
| obj, err := c.Fake. | |||
| Invokes(testing.NewPatchSubresourceAction(networksResource, c.ns, name, pt, data, subresources...), &v1beta1.Network{}) | |||
| if obj == nil { | |||
| return nil, err | |||
| } | |||
| return obj.(*v1beta1.Network), err | |||
| } | |||
| @@ -1,40 +0,0 @@ | |||
| /* | |||
| Copyright The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| // Code generated by client-gen. DO NOT EDIT. | |||
| package fake | |||
| import ( | |||
| v1beta1 "PCM/adaptor/container_api_adaptor/huawei/pkg/client/networking.cci.io/v1beta1/typed/networking.cci.io/v1beta1" | |||
| rest "k8s.io/client-go/rest" | |||
| testing "k8s.io/client-go/testing" | |||
| ) | |||
| type FakeNetworkingCCIV1beta1 struct { | |||
| *testing.Fake | |||
| } | |||
| func (c *FakeNetworkingCCIV1beta1) Networks(namespace string) v1beta1.NetworkInterface { | |||
| return &FakeNetworks{c, namespace} | |||
| } | |||
| // RESTClient returns a RESTClient that is used to communicate | |||
| // with API server by this client implementation. | |||
| func (c *FakeNetworkingCCIV1beta1) RESTClient() rest.Interface { | |||
| var ret *rest.RESTClient | |||
| return ret | |||
| } | |||
| @@ -1,21 +0,0 @@ | |||
| /* | |||
| Copyright The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| // Code generated by client-gen. DO NOT EDIT. | |||
| package v1beta1 | |||
| type NetworkExpansion interface{} | |||
| @@ -1,191 +0,0 @@ | |||
| /* | |||
| Copyright The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| // Code generated by client-gen. DO NOT EDIT. | |||
| package v1beta1 | |||
| import ( | |||
| "time" | |||
| v1beta1 "PCM/adaptor/container_api_adaptor/huawei/pkg/apis/networking.cci.io/v1beta1" | |||
| scheme "PCM/adaptor/container_api_adaptor/huawei/pkg/client/networking.cci.io/v1beta1/scheme" | |||
| v1 "k8s.io/apimachinery/pkg/apis/meta/v1" | |||
| types "k8s.io/apimachinery/pkg/types" | |||
| watch "k8s.io/apimachinery/pkg/watch" | |||
| rest "k8s.io/client-go/rest" | |||
| ) | |||
| // NetworksGetter has a method to return a NetworkInterface. | |||
| // A group's client should implement this interface. | |||
| type NetworksGetter interface { | |||
| Networks(namespace string) NetworkInterface | |||
| } | |||
| // NetworkInterface has methods to work with Network resources. | |||
| type NetworkInterface interface { | |||
| Create(*v1beta1.Network) (*v1beta1.Network, error) | |||
| Update(*v1beta1.Network) (*v1beta1.Network, error) | |||
| UpdateStatus(*v1beta1.Network) (*v1beta1.Network, error) | |||
| Delete(name string, options *v1.DeleteOptions) error | |||
| DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error | |||
| Get(name string, options v1.GetOptions) (*v1beta1.Network, error) | |||
| List(opts v1.ListOptions) (*v1beta1.NetworkList, error) | |||
| Watch(opts v1.ListOptions) (watch.Interface, error) | |||
| Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.Network, err error) | |||
| NetworkExpansion | |||
| } | |||
| // networks implements NetworkInterface | |||
| type networks struct { | |||
| client rest.Interface | |||
| ns string | |||
| } | |||
| // newNetworks returns a Networks | |||
| func newNetworks(c *NetworkingCCIV1beta1Client, namespace string) *networks { | |||
| return &networks{ | |||
| client: c.RESTClient(), | |||
| ns: namespace, | |||
| } | |||
| } | |||
| // Get takes name of the network, and returns the corresponding network object, and an error if there is any. | |||
| func (c *networks) Get(name string, options v1.GetOptions) (result *v1beta1.Network, err error) { | |||
| result = &v1beta1.Network{} | |||
| err = c.client.Get(). | |||
| Namespace(c.ns). | |||
| Resource("networks"). | |||
| Name(name). | |||
| VersionedParams(&options, scheme.ParameterCodec). | |||
| Do(). | |||
| Into(result) | |||
| return | |||
| } | |||
| // List takes label and field selectors, and returns the list of Networks that match those selectors. | |||
| func (c *networks) List(opts v1.ListOptions) (result *v1beta1.NetworkList, err error) { | |||
| var timeout time.Duration | |||
| if opts.TimeoutSeconds != nil { | |||
| timeout = time.Duration(*opts.TimeoutSeconds) * time.Second | |||
| } | |||
| result = &v1beta1.NetworkList{} | |||
| err = c.client.Get(). | |||
| Namespace(c.ns). | |||
| Resource("networks"). | |||
| VersionedParams(&opts, scheme.ParameterCodec). | |||
| Timeout(timeout). | |||
| Do(). | |||
| Into(result) | |||
| return | |||
| } | |||
| // Watch returns a watch.Interface that watches the requested networks. | |||
| func (c *networks) Watch(opts v1.ListOptions) (watch.Interface, error) { | |||
| var timeout time.Duration | |||
| if opts.TimeoutSeconds != nil { | |||
| timeout = time.Duration(*opts.TimeoutSeconds) * time.Second | |||
| } | |||
| opts.Watch = true | |||
| return c.client.Get(). | |||
| Namespace(c.ns). | |||
| Resource("networks"). | |||
| VersionedParams(&opts, scheme.ParameterCodec). | |||
| Timeout(timeout). | |||
| Watch() | |||
| } | |||
| // Create takes the representation of a network and creates it. Returns the server's representation of the network, and an error, if there is any. | |||
| func (c *networks) Create(network *v1beta1.Network) (result *v1beta1.Network, err error) { | |||
| result = &v1beta1.Network{} | |||
| err = c.client.Post(). | |||
| Namespace(c.ns). | |||
| Resource("networks"). | |||
| Body(network). | |||
| Do(). | |||
| Into(result) | |||
| return | |||
| } | |||
| // Update takes the representation of a network and updates it. Returns the server's representation of the network, and an error, if there is any. | |||
| func (c *networks) Update(network *v1beta1.Network) (result *v1beta1.Network, err error) { | |||
| result = &v1beta1.Network{} | |||
| err = c.client.Put(). | |||
| Namespace(c.ns). | |||
| Resource("networks"). | |||
| Name(network.Name). | |||
| Body(network). | |||
| Do(). | |||
| Into(result) | |||
| return | |||
| } | |||
| // UpdateStatus was generated because the type contains a Status member. | |||
| // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). | |||
| func (c *networks) UpdateStatus(network *v1beta1.Network) (result *v1beta1.Network, err error) { | |||
| result = &v1beta1.Network{} | |||
| err = c.client.Put(). | |||
| Namespace(c.ns). | |||
| Resource("networks"). | |||
| Name(network.Name). | |||
| SubResource("status"). | |||
| Body(network). | |||
| Do(). | |||
| Into(result) | |||
| return | |||
| } | |||
| // Delete takes name of the network and deletes it. Returns an error if one occurs. | |||
| func (c *networks) Delete(name string, options *v1.DeleteOptions) error { | |||
| return c.client.Delete(). | |||
| Namespace(c.ns). | |||
| Resource("networks"). | |||
| Name(name). | |||
| Body(options). | |||
| Do(). | |||
| Error() | |||
| } | |||
| // DeleteCollection deletes a collection of objects. | |||
| func (c *networks) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { | |||
| var timeout time.Duration | |||
| if listOptions.TimeoutSeconds != nil { | |||
| timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second | |||
| } | |||
| return c.client.Delete(). | |||
| Namespace(c.ns). | |||
| Resource("networks"). | |||
| VersionedParams(&listOptions, scheme.ParameterCodec). | |||
| Timeout(timeout). | |||
| Body(options). | |||
| Do(). | |||
| Error() | |||
| } | |||
| // Patch applies the patch and returns the patched network. | |||
| func (c *networks) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.Network, err error) { | |||
| result = &v1beta1.Network{} | |||
| err = c.client.Patch(pt). | |||
| Namespace(c.ns). | |||
| Resource("networks"). | |||
| SubResource(subresources...). | |||
| Name(name). | |||
| Body(data). | |||
| Do(). | |||
| Into(result) | |||
| return | |||
| } | |||
| @@ -1,89 +0,0 @@ | |||
| /* | |||
| Copyright The Kubernetes Authors. | |||
| Licensed under the Apache License, Version 2.0 (the "License"); | |||
| you may not use this file except in compliance with the License. | |||
| You may obtain a copy of the License at | |||
| http://www.apache.org/licenses/LICENSE-2.0 | |||
| Unless required by applicable law or agreed to in writing, software | |||
| distributed under the License is distributed on an "AS IS" BASIS, | |||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
| See the License for the specific language governing permissions and | |||
| limitations under the License. | |||
| */ | |||
| // Code generated by client-gen. DO NOT EDIT. | |||
| package v1beta1 | |||
| import ( | |||
| v1beta1 "PCM/adaptor/container_api_adaptor/huawei/pkg/apis/networking.cci.io/v1beta1" | |||
| "PCM/adaptor/container_api_adaptor/huawei/pkg/client/networking.cci.io/v1beta1/scheme" | |||
| rest "k8s.io/client-go/rest" | |||
| ) | |||
| type NetworkingCCIV1beta1Interface interface { | |||
| RESTClient() rest.Interface | |||
| NetworksGetter | |||
| } | |||
| // NetworkingCCIV1beta1Client is used to interact with features provided by the networking.cci.io group. | |||
| type NetworkingCCIV1beta1Client struct { | |||
| restClient rest.Interface | |||
| } | |||
| func (c *NetworkingCCIV1beta1Client) Networks(namespace string) NetworkInterface { | |||
| return newNetworks(c, namespace) | |||
| } | |||
| // NewForConfig creates a new NetworkingCCIV1beta1Client for the given config. | |||
| func NewForConfig(c *rest.Config) (*NetworkingCCIV1beta1Client, error) { | |||
| config := *c | |||
| if err := setConfigDefaults(&config); err != nil { | |||
| return nil, err | |||
| } | |||
| client, err := rest.RESTClientFor(&config) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| return &NetworkingCCIV1beta1Client{client}, nil | |||
| } | |||
| // NewForConfigOrDie creates a new NetworkingCCIV1beta1Client for the given config and | |||
| // panics if there is an error in the config. | |||
| func NewForConfigOrDie(c *rest.Config) *NetworkingCCIV1beta1Client { | |||
| client, err := NewForConfig(c) | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| return client | |||
| } | |||
| // New creates a new NetworkingCCIV1beta1Client for the given RESTClient. | |||
| func New(c rest.Interface) *NetworkingCCIV1beta1Client { | |||
| return &NetworkingCCIV1beta1Client{c} | |||
| } | |||
| func setConfigDefaults(config *rest.Config) error { | |||
| gv := v1beta1.SchemeGroupVersion | |||
| config.GroupVersion = &gv | |||
| config.APIPath = "/apis" | |||
| config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() | |||
| if config.UserAgent == "" { | |||
| config.UserAgent = rest.DefaultKubernetesUserAgent() | |||
| } | |||
| return nil | |||
| } | |||
| // RESTClient returns a RESTClient that is used to communicate | |||
| // with API server by this client implementation. | |||
| func (c *NetworkingCCIV1beta1Client) RESTClient() rest.Interface { | |||
| if c == nil { | |||
| return nil | |||
| } | |||
| return c.restClient | |||
| } | |||
| @@ -1,77 +0,0 @@ | |||
| package deployment | |||
| import ( | |||
| v1 "k8s.io/api/apps/v1" | |||
| corev1 "k8s.io/api/core/v1" | |||
| "k8s.io/apimachinery/pkg/api/resource" | |||
| metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | |||
| "k8s.io/client-go/kubernetes" | |||
| ) | |||
| const ( | |||
| app = "test-k8s-client-deployment" | |||
| namespace = "test-k8s-client-namespace1" | |||
| ) | |||
| // CreateDeployment 创建Deployment | |||
| // API参考:https://support.huaweicloud.com/api-cci/createAppsV1NamespacedDeployment.html | |||
| func CreateDeployment(client *kubernetes.Clientset) (*v1.Deployment, error) { | |||
| var replicas int32 = 2 | |||
| var priority int32 = 0 | |||
| container := corev1.Container{ | |||
| Name: "container-0", | |||
| Image: "library/nginx:stable-alpine-perl", | |||
| Resources: corev1.ResourceRequirements{ | |||
| Requests: map[corev1.ResourceName]resource.Quantity{ | |||
| corev1.ResourceCPU: resource.MustParse("500m"), | |||
| corev1.ResourceMemory: resource.MustParse("1024Mi"), | |||
| }, | |||
| Limits: map[corev1.ResourceName]resource.Quantity{ | |||
| corev1.ResourceCPU: resource.MustParse("500m"), | |||
| corev1.ResourceMemory: resource.MustParse("1024Mi"), | |||
| }, | |||
| }, | |||
| } | |||
| podTemplate := corev1.PodTemplateSpec{ | |||
| ObjectMeta: metav1.ObjectMeta{Labels: map[string]string{"app": app}}, | |||
| Spec: corev1.PodSpec{ | |||
| Priority: &priority, | |||
| ImagePullSecrets: []corev1.LocalObjectReference{{Name: "imagepull-secret"}}, | |||
| Containers: []corev1.Container{container}, | |||
| }, | |||
| } | |||
| deployment := v1.Deployment{ | |||
| TypeMeta: metav1.TypeMeta{ | |||
| APIVersion: "apps/v1", | |||
| Kind: "Deployment", | |||
| }, | |||
| ObjectMeta: metav1.ObjectMeta{ | |||
| Name: app, | |||
| }, | |||
| Spec: v1.DeploymentSpec{ | |||
| Replicas: &replicas, | |||
| Selector: &metav1.LabelSelector{ | |||
| MatchLabels: map[string]string{ | |||
| "app": app, | |||
| }, | |||
| }, | |||
| Template: podTemplate, | |||
| }, | |||
| } | |||
| return client.AppsV1().Deployments(namespace).Create(&deployment) | |||
| } | |||
| // DeleteDeployment 删除Deployment | |||
| // API参考:https://support.huaweicloud.com/api-cci/deleteAppsV1NamespacedDeployment.html | |||
| func DeleteDeployment(client *kubernetes.Clientset) error { | |||
| return client.AppsV1().Deployments(namespace).Delete(app, &metav1.DeleteOptions{}) | |||
| } | |||
| // GetDeployment 查询Deployment | |||
| // API参考:https://support.huaweicloud.com/api-cci/readAppsV1NamespacedDeployment.html | |||
| func GetDeployment(client *kubernetes.Clientset) (*v1.Deployment, error) { | |||
| return client.AppsV1().Deployments(namespace).Get(app, metav1.GetOptions{}) | |||
| } | |||
| @@ -1,54 +0,0 @@ | |||
| package namespace | |||
| import ( | |||
| "time" | |||
| corev1 "k8s.io/api/core/v1" | |||
| metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | |||
| "k8s.io/apimachinery/pkg/util/wait" | |||
| "k8s.io/client-go/kubernetes" | |||
| ) | |||
| const ( | |||
| namespace = "test-k8s-client-namespace1" | |||
| ) | |||
| // CreateNamespace 创建命名空间 | |||
| // API参考:https://support.huaweicloud.com/api-cci/createCoreV1Namespace.html | |||
| func CreateNamespace(cs *kubernetes.Clientset) (*corev1.Namespace, error) { | |||
| namespace := &corev1.Namespace{ | |||
| TypeMeta: metav1.TypeMeta{}, | |||
| ObjectMeta: metav1.ObjectMeta{ | |||
| Name: namespace, | |||
| Annotations: map[string]string{ | |||
| "namespace.kubernetes.io/flavor": "general-computing", | |||
| "network.cci.io/warm-pool-size": "10", | |||
| }, | |||
| Labels: map[string]string{ | |||
| "rbac.authorization.cci.io/enable-k8s-rbac": "false", | |||
| }, | |||
| }, | |||
| } | |||
| return cs.CoreV1().Namespaces().Create(namespace) | |||
| } | |||
| // DeleteNamespace 删除Namespace | |||
| // API参考:https://support.huaweicloud.com/api-cci/deleteCoreV1Namespace.html | |||
| func DeleteNamespace(cs *kubernetes.Clientset) error { | |||
| return cs.CoreV1().Namespaces().Delete(namespace, &metav1.DeleteOptions{}) | |||
| } | |||
| // WaitNamespaceActive 查询Namespace状态,等待其状态变为"Active" | |||
| // API参考:https://support.huaweicloud.com/api-cci/readCoreV1Namespace.html | |||
| func WaitNamespaceActive(cs *kubernetes.Clientset) error { | |||
| return wait.Poll(time.Second*5, time.Second*30, func() (done bool, err error) { | |||
| ns, err := cs.CoreV1().Namespaces().Get(namespace, metav1.GetOptions{}) | |||
| if err != nil { | |||
| return false, err | |||
| } | |||
| if ns.Status.Phase == corev1.NamespaceActive { | |||
| return true, nil | |||
| } | |||
| return false, nil | |||
| }) | |||
| } | |||
| @@ -1,58 +0,0 @@ | |||
| package network | |||
| import ( | |||
| "PCM/adaptor/container_api_adaptor/huawei/pkg/apis/networking.cci.io/v1beta1" | |||
| "PCM/adaptor/container_api_adaptor/huawei/pkg/auth/aksk" | |||
| "time" | |||
| clientset "PCM/adaptor/container_api_adaptor/huawei/pkg/client/networking.cci.io/v1beta1" | |||
| metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | |||
| "k8s.io/apimachinery/pkg/util/wait" | |||
| ) | |||
| const ( | |||
| name = "test-k8s-client-namespace-cn-north-1-default-network" | |||
| namespace = "test-k8s-client-namespace1" | |||
| ) | |||
| // CreateNetwork 创建Network,并等待其状态变更为Active | |||
| // 参考《Namespace和Network》 https://support.huaweicloud.com/devg-cci/cci_05_0023.html | |||
| // API参考:https://support.huaweicloud.com/api-cci/createNetworkingCciIoV1beta1NamespacedNetwork.html | |||
| func CreateNetwork(cs *clientset.Clientset) (*v1beta1.Network, error) { | |||
| network := &v1beta1.Network{ | |||
| ObjectMeta: metav1.ObjectMeta{ | |||
| Annotations: map[string]string{ | |||
| "network.alpha.kubernetes.io/default-security-group": aksk.SecurityGroupID, | |||
| "network.alpha.kubernetes.io/domain-id": aksk.DomainId, | |||
| "network.alpha.kubernetes.io/project-id": aksk.ProjectId, | |||
| }, | |||
| Name: name, | |||
| }, | |||
| Spec: v1beta1.NetworkSpec{ | |||
| AvailableZone: aksk.AvailableZone, | |||
| CIDR: aksk.Cidr, | |||
| AttachedVPC: aksk.VpcID, | |||
| NetworkID: aksk.NetworkID, | |||
| NetworkType: "underlay_neutron", | |||
| SubnetID: aksk.SubnetID, | |||
| }, | |||
| } | |||
| network, err := cs.NetworkingCCIV1beta1().Networks(namespace).Create(network) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| // 查询Network状态,等待其状态变为"Active" | |||
| err = wait.Poll(time.Second*5, time.Second*30, func() (done bool, err error) { | |||
| network, err = cs.NetworkingCCIV1beta1().Networks(namespace).Get(name, metav1.GetOptions{}) | |||
| if err != nil { | |||
| return false, err | |||
| } | |||
| if network.Status.State == v1beta1.NetworkActive { | |||
| return true, nil | |||
| } | |||
| return false, nil | |||
| }) | |||
| return network, err | |||
| } | |||
| @@ -1,134 +0,0 @@ | |||
| package pod | |||
| import ( | |||
| "PCM/adaptor/container_api_adaptor/common/config" | |||
| "fmt" | |||
| corev1 "k8s.io/api/core/v1" | |||
| "k8s.io/apimachinery/pkg/api/resource" | |||
| metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | |||
| "k8s.io/client-go/kubernetes" | |||
| ) | |||
| // CreatePod 创建Pod | |||
| func CreatePod(client *kubernetes.Clientset, configPath string) (*corev1.Pod, error) { | |||
| var configCommon config.PCMContainerConfig | |||
| configCommon, _ = config.PCMconfig(configPath) | |||
| nameSpace := configCommon.NameSpace | |||
| podName := configCommon.ContainerGroupName | |||
| containerImage := configCommon.ContainerImage | |||
| containerName := configCommon.ContainerName | |||
| cpuPod := configCommon.CpuPod | |||
| memoryPod := configCommon.MemoryPod | |||
| pod := corev1.Pod{ | |||
| TypeMeta: metav1.TypeMeta{ | |||
| APIVersion: "core/V1", | |||
| Kind: "Pod", | |||
| }, | |||
| ObjectMeta: metav1.ObjectMeta{ | |||
| Name: podName, | |||
| Namespace: nameSpace, | |||
| Labels: map[string]string{"name": "testapi"}, | |||
| }, | |||
| Spec: corev1.PodSpec{ | |||
| RestartPolicy: corev1.RestartPolicyAlways, | |||
| Containers: []corev1.Container{ | |||
| { | |||
| Name: containerName, | |||
| Image: containerImage, | |||
| Resources: corev1.ResourceRequirements{ | |||
| Limits: map[corev1.ResourceName]resource.Quantity{ | |||
| corev1.ResourceCPU: resource.MustParse(cpuPod), | |||
| corev1.ResourceMemory: resource.MustParse(memoryPod), | |||
| }, | |||
| }, | |||
| }, | |||
| }, | |||
| }, | |||
| Status: corev1.PodStatus{}, | |||
| } | |||
| fmt.Println("Huawei ContainerGroup created") | |||
| return client.CoreV1().Pods(nameSpace).Create(&pod) | |||
| } | |||
| // ListPod 查询Namespace下Pod列表 | |||
| func ListPod(client *kubernetes.Clientset, configPath string) (*corev1.PodList, error) { | |||
| var configCommon config.PCMContainerConfig | |||
| configCommon, _ = config.PCMconfig(configPath) | |||
| nameSpace := configCommon.NameSpace | |||
| podList, _ := client.CoreV1().Pods(nameSpace).List(metav1.ListOptions{}) | |||
| fmt.Println("Huawei ContainerGroup list", podList) | |||
| return podList, nil | |||
| } | |||
| // UpdatePod 更新指定Pod | |||
| /* | |||
| // 跨namespace目前有点问题 | |||
| */ | |||
| func UpdatePod(client *kubernetes.Clientset, configPath string) (*corev1.Pod, error) { | |||
| var configCommon config.PCMContainerConfig | |||
| configCommon, _ = config.PCMconfig(configPath) | |||
| nameSpace := configCommon.NamespaceUpdate | |||
| podName := configCommon.ContainerGroupNameUpdate | |||
| containerImage := configCommon.ContainerImageUpdate | |||
| containerName := configCommon.ContainerNameUpdate | |||
| pod := corev1.Pod{ | |||
| TypeMeta: metav1.TypeMeta{ | |||
| APIVersion: "core/V1", | |||
| Kind: "Pod", | |||
| }, | |||
| ObjectMeta: metav1.ObjectMeta{ | |||
| Name: podName, | |||
| Namespace: nameSpace, | |||
| Labels: map[string]string{"name": "pod-test2"}, | |||
| }, | |||
| Spec: corev1.PodSpec{ | |||
| RestartPolicy: corev1.RestartPolicyAlways, | |||
| Containers: []corev1.Container{ | |||
| { | |||
| Name: containerName, | |||
| Image: containerImage, | |||
| Resources: corev1.ResourceRequirements{ | |||
| Limits: map[corev1.ResourceName]resource.Quantity{ | |||
| corev1.ResourceLimitsCPU: resource.MustParse("500m"), | |||
| corev1.ResourceLimitsMemory: resource.MustParse("1Gi"), | |||
| }, | |||
| Requests: map[corev1.ResourceName]resource.Quantity{ | |||
| corev1.ResourceRequestsCPU: resource.MustParse("500m"), | |||
| corev1.ResourceRequestsMemory: resource.MustParse("1Gi"), | |||
| }, | |||
| }, | |||
| }, | |||
| }, | |||
| }, | |||
| Status: corev1.PodStatus{}, | |||
| } | |||
| podNew, _ := client.CoreV1().Pods(nameSpace).Update(&pod) | |||
| fmt.Println("Huawei ContainerGroup updated", podNew) | |||
| return podNew, nil | |||
| } | |||
| // DeletePod 删除指定Pod | |||
| func DeletePod(client *kubernetes.Clientset, configPath string) error { | |||
| var configCommon config.PCMContainerConfig | |||
| configCommon, _ = config.PCMconfig(configPath) | |||
| nameSpace := configCommon.NameSpace | |||
| podName := configCommon.ContainerGroupName | |||
| fmt.Println("Huawei ContainerGroup:", podName, " Deleted") | |||
| return client.CoreV1().Pods(nameSpace).Delete(podName, &metav1.DeleteOptions{}) | |||
| } | |||
| @@ -1,34 +0,0 @@ | |||
| [pod_create_conf] | |||
| #区域ID | |||
| region_id=ap-beijing | |||
| #容器实例名称(pod名) 对应腾讯EksCiName(腾讯必需) | |||
| container_group_name=pcm-test-tencent-pod | |||
| #镜像地址 对应腾讯 Container.Image(腾讯必需) | |||
| container_image=library/nginx:stable-alpine-perl | |||
| #容器名称 对应腾讯 Container.Name(腾讯必需) | |||
| container_name=pcm-test-tencent-container | |||
| #Pod拥有核数 对应腾讯 Cpu(腾讯必需) | |||
| cpu_pod=1 | |||
| #Pod拥有内存大小 对应腾讯 Memory(腾讯必需) | |||
| memory_pod=2 | |||
| #安全组ID 对应腾讯 SecurityGroupIds(腾讯必需) | |||
| security_group_id=sg-owzbdinl | |||
| #子网ID 对应腾讯 SubnetId(腾讯必需) | |||
| subnet_id=subnet-n4h73049 | |||
| #VPC ID 对应腾讯 VpcId(腾讯必需) | |||
| vpc_id=vpc-e8hdbla8 | |||
| [pod_list_conf] | |||
| #区域ID | |||
| region_id=ap-beijing | |||
| [pod_update_conf] | |||
| #区域ID | |||
| region_id=ap-beijing | |||
| #容器实例ID 对应腾讯EksCiName(腾讯必需) | |||
| container_group_id=eksci-pawu7qad | |||
| #容器实例名称(pod名) 对应腾讯EksCiName(腾讯必需) | |||
| container_group_name=eksci-pawu7qad | |||
| [pod_delete_conf] | |||
| container_group_id=eksci-pawu7qad | |||
| @@ -1,138 +0,0 @@ | |||
| package eks | |||
| import ( | |||
| "PCM/adaptor/container_api_adaptor/common/auth/aksk" | |||
| pcmCommon "PCM/adaptor/container_api_adaptor/common/config" | |||
| "fmt" | |||
| "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" | |||
| "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" | |||
| "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" | |||
| tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" | |||
| ) | |||
| func CreateEksInstance(cloudStack string, akskPath string, configPath string) { | |||
| configCommon, _ := pcmCommon.PCMconfig(configPath) | |||
| configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| credential := common.NewCredential( | |||
| configAksk.AccessKey, | |||
| configAksk.SecretKey, | |||
| ) | |||
| cpf := profile.NewClientProfile() | |||
| cpf.HttpProfile.Endpoint = "tke.tencentcloudapi.com" | |||
| client, _ := tke.NewClient(credential, configCommon.RegionId, cpf) | |||
| request := tke.NewCreateEKSContainerInstancesRequest() | |||
| eksCiName := &configCommon.ContainerGroupName | |||
| containerName := &configCommon.ContainerName | |||
| containerImage := &configCommon.ContainerImage | |||
| eksCpu := &configCommon.CpuPodFloat | |||
| eksMemory := &configCommon.MemoryPodFloat | |||
| securityGroupId := &configCommon.SecurityGroupId | |||
| securityGroupIds := make([]*string, 1) | |||
| securityGroupIds[0] = securityGroupId | |||
| subNetId := &configCommon.SubnetId | |||
| vpcId := &configCommon.VpcId | |||
| request.EksCiName = eksCiName | |||
| container := make([]*tke.Container, 1) | |||
| container[0] = new(tke.Container) | |||
| container[0].Name = containerName | |||
| container[0].Image = containerImage | |||
| //container[0].Cpu = containerCpuPt | |||
| //container[0].Memory = containerMemoryPt | |||
| request.Containers = container | |||
| request.Cpu = eksCpu | |||
| request.Memory = eksMemory | |||
| request.SecurityGroupIds = securityGroupIds | |||
| request.SubnetId = subNetId | |||
| request.VpcId = vpcId | |||
| response, err := client.CreateEKSContainerInstances(request) | |||
| if _, ok := err.(*errors.TencentCloudSDKError); ok { | |||
| fmt.Printf("An API error has returned: %s", err) | |||
| return | |||
| } | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| fmt.Printf("%s", response.ToJsonString()) | |||
| } | |||
| func ListEksInstance(cloudStack string, akskPath string, configPath string) { | |||
| configCommon, _ := pcmCommon.PCMconfig(configPath) | |||
| configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| credential := common.NewCredential(configAksk.AccessKey, configAksk.SecretKey) | |||
| cpf := profile.NewClientProfile() | |||
| cpf.HttpProfile.Endpoint = "tke.tencentcloudapi.com" | |||
| client, _ := tke.NewClient(credential, configCommon.RegionId, cpf) | |||
| request := tke.NewDescribeEKSContainerInstancesRequest() | |||
| response, err := client.DescribeEKSContainerInstances(request) | |||
| if _, ok := err.(*errors.TencentCloudSDKError); ok { | |||
| fmt.Printf("An API error has returned: %s", err) | |||
| return | |||
| } | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| fmt.Printf("%s", response.ToJsonString()) | |||
| } | |||
| func UpdateEksInstance(cloudStack string, akskPath string, configPath string) { | |||
| configCommon, _ := pcmCommon.PCMconfig(configPath) | |||
| configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| credential := common.NewCredential(configAksk.AccessKey, configAksk.SecretKey) | |||
| cpf := profile.NewClientProfile() | |||
| cpf.HttpProfile.Endpoint = "tke.tencentcloudapi.com" | |||
| client, _ := tke.NewClient(credential, configCommon.RegionId, cpf) | |||
| request := tke.NewUpdateEKSContainerInstanceRequest() | |||
| request.EksCiId = &configCommon.ContainerGroupIdUpdate | |||
| request.Name = &configCommon.ContainerGroupNameUpdate | |||
| response, err := client.UpdateEKSContainerInstance(request) | |||
| if _, ok := err.(*errors.TencentCloudSDKError); ok { | |||
| fmt.Printf("An API error has returned: %s", err) | |||
| return | |||
| } | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| fmt.Printf("%s", response.ToJsonString()) | |||
| } | |||
| func DeleteEksInstance(cloudStack string, akskPath string, configPath string) { | |||
| configCommon, _ := pcmCommon.PCMconfig(configPath) | |||
| configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| credential := common.NewCredential(configAksk.AccessKey, configAksk.SecretKey) | |||
| cpf := profile.NewClientProfile() | |||
| cpf.HttpProfile.Endpoint = "tke.tencentcloudapi.com" | |||
| client, _ := tke.NewClient(credential, configCommon.RegionId, cpf) | |||
| request := tke.NewDeleteEKSContainerInstancesRequest() | |||
| eksCiIds := make([]*string, 1) | |||
| eksCiIds[0] = &configCommon.ContainerGroupIdDelete | |||
| request.EksCiIds = eksCiIds | |||
| response, err := client.DeleteEKSContainerInstances(request) | |||
| if _, ok := err.(*errors.TencentCloudSDKError); ok { | |||
| fmt.Printf("An API error has returned: %s", err) | |||
| return | |||
| } | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| fmt.Printf("%s", response.ToJsonString()) | |||
| } | |||
| @@ -0,0 +1,152 @@ | |||
| package pod | |||
| import ( | |||
| "context" | |||
| "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" | |||
| "sync" | |||
| "github.com/golang/glog" | |||
| "github.com/pkg/errors" | |||
| ) | |||
| func CreatePod(ctx context.Context, req *pbpod.CreatePodReq) (*pbpod.CreatePodResp, 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.CreatePod(ctx, req) | |||
| } | |||
| func ListPodDetail(ctx context.Context, req *pbpod.ListPodDetailReq) (*pbpod.ListPodDetailResp, 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.ListPodDetail(ctx, req) | |||
| } | |||
| func ListPod(ctx context.Context, req *pbpod.ListPodReq) (*pbpod.ListPodResp, error) { | |||
| var ( | |||
| wg sync.WaitGroup | |||
| mutex sync.Mutex | |||
| pods []*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.ListPodDetailReq{ | |||
| Provider: req.Provider, | |||
| AccountName: tenant.AccountName(), | |||
| RegionId: region.GetId(), | |||
| PageNumber: 1, | |||
| PageSize: 100, | |||
| NextToken: "", | |||
| } | |||
| for { | |||
| resp, err := pod.ListPodDetail(ctx, request) | |||
| if err != nil { | |||
| glog.Errorf("ListDetail error %v", err) | |||
| return | |||
| } | |||
| mutex.Lock() | |||
| pods = append(pods, 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.ListPodResp{Pods: pods}, nil | |||
| } | |||
| func ListPodAll(ctx context.Context) (*pbpod.ListPodResp, error) { | |||
| var ( | |||
| wg sync.WaitGroup | |||
| mutex sync.Mutex | |||
| pods []*pbpod.PodInstance | |||
| ) | |||
| wg.Add(len(pbtenant.CloudProvider_name)) | |||
| for k := range pbtenant.CloudProvider_name { | |||
| go func(provider int32) { | |||
| defer wg.Done() | |||
| resp, err := ListPod(ctx, &pbpod.ListPodReq{Provider: pbtenant.CloudProvider(provider)}) | |||
| if err != nil { | |||
| glog.Errorf("List error %v", err) | |||
| return | |||
| } | |||
| mutex.Lock() | |||
| pods = append(pods, resp.Pods...) | |||
| mutex.Unlock() | |||
| }(k) | |||
| } | |||
| wg.Wait() | |||
| return &pbpod.ListPodResp{Pods: pods}, nil | |||
| } | |||
| @@ -0,0 +1,198 @@ | |||
| package poder | |||
| import ( | |||
| "context" | |||
| "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" | |||
| "sync" | |||
| alieci "github.com/aliyun/alibaba-cloud-sdk-go/services/eci" | |||
| "github.com/pkg/errors" | |||
| ) | |||
| var aliClientMutex sync.Mutex | |||
| type AliEci struct { | |||
| cli *alieci.Client | |||
| region tenanter.Region | |||
| tenanter tenanter.Tenanter | |||
| } | |||
| func newAliEciClient(region tenanter.Region, tenant tenanter.Tenanter) (Poder, error) { | |||
| var ( | |||
| client *alieci.Client | |||
| err error | |||
| ) | |||
| switch t := tenant.(type) { | |||
| case *tenanter.AccessKeyTenant: | |||
| // 阿里云的sdk有一个 map 的并发问题,go test 加上-race 能检测出来,所以这里加一个锁 | |||
| aliClientMutex.Lock() | |||
| client, err = alieci.NewClientWithAccessKey(region.GetName(), t.GetId(), t.GetSecret()) | |||
| aliClientMutex.Unlock() | |||
| default: | |||
| } | |||
| if err != nil { | |||
| return nil, errors.Wrap(err, "init ali ecs client error") | |||
| } | |||
| return &AliEci{ | |||
| cli: client, | |||
| region: region, | |||
| tenanter: tenant, | |||
| }, nil | |||
| } | |||
| func (eci *AliEci) CreatePod(ctx context.Context, req *pbpod.CreatePodReq) (*pbpod.CreatePodResp, error) { | |||
| request := alieci.CreateCreateContainerGroupRequest() | |||
| request.RegionId = eci.region.GetName() | |||
| request.ContainerGroupName = req.PodName | |||
| requestContainer := make([]alieci.CreateContainerGroupContainer, 1) | |||
| requestContainer[0].Image = req.ContainerImage | |||
| requestContainer[0].Name = req.ContainerName | |||
| request.Container = &requestContainer | |||
| resp, err := eci.cli.CreateContainerGroup(request) | |||
| if err != nil { | |||
| return nil, errors.Wrap(err, "Aliyun CreatePod error") | |||
| } | |||
| isFinished := false | |||
| if len(resp.ContainerGroupId) > 0 { | |||
| isFinished = true | |||
| } | |||
| return &pbpod.CreatePodResp{ | |||
| Pods: nil, | |||
| Finished: isFinished, | |||
| RequestId: resp.RequestId, | |||
| }, nil | |||
| } | |||
| func (eci *AliEci) ListPodDetail(ctx context.Context, req *pbpod.ListPodDetailReq) (*pbpod.ListPodDetailResp, error) { | |||
| request := alieci.CreateDescribeContainerGroupsRequest() | |||
| request.NextToken = req.NextToken | |||
| resp, err := eci.cli.DescribeContainerGroups(request) | |||
| if err != nil { | |||
| return nil, errors.Wrap(err, "Aliyun ListDetail error") | |||
| } | |||
| var ecies = make([]*pbpod.PodInstance, len(resp.ContainerGroups)) | |||
| for k, v := range resp.ContainerGroups { | |||
| ecies[k] = &pbpod.PodInstance{ | |||
| Provider: pbtenant.CloudProvider_ali, | |||
| AccountName: eci.tenanter.AccountName(), | |||
| PodId: v.ContainerGroupId, | |||
| PodName: v.ContainerGroupName, | |||
| RegionId: 0, | |||
| ContainerImage: v.Containers[k].Image, | |||
| ContainerName: v.Containers[k].Name, | |||
| CpuPod: v.Cpu, | |||
| MemoryPod: v.Memory, | |||
| SecurityGroupId: v.SecurityGroupId, | |||
| SubnetId: v.InternetIp, | |||
| VpcId: v.VpcId, | |||
| Namespace: "", | |||
| } | |||
| } | |||
| isFinished := false | |||
| if len(ecies) < int(req.PageSize) { | |||
| isFinished = true | |||
| } | |||
| return &pbpod.ListPodDetailResp{ | |||
| Pods: ecies, | |||
| Finished: isFinished, | |||
| PageNumber: req.PageNumber + 1, | |||
| PageSize: req.PageSize, | |||
| NextToken: resp.NextToken, | |||
| RequestId: resp.RequestId, | |||
| }, nil | |||
| } | |||
| // | |||
| //// DescribeContainerGroup 查询Pod | |||
| //func DescribeContainerGroup(cloudStack string, akskPath string, configPath string) eci.DescribeContainerGroupsContainerGroup0 { | |||
| // var client *eci.Client | |||
| // | |||
| // configCommon, _ := config.PCMconfig(configPath) | |||
| // configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| // client, _ = eci.NewClientWithAccessKey(configCommon.RegionId, configAksk.AccessKey, configAksk.SecretKey) | |||
| // | |||
| // // 生成查询请求 | |||
| // describeContainerGroupsRequest := eci.CreateDescribeContainerGroupsRequest() | |||
| // describeContainerGroupsRequest.RegionId = configCommon.RegionIdList | |||
| // describeContainerGroupsResponse, err := client.DescribeContainerGroups(describeContainerGroupsRequest) | |||
| // if err != nil { | |||
| // panic(err) | |||
| // } | |||
| // describeContainerGroupNumber := len(describeContainerGroupsResponse.ContainerGroups) | |||
| // | |||
| // //当前区域没有Pod情形的处理 | |||
| // if describeContainerGroupsResponse.TotalCount != 1 && describeContainerGroupNumber != 1 { | |||
| // fmt.Println("Invalid ContainerGroups count", describeContainerGroupsResponse.TotalCount, describeContainerGroupNumber) | |||
| // panic("Invalid ContainerGroups count") | |||
| // } | |||
| // | |||
| // fmt.Println("Alibaba ContainerGroup Name:", describeContainerGroupsResponse.ContainerGroups[0].ContainerGroupName, "\n", | |||
| // "ContainerGroup Id:", describeContainerGroupsResponse.ContainerGroups[0].ContainerGroupId) | |||
| // | |||
| // return describeContainerGroupsResponse.ContainerGroups[0] | |||
| //} | |||
| // | |||
| //// UpdateContainerGroup 更新Pod | |||
| //func UpdateContainerGroup(cloudStack string, akskPath string, configPath string) string { | |||
| // var client *eci.Client | |||
| // | |||
| // configCommon, _ := config.PCMconfig(configPath) | |||
| // configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| // | |||
| // client, _ = eci.NewClientWithAccessKey(configCommon.RegionId, configAksk.AccessKey, configAksk.SecretKey) | |||
| // | |||
| // //生成更新请求 | |||
| // updateContainerGroupRequest := eci.CreateUpdateContainerGroupRequest() | |||
| // updateContainerGroupRequest.RegionId = configCommon.RegionIdUpdate | |||
| // updateContainerGroupRequest.ContainerGroupId = configCommon.ContainerGroupIdUpdate | |||
| // | |||
| // //容器实体内容,这里测试可以修改配置文件中的重启策略 | |||
| // updateContainerRequestContainer := make([]eci.UpdateContainerGroupContainer, 1) | |||
| // updateContainerRequestContainer[0].Image = configCommon.ContainerImage | |||
| // updateContainerRequestContainer[0].Name = configCommon.ContainerName | |||
| // updateContainerGroupRequest.Container = &updateContainerRequestContainer | |||
| // updateContainerGroupRequest.RestartPolicy = configCommon.RestartPolicyUpdate | |||
| // | |||
| // updateContainerGroupResponse, err := client.UpdateContainerGroup(updateContainerGroupRequest) | |||
| // if err != nil { | |||
| // panic(err) | |||
| // } | |||
| // requestId := updateContainerGroupResponse.RequestId | |||
| // fmt.Println("Alibaba ContainerGroup: ", configCommon.ContainerGroupIdUpdate, " Updated with request ID:", requestId) | |||
| // return requestId | |||
| //} | |||
| // | |||
| //// DeleteContainerGroup 删除Pod | |||
| //func DeleteContainerGroup(cloudStack string, akskPath string, configPath string) string { | |||
| // var client *eci.Client | |||
| // configCommon, _ := config.PCMconfig(configPath) | |||
| // configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| // client, _ = eci.NewClientWithAccessKey(configCommon.RegionId, configAksk.AccessKey, configAksk.SecretKey) | |||
| // | |||
| // //生成删除请求 | |||
| // deleteContainerGroupRequest := eci.CreateDeleteContainerGroupRequest() | |||
| // deleteContainerGroupRequest.RegionId = configCommon.RegionIdDelete | |||
| // deleteContainerGroupRequest.ContainerGroupId = configCommon.ContainerGroupIdDelete | |||
| // | |||
| // deleteContainerGroupResponse, err := client.DeleteContainerGroup(deleteContainerGroupRequest) | |||
| // if err != nil { | |||
| // panic(err) | |||
| // } | |||
| // requestId := deleteContainerGroupResponse.RequestId | |||
| // fmt.Println("Alibaba ContainerGroup: ", configCommon.ContainerGroupIdUpdate, " Deleted with request ID:", requestId) | |||
| // | |||
| // return requestId | |||
| //} | |||
| @@ -0,0 +1,135 @@ | |||
| package poder | |||
| // | |||
| //import ( | |||
| // "fmt" | |||
| // "gitlink.org.cn/JCCE/PCM/adaptor/pod_adaptor/common/config" | |||
| // corev1 "k8s.io/api/core/v1" | |||
| // "k8s.io/apimachinery/pkg/api/resource" | |||
| // metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | |||
| // "k8s.io/client-go/kubernetes" | |||
| //) | |||
| // | |||
| //// CreatePod 创建Pod | |||
| //func CreatePod(client *kubernetes.Clientset, configPath string) (*corev1.Pod, error) { | |||
| // | |||
| // var configCommon config.PCMContainerConfig | |||
| // configCommon, _ = config.PCMconfig(configPath) | |||
| // | |||
| // nameSpace := configCommon.NameSpace | |||
| // podName := configCommon.ContainerGroupName | |||
| // containerImage := configCommon.ContainerImage | |||
| // containerName := configCommon.ContainerName | |||
| // cpuPod := configCommon.CpuPod | |||
| // memoryPod := configCommon.MemoryPod | |||
| // pod := corev1.Pod{ | |||
| // TypeMeta: metav1.TypeMeta{ | |||
| // APIVersion: "core/V1", | |||
| // Kind: "Pod", | |||
| // }, | |||
| // ObjectMeta: metav1.ObjectMeta{ | |||
| // Name: podName, | |||
| // Namespace: nameSpace, | |||
| // Labels: map[string]string{"name": "testapi"}, | |||
| // }, | |||
| // Spec: corev1.PodSpec{ | |||
| // RestartPolicy: corev1.RestartPolicyAlways, | |||
| // Containers: []corev1.Container{ | |||
| // { | |||
| // Name: containerName, | |||
| // Image: containerImage, | |||
| // Resources: corev1.ResourceRequirements{ | |||
| // Limits: map[corev1.ResourceName]resource.Quantity{ | |||
| // corev1.ResourceCPU: resource.MustParse(cpuPod), | |||
| // corev1.ResourceMemory: resource.MustParse(memoryPod), | |||
| // }, | |||
| // }, | |||
| // }, | |||
| // }, | |||
| // }, | |||
| // Status: corev1.PodStatus{}, | |||
| // } | |||
| // | |||
| // fmt.Println("Huawei ContainerGroup created") | |||
| // return client.CoreV1().Pods(nameSpace).Create(&pod) | |||
| //} | |||
| // | |||
| //// ListPod 查询Namespace下Pod列表 | |||
| //func ListPod(client *kubernetes.Clientset, configPath string) (*corev1.PodList, error) { | |||
| // | |||
| // var configCommon config.PCMContainerConfig | |||
| // configCommon, _ = config.PCMconfig(configPath) | |||
| // | |||
| // nameSpace := configCommon.NameSpace | |||
| // | |||
| // podList, _ := client.CoreV1().Pods(nameSpace).List(metav1.ListOptions{}) | |||
| // fmt.Println("Huawei ContainerGroup list", podList) | |||
| // | |||
| // return podList, nil | |||
| //} | |||
| // | |||
| //// UpdatePod 更新指定Pod | |||
| ///* | |||
| //// 跨namespace目前有点问题 | |||
| //*/ | |||
| //func UpdatePod(client *kubernetes.Clientset, configPath string) (*corev1.Pod, error) { | |||
| // | |||
| // var configCommon config.PCMContainerConfig | |||
| // configCommon, _ = config.PCMconfig(configPath) | |||
| // | |||
| // nameSpace := configCommon.NamespaceUpdate | |||
| // podName := configCommon.ContainerGroupNameUpdate | |||
| // containerImage := configCommon.ContainerImageUpdate | |||
| // containerName := configCommon.ContainerNameUpdate | |||
| // | |||
| // pod := corev1.Pod{ | |||
| // TypeMeta: metav1.TypeMeta{ | |||
| // APIVersion: "core/V1", | |||
| // Kind: "Pod", | |||
| // }, | |||
| // ObjectMeta: metav1.ObjectMeta{ | |||
| // Name: podName, | |||
| // Namespace: nameSpace, | |||
| // Labels: map[string]string{"name": "pod-test2"}, | |||
| // }, | |||
| // Spec: corev1.PodSpec{ | |||
| // RestartPolicy: corev1.RestartPolicyAlways, | |||
| // Containers: []corev1.Container{ | |||
| // { | |||
| // Name: containerName, | |||
| // Image: containerImage, | |||
| // Resources: corev1.ResourceRequirements{ | |||
| // Limits: map[corev1.ResourceName]resource.Quantity{ | |||
| // corev1.ResourceLimitsCPU: resource.MustParse("500m"), | |||
| // corev1.ResourceLimitsMemory: resource.MustParse("1Gi"), | |||
| // }, | |||
| // Requests: map[corev1.ResourceName]resource.Quantity{ | |||
| // corev1.ResourceRequestsCPU: resource.MustParse("500m"), | |||
| // corev1.ResourceRequestsMemory: resource.MustParse("1Gi"), | |||
| // }, | |||
| // }, | |||
| // }, | |||
| // }, | |||
| // }, | |||
| // Status: corev1.PodStatus{}, | |||
| // } | |||
| // | |||
| // podNew, _ := client.CoreV1().Pods(nameSpace).Update(&pod) | |||
| // fmt.Println("Huawei ContainerGroup updated", podNew) | |||
| // | |||
| // return podNew, nil | |||
| //} | |||
| // | |||
| //// DeletePod 删除指定Pod | |||
| //func DeletePod(client *kubernetes.Clientset, configPath string) error { | |||
| // | |||
| // var configCommon config.PCMContainerConfig | |||
| // configCommon, _ = config.PCMconfig(configPath) | |||
| // | |||
| // nameSpace := configCommon.NameSpace | |||
| // podName := configCommon.ContainerGroupName | |||
| // | |||
| // fmt.Println("Huawei ContainerGroup:", podName, " Deleted") | |||
| // | |||
| // return client.CoreV1().Pods(nameSpace).Delete(podName, &metav1.DeleteOptions{}) | |||
| //} | |||
| @@ -0,0 +1,46 @@ | |||
| package poder | |||
| import ( | |||
| "context" | |||
| "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" | |||
| ) | |||
| var ( | |||
| ErrPodListNotSupported = errors.New("cloud not supported pod list") | |||
| ErrPoderPanic = errors.New("pod init panic") | |||
| ) | |||
| type Poder interface { | |||
| ListPodDetail(ctx context.Context, req *pbpod.ListPodDetailReq) (resp *pbpod.ListPodDetailResp, err error) | |||
| CreatePod(ctx context.Context, req *pbpod.CreatePodReq) (resp *pbpod.CreatePodResp, err error) | |||
| } | |||
| 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 newAliEciClient(region, tenant) | |||
| case pbtenant.CloudProvider_tencent: | |||
| return nil, nil | |||
| case pbtenant.CloudProvider_huawei: | |||
| return nil, nil | |||
| //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,139 @@ | |||
| package poder | |||
| // | |||
| //import ( | |||
| // "fmt" | |||
| // "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" | |||
| // "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" | |||
| // "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" | |||
| // tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" | |||
| // "gitlink.org.cn/JCCE/PCM/adaptor/pod_adaptor/common/auth/aksk" | |||
| // pcmCommon "gitlink.org.cn/JCCE/PCM/adaptor/pod_adaptor/common/config" | |||
| //) | |||
| // | |||
| //func CreateEksInstance(cloudStack string, akskPath string, configPath string) { | |||
| // | |||
| // configCommon, _ := pcmCommon.PCMconfig(configPath) | |||
| // configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| // | |||
| // credential := common.NewCredential( | |||
| // configAksk.AccessKey, | |||
| // configAksk.SecretKey, | |||
| // ) | |||
| // cpf := profile.NewClientProfile() | |||
| // cpf.HttpProfile.Endpoint = "tke.tencentcloudapi.com" | |||
| // client, _ := tke.NewClient(credential, configCommon.RegionId, cpf) | |||
| // | |||
| // request := tke.NewCreateEKSContainerInstancesRequest() | |||
| // | |||
| // eksCiName := &configCommon.ContainerGroupName | |||
| // containerName := &configCommon.ContainerName | |||
| // containerImage := &configCommon.ContainerImage | |||
| // eksCpu := &configCommon.CpuPodFloat | |||
| // eksMemory := &configCommon.MemoryPodFloat | |||
| // securityGroupId := &configCommon.SecurityGroupId | |||
| // securityGroupIds := make([]*string, 1) | |||
| // securityGroupIds[0] = securityGroupId | |||
| // subNetId := &configCommon.SubnetId | |||
| // vpcId := &configCommon.VpcId | |||
| // | |||
| // request.EksCiName = eksCiName | |||
| // container := make([]*tke.Container, 1) | |||
| // container[0] = new(tke.Container) | |||
| // container[0].Name = containerName | |||
| // container[0].Image = containerImage | |||
| // //container[0].Cpu = containerCpuPt | |||
| // //container[0].Memory = containerMemoryPt | |||
| // | |||
| // request.Containers = container | |||
| // request.Cpu = eksCpu | |||
| // request.Memory = eksMemory | |||
| // request.SecurityGroupIds = securityGroupIds | |||
| // request.SubnetId = subNetId | |||
| // request.VpcId = vpcId | |||
| // | |||
| // response, err := client.CreateEKSContainerInstances(request) | |||
| // if _, ok := err.(*errors.TencentCloudSDKError); ok { | |||
| // fmt.Printf("An API error has returned: %s", err) | |||
| // return | |||
| // } | |||
| // if err != nil { | |||
| // panic(err) | |||
| // } | |||
| // fmt.Printf("%s", response.ToJsonString()) | |||
| //} | |||
| // | |||
| //func ListEksInstance(cloudStack string, akskPath string, configPath string) { | |||
| // | |||
| // configCommon, _ := pcmCommon.PCMconfig(configPath) | |||
| // configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| // | |||
| // credential := common.NewCredential(configAksk.AccessKey, configAksk.SecretKey) | |||
| // cpf := profile.NewClientProfile() | |||
| // cpf.HttpProfile.Endpoint = "tke.tencentcloudapi.com" | |||
| // client, _ := tke.NewClient(credential, configCommon.RegionId, cpf) | |||
| // | |||
| // request := tke.NewDescribeEKSContainerInstancesRequest() | |||
| // | |||
| // response, err := client.DescribeEKSContainerInstances(request) | |||
| // if _, ok := err.(*errors.TencentCloudSDKError); ok { | |||
| // fmt.Printf("An API error has returned: %s", err) | |||
| // return | |||
| // } | |||
| // if err != nil { | |||
| // panic(err) | |||
| // } | |||
| // fmt.Printf("%s", response.ToJsonString()) | |||
| //} | |||
| // | |||
| //func UpdateEksInstance(cloudStack string, akskPath string, configPath string) { | |||
| // | |||
| // configCommon, _ := pcmCommon.PCMconfig(configPath) | |||
| // configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| // | |||
| // credential := common.NewCredential(configAksk.AccessKey, configAksk.SecretKey) | |||
| // cpf := profile.NewClientProfile() | |||
| // cpf.HttpProfile.Endpoint = "tke.tencentcloudapi.com" | |||
| // client, _ := tke.NewClient(credential, configCommon.RegionId, cpf) | |||
| // | |||
| // request := tke.NewUpdateEKSContainerInstanceRequest() | |||
| // request.EksCiId = &configCommon.ContainerGroupIdUpdate | |||
| // request.Name = &configCommon.ContainerGroupNameUpdate | |||
| // | |||
| // response, err := client.UpdateEKSContainerInstance(request) | |||
| // if _, ok := err.(*errors.TencentCloudSDKError); ok { | |||
| // fmt.Printf("An API error has returned: %s", err) | |||
| // return | |||
| // } | |||
| // if err != nil { | |||
| // panic(err) | |||
| // } | |||
| // fmt.Printf("%s", response.ToJsonString()) | |||
| //} | |||
| // | |||
| //func DeleteEksInstance(cloudStack string, akskPath string, configPath string) { | |||
| // | |||
| // configCommon, _ := pcmCommon.PCMconfig(configPath) | |||
| // configAksk, _ := aksk.AkskConfig(cloudStack, akskPath) | |||
| // | |||
| // credential := common.NewCredential(configAksk.AccessKey, configAksk.SecretKey) | |||
| // cpf := profile.NewClientProfile() | |||
| // cpf.HttpProfile.Endpoint = "tke.tencentcloudapi.com" | |||
| // client, _ := tke.NewClient(credential, configCommon.RegionId, cpf) | |||
| // | |||
| // request := tke.NewDeleteEKSContainerInstancesRequest() | |||
| // eksCiIds := make([]*string, 1) | |||
| // eksCiIds[0] = &configCommon.ContainerGroupIdDelete | |||
| // | |||
| // request.EksCiIds = eksCiIds | |||
| // | |||
| // response, err := client.DeleteEKSContainerInstances(request) | |||
| // if _, ok := err.(*errors.TencentCloudSDKError); ok { | |||
| // fmt.Printf("An API error has returned: %s", err) | |||
| // return | |||
| // } | |||
| // if err != nil { | |||
| // panic(err) | |||
| // } | |||
| // fmt.Printf("%s", response.ToJsonString()) | |||
| //} | |||
| @@ -0,0 +1,125 @@ | |||
| package ecs | |||
| import ( | |||
| "context" | |||
| "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" | |||
| ) | |||
| func ListDetail(ctx context.Context, req *pbecs.ListDetailReq) (*pbecs.ListDetailResp, error) { | |||
| var ( | |||
| ecs ecser.Ecser | |||
| ) | |||
| 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 ecs, err = ecser.NewEcsClient(req.Provider, region, tenanter); err != nil { | |||
| return nil, errors.WithMessage(err, "NewEcsClient error") | |||
| } | |||
| break | |||
| } | |||
| } | |||
| return ecs.ListDetail(ctx, req) | |||
| } | |||
| func List(ctx context.Context, req *pbecs.ListReq) (*pbecs.ListResp, error) { | |||
| var ( | |||
| wg sync.WaitGroup | |||
| mutex sync.Mutex | |||
| ecses []*pbecs.EcsInstance | |||
| ) | |||
| 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() | |||
| ecs, err := ecser.NewEcsClient(req.Provider, region, tenant) | |||
| if err != nil { | |||
| glog.Errorf("New Ecs Client error %v", err) | |||
| return | |||
| } | |||
| request := &pbecs.ListDetailReq{ | |||
| Provider: req.Provider, | |||
| AccountName: tenant.AccountName(), | |||
| RegionId: region.GetId(), | |||
| PageNumber: 1, | |||
| PageSize: 100, | |||
| NextToken: "", | |||
| } | |||
| for { | |||
| resp, err := ecs.ListDetail(ctx, request) | |||
| if err != nil { | |||
| glog.Errorf("ListDetail error %v", err) | |||
| return | |||
| } | |||
| mutex.Lock() | |||
| ecses = append(ecses, resp.Ecses...) | |||
| mutex.Unlock() | |||
| if resp.Finished { | |||
| break | |||
| } | |||
| request.PageNumber, request.PageSize, request.NextToken = resp.PageNumber, resp.PageSize, resp.NextToken | |||
| } | |||
| }(t, region) | |||
| } | |||
| } | |||
| wg.Wait() | |||
| return &pbecs.ListResp{Ecses: ecses}, nil | |||
| } | |||
| func ListAll(ctx context.Context) (*pbecs.ListResp, error) { | |||
| var ( | |||
| wg sync.WaitGroup | |||
| mutex sync.Mutex | |||
| ecses []*pbecs.EcsInstance | |||
| ) | |||
| wg.Add(len(pbtenant.CloudProvider_name)) | |||
| for k := range pbtenant.CloudProvider_name { | |||
| go func(provider int32) { | |||
| defer wg.Done() | |||
| resp, err := List(ctx, &pbecs.ListReq{Provider: pbtenant.CloudProvider(provider)}) | |||
| if err != nil { | |||
| glog.Errorf("List error %v", err) | |||
| return | |||
| } | |||
| mutex.Lock() | |||
| ecses = append(ecses, resp.Ecses...) | |||
| mutex.Unlock() | |||
| }(k) | |||
| } | |||
| wg.Wait() | |||
| return &pbecs.ListResp{Ecses: ecses}, nil | |||
| } | |||
| @@ -0,0 +1,82 @@ | |||
| package ecs | |||
| import ( | |||
| "context" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "testing" | |||
| ) | |||
| func TestListDetail(t *testing.T) { | |||
| type args struct { | |||
| req *pbecs.ListDetailReq | |||
| } | |||
| tests := []struct { | |||
| name string | |||
| args args | |||
| wantErr bool | |||
| }{ | |||
| {name: "ali", args: args{req: &pbecs.ListDetailReq{Provider: pbtenant.CloudProvider_ali, RegionId: int32(pbtenant.AliRegionId_ali_cn_hangzhou), PageNumber: 1, PageSize: 10}}, wantErr: false}, | |||
| {name: "tencent", args: args{req: &pbecs.ListDetailReq{Provider: pbtenant.CloudProvider_tencent, RegionId: int32(pbtenant.TencentRegionId_tc_ap_beijing), PageNumber: 1, PageSize: 10}}, wantErr: false}, | |||
| {name: "aws", args: args{req: &pbecs.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 *pbecs.ListReq | |||
| } | |||
| tests := []struct { | |||
| name string | |||
| args args | |||
| wantErr bool | |||
| }{ | |||
| {name: "ali", args: args{req: &pbecs.ListReq{Provider: pbtenant.CloudProvider_ali}}, wantErr: false}, | |||
| {name: "tencent", args: args{req: &pbecs.ListReq{Provider: pbtenant.CloudProvider_tencent}}, wantErr: false}, | |||
| {name: "huawei", args: args{req: &pbecs.ListReq{Provider: pbtenant.CloudProvider_huawei}}, wantErr: false}, | |||
| {name: "aws", args: args{req: &pbecs.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 *pbecs.ListAllReq | |||
| } | |||
| tests := []struct { | |||
| name string | |||
| args args | |||
| wantErr bool | |||
| }{ | |||
| {name: "all", args: args{req: &pbecs.ListAllReq{}}, 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,32 @@ | |||
| package ecs | |||
| import ( | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "os" | |||
| "testing" | |||
| ) | |||
| 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,95 @@ | |||
| package ecser | |||
| import ( | |||
| "context" | |||
| "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/aliyun/alibaba-cloud-sdk-go/sdk/requests" | |||
| aliecs "github.com/aliyun/alibaba-cloud-sdk-go/services/ecs" | |||
| "github.com/pkg/errors" | |||
| ) | |||
| var aliClientMutex sync.Mutex | |||
| type AliEcs struct { | |||
| cli *aliecs.Client | |||
| region tenanter.Region | |||
| tenanter tenanter.Tenanter | |||
| } | |||
| func newAliEcsClient(region tenanter.Region, tenant tenanter.Tenanter) (Ecser, error) { | |||
| var ( | |||
| client *aliecs.Client | |||
| err error | |||
| ) | |||
| switch t := tenant.(type) { | |||
| case *tenanter.AccessKeyTenant: | |||
| // 阿里云的sdk有一个 map 的并发问题,go test 加上-race 能检测出来,所以这里加一个锁 | |||
| aliClientMutex.Lock() | |||
| client, err = aliecs.NewClientWithAccessKey(region.GetName(), t.GetId(), t.GetSecret()) | |||
| aliClientMutex.Unlock() | |||
| default: | |||
| } | |||
| if err != nil { | |||
| return nil, errors.Wrap(err, "init ali ecs client error") | |||
| } | |||
| return &AliEcs{ | |||
| cli: client, | |||
| region: region, | |||
| tenanter: tenant, | |||
| }, nil | |||
| } | |||
| func (ecs *AliEcs) ListDetail(ctx context.Context, req *pbecs.ListDetailReq) (*pbecs.ListDetailResp, error) { | |||
| request := aliecs.CreateDescribeInstancesRequest() | |||
| request.PageNumber = requests.NewInteger(int(req.PageNumber)) | |||
| request.PageSize = requests.NewInteger(int(req.PageSize)) | |||
| request.NextToken = req.NextToken | |||
| resp, err := ecs.cli.DescribeInstances(request) | |||
| if err != nil { | |||
| return nil, errors.Wrap(err, "Aliyun ListDetail error") | |||
| } | |||
| var ecses = make([]*pbecs.EcsInstance, len(resp.Instances.Instance)) | |||
| for k, v := range resp.Instances.Instance { | |||
| ecses[k] = &pbecs.EcsInstance{ | |||
| Provider: pbtenant.CloudProvider_ali, | |||
| AccountName: ecs.tenanter.AccountName(), | |||
| InstanceId: v.InstanceId, | |||
| InstanceName: v.InstanceName, | |||
| RegionName: ecs.region.GetName(), | |||
| PublicIps: v.PublicIpAddress.IpAddress, | |||
| 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.InnerIpAddress.IpAddress, | |||
| VpcId: v.VpcAttributes.VpcId, | |||
| ResourceGroupId: v.ResourceGroupId, | |||
| ChargeType: v.InstanceChargeType, | |||
| } | |||
| } | |||
| isFinished := false | |||
| if len(ecses) < int(req.PageSize) { | |||
| isFinished = true | |||
| } | |||
| return &pbecs.ListDetailResp{ | |||
| Ecses: ecses, | |||
| Finished: isFinished, | |||
| PageNumber: req.PageNumber + 1, | |||
| PageSize: req.PageSize, | |||
| NextToken: resp.NextToken, | |||
| RequestId: resp.RequestId, | |||
| }, nil | |||
| } | |||
| @@ -0,0 +1,98 @@ | |||
| package ecser | |||
| //TODO aws | |||
| // | |||
| //import ( | |||
| // "context" | |||
| // | |||
| // "github.com/aws/aws-sdk-go-v2/config" | |||
| // "github.com/aws/aws-sdk-go-v2/credentials" | |||
| // awsec2 "github.com/aws/aws-sdk-go-v2/service/ec2" | |||
| // "github.com/pkg/errors" | |||
| // | |||
| // "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" | |||
| //) | |||
| // | |||
| //type AwsEcs struct { | |||
| // cli *awsec2.Client | |||
| // region tenanter.Region | |||
| // tenanter tenanter.Tenanter | |||
| //} | |||
| // | |||
| //func newAwsEcsClient(region tenanter.Region, tenant tenanter.Tenanter) (Ecser, error) { | |||
| // var ( | |||
| // client *awsec2.Client | |||
| // err error | |||
| // ) | |||
| // | |||
| // switch t := tenant.(type) { | |||
| // case *tenanter.AccessKeyTenant: | |||
| // cfg, err := config.LoadDefaultConfig(context.TODO(), | |||
| // config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(t.GetId(), t.GetSecret(), "")), | |||
| // config.WithRegion(region.GetName()), | |||
| // ) | |||
| // if err != nil { | |||
| // return nil, errors.Wrap(err, "LoadDefaultConfig aws ecs client error") | |||
| // } | |||
| // client = awsec2.NewFromConfig(cfg) | |||
| // default: | |||
| // } | |||
| // | |||
| // if err != nil { | |||
| // return nil, errors.Wrap(err, "init aws ec2 client error") | |||
| // } | |||
| // return &AwsEcs{ | |||
| // cli: client, | |||
| // region: region, | |||
| // tenanter: tenant, | |||
| // }, nil | |||
| //} | |||
| // | |||
| //func (ecs *AwsEcs) ListDetail(ctx context.Context, req *pbecs.ListDetailReq) (*pbecs.ListDetailResp, error) { | |||
| // request := new(awsec2.DescribeInstancesInput) | |||
| // request.MaxResults = req.PageSize | |||
| // request.NextToken = &req.NextToken | |||
| // | |||
| // resp, err := ecs.cli.DescribeInstances(ctx, request) | |||
| // if err != nil { | |||
| // return nil, errors.Wrap(err, "Aws ListDetail error") | |||
| // } | |||
| // | |||
| // var ecses []*pbecs.EcsInstance | |||
| // for _, v := range resp.Reservations { | |||
| // for _, v2 := range v.Instances { | |||
| // ecses = append(ecses, &pbecs.EcsInstance{ | |||
| // Provider: pbtenant.CloudProvider_aws, | |||
| // AccountName: ecs.tenanter.AccountName(), | |||
| // InstanceId: *v2.InstanceId, | |||
| // InstanceName: "", | |||
| // RegionName: ecs.region.GetName(), | |||
| // PublicIps: []string{*v2.PublicIpAddress}, | |||
| // InstanceType: string(v2.InstanceType), | |||
| // Cpu: v2.CpuOptions.CoreCount, | |||
| // Memory: 0, | |||
| // Description: "", | |||
| // Status: string(v2.State.Name), | |||
| // CreationTime: "", | |||
| // ExpireTime: "", | |||
| // }) | |||
| // } | |||
| // | |||
| // } | |||
| // | |||
| // if resp.NextToken != nil { | |||
| // return &pbecs.ListDetailResp{ | |||
| // Ecses: ecses, | |||
| // Finished: false, | |||
| // NextToken: *resp.NextToken, | |||
| // }, nil | |||
| // } | |||
| // return &pbecs.ListDetailResp{ | |||
| // Ecses: ecses, | |||
| // Finished: true, | |||
| // NextToken: "", | |||
| // }, nil | |||
| //} | |||
| @@ -0,0 +1,45 @@ | |||
| package ecser | |||
| import ( | |||
| "context" | |||
| "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" | |||
| "github.com/golang/glog" | |||
| "github.com/pkg/errors" | |||
| ) | |||
| var ( | |||
| ErrEcsListNotSupported = errors.New("cloud not supported ecs list") | |||
| ErrEcserPanic = errors.New("ecs init panic") | |||
| ) | |||
| type Ecser interface { | |||
| ListDetail(ctx context.Context, req *pbecs.ListDetailReq) (resp *pbecs.ListDetailResp, err error) | |||
| } | |||
| func NewEcsClient(provider pbtenant.CloudProvider, region tenanter.Region, tenant tenanter.Tenanter) (ecser Ecser, err error) { | |||
| // 部分sdk会在内部panic | |||
| defer func() { | |||
| if err1 := recover(); err1 != nil { | |||
| glog.Errorf("NewEcsClient panic %v", err1) | |||
| err = errors.WithMessagef(ErrEcserPanic, "%v", err1) | |||
| } | |||
| }() | |||
| switch provider { | |||
| case pbtenant.CloudProvider_ali: | |||
| return newAliEcsClient(region, tenant) | |||
| case pbtenant.CloudProvider_tencent: | |||
| return newTencentCvmClient(region, tenant) | |||
| case pbtenant.CloudProvider_huawei: | |||
| return newHuaweiEcsClient(region, tenant) | |||
| //TODO aws | |||
| //case pbtenant.CloudProvider_aws: | |||
| // return newAwsEcsClient(region, tenant) | |||
| } | |||
| err = errors.WithMessagef(ErrEcsListNotSupported, "cloud provider %v region %v", provider, region) | |||
| return | |||
| } | |||
| @@ -0,0 +1,66 @@ | |||
| package ecser | |||
| import ( | |||
| "context" | |||
| "testing" | |||
| ) | |||
| 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) | |||
| } | |||
| }) | |||
| } | |||
| } | |||
| @@ -0,0 +1,111 @@ | |||
| package ecser | |||
| // | |||
| // import ( | |||
| // "context" | |||
| // "fmt" | |||
| // | |||
| // "github.com/cloud-fitter/cloud-fitter/gen/idl/pbecs" | |||
| // "github.com/cloud-fitter/cloud-fitter/internal/tenanter" | |||
| // "github.com/pkg/errors" | |||
| // "google.golang.org/api/compute/v1" | |||
| // "google.golang.org/api/option" | |||
| // ) | |||
| // | |||
| // // Google当前存在2个问题: | |||
| // // 1. 权限的最佳实践 | |||
| // // 2. 国内无法直接访问google认证的接口 | |||
| // type GoogleEcs struct { | |||
| // cli *compute.Service | |||
| // } | |||
| // | |||
| // func NewGoogleEcsClient(tenant tenanter.Tenanter) (Ecser, error) { | |||
| // var client *compute.Service | |||
| // | |||
| // // rName, err := tenanter.GetAwsRegionName(regionId) | |||
| // // if err != nil { | |||
| // // return nil, err | |||
| // // } | |||
| // | |||
| // client, err := compute.NewService(context.Background(), option.WithCredentialsFile("/Users/didi/Study/cloud-fitter/google_auth.json")) | |||
| // if err != nil { | |||
| // return nil, errors.WithMessage(err, "new compute service error") | |||
| // } | |||
| // | |||
| // // // Project ID for this request. | |||
| // // project := "my-project" // TODO: Update placeholder value. | |||
| // // | |||
| // // // The name of the zone for this request. | |||
| // // zone := "my-zone" // TODO: Update placeholder value. | |||
| // // | |||
| // // req := computeService.Instances.ListDetail(project, zone) | |||
| // // if err := req.Pages(ctx, func(page *compute.InstanceList) error { | |||
| // // for _, instance := range page.Items { | |||
| // // // TODO: Change code below to process each `instance` resource: | |||
| // // fmt.Printf("%#v\n", instance) | |||
| // // } | |||
| // // return nil | |||
| // // }); err != nil { | |||
| // // log.Fatal(err) | |||
| // // } | |||
| // | |||
| // // switch t := tenant.(type) { | |||
| // // case *tenanter.AccessKeyTenant: | |||
| // // auth := basic.NewCredentialsBuilder().WithAk(t.GetId()).WithSk(t.GetSecret()).Build() | |||
| // // hcClient := hwecs.EcsClientBuilder().WithRegion(region.ValueOf(rName)).WithCredential(auth).Build() | |||
| // // client = hwecs.NewEcsClient(hcClient) | |||
| // // default: | |||
| // // } | |||
| // | |||
| // if err != nil { | |||
| // return nil, errors.Wrap(err, "init google ecs client error") | |||
| // } | |||
| // return &GoogleEcs{cli: client}, nil | |||
| // } | |||
| // | |||
| // // func (ecs *GoogleEcs) ECSStatistic() (*pbecs.ECSStatisticRespList, error) { | |||
| // // return nil, nil | |||
| // // } | |||
| // | |||
| // func (ecs *GoogleEcs) ListDetail(pageNumber, pageSize int) (*pbecs.ListResp, error) { | |||
| // // req := new(model.ListServersDetailsRequest) | |||
| // // offset := int32((pageNumber - 1) * pageSize) | |||
| // // req.Offset = &offset | |||
| // // limit := int32(pageSize) | |||
| // // req.Limit = &limit | |||
| // // | |||
| // // resp, err := ecs.cli.ListServersDetails(req) | |||
| // // if err != nil { | |||
| // // return nil, errors.Wrap(err, "Google ListDetail error") | |||
| // // } | |||
| // | |||
| // // Project ID for this request. | |||
| // project := "focused-stacker-311609" // TODO: Update placeholder value. | |||
| // | |||
| // // The name of the zone for this request. | |||
| // zone := "asia-east2-a" // TODO: Update placeholder value. | |||
| // | |||
| // req := ecs.cli.Instances.ListDetail(project, zone) | |||
| // var ecses []*pbecs.EcsInstance | |||
| // if err := req.Pages(context.Background(), func(page *compute.InstanceList) error { | |||
| // for _, instance := range page.Items { | |||
| // ecses = append(ecses, &pbecs.EcsInstance{ | |||
| // InstanceId: fmt.Sprint(instance.Id), | |||
| // InstanceName: instance.AccountName, | |||
| // RegionId: "", | |||
| // ZoneId: "", | |||
| // PublicIps: nil, | |||
| // Status: "", | |||
| // CreationTime: "", | |||
| // Description: "", | |||
| // }) | |||
| // } | |||
| // return nil | |||
| // }); err != nil { | |||
| // return nil, err | |||
| // } | |||
| // | |||
| // return &pbecs.ListResp{ | |||
| // Ecses: ecses, | |||
| // }, nil | |||
| // } | |||
| @@ -0,0 +1,106 @@ | |||
| package ecser | |||
| import ( | |||
| "context" | |||
| "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" | |||
| "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic" | |||
| hwecs "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/ecs/v2" | |||
| "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/ecs/v2/model" | |||
| hwregion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/ecs/v2/region" | |||
| hwiam "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iam/v3" | |||
| iammodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iam/v3/model" | |||
| iamregion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iam/v3/region" | |||
| "github.com/pkg/errors" | |||
| ) | |||
| type HuaweiEcs struct { | |||
| cli *hwecs.EcsClient | |||
| region tenanter.Region | |||
| tenanter tenanter.Tenanter | |||
| } | |||
| func newHuaweiEcsClient(region tenanter.Region, tenant tenanter.Tenanter) (Ecser, error) { | |||
| var ( | |||
| client *hwecs.EcsClient | |||
| err error | |||
| ) | |||
| switch t := tenant.(type) { | |||
| case *tenanter.AccessKeyTenant: | |||
| auth := basic.NewCredentialsBuilder().WithAk(t.GetId()).WithSk(t.GetSecret()).Build() | |||
| rName := region.GetName() | |||
| cli := hwiam.IamClientBuilder().WithRegion(iamregion.ValueOf(rName)).WithCredential(auth).Build() | |||
| c := hwiam.NewIamClient(cli) | |||
| request := new(iammodel.KeystoneListProjectsRequest) | |||
| request.Name = &rName | |||
| r, err := c.KeystoneListProjects(request) | |||
| if err != nil || len(*r.Projects) == 0 { | |||
| return nil, errors.Wrapf(err, "Huawei KeystoneListProjects regionName %s", rName) | |||
| } | |||
| projectId := (*r.Projects)[0].Id | |||
| auth = basic.NewCredentialsBuilder().WithAk(t.GetId()).WithSk(t.GetSecret()).WithProjectId(projectId).Build() | |||
| hcClient := hwecs.EcsClientBuilder().WithRegion(hwregion.ValueOf(rName)).WithCredential(auth).Build() | |||
| client = hwecs.NewEcsClient(hcClient) | |||
| default: | |||
| } | |||
| if err != nil { | |||
| return nil, errors.Wrap(err, "init huawei ecs client error") | |||
| } | |||
| return &HuaweiEcs{ | |||
| cli: client, | |||
| region: region, | |||
| tenanter: tenant, | |||
| }, nil | |||
| } | |||
| func (ecs *HuaweiEcs) ListDetail(ctx context.Context, req *pbecs.ListDetailReq) (*pbecs.ListDetailResp, error) { | |||
| request := new(model.ListServersDetailsRequest) | |||
| offset := (req.PageNumber - 1) * req.PageSize | |||
| request.Offset = &offset | |||
| limit := req.PageSize | |||
| request.Limit = &limit | |||
| resp, err := ecs.cli.ListServersDetails(request) | |||
| if err != nil { | |||
| return nil, errors.Wrap(err, "Huawei ListDetail error") | |||
| } | |||
| servers := *resp.Servers | |||
| var ecses = make([]*pbecs.EcsInstance, len(servers)) | |||
| for k, v := range servers { | |||
| ecses[k] = &pbecs.EcsInstance{ | |||
| Provider: pbtenant.CloudProvider_huawei, | |||
| AccountName: ecs.tenanter.AccountName(), | |||
| InstanceId: v.Id, | |||
| InstanceName: v.Name, | |||
| RegionName: ecs.region.GetName(), | |||
| InstanceType: v.Flavor.Name, | |||
| PublicIps: []string{v.AccessIPv4}, | |||
| // Cpu: v.Flavor.Vcpus, | |||
| // Memory: v.Flavor.Ram, | |||
| Description: *v.Description, | |||
| Status: v.Status, | |||
| CreationTime: v.Created, | |||
| ExpireTime: v.OSSRVUSGterminatedAt, | |||
| } | |||
| } | |||
| isFinished := false | |||
| if len(ecses) < int(req.PageSize) { | |||
| isFinished = true | |||
| } | |||
| return &pbecs.ListDetailResp{ | |||
| Ecses: ecses, | |||
| Finished: isFinished, | |||
| NextToken: "", | |||
| PageNumber: req.PageNumber + 1, | |||
| PageSize: req.PageSize, | |||
| RequestId: "", | |||
| }, nil | |||
| } | |||
| @@ -0,0 +1,32 @@ | |||
| package ecser | |||
| import ( | |||
| "gitlink.org.cn/JCCE/PCM/common/tenanter" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "os" | |||
| "testing" | |||
| ) | |||
| 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,95 @@ | |||
| package ecser | |||
| import ( | |||
| "context" | |||
| "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" | |||
| "github.com/pkg/errors" | |||
| "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" | |||
| "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" | |||
| cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" | |||
| ) | |||
| type TencentCvm struct { | |||
| cli *cvm.Client | |||
| region tenanter.Region | |||
| tenanter tenanter.Tenanter | |||
| } | |||
| func newTencentCvmClient(region tenanter.Region, tenant tenanter.Tenanter) (Ecser, error) { | |||
| var ( | |||
| client *cvm.Client | |||
| err error | |||
| ) | |||
| switch t := tenant.(type) { | |||
| case *tenanter.AccessKeyTenant: | |||
| client, err = cvm.NewClient(common.NewCredential(t.GetId(), t.GetSecret()), region.GetName(), profile.NewClientProfile()) | |||
| default: | |||
| } | |||
| if err != nil { | |||
| return nil, errors.Wrap(err, "init tencent cvm client error") | |||
| } | |||
| return &TencentCvm{ | |||
| cli: client, | |||
| region: region, | |||
| tenanter: tenant, | |||
| }, nil | |||
| } | |||
| func (ecs *TencentCvm) ListDetail(ctx context.Context, req *pbecs.ListDetailReq) (*pbecs.ListDetailResp, error) { | |||
| request := cvm.NewDescribeInstancesRequest() | |||
| request.Offset = common.Int64Ptr(int64((req.PageNumber - 1) * req.PageSize)) | |||
| request.Limit = common.Int64Ptr(int64(req.PageSize)) | |||
| resp, err := ecs.cli.DescribeInstances(request) | |||
| if err != nil { | |||
| return nil, errors.Wrap(err, "Tencent ListDetail error") | |||
| } | |||
| var ecses = make([]*pbecs.EcsInstance, len(resp.Response.InstanceSet)) | |||
| for k, v := range resp.Response.InstanceSet { | |||
| ecses[k] = &pbecs.EcsInstance{ | |||
| Provider: pbtenant.CloudProvider_tencent, | |||
| AccountName: ecs.tenanter.AccountName(), | |||
| InstanceId: *v.InstanceId, | |||
| InstanceName: *v.InstanceName, | |||
| RegionName: ecs.region.GetName(), | |||
| PublicIps: make([]string, len(v.PublicIpAddresses)), | |||
| InstanceType: *v.InstanceType, | |||
| Cpu: int32(*v.CPU), | |||
| Memory: int32(*v.Memory), | |||
| Description: "", | |||
| Status: *v.InstanceState, | |||
| CreationTime: *v.CreatedTime, | |||
| ExpireTime: *v.ExpiredTime, | |||
| InnerIps: make([]string, len(v.PrivateIpAddresses)), | |||
| VpcId: *v.VirtualPrivateCloud.VpcId, | |||
| ResourceGroupId: "", | |||
| ChargeType: *v.InstanceChargeType, | |||
| } | |||
| for k1, v1 := range v.PublicIpAddresses { | |||
| ecses[k].PublicIps[k1] = *v1 | |||
| } | |||
| for k1, v1 := range v.PrivateIpAddresses { | |||
| ecses[k].InnerIps[k1] = *v1 | |||
| } | |||
| } | |||
| isFinished := false | |||
| if len(ecses) < int(req.PageSize) { | |||
| isFinished = true | |||
| } | |||
| return &pbecs.ListDetailResp{ | |||
| Ecses: ecses, | |||
| Finished: isFinished, | |||
| NextToken: "", | |||
| PageNumber: req.PageNumber + 1, | |||
| PageSize: req.PageSize, | |||
| RequestId: *resp.Response.RequestId, | |||
| }, nil | |||
| } | |||
| @@ -0,0 +1,24 @@ | |||
| version: v1 | |||
| plugins: | |||
| - name: go | |||
| out: lan_trans | |||
| opt: | |||
| - paths=source_relative | |||
| # - name: java | |||
| # out: lan_trans | |||
| # opt: | |||
| # - paths=source_relative | |||
| - name: go-grpc | |||
| out: lan_trans | |||
| opt: | |||
| - paths=source_relative | |||
| # - name: java-grpc | |||
| # out: gen | |||
| # opt: | |||
| # - paths=source_relative | |||
| - name: grpc-gateway | |||
| out: lan_trans | |||
| opt: | |||
| - paths=source_relative | |||
| - name: openapiv2 | |||
| out: lan_trans/openapiv2 | |||
| @@ -0,0 +1,13 @@ | |||
| version: v1 | |||
| name: buf.build/JCCE/PCM | |||
| breaking: | |||
| use: | |||
| - FILE | |||
| lint: | |||
| use: | |||
| - DEFAULT | |||
| # ignore: | |||
| # - google/type/datetime.proto | |||
| deps: | |||
| - buf.build/googleapis/googleapis | |||
| - buf.build/grpc-ecosystem/grpc-gateway | |||
| @@ -0,0 +1,21 @@ | |||
| package server | |||
| import ( | |||
| "context" | |||
| "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" | |||
| ) | |||
| type Server struct { | |||
| // 使用unsafe可以强制让编译器检查是否实现了相关方法 | |||
| demo.UnsafeDemoServiceServer | |||
| pbecs.UnsafeEcsServiceServer | |||
| pbpod.UnsafePodServiceServer | |||
| } | |||
| func (s *Server) Echo(ctx context.Context, req *demo.StringMessage) (*demo.StringMessage, error) { | |||
| return &demo.StringMessage{ | |||
| Value: "Welcome to JCCE PCM", | |||
| }, nil | |||
| } | |||
| @@ -0,0 +1,38 @@ | |||
| package server | |||
| import ( | |||
| "context" | |||
| "gitlink.org.cn/JCCE/PCM/adaptor/vm_adaptor/server/ecs" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs" | |||
| "github.com/golang/glog" | |||
| "google.golang.org/grpc/codes" | |||
| "google.golang.org/grpc/status" | |||
| ) | |||
| func (s *Server) ListEcsDetail(ctx context.Context, req *pbecs.ListDetailReq) (*pbecs.ListDetailResp, error) { | |||
| resp, err := ecs.ListDetail(ctx, req) | |||
| if err != nil { | |||
| glog.Errorf("ListEcsDetail error %+v", err) | |||
| return nil, status.Errorf(codes.Internal, err.Error()) | |||
| } | |||
| return resp, nil | |||
| } | |||
| func (s *Server) ListEcs(ctx context.Context, req *pbecs.ListReq) (*pbecs.ListResp, error) { | |||
| resp, err := ecs.List(ctx, req) | |||
| if err != nil { | |||
| glog.Errorf("ListEcs error %+v", err) | |||
| return nil, status.Errorf(codes.Internal, err.Error()) | |||
| } | |||
| return resp, nil | |||
| } | |||
| func (s *Server) ListEcsAll(ctx context.Context, req *pbecs.ListAllReq) (*pbecs.ListResp, error) { | |||
| resp, err := ecs.ListAll(ctx) | |||
| if err != nil { | |||
| glog.Errorf("ListEcsAll error %+v", err) | |||
| return nil, status.Errorf(codes.Internal, err.Error()) | |||
| } | |||
| return resp, nil | |||
| } | |||
| @@ -0,0 +1,47 @@ | |||
| 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" | |||
| ) | |||
| func (s *Server) CreatePod(ctx context.Context, req *pbpod.CreatePodReq) (*pbpod.CreatePodResp, error) { | |||
| resp, err := pod.CreatePod(ctx, req) | |||
| if err != nil { | |||
| glog.Errorf("CreatePod error %+v", err) | |||
| return nil, status.Errorf(codes.Internal, err.Error()) | |||
| } | |||
| return resp, nil | |||
| } | |||
| func (s *Server) ListPodDetail(ctx context.Context, req *pbpod.ListPodDetailReq) (*pbpod.ListPodDetailResp, error) { | |||
| resp, err := pod.ListPodDetail(ctx, req) | |||
| if err != nil { | |||
| glog.Errorf("ListPodDetail error %+v", err) | |||
| return nil, status.Errorf(codes.Internal, err.Error()) | |||
| } | |||
| return resp, nil | |||
| } | |||
| func (s *Server) ListPod(ctx context.Context, req *pbpod.ListPodReq) (*pbpod.ListPodResp, error) { | |||
| resp, err := pod.ListPod(ctx, req) | |||
| if err != nil { | |||
| glog.Errorf("ListPod error %+v", err) | |||
| return nil, status.Errorf(codes.Internal, err.Error()) | |||
| } | |||
| return resp, nil | |||
| } | |||
| func (s *Server) ListPodAll(ctx context.Context, req *pbpod.ListPodAllReq) (*pbpod.ListPodResp, error) { | |||
| resp, err := pod.ListPodAll(ctx) | |||
| if err != nil { | |||
| glog.Errorf("ListPodAll error %+v", err) | |||
| return nil, status.Errorf(codes.Internal, err.Error()) | |||
| } | |||
| return resp, nil | |||
| } | |||
| @@ -0,0 +1,35 @@ | |||
| package tenanter | |||
| type AccessKeyTenant struct { | |||
| name string | |||
| id string | |||
| secret string | |||
| } | |||
| func NewTenantWithAccessKey(name, accessKeyId, accessKeySecret string) Tenanter { | |||
| return &AccessKeyTenant{ | |||
| name: name, | |||
| id: accessKeyId, | |||
| secret: accessKeySecret, | |||
| } | |||
| } | |||
| func (tenant *AccessKeyTenant) AccountName() string { | |||
| return tenant.name | |||
| } | |||
| func (tenant *AccessKeyTenant) Clone() Tenanter { | |||
| return &AccessKeyTenant{ | |||
| id: tenant.id, | |||
| secret: tenant.secret, | |||
| name: tenant.name, | |||
| } | |||
| } | |||
| func (tenant *AccessKeyTenant) GetId() string { | |||
| return tenant.id | |||
| } | |||
| func (tenant *AccessKeyTenant) GetSecret() string { | |||
| return tenant.secret | |||
| } | |||
| @@ -0,0 +1,36 @@ | |||
| package tenanter | |||
| import ( | |||
| "os" | |||
| "testing" | |||
| "PCM/lan_trans/go/idl/pbtenant" | |||
| ) | |||
| var ( | |||
| aliTenant []Tenanter | |||
| tcTenant []Tenanter | |||
| hwTenant []Tenanter | |||
| awsTenant []Tenanter | |||
| ) | |||
| func TestMain(m *testing.M) { | |||
| err := LoadCloudConfigs("../../config.yaml") | |||
| if err != nil { | |||
| panic(err) | |||
| } | |||
| if aliTenant, err = GetTenanters(pbtenant.CloudProvider_ali); err != nil { | |||
| panic("get aliTenant failed") | |||
| } | |||
| if tcTenant, err = GetTenanters(pbtenant.CloudProvider_tencent); err != nil { | |||
| panic("get tcTenantr failed") | |||
| } | |||
| if hwTenant, err = GetTenanters(pbtenant.CloudProvider_huawei); err != nil { | |||
| panic("get hwTenant failed") | |||
| } | |||
| if awsTenant, err = GetTenanters(pbtenant.CloudProvider_aws); err != nil { | |||
| panic("get awsTenant failed") | |||
| } | |||
| os.Exit(m.Run()) | |||
| } | |||
| @@ -0,0 +1,130 @@ | |||
| package tenanter | |||
| import ( | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "strings" | |||
| "github.com/pkg/errors" | |||
| ) | |||
| var ( | |||
| ErrNoExistAliRegionId = errors.New("region id not exist in ali") | |||
| ErrNoExistTencentRegionId = errors.New("region id not exist in tencent") | |||
| ErrNoExistHuaweiRegionId = errors.New("region id not exist in huawei") | |||
| ErrNoExistAwsRegionId = errors.New("region id not exist in aws") | |||
| ) | |||
| type Region interface { | |||
| GetId() int32 | |||
| GetName() string | |||
| } | |||
| type region struct { | |||
| provider pbtenant.CloudProvider | |||
| regionId int32 | |||
| regionName string | |||
| } | |||
| func NewRegion(provider pbtenant.CloudProvider, regionId int32) (Region, error) { | |||
| r := ®ion{ | |||
| provider: provider, | |||
| regionId: regionId, | |||
| } | |||
| var err error | |||
| switch provider { | |||
| case pbtenant.CloudProvider_ali: | |||
| r.regionName, err = getAliRegionName(regionId) | |||
| case pbtenant.CloudProvider_tencent: | |||
| r.regionName, err = getTencentRegionName(regionId) | |||
| case pbtenant.CloudProvider_huawei: | |||
| r.regionName, err = getHuaweiRegionName(regionId) | |||
| case pbtenant.CloudProvider_aws: | |||
| r.regionName, err = getAwsRegionName(regionId) | |||
| } | |||
| return r, err | |||
| } | |||
| func (r *region) GetName() string { | |||
| return r.regionName | |||
| } | |||
| func (r *region) GetId() int32 { | |||
| return r.regionId | |||
| } | |||
| func GetAllRegionIds(provider pbtenant.CloudProvider) (regions []Region) { | |||
| switch provider { | |||
| case pbtenant.CloudProvider_ali: | |||
| for rId := range pbtenant.AliRegionId_name { | |||
| if rId != int32(pbtenant.AliRegionId_ali_all) { | |||
| region, _ := NewRegion(provider, rId) | |||
| regions = append(regions, region) | |||
| } | |||
| } | |||
| case pbtenant.CloudProvider_tencent: | |||
| for rId := range pbtenant.TencentRegionId_name { | |||
| if rId != int32(pbtenant.TencentRegionId_tc_all) { | |||
| region, _ := NewRegion(provider, rId) | |||
| regions = append(regions, region) | |||
| } | |||
| } | |||
| case pbtenant.CloudProvider_huawei: | |||
| for rId := range pbtenant.HuaweiRegionId_name { | |||
| if rId != int32(pbtenant.HuaweiRegionId_hw_all) { | |||
| region, _ := NewRegion(provider, rId) | |||
| regions = append(regions, region) | |||
| } | |||
| } | |||
| case pbtenant.CloudProvider_aws: | |||
| for rId := range pbtenant.AwsRegionId_name { | |||
| if rId != int32(pbtenant.AwsRegionId_aws_all) { | |||
| region, _ := NewRegion(provider, rId) | |||
| regions = append(regions, region) | |||
| } | |||
| } | |||
| } | |||
| return | |||
| } | |||
| // prefix ali_ | |||
| func getAliRegionName(regionId int32) (string, error) { | |||
| name, ok := pbtenant.AliRegionId_name[regionId] | |||
| if !ok || regionId == int32(pbtenant.AliRegionId_ali_all) { | |||
| return "", errors.WithMessagef(ErrNoExistAliRegionId, "input region id is %d", regionId) | |||
| } | |||
| region := strings.ReplaceAll(name, "_", "-") | |||
| return region[4:], nil | |||
| } | |||
| // prefix tc_ | |||
| func getTencentRegionName(regionId int32) (string, error) { | |||
| name, ok := pbtenant.TencentRegionId_name[regionId] | |||
| if !ok || regionId == int32(pbtenant.TencentRegionId_tc_all) { | |||
| return "", errors.WithMessagef(ErrNoExistTencentRegionId, "input region id is %d", regionId) | |||
| } | |||
| region := strings.ReplaceAll(name, "_", "-") | |||
| return region[3:], nil | |||
| } | |||
| // prefix hw_ | |||
| func getHuaweiRegionName(regionId int32) (string, error) { | |||
| name, ok := pbtenant.HuaweiRegionId_name[regionId] | |||
| if !ok || regionId == int32(pbtenant.HuaweiRegionId_hw_all) { | |||
| return "", errors.WithMessagef(ErrNoExistHuaweiRegionId, "input region id is %d", regionId) | |||
| } | |||
| region := strings.ReplaceAll(name, "_", "-") | |||
| return region[3:], nil | |||
| } | |||
| // prefix aws_ | |||
| func getAwsRegionName(regionId int32) (string, error) { | |||
| name, ok := pbtenant.AwsRegionId_name[regionId] | |||
| if !ok || regionId == int32(pbtenant.AwsRegionId_aws_all) { | |||
| return "", errors.WithMessagef(ErrNoExistAwsRegionId, "input region id is %d", regionId) | |||
| } | |||
| region := strings.ReplaceAll(name, "_", "-") | |||
| return region[4:], nil | |||
| } | |||
| @@ -0,0 +1,29 @@ | |||
| package tenanter | |||
| import ( | |||
| "testing" | |||
| "PCM/lan_trans/go/idl/pbtenant" | |||
| ) | |||
| func TestGetAllRegionIds(t *testing.T) { | |||
| type args struct { | |||
| provider pbtenant.CloudProvider | |||
| } | |||
| tests := []struct { | |||
| name string | |||
| args args | |||
| }{ | |||
| {name: "ali", args: args{provider: pbtenant.CloudProvider_ali}}, | |||
| {name: "tencent", args: args{provider: pbtenant.CloudProvider_tencent}}, | |||
| {name: "huawei", args: args{provider: pbtenant.CloudProvider_huawei}}, | |||
| {name: "aws", args: args{provider: pbtenant.CloudProvider_aws}}, | |||
| } | |||
| for _, tt := range tests { | |||
| t.Run(tt.name, func(t *testing.T) { | |||
| if gotRegions := GetAllRegionIds(tt.args.provider); len(gotRegions) == 0 { | |||
| t.Errorf("GetAllRegionIds() = %v, want >0", gotRegions) | |||
| } | |||
| }) | |||
| } | |||
| } | |||
| @@ -0,0 +1,101 @@ | |||
| package tenanter | |||
| import ( | |||
| "encoding/json" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| "io/ioutil" | |||
| "os" | |||
| "sync" | |||
| "github.com/go-yaml/yaml" | |||
| "github.com/pkg/errors" | |||
| ) | |||
| const osEnvKey = "CLOUD_FITTER_CONFIGS" | |||
| var ( | |||
| ErrLoadTenanterFromFile = errors.New("load tenanter from file failed") | |||
| ErrLoadTenanterFromOsEnv = errors.New("load tenanter from os env failed") | |||
| ErrLoadTenanterFileEmpty = errors.New("load tenanter from file failed") | |||
| ErrNoTenanters = errors.New("no tenanters for the cloud") | |||
| ) | |||
| type Tenanter interface { | |||
| AccountName() string | |||
| Clone() Tenanter | |||
| } | |||
| var gStore = globalStore{stores: make(map[pbtenant.CloudProvider][]Tenanter)} | |||
| type globalStore struct { | |||
| sync.Mutex | |||
| stores map[pbtenant.CloudProvider][]Tenanter | |||
| } | |||
| func LoadCloudConfigs(configFile string) error { | |||
| if err := LoadCloudConfigsFromFile(configFile); errors.Is(err, ErrLoadTenanterFileEmpty) { | |||
| return LoadCloudConfigsFromOsEnv() | |||
| } | |||
| return nil | |||
| } | |||
| func LoadCloudConfigsFromFile(configFile string) error { | |||
| b, err := ioutil.ReadFile(configFile) | |||
| if err != nil { | |||
| return ErrLoadTenanterFileEmpty | |||
| } | |||
| var configs = new(pbtenant.CloudConfigs) | |||
| if err = yaml.Unmarshal(b, configs); err != nil { | |||
| return errors.WithMessage(ErrLoadTenanterFromFile, err.Error()) | |||
| } | |||
| return load(configs) | |||
| } | |||
| func LoadCloudConfigsFromOsEnv() error { | |||
| data := os.Getenv(osEnvKey) | |||
| var configs = new(pbtenant.CloudConfigs) | |||
| if err := json.Unmarshal([]byte(data), configs); err != nil { | |||
| return errors.WithMessage(ErrLoadTenanterFromOsEnv, err.Error()) | |||
| } | |||
| return load(configs) | |||
| } | |||
| func ShowConfigJson() ([]byte, error) { | |||
| data := os.Getenv(osEnvKey) | |||
| var configs = new(pbtenant.CloudConfigs) | |||
| if err := yaml.Unmarshal([]byte(data), configs); err != nil { | |||
| return nil, errors.WithMessage(ErrLoadTenanterFromFile, err.Error()) | |||
| } | |||
| return json.Marshal(configs) | |||
| } | |||
| func load(configs *pbtenant.CloudConfigs) error { | |||
| gStore.Lock() | |||
| defer gStore.Unlock() | |||
| for _, c := range configs.Configs { | |||
| if c.AccessId != "" && c.AccessSecret != "" { | |||
| gStore.stores[c.Provider] = append(gStore.stores[c.Provider], NewTenantWithAccessKey(c.Name, c.AccessId, c.AccessSecret)) | |||
| } | |||
| } | |||
| return nil | |||
| } | |||
| func GetTenanters(provider pbtenant.CloudProvider) ([]Tenanter, error) { | |||
| gStore.Lock() | |||
| defer gStore.Unlock() | |||
| if len(gStore.stores[provider]) == 0 { | |||
| return nil, errors.WithMessagef(ErrNoTenanters, "cloud is %v", provider) | |||
| } | |||
| var tenanters = make([]Tenanter, len(gStore.stores[provider])) | |||
| for k := range gStore.stores[provider] { | |||
| tenanters[k] = gStore.stores[provider][k].Clone() | |||
| } | |||
| return tenanters, nil | |||
| } | |||
| @@ -0,0 +1,29 @@ | |||
| package tenanter | |||
| import ( | |||
| "testing" | |||
| ) | |||
| func TestShowConfigJson(t *testing.T) { | |||
| type args struct { | |||
| } | |||
| tests := []struct { | |||
| name string | |||
| args args | |||
| wantErr bool | |||
| }{ | |||
| {name: "right", args: args{}, wantErr: false}, | |||
| } | |||
| for _, tt := range tests { | |||
| t.Run(tt.name, func(t *testing.T) { | |||
| got, err := ShowConfigJson() | |||
| if (err != nil) != tt.wantErr { | |||
| t.Errorf("ShowConfigJson() error = %v, wantErr %v", err, tt.wantErr) | |||
| return | |||
| } | |||
| if err == nil { | |||
| t.Log(string(got)) | |||
| } | |||
| }) | |||
| } | |||
| } | |||
| @@ -0,0 +1,14 @@ | |||
| configs: | |||
| # provider 0:阿里云 1:腾讯云 2:华为云 | |||
| - provider: 0 | |||
| name: "ali-PCM" | |||
| accessid: "LTAI5tSCnrhQAdbFhGyWkSL2" | |||
| accesssecret: "KN4tqu8lalQdo47SoUQBb88qOWjzYC" | |||
| - provider: 1 | |||
| name: "tencent-PCM" | |||
| accessid: "AKIDRefQxnhmuqTU1KRWFl58wQeCE0XoAeEZ" | |||
| accesssecret: "LUMVRmGj2kFrEahhZzA5pKvHNSMASntj" | |||
| - provider: 2 | |||
| name: "huawei-PCM" | |||
| accessid: "ATQTIWUT9K66VRMMXKVY" | |||
| accesssecret: "Wa0aixDVuhZOfDZGWvgIJQBHnyiDlGdgDn1Ai5Yy" | |||
| @@ -0,0 +1 @@ | |||
| package examples | |||
| @@ -0,0 +1,5 @@ | |||
| #!/bin/bash | |||
| rm -rf lan_trans/gen/* | |||
| buf mod update | |||
| buf generate | |||
| @@ -1,12 +1,21 @@ | |||
| module PCM | |||
| module gitlink.org.cn/JCCE/PCM | |||
| go 1.17 | |||
| require ( | |||
| github.com/Unknwon/goconfig v1.0.0 | |||
| github.com/aliyun/alibaba-cloud-sdk-go v1.61.1530 | |||
| github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.371 | |||
| github.com/go-yaml/yaml v2.1.0+incompatible | |||
| github.com/golang/glog v1.0.0 | |||
| github.com/grpc-ecosystem/grpc-gateway/v2 v2.10.0 | |||
| github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.0.82 | |||
| github.com/pkg/errors v0.9.1 | |||
| github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.377 | |||
| github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.377 | |||
| github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke v1.0.371 | |||
| google.golang.org/genproto v0.0.0-20220317150908-0efb43f6373e | |||
| google.golang.org/grpc v1.45.0 | |||
| google.golang.org/protobuf v1.28.0 | |||
| k8s.io/api v0.0.0-20190620084959-7cf5895f2711 | |||
| k8s.io/apimachinery v0.0.0-20190612205821-1799e75a0719 | |||
| k8s.io/client-go v0.0.0-20190620085101-78d2af792bab | |||
| @@ -16,28 +25,29 @@ require ( | |||
| github.com/davecgh/go-spew v1.1.1 // indirect | |||
| github.com/evanphx/json-patch v0.0.0-20190203023257-5858425f7550 // indirect | |||
| github.com/gogo/protobuf v0.0.0-20171007142547-342cbe0a0415 // indirect | |||
| github.com/golang/protobuf v1.2.0 // indirect | |||
| github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf // indirect | |||
| 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/imdario/mergo v0.3.5 // indirect | |||
| github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af // indirect | |||
| github.com/json-iterator/go v1.1.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/smartystreets/goconvey v1.7.2 // indirect | |||
| github.com/spf13/pflag v1.0.1 // indirect | |||
| golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 // indirect | |||
| golang.org/x/net v0.0.0-20190311183353-d8887717615a // indirect | |||
| golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a // indirect | |||
| golang.org/x/sys v0.0.0-20190312061237-fead79001313 // indirect | |||
| golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db // indirect | |||
| golang.org/x/time v0.0.0-20161028155119-f51c12702a4d // indirect | |||
| google.golang.org/appengine v1.5.0 // indirect | |||
| golang.org/x/crypto v0.0.0-20210920023735-84f357641f63 // indirect | |||
| golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect | |||
| golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a // indirect | |||
| golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect | |||
| golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect | |||
| 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/inf.v0 v0.9.0 // indirect | |||
| gopkg.in/ini.v1 v1.66.2 // indirect | |||
| gopkg.in/yaml.v2 v2.2.1 // indirect | |||
| gopkg.in/yaml.v2 v2.4.0 // indirect | |||
| k8s.io/klog v0.3.1 // indirect | |||
| k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30 // indirect | |||
| k8s.io/utils v0.0.0-20190221042446-c2654d5206da // indirect | |||
| sigs.k8s.io/yaml v1.1.0 // indirect | |||
| sigs.k8s.io/yaml v1.3.0 // indirect | |||
| ) | |||
| @@ -0,0 +1,35 @@ | |||
| syntax = "proto3"; | |||
| package demo; | |||
| option go_package = "gitlink.org.cn/JCCE/PCM/lan_trans/gen/idl/demo"; | |||
| import "google/api/annotations.proto"; | |||
| import "protoc-gen-openapiv2/options/annotations.proto"; | |||
| enum OurTeam { | |||
| // github: devad | |||
| devad = 0; | |||
| } | |||
| message StringMessage { string value = 1; } | |||
| // 样例服务 | |||
| service DemoService { | |||
| // Echo 样例接口 | |||
| rpc Echo(StringMessage) returns (StringMessage) { | |||
| option (google.api.http) = { | |||
| post : "/apis/demo" | |||
| body : "*" | |||
| }; | |||
| option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { | |||
| deprecated : true // For testing purposes. | |||
| external_docs : { | |||
| url : "https://github.com/grpc-ecosystem/grpc-gateway" | |||
| description : "Find out more about the interface" | |||
| } | |||
| security : {} | |||
| }; | |||
| } | |||
| } | |||
| @@ -0,0 +1,119 @@ | |||
| syntax = "proto3"; | |||
| package pbecs; | |||
| option go_package = "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbecs"; | |||
| import "idl/pbtenant/tenant.proto"; | |||
| import "google/api/annotations.proto"; | |||
| message EcsInstance { | |||
| // 云类型 | |||
| pbtenant.CloudProvider provider = 1; | |||
| // 账号名称 | |||
| string account_name = 2; | |||
| // 实例id | |||
| string instance_id = 3; | |||
| // 实例名称 | |||
| string instance_name = 4; | |||
| // 地域,数据中心 | |||
| string region_name = 5; | |||
| // 公网ip | |||
| repeated 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; | |||
| // vcp id | |||
| string vpc_id = 15; | |||
| // 资源组id | |||
| string resource_group_id = 16; | |||
| // 收费类型 | |||
| string charge_type = 17; | |||
| } | |||
| 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 { | |||
| // Ecs 机器集合 | |||
| repeated EcsInstance ecses = 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 { | |||
| // Ecs 机器集合 | |||
| repeated EcsInstance ecses = 1; | |||
| } | |||
| message ListAllReq{} | |||
| // ECS类产品接口 | |||
| // 阿里云 - ECS | |||
| // 腾讯云 - CVM | |||
| // 华为云 - ECS | |||
| // 亚马逊云 - EC2 | |||
| service EcsService { | |||
| // 查询ECS明细 - 支持云类型、区域、账户、分页等过滤条件 | |||
| rpc ListEcsDetail(ListDetailReq) returns (ListDetailResp) { | |||
| option (google.api.http) = { | |||
| post : "/apis/ecs/detail" | |||
| body : "*" | |||
| }; | |||
| } | |||
| // 查询ECS全量 - 根据云类型 | |||
| rpc ListEcs(ListReq) returns (ListResp) { | |||
| option (google.api.http) = { | |||
| post : "/apis/ecs" | |||
| body : "*" | |||
| }; | |||
| } | |||
| // 查询所有云的ECS | |||
| rpc ListEcsAll(ListAllReq) returns (ListResp) { | |||
| option (google.api.http) = { | |||
| post : "/apis/ecs/all" | |||
| body : "*" | |||
| }; | |||
| } | |||
| } | |||
| @@ -0,0 +1,164 @@ | |||
| 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 pod_id = 3; | |||
| // 实例名称 | |||
| string pod_name = 4; | |||
| // 地域,数据中心 | |||
| int32 region_id = 5; | |||
| // 镜像 | |||
| string container_image = 6; | |||
| // 容器名称 | |||
| string container_name = 7; | |||
| // vcpu数 | |||
| float cpu_pod = 8; | |||
| // 内存MB | |||
| float memory_pod = 9; | |||
| //安全组ID 对应腾讯 SecurityGroupIds(腾讯必需) | |||
| string security_group_id = 10; | |||
| //子网ID 对应腾讯 SubnetId(腾讯必需) | |||
| string subnet_id = 11; | |||
| //VPC ID 对应腾讯 VpcId(腾讯必需) | |||
| string vpc_id = 12; | |||
| //名空间 | |||
| string namespace = 13; | |||
| } | |||
| message CreatePodReq { | |||
| // 云类型 | |||
| pbtenant.CloudProvider provider = 1; | |||
| // 账号名称 | |||
| string account_name = 2; | |||
| // 实例id | |||
| string pod_id = 3; | |||
| // 实例名称 | |||
| string pod_name = 4; | |||
| // 地域,数据中心 | |||
| int32 region_id = 5; | |||
| // 镜像 | |||
| string container_image = 6; | |||
| // 容器名称 | |||
| string container_name = 7; | |||
| // v cpu数 | |||
| float cpu_pod = 8; | |||
| // 内存MB | |||
| float memory_pod = 9; | |||
| //安全组ID 对应腾讯 SecurityGroupIds(腾讯必需) | |||
| string security_group_id = 10; | |||
| //子网ID 对应腾讯 SubnetId(腾讯必需) | |||
| string subnet_id = 11; | |||
| //VPC ID 对应腾讯 VpcId(腾讯必需) | |||
| string vpc_id = 12; | |||
| //名空间 | |||
| string namespace = 13; | |||
| } | |||
| message CreatePodResp { | |||
| // Pod集合 | |||
| repeated PodInstance pods = 1; | |||
| // 查询是否完成,如果为否-false,则可以将下面三个分页参数填入到请求中,继续查询 | |||
| bool finished = 2; | |||
| // 请求id,出现问题后提供给云厂商,排查问题 | |||
| string request_id = 3; | |||
| } | |||
| message ListPodDetailReq { | |||
| // 云名称 | |||
| pbtenant.CloudProvider provider = 1; | |||
| // 账户名称,根据config.yaml中的配置,默认为第一个配置的账户 | |||
| string account_name = 2; | |||
| // 区域Id,参考 tenant.proto 中的各个云的区域 | |||
| int32 region_id = 3; | |||
| // podID | |||
| int32 pod_id = 4; | |||
| // 分页相关参数,页码 | |||
| int32 page_number = 5; | |||
| // 分页相关参数,每页数量 | |||
| int32 page_size = 6; | |||
| // 分页相关参数,下一页的token | |||
| string next_token = 7; | |||
| } | |||
| message ListPodDetailResp { | |||
| // 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 ListPodReq { | |||
| // 云名称 | |||
| pbtenant.CloudProvider provider = 1; | |||
| } | |||
| message ListPodResp { | |||
| // pod集合 | |||
| repeated PodInstance pods = 1; | |||
| } | |||
| message ListPodAllReq{} | |||
| // Pod类产品接口 | |||
| // 阿里云 - ECI | |||
| // 腾讯云 - TKS | |||
| // 华为云 - CCI | |||
| service PodService { | |||
| // 创建Pod | |||
| rpc CreatePod(CreatePodReq) returns (CreatePodResp) { | |||
| option (google.api.http) = { | |||
| post : "/apis/pod/create" | |||
| body : "*" | |||
| }; | |||
| } | |||
| // 查询Pod明细 | |||
| rpc ListPodDetail(ListPodDetailReq) returns (ListPodDetailResp) { | |||
| option (google.api.http) = { | |||
| post : "/apis/pod/detail" | |||
| body : "*" | |||
| }; | |||
| } | |||
| // 查询Pod全量 - 根据云类型 | |||
| rpc ListPod(ListPodReq) returns (ListPodResp) { | |||
| option (google.api.http) = { | |||
| post : "/apis/pod" | |||
| body : "*" | |||
| }; | |||
| } | |||
| // 查询所有云的Pod | |||
| rpc ListPodAll(ListPodAllReq) returns (ListPodResp) { | |||
| option (google.api.http) = { | |||
| post : "/apis/pod/all" | |||
| body : "*" | |||
| }; | |||
| } | |||
| } | |||
| @@ -0,0 +1,155 @@ | |||
| syntax = "proto3"; | |||
| package pbtenant; | |||
| option go_package = "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant"; | |||
| import "google/api/annotations.proto"; | |||
| import "protoc-gen-openapiv2/options/annotations.proto"; | |||
| // 云提供商 | |||
| enum CloudProvider { | |||
| // 0 - 阿里云 | |||
| ali = 0; | |||
| // 1 - 腾讯云 | |||
| tencent = 1; | |||
| // 2 - 华为云 | |||
| huawei = 2; | |||
| // 3 - 亚马逊云 | |||
| aws = 3; | |||
| } | |||
| // 云产品 | |||
| enum CloudProduct { | |||
| // 0 - 所有产品 | |||
| product_all = 0; | |||
| // 1 - ECS类产品:阿里云ECS,腾讯云CVM,华为云ECS,亚马逊EC2 | |||
| product_ecs = 1; | |||
| // 2 - RDS类产品:阿里云RDS,腾讯云CDB | |||
| product_rds = 2; | |||
| // 3 - Domain类产品:阿里云Domain | |||
| product_domain = 3; | |||
| // 4 - OSS类产品:阿里云OSS | |||
| product_oss = 4; | |||
| } | |||
| // 云配置信息 | |||
| message CloudConfigs { | |||
| // 云配置 | |||
| repeated CloudConfig configs = 1; | |||
| } | |||
| message CloudConfig { | |||
| // 云服务提供商,具体参考 CloudProvider 的定义 | |||
| CloudProvider provider = 1; | |||
| // 账户名称,由用户自定义,必须全局唯一,方便多个系统之间的维护 | |||
| string name = 2; | |||
| // 认证方式1:与 access_secret 结合使用,两者均非空时生效 | |||
| string access_id = 3; | |||
| // 认证方式1:与 access_id 结合使用,两者均非空时生效 | |||
| string access_secret = 4; | |||
| } | |||
| // 阿里云区域,需要将对应的 _ 转化为 - | |||
| enum AliRegionId { | |||
| ali_all = 0; | |||
| ali_cn_qingdao = 1; // 青岛 | |||
| ali_cn_beijing = 2; // 北京 | |||
| ali_cn_zhangjiakou = 3; // 张家口 | |||
| ali_cn_huhehaote = 4; // 呼和浩特 | |||
| ali_cn_wulanchabu = 5; // 乌兰察布 | |||
| ali_cn_hangzhou = 6; // 杭州 | |||
| ali_cn_shanghai = 7; // 上海 | |||
| ali_cn_shenzhen = 8; // 深圳 | |||
| ali_cn_heyuan = 9; // 河源 | |||
| ali_cn_guangzhou = 10; // 广州 | |||
| ali_cn_chengdu = 11; // 成都 | |||
| ali_cn_hongkong = 12; // 中国香港-香港 | |||
| ali_ap_southeast_1 = 13; // 亚太东南1-新加坡 | |||
| ali_ap_southeast_2 = 14; // 亚太东南2-悉尼 | |||
| ali_ap_southeast_3 = 15; // 亚太东南3-吉隆坡 | |||
| ali_ap_southeast_5 = 16; // 亚太东南5-雅加达 | |||
| ali_ap_south_1 = 17; // 亚太南部1-孟买 | |||
| ali_ap_northeast_1 = 18; // 亚太东北1-东京 | |||
| ali_us_west_1 = 19; // 美国西部1-硅谷 | |||
| ali_us_east_1 = 20; // 美国东部1-弗吉尼亚 | |||
| ali_eu_central_1 = 21; // 欧洲中部1-法兰克福 | |||
| ali_eu_west_1 = 22; // 英国(伦敦)-伦敦 | |||
| ali_me_east_1 = 23; // 中东东部1-迪拜 | |||
| } | |||
| // 腾讯云区域,需要将对应的 _ 转化为 - | |||
| enum TencentRegionId { | |||
| tc_all = 0; | |||
| tc_ap_bangkok = 1; // 曼谷 | |||
| tc_ap_beijing = 2; // 北京 | |||
| tc_ap_chengdu = 3; // 成都 | |||
| tc_ap_chongqing = 4; // 重庆 | |||
| tc_ap_guangzhou = 5; // 广州 | |||
| tc_ap_guangzhou_open = 6; // 广州Open | |||
| tc_ap_hongkong = 7; // 中国香港 | |||
| tc_ap_mumbai = 8; // 孟买 | |||
| tc_ap_seoul = 9; // 首尔 | |||
| tc_ap_shanghai = 10; // 上海 | |||
| tc_ap_shanghai_fsi = 11; // 上海金融 | |||
| tc_ap_shenzhen_fsi = 12; // 深圳金融 | |||
| tc_ap_singapore = 13; // 新加坡 | |||
| tc_ap_tokyo = 14; // 东京 | |||
| tc_eu_frankfurt = 15; // 法兰克福 | |||
| tc_eu_moscow = 16; // 莫斯科 | |||
| tc_na_ashburn = 17; // 阿什本 | |||
| tc_na_siliconvalley = 18; // 硅谷 | |||
| tc_na_toronto = 19; // 多伦多 | |||
| } | |||
| // 华为云区域,需要将对应的 _ 转化为 - | |||
| enum HuaweiRegionId { | |||
| hw_all = 0; | |||
| hw_cn_north_1 = 1; | |||
| hw_cn_north_4 = 2; | |||
| hw_cn_south_1 = 3; | |||
| hw_cn_east_2 = 4; | |||
| hw_cn_east_3 = 5; | |||
| hw_cn_southwest_2 = 6; | |||
| hw_ap_southeast_1 = 7; | |||
| hw_ap_southeast_2 = 8; | |||
| hw_ap_southeast_3 = 9; | |||
| hw_af_south_1 = 10; | |||
| } | |||
| // 亚马逊云区域,需要将对应的 _ 转化为 - | |||
| enum AwsRegionId { | |||
| aws_all = 0; | |||
| aws_us_east_2 = 1; // US East (Ohio) | |||
| aws_us_east_1 = 2; // US East (N. Virginia) | |||
| aws_us_west_1 = 3; // US West (N. California) | |||
| aws_us_west_2 = 4; // US West (Oregon) | |||
| aws_af_south_1 = 5; // Africa (Cape Town) | |||
| aws_ap_east_1 = 6; // Asia Pacific (Hong Kong) | |||
| aws_ap_south_1 = 7; // Asia Pacific (Mumbai) | |||
| aws_ap_northeast_3 = 8; // Asia Pacific (Osaka) | |||
| aws_ap_northeast_2 = 9; // Asia Pacific (Seoul) | |||
| aws_ap_northeast_1 = 10; // Asia Pacific (Singapore) | |||
| aws_ap_southeast_2 = 11; // Asia Pacific (Sydney) | |||
| aws_ap_southeast_1 = 12; // Asia Pacific (Tokyo) | |||
| aws_ca_central_1 = 13; // Canada (Central) | |||
| aws_eu_central_1 = 14; // Europe (Frankfurt) | |||
| aws_eu_west_1 = 15; // Europe (Ireland) | |||
| aws_eu_west_2 = 16; // Europe (London) | |||
| aws_eu_south_1 = 17; // Europe (Milan) | |||
| aws_eu_west_3 = 18; // Europe (Paris) | |||
| aws_eu_north_1 = 19; // Europe (Stockholm) | |||
| aws_me_south_1 = 20; // Middle East (Bahrain) | |||
| aws_sa_east_1 = 21; // South America (São Paulo) | |||
| } | |||
| service TenantService { | |||
| option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_tag) = { | |||
| description : "所有云租户的认证服务" | |||
| external_docs : { | |||
| url : "https://gitlink.org.cn/JCCE/PCM" | |||
| description: "Find out more about CloudFitter" | |||
| } | |||
| }; | |||
| } | |||
| @@ -0,0 +1,213 @@ | |||
| // Code generated by protoc-gen-go. DO NOT EDIT. | |||
| // versions: | |||
| // protoc-gen-go v1.28.0 | |||
| // protoc (unknown) | |||
| // source: idl/demo/demo.proto | |||
| package demo | |||
| import ( | |||
| _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" | |||
| _ "google.golang.org/genproto/googleapis/api/annotations" | |||
| protoreflect "google.golang.org/protobuf/reflect/protoreflect" | |||
| protoimpl "google.golang.org/protobuf/runtime/protoimpl" | |||
| reflect "reflect" | |||
| sync "sync" | |||
| ) | |||
| const ( | |||
| // Verify that this generated code is sufficiently up-to-date. | |||
| _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) | |||
| // Verify that runtime/protoimpl is sufficiently up-to-date. | |||
| _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) | |||
| ) | |||
| type OurTeam int32 | |||
| const ( | |||
| // github: devad | |||
| OurTeam_devad OurTeam = 0 | |||
| ) | |||
| // Enum value maps for OurTeam. | |||
| var ( | |||
| OurTeam_name = map[int32]string{ | |||
| 0: "devad", | |||
| } | |||
| OurTeam_value = map[string]int32{ | |||
| "devad": 0, | |||
| } | |||
| ) | |||
| func (x OurTeam) Enum() *OurTeam { | |||
| p := new(OurTeam) | |||
| *p = x | |||
| return p | |||
| } | |||
| func (x OurTeam) String() string { | |||
| return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) | |||
| } | |||
| func (OurTeam) Descriptor() protoreflect.EnumDescriptor { | |||
| return file_idl_demo_demo_proto_enumTypes[0].Descriptor() | |||
| } | |||
| func (OurTeam) Type() protoreflect.EnumType { | |||
| return &file_idl_demo_demo_proto_enumTypes[0] | |||
| } | |||
| func (x OurTeam) Number() protoreflect.EnumNumber { | |||
| return protoreflect.EnumNumber(x) | |||
| } | |||
| // Deprecated: Use OurTeam.Descriptor instead. | |||
| func (OurTeam) EnumDescriptor() ([]byte, []int) { | |||
| return file_idl_demo_demo_proto_rawDescGZIP(), []int{0} | |||
| } | |||
| type StringMessage struct { | |||
| state protoimpl.MessageState | |||
| sizeCache protoimpl.SizeCache | |||
| unknownFields protoimpl.UnknownFields | |||
| Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` | |||
| } | |||
| func (x *StringMessage) Reset() { | |||
| *x = StringMessage{} | |||
| if protoimpl.UnsafeEnabled { | |||
| mi := &file_idl_demo_demo_proto_msgTypes[0] | |||
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||
| ms.StoreMessageInfo(mi) | |||
| } | |||
| } | |||
| func (x *StringMessage) String() string { | |||
| return protoimpl.X.MessageStringOf(x) | |||
| } | |||
| func (*StringMessage) ProtoMessage() {} | |||
| func (x *StringMessage) ProtoReflect() protoreflect.Message { | |||
| mi := &file_idl_demo_demo_proto_msgTypes[0] | |||
| if protoimpl.UnsafeEnabled && x != nil { | |||
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||
| if ms.LoadMessageInfo() == nil { | |||
| ms.StoreMessageInfo(mi) | |||
| } | |||
| return ms | |||
| } | |||
| return mi.MessageOf(x) | |||
| } | |||
| // Deprecated: Use StringMessage.ProtoReflect.Descriptor instead. | |||
| func (*StringMessage) Descriptor() ([]byte, []int) { | |||
| return file_idl_demo_demo_proto_rawDescGZIP(), []int{0} | |||
| } | |||
| func (x *StringMessage) GetValue() string { | |||
| if x != nil { | |||
| return x.Value | |||
| } | |||
| return "" | |||
| } | |||
| var File_idl_demo_demo_proto protoreflect.FileDescriptor | |||
| var file_idl_demo_demo_proto_rawDesc = []byte{ | |||
| 0x0a, 0x13, 0x69, 0x64, 0x6c, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, | |||
| 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x64, 0x65, 0x6d, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, | |||
| 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, | |||
| 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, | |||
| 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, | |||
| 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, | |||
| 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x25, 0x0a, 0x0d, 0x53, 0x74, 0x72, | |||
| 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, | |||
| 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, | |||
| 0x2a, 0x14, 0x0a, 0x07, 0x4f, 0x75, 0x72, 0x54, 0x65, 0x61, 0x6d, 0x12, 0x09, 0x0a, 0x05, 0x64, | |||
| 0x65, 0x76, 0x61, 0x64, 0x10, 0x00, 0x32, 0xb3, 0x01, 0x0a, 0x0b, 0x44, 0x65, 0x6d, 0x6f, 0x53, | |||
| 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xa3, 0x01, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, | |||
| 0x13, 0x2e, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, | |||
| 0x73, 0x61, 0x67, 0x65, 0x1a, 0x13, 0x2e, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x74, 0x72, 0x69, | |||
| 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x71, 0x92, 0x41, 0x59, 0x22, 0x53, | |||
| 0x0a, 0x21, 0x46, 0x69, 0x6e, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6d, 0x6f, 0x72, 0x65, 0x20, | |||
| 0x61, 0x62, 0x6f, 0x75, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, | |||
| 0x61, 0x63, 0x65, 0x12, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, | |||
| 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x65, 0x63, 0x6f, | |||
| 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x67, 0x61, 0x74, 0x65, | |||
| 0x77, 0x61, 0x79, 0x58, 0x01, 0x62, 0x00, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, 0x22, 0x0a, 0x2f, | |||
| 0x61, 0x70, 0x69, 0x73, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x3a, 0x01, 0x2a, 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, 0x67, 0x65, 0x6e, 0x2f, 0x69, 0x64, 0x6c, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x62, 0x06, | |||
| 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | |||
| } | |||
| var ( | |||
| file_idl_demo_demo_proto_rawDescOnce sync.Once | |||
| file_idl_demo_demo_proto_rawDescData = file_idl_demo_demo_proto_rawDesc | |||
| ) | |||
| func file_idl_demo_demo_proto_rawDescGZIP() []byte { | |||
| file_idl_demo_demo_proto_rawDescOnce.Do(func() { | |||
| file_idl_demo_demo_proto_rawDescData = protoimpl.X.CompressGZIP(file_idl_demo_demo_proto_rawDescData) | |||
| }) | |||
| return file_idl_demo_demo_proto_rawDescData | |||
| } | |||
| var file_idl_demo_demo_proto_enumTypes = make([]protoimpl.EnumInfo, 1) | |||
| var file_idl_demo_demo_proto_msgTypes = make([]protoimpl.MessageInfo, 1) | |||
| var file_idl_demo_demo_proto_goTypes = []interface{}{ | |||
| (OurTeam)(0), // 0: demo.OurTeam | |||
| (*StringMessage)(nil), // 1: demo.StringMessage | |||
| } | |||
| var file_idl_demo_demo_proto_depIdxs = []int32{ | |||
| 1, // 0: demo.DemoService.Echo:input_type -> demo.StringMessage | |||
| 1, // 1: demo.DemoService.Echo:output_type -> demo.StringMessage | |||
| 1, // [1:2] is the sub-list for method output_type | |||
| 0, // [0:1] is the sub-list for method input_type | |||
| 0, // [0:0] is the sub-list for extension type_name | |||
| 0, // [0:0] is the sub-list for extension extendee | |||
| 0, // [0:0] is the sub-list for field type_name | |||
| } | |||
| func init() { file_idl_demo_demo_proto_init() } | |||
| func file_idl_demo_demo_proto_init() { | |||
| if File_idl_demo_demo_proto != nil { | |||
| return | |||
| } | |||
| if !protoimpl.UnsafeEnabled { | |||
| file_idl_demo_demo_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { | |||
| switch v := v.(*StringMessage); i { | |||
| case 0: | |||
| return &v.state | |||
| case 1: | |||
| return &v.sizeCache | |||
| case 2: | |||
| return &v.unknownFields | |||
| default: | |||
| return nil | |||
| } | |||
| } | |||
| } | |||
| type x struct{} | |||
| out := protoimpl.TypeBuilder{ | |||
| File: protoimpl.DescBuilder{ | |||
| GoPackagePath: reflect.TypeOf(x{}).PkgPath(), | |||
| RawDescriptor: file_idl_demo_demo_proto_rawDesc, | |||
| NumEnums: 1, | |||
| NumMessages: 1, | |||
| NumExtensions: 0, | |||
| NumServices: 1, | |||
| }, | |||
| GoTypes: file_idl_demo_demo_proto_goTypes, | |||
| DependencyIndexes: file_idl_demo_demo_proto_depIdxs, | |||
| EnumInfos: file_idl_demo_demo_proto_enumTypes, | |||
| MessageInfos: file_idl_demo_demo_proto_msgTypes, | |||
| }.Build() | |||
| File_idl_demo_demo_proto = out.File | |||
| file_idl_demo_demo_proto_rawDesc = nil | |||
| file_idl_demo_demo_proto_goTypes = nil | |||
| file_idl_demo_demo_proto_depIdxs = nil | |||
| } | |||
| @@ -0,0 +1,169 @@ | |||
| // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. | |||
| // source: idl/demo/demo.proto | |||
| /* | |||
| Package demo is a reverse proxy. | |||
| It translates gRPC into RESTful JSON APIs. | |||
| */ | |||
| package demo | |||
| 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_DemoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, client DemoServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | |||
| var protoReq StringMessage | |||
| 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.Echo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) | |||
| return msg, metadata, err | |||
| } | |||
| func local_request_DemoService_Echo_0(ctx context.Context, marshaler runtime.Marshaler, server DemoServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | |||
| var protoReq StringMessage | |||
| 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.Echo(ctx, &protoReq) | |||
| return msg, metadata, err | |||
| } | |||
| // RegisterDemoServiceHandlerServer registers the http handlers for service DemoService to "mux". | |||
| // UnaryRPC :call DemoServiceServer 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 RegisterDemoServiceHandlerFromEndpoint instead. | |||
| func RegisterDemoServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server DemoServiceServer) error { | |||
| mux.Handle("POST", pattern_DemoService_Echo_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) | |||
| var err error | |||
| ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/demo.DemoService/Echo", runtime.WithHTTPPathPattern("/apis/demo")) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| resp, md, err := local_request_DemoService_Echo_0(ctx, 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_DemoService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | |||
| }) | |||
| return nil | |||
| } | |||
| // RegisterDemoServiceHandlerFromEndpoint is same as RegisterDemoServiceHandler but | |||
| // automatically dials to "endpoint" and closes the connection when "ctx" gets done. | |||
| func RegisterDemoServiceHandlerFromEndpoint(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 RegisterDemoServiceHandler(ctx, mux, conn) | |||
| } | |||
| // RegisterDemoServiceHandler registers the http handlers for service DemoService to "mux". | |||
| // The handlers forward requests to the grpc endpoint over "conn". | |||
| func RegisterDemoServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { | |||
| return RegisterDemoServiceHandlerClient(ctx, mux, NewDemoServiceClient(conn)) | |||
| } | |||
| // RegisterDemoServiceHandlerClient registers the http handlers for service DemoService | |||
| // to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "DemoServiceClient". | |||
| // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "DemoServiceClient" | |||
| // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in | |||
| // "DemoServiceClient" to call the correct interceptors. | |||
| func RegisterDemoServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client DemoServiceClient) error { | |||
| mux.Handle("POST", pattern_DemoService_Echo_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) | |||
| var err error | |||
| ctx, err = runtime.AnnotateContext(ctx, mux, req, "/demo.DemoService/Echo", runtime.WithHTTPPathPattern("/apis/demo")) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| resp, md, err := request_DemoService_Echo_0(ctx, inboundMarshaler, client, req, pathParams) | |||
| ctx = runtime.NewServerMetadataContext(ctx, md) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| forward_DemoService_Echo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | |||
| }) | |||
| return nil | |||
| } | |||
| var ( | |||
| pattern_DemoService_Echo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"apis", "demo"}, "")) | |||
| ) | |||
| var ( | |||
| forward_DemoService_Echo_0 = runtime.ForwardResponseMessage | |||
| ) | |||
| @@ -0,0 +1,107 @@ | |||
| // Code generated by protoc-gen-go-grpc. DO NOT EDIT. | |||
| // versions: | |||
| // - protoc-gen-go-grpc v1.2.0 | |||
| // - protoc (unknown) | |||
| // source: idl/demo/demo.proto | |||
| package demo | |||
| 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 | |||
| // DemoServiceClient is the client API for DemoService 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 DemoServiceClient interface { | |||
| // Echo 样例接口 | |||
| Echo(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*StringMessage, error) | |||
| } | |||
| type demoServiceClient struct { | |||
| cc grpc.ClientConnInterface | |||
| } | |||
| func NewDemoServiceClient(cc grpc.ClientConnInterface) DemoServiceClient { | |||
| return &demoServiceClient{cc} | |||
| } | |||
| func (c *demoServiceClient) Echo(ctx context.Context, in *StringMessage, opts ...grpc.CallOption) (*StringMessage, error) { | |||
| out := new(StringMessage) | |||
| err := c.cc.Invoke(ctx, "/demo.DemoService/Echo", in, out, opts...) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| return out, nil | |||
| } | |||
| // DemoServiceServer is the server API for DemoService service. | |||
| // All implementations must embed UnimplementedDemoServiceServer | |||
| // for forward compatibility | |||
| type DemoServiceServer interface { | |||
| // Echo 样例接口 | |||
| Echo(context.Context, *StringMessage) (*StringMessage, error) | |||
| mustEmbedUnimplementedDemoServiceServer() | |||
| } | |||
| // UnimplementedDemoServiceServer must be embedded to have forward compatible implementations. | |||
| type UnimplementedDemoServiceServer struct { | |||
| } | |||
| func (UnimplementedDemoServiceServer) Echo(context.Context, *StringMessage) (*StringMessage, error) { | |||
| return nil, status.Errorf(codes.Unimplemented, "method Echo not implemented") | |||
| } | |||
| func (UnimplementedDemoServiceServer) mustEmbedUnimplementedDemoServiceServer() {} | |||
| // UnsafeDemoServiceServer may be embedded to opt out of forward compatibility for this service. | |||
| // Use of this interface is not recommended, as added methods to DemoServiceServer will | |||
| // result in compilation errors. | |||
| type UnsafeDemoServiceServer interface { | |||
| mustEmbedUnimplementedDemoServiceServer() | |||
| } | |||
| func RegisterDemoServiceServer(s grpc.ServiceRegistrar, srv DemoServiceServer) { | |||
| s.RegisterService(&DemoService_ServiceDesc, srv) | |||
| } | |||
| func _DemoService_Echo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | |||
| in := new(StringMessage) | |||
| if err := dec(in); err != nil { | |||
| return nil, err | |||
| } | |||
| if interceptor == nil { | |||
| return srv.(DemoServiceServer).Echo(ctx, in) | |||
| } | |||
| info := &grpc.UnaryServerInfo{ | |||
| Server: srv, | |||
| FullMethod: "/demo.DemoService/Echo", | |||
| } | |||
| handler := func(ctx context.Context, req interface{}) (interface{}, error) { | |||
| return srv.(DemoServiceServer).Echo(ctx, req.(*StringMessage)) | |||
| } | |||
| return interceptor(ctx, in, info, handler) | |||
| } | |||
| // DemoService_ServiceDesc is the grpc.ServiceDesc for DemoService service. | |||
| // It's only intended for direct use with grpc.RegisterService, | |||
| // and not to be introspected or modified (even as a copy) | |||
| var DemoService_ServiceDesc = grpc.ServiceDesc{ | |||
| ServiceName: "demo.DemoService", | |||
| HandlerType: (*DemoServiceServer)(nil), | |||
| Methods: []grpc.MethodDesc{ | |||
| { | |||
| MethodName: "Echo", | |||
| Handler: _DemoService_Echo_Handler, | |||
| }, | |||
| }, | |||
| Streams: []grpc.StreamDesc{}, | |||
| Metadata: "idl/demo/demo.proto", | |||
| } | |||
| @@ -0,0 +1,776 @@ | |||
| // Code generated by protoc-gen-go. DO NOT EDIT. | |||
| // versions: | |||
| // protoc-gen-go v1.28.0 | |||
| // protoc (unknown) | |||
| // source: idl/pbecs/ecs.proto | |||
| package pbecs | |||
| import ( | |||
| pbtenant "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbtenant" | |||
| _ "google.golang.org/genproto/googleapis/api/annotations" | |||
| protoreflect "google.golang.org/protobuf/reflect/protoreflect" | |||
| protoimpl "google.golang.org/protobuf/runtime/protoimpl" | |||
| reflect "reflect" | |||
| sync "sync" | |||
| ) | |||
| const ( | |||
| // Verify that this generated code is sufficiently up-to-date. | |||
| _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) | |||
| // Verify that runtime/protoimpl is sufficiently up-to-date. | |||
| _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) | |||
| ) | |||
| type EcsInstance struct { | |||
| state protoimpl.MessageState | |||
| sizeCache protoimpl.SizeCache | |||
| unknownFields protoimpl.UnknownFields | |||
| // 云类型 | |||
| Provider pbtenant.CloudProvider `protobuf:"varint,1,opt,name=provider,proto3,enum=pbtenant.CloudProvider" json:"provider,omitempty"` | |||
| // 账号名称 | |||
| AccountName string `protobuf:"bytes,2,opt,name=account_name,json=accountName,proto3" json:"account_name,omitempty"` | |||
| // 实例id | |||
| InstanceId string `protobuf:"bytes,3,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` | |||
| // 实例名称 | |||
| InstanceName string `protobuf:"bytes,4,opt,name=instance_name,json=instanceName,proto3" json:"instance_name,omitempty"` | |||
| // 地域,数据中心 | |||
| RegionName string `protobuf:"bytes,5,opt,name=region_name,json=regionName,proto3" json:"region_name,omitempty"` | |||
| // 公网ip | |||
| PublicIps []string `protobuf:"bytes,6,rep,name=public_ips,json=publicIps,proto3" json:"public_ips,omitempty"` | |||
| // 实例类型 | |||
| InstanceType string `protobuf:"bytes,7,opt,name=instance_type,json=instanceType,proto3" json:"instance_type,omitempty"` | |||
| // vcpu数 | |||
| Cpu int32 `protobuf:"varint,8,opt,name=cpu,proto3" json:"cpu,omitempty"` | |||
| // 内存MB | |||
| Memory int32 `protobuf:"varint,9,opt,name=memory,proto3" json:"memory,omitempty"` | |||
| // 实例描述 | |||
| Description string `protobuf:"bytes,10,opt,name=description,proto3" json:"description,omitempty"` | |||
| // 状态 | |||
| Status string `protobuf:"bytes,11,opt,name=status,proto3" json:"status,omitempty"` | |||
| // 创建时间,ISO8601 | |||
| CreationTime string `protobuf:"bytes,12,opt,name=creation_time,json=creationTime,proto3" json:"creation_time,omitempty"` | |||
| // 过期时间 | |||
| 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 | |||
| 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"` | |||
| // 收费类型 | |||
| ChargeType string `protobuf:"bytes,17,opt,name=charge_type,json=chargeType,proto3" json:"charge_type,omitempty"` | |||
| } | |||
| func (x *EcsInstance) Reset() { | |||
| *x = EcsInstance{} | |||
| if protoimpl.UnsafeEnabled { | |||
| mi := &file_idl_pbecs_ecs_proto_msgTypes[0] | |||
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||
| ms.StoreMessageInfo(mi) | |||
| } | |||
| } | |||
| func (x *EcsInstance) String() string { | |||
| return protoimpl.X.MessageStringOf(x) | |||
| } | |||
| func (*EcsInstance) ProtoMessage() {} | |||
| func (x *EcsInstance) ProtoReflect() protoreflect.Message { | |||
| mi := &file_idl_pbecs_ecs_proto_msgTypes[0] | |||
| if protoimpl.UnsafeEnabled && x != nil { | |||
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||
| if ms.LoadMessageInfo() == nil { | |||
| ms.StoreMessageInfo(mi) | |||
| } | |||
| return ms | |||
| } | |||
| return mi.MessageOf(x) | |||
| } | |||
| // Deprecated: Use EcsInstance.ProtoReflect.Descriptor instead. | |||
| func (*EcsInstance) Descriptor() ([]byte, []int) { | |||
| return file_idl_pbecs_ecs_proto_rawDescGZIP(), []int{0} | |||
| } | |||
| func (x *EcsInstance) GetProvider() pbtenant.CloudProvider { | |||
| if x != nil { | |||
| return x.Provider | |||
| } | |||
| return pbtenant.CloudProvider(0) | |||
| } | |||
| func (x *EcsInstance) GetAccountName() string { | |||
| if x != nil { | |||
| return x.AccountName | |||
| } | |||
| return "" | |||
| } | |||
| func (x *EcsInstance) GetInstanceId() string { | |||
| if x != nil { | |||
| return x.InstanceId | |||
| } | |||
| return "" | |||
| } | |||
| func (x *EcsInstance) GetInstanceName() string { | |||
| if x != nil { | |||
| return x.InstanceName | |||
| } | |||
| return "" | |||
| } | |||
| func (x *EcsInstance) GetRegionName() string { | |||
| if x != nil { | |||
| return x.RegionName | |||
| } | |||
| return "" | |||
| } | |||
| func (x *EcsInstance) GetPublicIps() []string { | |||
| if x != nil { | |||
| return x.PublicIps | |||
| } | |||
| return nil | |||
| } | |||
| func (x *EcsInstance) GetInstanceType() string { | |||
| if x != nil { | |||
| return x.InstanceType | |||
| } | |||
| return "" | |||
| } | |||
| func (x *EcsInstance) GetCpu() int32 { | |||
| if x != nil { | |||
| return x.Cpu | |||
| } | |||
| return 0 | |||
| } | |||
| func (x *EcsInstance) GetMemory() int32 { | |||
| if x != nil { | |||
| return x.Memory | |||
| } | |||
| return 0 | |||
| } | |||
| func (x *EcsInstance) GetDescription() string { | |||
| if x != nil { | |||
| return x.Description | |||
| } | |||
| return "" | |||
| } | |||
| func (x *EcsInstance) GetStatus() string { | |||
| if x != nil { | |||
| return x.Status | |||
| } | |||
| return "" | |||
| } | |||
| func (x *EcsInstance) GetCreationTime() string { | |||
| if x != nil { | |||
| return x.CreationTime | |||
| } | |||
| return "" | |||
| } | |||
| func (x *EcsInstance) GetExpireTime() string { | |||
| if x != nil { | |||
| return x.ExpireTime | |||
| } | |||
| return "" | |||
| } | |||
| func (x *EcsInstance) GetInnerIps() []string { | |||
| if x != nil { | |||
| return x.InnerIps | |||
| } | |||
| return nil | |||
| } | |||
| func (x *EcsInstance) GetVpcId() string { | |||
| if x != nil { | |||
| return x.VpcId | |||
| } | |||
| return "" | |||
| } | |||
| func (x *EcsInstance) GetResourceGroupId() string { | |||
| if x != nil { | |||
| return x.ResourceGroupId | |||
| } | |||
| return "" | |||
| } | |||
| func (x *EcsInstance) GetChargeType() string { | |||
| if x != nil { | |||
| return x.ChargeType | |||
| } | |||
| return "" | |||
| } | |||
| type ListDetailReq struct { | |||
| state protoimpl.MessageState | |||
| sizeCache protoimpl.SizeCache | |||
| unknownFields protoimpl.UnknownFields | |||
| // 云名称 | |||
| Provider pbtenant.CloudProvider `protobuf:"varint,1,opt,name=provider,proto3,enum=pbtenant.CloudProvider" json:"provider,omitempty"` | |||
| // 账户名称,根据config.yaml中的配置,默认为第一个配置的账户 | |||
| AccountName string `protobuf:"bytes,2,opt,name=account_name,json=accountName,proto3" json:"account_name,omitempty"` | |||
| // 区域Id,参考 tenant.proto 中的各个云的区域 | |||
| RegionId int32 `protobuf:"varint,3,opt,name=region_id,json=regionId,proto3" json:"region_id,omitempty"` | |||
| // 分页相关参数,页码 | |||
| PageNumber int32 `protobuf:"varint,4,opt,name=page_number,json=pageNumber,proto3" json:"page_number,omitempty"` | |||
| // 分页相关参数,每页数量 | |||
| PageSize int32 `protobuf:"varint,5,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` | |||
| // 分页相关参数,下一页的token | |||
| NextToken string `protobuf:"bytes,6,opt,name=next_token,json=nextToken,proto3" json:"next_token,omitempty"` | |||
| } | |||
| func (x *ListDetailReq) Reset() { | |||
| *x = ListDetailReq{} | |||
| if protoimpl.UnsafeEnabled { | |||
| mi := &file_idl_pbecs_ecs_proto_msgTypes[1] | |||
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||
| ms.StoreMessageInfo(mi) | |||
| } | |||
| } | |||
| func (x *ListDetailReq) String() string { | |||
| return protoimpl.X.MessageStringOf(x) | |||
| } | |||
| func (*ListDetailReq) ProtoMessage() {} | |||
| func (x *ListDetailReq) ProtoReflect() protoreflect.Message { | |||
| mi := &file_idl_pbecs_ecs_proto_msgTypes[1] | |||
| if protoimpl.UnsafeEnabled && x != nil { | |||
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||
| if ms.LoadMessageInfo() == nil { | |||
| ms.StoreMessageInfo(mi) | |||
| } | |||
| return ms | |||
| } | |||
| return mi.MessageOf(x) | |||
| } | |||
| // Deprecated: Use ListDetailReq.ProtoReflect.Descriptor instead. | |||
| func (*ListDetailReq) Descriptor() ([]byte, []int) { | |||
| return file_idl_pbecs_ecs_proto_rawDescGZIP(), []int{1} | |||
| } | |||
| func (x *ListDetailReq) GetProvider() pbtenant.CloudProvider { | |||
| if x != nil { | |||
| return x.Provider | |||
| } | |||
| return pbtenant.CloudProvider(0) | |||
| } | |||
| func (x *ListDetailReq) GetAccountName() string { | |||
| if x != nil { | |||
| return x.AccountName | |||
| } | |||
| return "" | |||
| } | |||
| func (x *ListDetailReq) GetRegionId() int32 { | |||
| if x != nil { | |||
| return x.RegionId | |||
| } | |||
| return 0 | |||
| } | |||
| func (x *ListDetailReq) GetPageNumber() int32 { | |||
| if x != nil { | |||
| return x.PageNumber | |||
| } | |||
| return 0 | |||
| } | |||
| func (x *ListDetailReq) GetPageSize() int32 { | |||
| if x != nil { | |||
| return x.PageSize | |||
| } | |||
| return 0 | |||
| } | |||
| func (x *ListDetailReq) GetNextToken() string { | |||
| if x != nil { | |||
| return x.NextToken | |||
| } | |||
| return "" | |||
| } | |||
| type ListDetailResp struct { | |||
| state protoimpl.MessageState | |||
| sizeCache protoimpl.SizeCache | |||
| unknownFields protoimpl.UnknownFields | |||
| // Ecs 机器集合 | |||
| Ecses []*EcsInstance `protobuf:"bytes,1,rep,name=ecses,proto3" json:"ecses,omitempty"` | |||
| // 查询是否完成,如果为否-false,则可以将下面三个分页参数填入到请求中,继续查询 | |||
| Finished bool `protobuf:"varint,2,opt,name=finished,proto3" json:"finished,omitempty"` | |||
| // 分页相关参数,页码 | |||
| PageNumber int32 `protobuf:"varint,3,opt,name=page_number,json=pageNumber,proto3" json:"page_number,omitempty"` | |||
| // 分页相关参数,每页数量 | |||
| PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` | |||
| // 分页相关参数,下一页的token | |||
| NextToken string `protobuf:"bytes,5,opt,name=next_token,json=nextToken,proto3" json:"next_token,omitempty"` | |||
| // 请求id,出现问题后提供给云厂商,排查问题 | |||
| RequestId string `protobuf:"bytes,6,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` | |||
| } | |||
| func (x *ListDetailResp) Reset() { | |||
| *x = ListDetailResp{} | |||
| if protoimpl.UnsafeEnabled { | |||
| mi := &file_idl_pbecs_ecs_proto_msgTypes[2] | |||
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||
| ms.StoreMessageInfo(mi) | |||
| } | |||
| } | |||
| func (x *ListDetailResp) String() string { | |||
| return protoimpl.X.MessageStringOf(x) | |||
| } | |||
| func (*ListDetailResp) ProtoMessage() {} | |||
| func (x *ListDetailResp) ProtoReflect() protoreflect.Message { | |||
| mi := &file_idl_pbecs_ecs_proto_msgTypes[2] | |||
| if protoimpl.UnsafeEnabled && x != nil { | |||
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||
| if ms.LoadMessageInfo() == nil { | |||
| ms.StoreMessageInfo(mi) | |||
| } | |||
| return ms | |||
| } | |||
| return mi.MessageOf(x) | |||
| } | |||
| // Deprecated: Use ListDetailResp.ProtoReflect.Descriptor instead. | |||
| func (*ListDetailResp) Descriptor() ([]byte, []int) { | |||
| return file_idl_pbecs_ecs_proto_rawDescGZIP(), []int{2} | |||
| } | |||
| func (x *ListDetailResp) GetEcses() []*EcsInstance { | |||
| if x != nil { | |||
| return x.Ecses | |||
| } | |||
| return nil | |||
| } | |||
| func (x *ListDetailResp) GetFinished() bool { | |||
| if x != nil { | |||
| return x.Finished | |||
| } | |||
| return false | |||
| } | |||
| func (x *ListDetailResp) GetPageNumber() int32 { | |||
| if x != nil { | |||
| return x.PageNumber | |||
| } | |||
| return 0 | |||
| } | |||
| func (x *ListDetailResp) GetPageSize() int32 { | |||
| if x != nil { | |||
| return x.PageSize | |||
| } | |||
| return 0 | |||
| } | |||
| func (x *ListDetailResp) GetNextToken() string { | |||
| if x != nil { | |||
| return x.NextToken | |||
| } | |||
| return "" | |||
| } | |||
| func (x *ListDetailResp) GetRequestId() string { | |||
| if x != nil { | |||
| return x.RequestId | |||
| } | |||
| return "" | |||
| } | |||
| type ListReq struct { | |||
| state protoimpl.MessageState | |||
| sizeCache protoimpl.SizeCache | |||
| unknownFields protoimpl.UnknownFields | |||
| // 云名称 | |||
| Provider pbtenant.CloudProvider `protobuf:"varint,1,opt,name=provider,proto3,enum=pbtenant.CloudProvider" json:"provider,omitempty"` | |||
| } | |||
| func (x *ListReq) Reset() { | |||
| *x = ListReq{} | |||
| if protoimpl.UnsafeEnabled { | |||
| mi := &file_idl_pbecs_ecs_proto_msgTypes[3] | |||
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||
| ms.StoreMessageInfo(mi) | |||
| } | |||
| } | |||
| func (x *ListReq) String() string { | |||
| return protoimpl.X.MessageStringOf(x) | |||
| } | |||
| func (*ListReq) ProtoMessage() {} | |||
| func (x *ListReq) ProtoReflect() protoreflect.Message { | |||
| mi := &file_idl_pbecs_ecs_proto_msgTypes[3] | |||
| if protoimpl.UnsafeEnabled && x != nil { | |||
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||
| if ms.LoadMessageInfo() == nil { | |||
| ms.StoreMessageInfo(mi) | |||
| } | |||
| return ms | |||
| } | |||
| return mi.MessageOf(x) | |||
| } | |||
| // Deprecated: Use ListReq.ProtoReflect.Descriptor instead. | |||
| func (*ListReq) Descriptor() ([]byte, []int) { | |||
| return file_idl_pbecs_ecs_proto_rawDescGZIP(), []int{3} | |||
| } | |||
| func (x *ListReq) GetProvider() pbtenant.CloudProvider { | |||
| if x != nil { | |||
| return x.Provider | |||
| } | |||
| return pbtenant.CloudProvider(0) | |||
| } | |||
| type ListResp struct { | |||
| state protoimpl.MessageState | |||
| sizeCache protoimpl.SizeCache | |||
| unknownFields protoimpl.UnknownFields | |||
| // Ecs 机器集合 | |||
| Ecses []*EcsInstance `protobuf:"bytes,1,rep,name=ecses,proto3" json:"ecses,omitempty"` | |||
| } | |||
| func (x *ListResp) Reset() { | |||
| *x = ListResp{} | |||
| if protoimpl.UnsafeEnabled { | |||
| mi := &file_idl_pbecs_ecs_proto_msgTypes[4] | |||
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||
| ms.StoreMessageInfo(mi) | |||
| } | |||
| } | |||
| func (x *ListResp) String() string { | |||
| return protoimpl.X.MessageStringOf(x) | |||
| } | |||
| func (*ListResp) ProtoMessage() {} | |||
| func (x *ListResp) ProtoReflect() protoreflect.Message { | |||
| mi := &file_idl_pbecs_ecs_proto_msgTypes[4] | |||
| if protoimpl.UnsafeEnabled && x != nil { | |||
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||
| if ms.LoadMessageInfo() == nil { | |||
| ms.StoreMessageInfo(mi) | |||
| } | |||
| return ms | |||
| } | |||
| return mi.MessageOf(x) | |||
| } | |||
| // Deprecated: Use ListResp.ProtoReflect.Descriptor instead. | |||
| func (*ListResp) Descriptor() ([]byte, []int) { | |||
| return file_idl_pbecs_ecs_proto_rawDescGZIP(), []int{4} | |||
| } | |||
| func (x *ListResp) GetEcses() []*EcsInstance { | |||
| if x != nil { | |||
| return x.Ecses | |||
| } | |||
| return nil | |||
| } | |||
| type ListAllReq struct { | |||
| state protoimpl.MessageState | |||
| sizeCache protoimpl.SizeCache | |||
| unknownFields protoimpl.UnknownFields | |||
| } | |||
| func (x *ListAllReq) Reset() { | |||
| *x = ListAllReq{} | |||
| if protoimpl.UnsafeEnabled { | |||
| mi := &file_idl_pbecs_ecs_proto_msgTypes[5] | |||
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||
| ms.StoreMessageInfo(mi) | |||
| } | |||
| } | |||
| func (x *ListAllReq) String() string { | |||
| return protoimpl.X.MessageStringOf(x) | |||
| } | |||
| func (*ListAllReq) ProtoMessage() {} | |||
| func (x *ListAllReq) ProtoReflect() protoreflect.Message { | |||
| mi := &file_idl_pbecs_ecs_proto_msgTypes[5] | |||
| if protoimpl.UnsafeEnabled && x != nil { | |||
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||
| if ms.LoadMessageInfo() == nil { | |||
| ms.StoreMessageInfo(mi) | |||
| } | |||
| return ms | |||
| } | |||
| return mi.MessageOf(x) | |||
| } | |||
| // Deprecated: Use ListAllReq.ProtoReflect.Descriptor instead. | |||
| func (*ListAllReq) Descriptor() ([]byte, []int) { | |||
| return file_idl_pbecs_ecs_proto_rawDescGZIP(), []int{5} | |||
| } | |||
| var File_idl_pbecs_ecs_proto protoreflect.FileDescriptor | |||
| var file_idl_pbecs_ecs_proto_rawDesc = []byte{ | |||
| 0x0a, 0x13, 0x69, 0x64, 0x6c, 0x2f, 0x70, 0x62, 0x65, 0x63, 0x73, 0x2f, 0x65, 0x63, 0x73, 0x2e, | |||
| 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x70, 0x62, 0x65, 0x63, 0x73, 0x1a, 0x19, 0x69, 0x64, | |||
| 0x6c, 0x2f, 0x70, 0x62, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x74, 0x65, 0x6e, 0x61, 0x6e, | |||
| 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, | |||
| 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, | |||
| 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbb, 0x04, 0x0a, 0x0b, 0x45, 0x63, 0x73, 0x49, 0x6e, 0x73, | |||
| 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, | |||
| 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6e, 0x61, | |||
| 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, | |||
| 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, | |||
| 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, | |||
| 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, | |||
| 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, | |||
| 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x23, | |||
| 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, | |||
| 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x4e, | |||
| 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, | |||
| 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, | |||
| 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x69, | |||
| 0x70, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, | |||
| 0x49, 0x70, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, | |||
| 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, | |||
| 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, | |||
| 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, | |||
| 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f, | |||
| 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, | |||
| 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, | |||
| 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0b, | |||
| 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x23, 0x0a, 0x0d, | |||
| 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, | |||
| 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, | |||
| 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, | |||
| 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, | |||
| 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x70, 0x73, 0x18, | |||
| 0x0e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x49, 0x70, 0x73, 0x12, | |||
| 0x15, 0x0a, 0x06, 0x76, 0x70, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, | |||
| 0x05, 0x76, 0x70, 0x63, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, | |||
| 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, | |||
| 0x09, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, | |||
| 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, | |||
| 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x72, 0x67, 0x65, 0x54, | |||
| 0x79, 0x70, 0x65, 0x22, 0xe1, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x74, 0x61, | |||
| 0x69, 0x6c, 0x52, 0x65, 0x71, 0x12, 0x33, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, | |||
| 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6e, 0x61, | |||
| 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, | |||
| 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, | |||
| 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, | |||
| 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, | |||
| 0x09, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, | |||
| 0x52, 0x08, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, | |||
| 0x67, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, | |||
| 0x0a, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x70, | |||
| 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, | |||
| 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, | |||
| 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, | |||
| 0x78, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xd2, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, | |||
| 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x12, 0x28, 0x0a, 0x05, 0x65, 0x63, | |||
| 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x65, 0x63, | |||
| 0x73, 0x2e, 0x45, 0x63, 0x73, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x65, | |||
| 0x63, 0x73, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, | |||
| 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, | |||
| 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, | |||
| 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, | |||
| 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, | |||
| 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, | |||
| 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, | |||
| 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1d, 0x0a, | |||
| 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, | |||
| 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x3e, 0x0a, 0x07, | |||
| 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x33, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, | |||
| 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x62, 0x74, 0x65, | |||
| 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, | |||
| 0x65, 0x72, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x34, 0x0a, 0x08, | |||
| 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x28, 0x0a, 0x05, 0x65, 0x63, 0x73, 0x65, | |||
| 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x65, 0x63, 0x73, 0x2e, | |||
| 0x45, 0x63, 0x73, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x65, 0x63, 0x73, | |||
| 0x65, 0x73, 0x22, 0x0c, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, | |||
| 0x32, 0xf5, 0x01, 0x0a, 0x0a, 0x45, 0x63, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, | |||
| 0x59, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x63, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, | |||
| 0x12, 0x14, 0x2e, 0x70, 0x62, 0x65, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x74, | |||
| 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x65, 0x63, 0x73, 0x2e, 0x4c, | |||
| 0x69, 0x73, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x22, 0x1b, 0x82, | |||
| 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x22, 0x10, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x65, 0x63, 0x73, | |||
| 0x2f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x40, 0x0a, 0x07, 0x4c, 0x69, | |||
| 0x73, 0x74, 0x45, 0x63, 0x73, 0x12, 0x0e, 0x2e, 0x70, 0x62, 0x65, 0x63, 0x73, 0x2e, 0x4c, 0x69, | |||
| 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, 0x70, 0x62, 0x65, 0x63, 0x73, 0x2e, 0x4c, 0x69, | |||
| 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x22, 0x09, | |||
| 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x65, 0x63, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x4a, 0x0a, 0x0a, | |||
| 0x4c, 0x69, 0x73, 0x74, 0x45, 0x63, 0x73, 0x41, 0x6c, 0x6c, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x65, | |||
| 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x1a, 0x0f, 0x2e, | |||
| 0x70, 0x62, 0x65, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x18, | |||
| 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x22, 0x0d, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x65, 0x63, | |||
| 0x73, 0x2f, 0x61, 0x6c, 0x6c, 0x3a, 0x01, 0x2a, 0x42, 0x2d, 0x5a, 0x2b, 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, 0x65, 0x63, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | |||
| } | |||
| var ( | |||
| file_idl_pbecs_ecs_proto_rawDescOnce sync.Once | |||
| file_idl_pbecs_ecs_proto_rawDescData = file_idl_pbecs_ecs_proto_rawDesc | |||
| ) | |||
| func file_idl_pbecs_ecs_proto_rawDescGZIP() []byte { | |||
| file_idl_pbecs_ecs_proto_rawDescOnce.Do(func() { | |||
| file_idl_pbecs_ecs_proto_rawDescData = protoimpl.X.CompressGZIP(file_idl_pbecs_ecs_proto_rawDescData) | |||
| }) | |||
| return file_idl_pbecs_ecs_proto_rawDescData | |||
| } | |||
| var file_idl_pbecs_ecs_proto_msgTypes = make([]protoimpl.MessageInfo, 6) | |||
| var file_idl_pbecs_ecs_proto_goTypes = []interface{}{ | |||
| (*EcsInstance)(nil), // 0: pbecs.EcsInstance | |||
| (*ListDetailReq)(nil), // 1: pbecs.ListDetailReq | |||
| (*ListDetailResp)(nil), // 2: pbecs.ListDetailResp | |||
| (*ListReq)(nil), // 3: pbecs.ListReq | |||
| (*ListResp)(nil), // 4: pbecs.ListResp | |||
| (*ListAllReq)(nil), // 5: pbecs.ListAllReq | |||
| (pbtenant.CloudProvider)(0), // 6: pbtenant.CloudProvider | |||
| } | |||
| var file_idl_pbecs_ecs_proto_depIdxs = []int32{ | |||
| 6, // 0: pbecs.EcsInstance.provider:type_name -> pbtenant.CloudProvider | |||
| 6, // 1: pbecs.ListDetailReq.provider:type_name -> pbtenant.CloudProvider | |||
| 0, // 2: pbecs.ListDetailResp.ecses:type_name -> pbecs.EcsInstance | |||
| 6, // 3: pbecs.ListReq.provider:type_name -> pbtenant.CloudProvider | |||
| 0, // 4: pbecs.ListResp.ecses:type_name -> pbecs.EcsInstance | |||
| 1, // 5: pbecs.EcsService.ListEcsDetail:input_type -> pbecs.ListDetailReq | |||
| 3, // 6: pbecs.EcsService.ListEcs:input_type -> pbecs.ListReq | |||
| 5, // 7: pbecs.EcsService.ListEcsAll:input_type -> pbecs.ListAllReq | |||
| 2, // 8: pbecs.EcsService.ListEcsDetail:output_type -> pbecs.ListDetailResp | |||
| 4, // 9: pbecs.EcsService.ListEcs:output_type -> pbecs.ListResp | |||
| 4, // 10: pbecs.EcsService.ListEcsAll:output_type -> pbecs.ListResp | |||
| 8, // [8:11] is the sub-list for method output_type | |||
| 5, // [5:8] is the sub-list for method input_type | |||
| 5, // [5:5] is the sub-list for extension type_name | |||
| 5, // [5:5] is the sub-list for extension extendee | |||
| 0, // [0:5] is the sub-list for field type_name | |||
| } | |||
| func init() { file_idl_pbecs_ecs_proto_init() } | |||
| func file_idl_pbecs_ecs_proto_init() { | |||
| if File_idl_pbecs_ecs_proto != nil { | |||
| return | |||
| } | |||
| if !protoimpl.UnsafeEnabled { | |||
| file_idl_pbecs_ecs_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { | |||
| switch v := v.(*EcsInstance); i { | |||
| case 0: | |||
| return &v.state | |||
| case 1: | |||
| return &v.sizeCache | |||
| case 2: | |||
| return &v.unknownFields | |||
| default: | |||
| return nil | |||
| } | |||
| } | |||
| file_idl_pbecs_ecs_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { | |||
| switch v := v.(*ListDetailReq); i { | |||
| case 0: | |||
| return &v.state | |||
| case 1: | |||
| return &v.sizeCache | |||
| case 2: | |||
| return &v.unknownFields | |||
| default: | |||
| return nil | |||
| } | |||
| } | |||
| file_idl_pbecs_ecs_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { | |||
| switch v := v.(*ListDetailResp); i { | |||
| case 0: | |||
| return &v.state | |||
| case 1: | |||
| return &v.sizeCache | |||
| case 2: | |||
| return &v.unknownFields | |||
| default: | |||
| return nil | |||
| } | |||
| } | |||
| file_idl_pbecs_ecs_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { | |||
| switch v := v.(*ListReq); i { | |||
| case 0: | |||
| return &v.state | |||
| case 1: | |||
| return &v.sizeCache | |||
| case 2: | |||
| return &v.unknownFields | |||
| default: | |||
| return nil | |||
| } | |||
| } | |||
| file_idl_pbecs_ecs_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { | |||
| switch v := v.(*ListResp); i { | |||
| case 0: | |||
| return &v.state | |||
| case 1: | |||
| return &v.sizeCache | |||
| case 2: | |||
| return &v.unknownFields | |||
| default: | |||
| return nil | |||
| } | |||
| } | |||
| file_idl_pbecs_ecs_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { | |||
| switch v := v.(*ListAllReq); i { | |||
| case 0: | |||
| return &v.state | |||
| case 1: | |||
| return &v.sizeCache | |||
| case 2: | |||
| return &v.unknownFields | |||
| default: | |||
| return nil | |||
| } | |||
| } | |||
| } | |||
| type x struct{} | |||
| out := protoimpl.TypeBuilder{ | |||
| File: protoimpl.DescBuilder{ | |||
| GoPackagePath: reflect.TypeOf(x{}).PkgPath(), | |||
| RawDescriptor: file_idl_pbecs_ecs_proto_rawDesc, | |||
| NumEnums: 0, | |||
| NumMessages: 6, | |||
| NumExtensions: 0, | |||
| NumServices: 1, | |||
| }, | |||
| GoTypes: file_idl_pbecs_ecs_proto_goTypes, | |||
| DependencyIndexes: file_idl_pbecs_ecs_proto_depIdxs, | |||
| MessageInfos: file_idl_pbecs_ecs_proto_msgTypes, | |||
| }.Build() | |||
| File_idl_pbecs_ecs_proto = out.File | |||
| file_idl_pbecs_ecs_proto_rawDesc = nil | |||
| file_idl_pbecs_ecs_proto_goTypes = nil | |||
| file_idl_pbecs_ecs_proto_depIdxs = nil | |||
| } | |||
| @@ -0,0 +1,335 @@ | |||
| // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. | |||
| // source: idl/pbecs/ecs.proto | |||
| /* | |||
| Package pbecs is a reverse proxy. | |||
| It translates gRPC into RESTful JSON APIs. | |||
| */ | |||
| package pbecs | |||
| 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_EcsService_ListEcsDetail_0(ctx context.Context, marshaler runtime.Marshaler, client EcsServiceClient, 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.ListEcsDetail(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) | |||
| return msg, metadata, err | |||
| } | |||
| func local_request_EcsService_ListEcsDetail_0(ctx context.Context, marshaler runtime.Marshaler, server EcsServiceServer, 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.ListEcsDetail(ctx, &protoReq) | |||
| return msg, metadata, err | |||
| } | |||
| func request_EcsService_ListEcs_0(ctx context.Context, marshaler runtime.Marshaler, client EcsServiceClient, 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.ListEcs(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) | |||
| return msg, metadata, err | |||
| } | |||
| func local_request_EcsService_ListEcs_0(ctx context.Context, marshaler runtime.Marshaler, server EcsServiceServer, 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.ListEcs(ctx, &protoReq) | |||
| return msg, metadata, err | |||
| } | |||
| func request_EcsService_ListEcsAll_0(ctx context.Context, marshaler runtime.Marshaler, client EcsServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | |||
| var protoReq ListAllReq | |||
| 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.ListEcsAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) | |||
| return msg, metadata, err | |||
| } | |||
| func local_request_EcsService_ListEcsAll_0(ctx context.Context, marshaler runtime.Marshaler, server EcsServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | |||
| var protoReq ListAllReq | |||
| 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.ListEcsAll(ctx, &protoReq) | |||
| return msg, metadata, err | |||
| } | |||
| // RegisterEcsServiceHandlerServer registers the http handlers for service EcsService to "mux". | |||
| // UnaryRPC :call EcsServiceServer 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 RegisterEcsServiceHandlerFromEndpoint instead. | |||
| func RegisterEcsServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server EcsServiceServer) error { | |||
| mux.Handle("POST", pattern_EcsService_ListEcsDetail_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) | |||
| var err error | |||
| ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/pbecs.EcsService/ListEcsDetail", runtime.WithHTTPPathPattern("/apis/ecs/detail")) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| resp, md, err := local_request_EcsService_ListEcsDetail_0(ctx, 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_EcsService_ListEcsDetail_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | |||
| }) | |||
| mux.Handle("POST", pattern_EcsService_ListEcs_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) | |||
| var err error | |||
| ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/pbecs.EcsService/ListEcs", runtime.WithHTTPPathPattern("/apis/ecs")) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| resp, md, err := local_request_EcsService_ListEcs_0(ctx, 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_EcsService_ListEcs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | |||
| }) | |||
| mux.Handle("POST", pattern_EcsService_ListEcsAll_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) | |||
| var err error | |||
| ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/pbecs.EcsService/ListEcsAll", runtime.WithHTTPPathPattern("/apis/ecs/all")) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| resp, md, err := local_request_EcsService_ListEcsAll_0(ctx, 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_EcsService_ListEcsAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | |||
| }) | |||
| return nil | |||
| } | |||
| // RegisterEcsServiceHandlerFromEndpoint is same as RegisterEcsServiceHandler but | |||
| // automatically dials to "endpoint" and closes the connection when "ctx" gets done. | |||
| func RegisterEcsServiceHandlerFromEndpoint(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 RegisterEcsServiceHandler(ctx, mux, conn) | |||
| } | |||
| // RegisterEcsServiceHandler registers the http handlers for service EcsService to "mux". | |||
| // The handlers forward requests to the grpc endpoint over "conn". | |||
| func RegisterEcsServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { | |||
| return RegisterEcsServiceHandlerClient(ctx, mux, NewEcsServiceClient(conn)) | |||
| } | |||
| // RegisterEcsServiceHandlerClient registers the http handlers for service EcsService | |||
| // to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "EcsServiceClient". | |||
| // Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "EcsServiceClient" | |||
| // doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in | |||
| // "EcsServiceClient" to call the correct interceptors. | |||
| func RegisterEcsServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client EcsServiceClient) error { | |||
| mux.Handle("POST", pattern_EcsService_ListEcsDetail_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) | |||
| var err error | |||
| ctx, err = runtime.AnnotateContext(ctx, mux, req, "/pbecs.EcsService/ListEcsDetail", runtime.WithHTTPPathPattern("/apis/ecs/detail")) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| resp, md, err := request_EcsService_ListEcsDetail_0(ctx, inboundMarshaler, client, req, pathParams) | |||
| ctx = runtime.NewServerMetadataContext(ctx, md) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| forward_EcsService_ListEcsDetail_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | |||
| }) | |||
| mux.Handle("POST", pattern_EcsService_ListEcs_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) | |||
| var err error | |||
| ctx, err = runtime.AnnotateContext(ctx, mux, req, "/pbecs.EcsService/ListEcs", runtime.WithHTTPPathPattern("/apis/ecs")) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| resp, md, err := request_EcsService_ListEcs_0(ctx, inboundMarshaler, client, req, pathParams) | |||
| ctx = runtime.NewServerMetadataContext(ctx, md) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| forward_EcsService_ListEcs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | |||
| }) | |||
| mux.Handle("POST", pattern_EcsService_ListEcsAll_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) | |||
| var err error | |||
| ctx, err = runtime.AnnotateContext(ctx, mux, req, "/pbecs.EcsService/ListEcsAll", runtime.WithHTTPPathPattern("/apis/ecs/all")) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| resp, md, err := request_EcsService_ListEcsAll_0(ctx, inboundMarshaler, client, req, pathParams) | |||
| ctx = runtime.NewServerMetadataContext(ctx, md) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| forward_EcsService_ListEcsAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | |||
| }) | |||
| return nil | |||
| } | |||
| var ( | |||
| pattern_EcsService_ListEcsDetail_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"apis", "ecs", "detail"}, "")) | |||
| pattern_EcsService_ListEcs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"apis", "ecs"}, "")) | |||
| pattern_EcsService_ListEcsAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"apis", "ecs", "all"}, "")) | |||
| ) | |||
| var ( | |||
| forward_EcsService_ListEcsDetail_0 = runtime.ForwardResponseMessage | |||
| forward_EcsService_ListEcs_0 = runtime.ForwardResponseMessage | |||
| forward_EcsService_ListEcsAll_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/pbecs/ecs.proto | |||
| package pbecs | |||
| 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 | |||
| // EcsServiceClient is the client API for EcsService 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 EcsServiceClient interface { | |||
| // 查询ECS明细 - 支持云类型、区域、账户、分页等过滤条件 | |||
| ListEcsDetail(ctx context.Context, in *ListDetailReq, opts ...grpc.CallOption) (*ListDetailResp, error) | |||
| // 查询ECS全量 - 根据云类型 | |||
| ListEcs(ctx context.Context, in *ListReq, opts ...grpc.CallOption) (*ListResp, error) | |||
| // 查询所有云的ECS | |||
| ListEcsAll(ctx context.Context, in *ListAllReq, opts ...grpc.CallOption) (*ListResp, error) | |||
| } | |||
| type ecsServiceClient struct { | |||
| cc grpc.ClientConnInterface | |||
| } | |||
| func NewEcsServiceClient(cc grpc.ClientConnInterface) EcsServiceClient { | |||
| return &ecsServiceClient{cc} | |||
| } | |||
| func (c *ecsServiceClient) ListEcsDetail(ctx context.Context, in *ListDetailReq, opts ...grpc.CallOption) (*ListDetailResp, error) { | |||
| out := new(ListDetailResp) | |||
| err := c.cc.Invoke(ctx, "/pbecs.EcsService/ListEcsDetail", in, out, opts...) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| return out, nil | |||
| } | |||
| func (c *ecsServiceClient) ListEcs(ctx context.Context, in *ListReq, opts ...grpc.CallOption) (*ListResp, error) { | |||
| out := new(ListResp) | |||
| err := c.cc.Invoke(ctx, "/pbecs.EcsService/ListEcs", in, out, opts...) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| return out, nil | |||
| } | |||
| func (c *ecsServiceClient) ListEcsAll(ctx context.Context, in *ListAllReq, opts ...grpc.CallOption) (*ListResp, error) { | |||
| out := new(ListResp) | |||
| err := c.cc.Invoke(ctx, "/pbecs.EcsService/ListEcsAll", in, out, opts...) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| return out, nil | |||
| } | |||
| // EcsServiceServer is the server API for EcsService service. | |||
| // All implementations must embed UnimplementedEcsServiceServer | |||
| // for forward compatibility | |||
| type EcsServiceServer interface { | |||
| // 查询ECS明细 - 支持云类型、区域、账户、分页等过滤条件 | |||
| ListEcsDetail(context.Context, *ListDetailReq) (*ListDetailResp, error) | |||
| // 查询ECS全量 - 根据云类型 | |||
| ListEcs(context.Context, *ListReq) (*ListResp, error) | |||
| // 查询所有云的ECS | |||
| ListEcsAll(context.Context, *ListAllReq) (*ListResp, error) | |||
| mustEmbedUnimplementedEcsServiceServer() | |||
| } | |||
| // UnimplementedEcsServiceServer must be embedded to have forward compatible implementations. | |||
| type UnimplementedEcsServiceServer struct { | |||
| } | |||
| func (UnimplementedEcsServiceServer) ListEcsDetail(context.Context, *ListDetailReq) (*ListDetailResp, error) { | |||
| return nil, status.Errorf(codes.Unimplemented, "method ListEcsDetail not implemented") | |||
| } | |||
| func (UnimplementedEcsServiceServer) ListEcs(context.Context, *ListReq) (*ListResp, error) { | |||
| return nil, status.Errorf(codes.Unimplemented, "method ListEcs not implemented") | |||
| } | |||
| func (UnimplementedEcsServiceServer) ListEcsAll(context.Context, *ListAllReq) (*ListResp, error) { | |||
| return nil, status.Errorf(codes.Unimplemented, "method ListEcsAll not implemented") | |||
| } | |||
| func (UnimplementedEcsServiceServer) mustEmbedUnimplementedEcsServiceServer() {} | |||
| // UnsafeEcsServiceServer may be embedded to opt out of forward compatibility for this service. | |||
| // Use of this interface is not recommended, as added methods to EcsServiceServer will | |||
| // result in compilation errors. | |||
| type UnsafeEcsServiceServer interface { | |||
| mustEmbedUnimplementedEcsServiceServer() | |||
| } | |||
| func RegisterEcsServiceServer(s grpc.ServiceRegistrar, srv EcsServiceServer) { | |||
| s.RegisterService(&EcsService_ServiceDesc, srv) | |||
| } | |||
| func _EcsService_ListEcsDetail_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.(EcsServiceServer).ListEcsDetail(ctx, in) | |||
| } | |||
| info := &grpc.UnaryServerInfo{ | |||
| Server: srv, | |||
| FullMethod: "/pbecs.EcsService/ListEcsDetail", | |||
| } | |||
| handler := func(ctx context.Context, req interface{}) (interface{}, error) { | |||
| return srv.(EcsServiceServer).ListEcsDetail(ctx, req.(*ListDetailReq)) | |||
| } | |||
| return interceptor(ctx, in, info, handler) | |||
| } | |||
| func _EcsService_ListEcs_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.(EcsServiceServer).ListEcs(ctx, in) | |||
| } | |||
| info := &grpc.UnaryServerInfo{ | |||
| Server: srv, | |||
| FullMethod: "/pbecs.EcsService/ListEcs", | |||
| } | |||
| handler := func(ctx context.Context, req interface{}) (interface{}, error) { | |||
| return srv.(EcsServiceServer).ListEcs(ctx, req.(*ListReq)) | |||
| } | |||
| return interceptor(ctx, in, info, handler) | |||
| } | |||
| func _EcsService_ListEcsAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | |||
| in := new(ListAllReq) | |||
| if err := dec(in); err != nil { | |||
| return nil, err | |||
| } | |||
| if interceptor == nil { | |||
| return srv.(EcsServiceServer).ListEcsAll(ctx, in) | |||
| } | |||
| info := &grpc.UnaryServerInfo{ | |||
| Server: srv, | |||
| FullMethod: "/pbecs.EcsService/ListEcsAll", | |||
| } | |||
| handler := func(ctx context.Context, req interface{}) (interface{}, error) { | |||
| return srv.(EcsServiceServer).ListEcsAll(ctx, req.(*ListAllReq)) | |||
| } | |||
| return interceptor(ctx, in, info, handler) | |||
| } | |||
| // EcsService_ServiceDesc is the grpc.ServiceDesc for EcsService service. | |||
| // It's only intended for direct use with grpc.RegisterService, | |||
| // and not to be introspected or modified (even as a copy) | |||
| var EcsService_ServiceDesc = grpc.ServiceDesc{ | |||
| ServiceName: "pbecs.EcsService", | |||
| HandlerType: (*EcsServiceServer)(nil), | |||
| Methods: []grpc.MethodDesc{ | |||
| { | |||
| MethodName: "ListEcsDetail", | |||
| Handler: _EcsService_ListEcsDetail_Handler, | |||
| }, | |||
| { | |||
| MethodName: "ListEcs", | |||
| Handler: _EcsService_ListEcs_Handler, | |||
| }, | |||
| { | |||
| MethodName: "ListEcsAll", | |||
| Handler: _EcsService_ListEcsAll_Handler, | |||
| }, | |||
| }, | |||
| Streams: []grpc.StreamDesc{}, | |||
| Metadata: "idl/pbecs/ecs.proto", | |||
| } | |||
| @@ -0,0 +1,418 @@ | |||
| // 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 CreatePodReq | |||
| 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 CreatePodReq | |||
| 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 ListPodDetailReq | |||
| 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 ListPodDetailReq | |||
| 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 ListPodReq | |||
| 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 ListPodReq | |||
| 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 | |||
| } | |||
| func request_PodService_ListPodAll_0(ctx context.Context, marshaler runtime.Marshaler, client PodServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | |||
| var protoReq ListPodAllReq | |||
| 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.ListPodAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) | |||
| return msg, metadata, err | |||
| } | |||
| func local_request_PodService_ListPodAll_0(ctx context.Context, marshaler runtime.Marshaler, server PodServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | |||
| var protoReq ListPodAllReq | |||
| 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.ListPodAll(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) | |||
| var err error | |||
| ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/pbpod.PodService/CreatePod", runtime.WithHTTPPathPattern("/apis/pod/create")) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| resp, md, err := local_request_PodService_CreatePod_0(ctx, 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) | |||
| var err error | |||
| ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/pbpod.PodService/ListPodDetail", runtime.WithHTTPPathPattern("/apis/pod/detail")) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| resp, md, err := local_request_PodService_ListPodDetail_0(ctx, 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) | |||
| var err error | |||
| ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/pbpod.PodService/ListPod", runtime.WithHTTPPathPattern("/apis/pod")) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| resp, md, err := local_request_PodService_ListPod_0(ctx, 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()...) | |||
| }) | |||
| mux.Handle("POST", pattern_PodService_ListPodAll_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) | |||
| var err error | |||
| ctx, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/pbpod.PodService/ListPodAll", runtime.WithHTTPPathPattern("/apis/pod/all")) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| resp, md, err := local_request_PodService_ListPodAll_0(ctx, 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_ListPodAll_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) | |||
| var err error | |||
| ctx, err = runtime.AnnotateContext(ctx, mux, req, "/pbpod.PodService/CreatePod", runtime.WithHTTPPathPattern("/apis/pod/create")) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| resp, md, err := request_PodService_CreatePod_0(ctx, 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) | |||
| var err error | |||
| ctx, err = runtime.AnnotateContext(ctx, mux, req, "/pbpod.PodService/ListPodDetail", runtime.WithHTTPPathPattern("/apis/pod/detail")) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| resp, md, err := request_PodService_ListPodDetail_0(ctx, 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) | |||
| var err error | |||
| ctx, err = runtime.AnnotateContext(ctx, mux, req, "/pbpod.PodService/ListPod", runtime.WithHTTPPathPattern("/apis/pod")) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| resp, md, err := request_PodService_ListPod_0(ctx, 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()...) | |||
| }) | |||
| mux.Handle("POST", pattern_PodService_ListPodAll_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) | |||
| var err error | |||
| ctx, err = runtime.AnnotateContext(ctx, mux, req, "/pbpod.PodService/ListPodAll", runtime.WithHTTPPathPattern("/apis/pod/all")) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| resp, md, err := request_PodService_ListPodAll_0(ctx, inboundMarshaler, client, req, pathParams) | |||
| ctx = runtime.NewServerMetadataContext(ctx, md) | |||
| if err != nil { | |||
| runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |||
| return | |||
| } | |||
| forward_PodService_ListPodAll_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"}, "")) | |||
| pattern_PodService_ListPodAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"apis", "pod", "all"}, "")) | |||
| ) | |||
| var ( | |||
| forward_PodService_CreatePod_0 = runtime.ForwardResponseMessage | |||
| forward_PodService_ListPodDetail_0 = runtime.ForwardResponseMessage | |||
| forward_PodService_ListPod_0 = runtime.ForwardResponseMessage | |||
| forward_PodService_ListPodAll_0 = runtime.ForwardResponseMessage | |||
| ) | |||
| @@ -0,0 +1,221 @@ | |||
| // 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 *CreatePodReq, opts ...grpc.CallOption) (*CreatePodResp, error) | |||
| // 查询Pod明细 | |||
| ListPodDetail(ctx context.Context, in *ListPodDetailReq, opts ...grpc.CallOption) (*ListPodDetailResp, error) | |||
| // 查询Pod全量 - 根据云类型 | |||
| ListPod(ctx context.Context, in *ListPodReq, opts ...grpc.CallOption) (*ListPodResp, error) | |||
| // 查询所有云的Pod | |||
| ListPodAll(ctx context.Context, in *ListPodAllReq, opts ...grpc.CallOption) (*ListPodResp, error) | |||
| } | |||
| type podServiceClient struct { | |||
| cc grpc.ClientConnInterface | |||
| } | |||
| func NewPodServiceClient(cc grpc.ClientConnInterface) PodServiceClient { | |||
| return &podServiceClient{cc} | |||
| } | |||
| func (c *podServiceClient) CreatePod(ctx context.Context, in *CreatePodReq, opts ...grpc.CallOption) (*CreatePodResp, error) { | |||
| out := new(CreatePodResp) | |||
| 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 *ListPodDetailReq, opts ...grpc.CallOption) (*ListPodDetailResp, error) { | |||
| out := new(ListPodDetailResp) | |||
| 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 *ListPodReq, opts ...grpc.CallOption) (*ListPodResp, error) { | |||
| out := new(ListPodResp) | |||
| err := c.cc.Invoke(ctx, "/pbpod.PodService/ListPod", in, out, opts...) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| return out, nil | |||
| } | |||
| func (c *podServiceClient) ListPodAll(ctx context.Context, in *ListPodAllReq, opts ...grpc.CallOption) (*ListPodResp, error) { | |||
| out := new(ListPodResp) | |||
| err := c.cc.Invoke(ctx, "/pbpod.PodService/ListPodAll", 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, *CreatePodReq) (*CreatePodResp, error) | |||
| // 查询Pod明细 | |||
| ListPodDetail(context.Context, *ListPodDetailReq) (*ListPodDetailResp, error) | |||
| // 查询Pod全量 - 根据云类型 | |||
| ListPod(context.Context, *ListPodReq) (*ListPodResp, error) | |||
| // 查询所有云的Pod | |||
| ListPodAll(context.Context, *ListPodAllReq) (*ListPodResp, error) | |||
| mustEmbedUnimplementedPodServiceServer() | |||
| } | |||
| // UnimplementedPodServiceServer must be embedded to have forward compatible implementations. | |||
| type UnimplementedPodServiceServer struct { | |||
| } | |||
| func (UnimplementedPodServiceServer) CreatePod(context.Context, *CreatePodReq) (*CreatePodResp, error) { | |||
| return nil, status.Errorf(codes.Unimplemented, "method CreatePod not implemented") | |||
| } | |||
| func (UnimplementedPodServiceServer) ListPodDetail(context.Context, *ListPodDetailReq) (*ListPodDetailResp, error) { | |||
| return nil, status.Errorf(codes.Unimplemented, "method ListPodDetail not implemented") | |||
| } | |||
| func (UnimplementedPodServiceServer) ListPod(context.Context, *ListPodReq) (*ListPodResp, error) { | |||
| return nil, status.Errorf(codes.Unimplemented, "method ListPod not implemented") | |||
| } | |||
| func (UnimplementedPodServiceServer) ListPodAll(context.Context, *ListPodAllReq) (*ListPodResp, error) { | |||
| return nil, status.Errorf(codes.Unimplemented, "method ListPodAll 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(CreatePodReq) | |||
| 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.(*CreatePodReq)) | |||
| } | |||
| 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(ListPodDetailReq) | |||
| 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.(*ListPodDetailReq)) | |||
| } | |||
| 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(ListPodReq) | |||
| 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.(*ListPodReq)) | |||
| } | |||
| return interceptor(ctx, in, info, handler) | |||
| } | |||
| func _PodService_ListPodAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { | |||
| in := new(ListPodAllReq) | |||
| if err := dec(in); err != nil { | |||
| return nil, err | |||
| } | |||
| if interceptor == nil { | |||
| return srv.(PodServiceServer).ListPodAll(ctx, in) | |||
| } | |||
| info := &grpc.UnaryServerInfo{ | |||
| Server: srv, | |||
| FullMethod: "/pbpod.PodService/ListPodAll", | |||
| } | |||
| handler := func(ctx context.Context, req interface{}) (interface{}, error) { | |||
| return srv.(PodServiceServer).ListPodAll(ctx, req.(*ListPodAllReq)) | |||
| } | |||
| 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, | |||
| }, | |||
| { | |||
| MethodName: "ListPodAll", | |||
| Handler: _PodService_ListPodAll_Handler, | |||
| }, | |||
| }, | |||
| Streams: []grpc.StreamDesc{}, | |||
| Metadata: "idl/pbpod/pod.proto", | |||
| } | |||
| @@ -0,0 +1,896 @@ | |||
| // Code generated by protoc-gen-go. DO NOT EDIT. | |||
| // versions: | |||
| // protoc-gen-go v1.28.0 | |||
| // protoc (unknown) | |||
| // source: idl/pbtenant/tenant.proto | |||
| package pbtenant | |||
| import ( | |||
| _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" | |||
| _ "google.golang.org/genproto/googleapis/api/annotations" | |||
| protoreflect "google.golang.org/protobuf/reflect/protoreflect" | |||
| protoimpl "google.golang.org/protobuf/runtime/protoimpl" | |||
| reflect "reflect" | |||
| sync "sync" | |||
| ) | |||
| const ( | |||
| // Verify that this generated code is sufficiently up-to-date. | |||
| _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) | |||
| // Verify that runtime/protoimpl is sufficiently up-to-date. | |||
| _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) | |||
| ) | |||
| // 云提供商 | |||
| type CloudProvider int32 | |||
| const ( | |||
| // 0 - 阿里云 | |||
| CloudProvider_ali CloudProvider = 0 | |||
| // 1 - 腾讯云 | |||
| CloudProvider_tencent CloudProvider = 1 | |||
| // 2 - 华为云 | |||
| CloudProvider_huawei CloudProvider = 2 | |||
| // 3 - 亚马逊云 | |||
| CloudProvider_aws CloudProvider = 3 | |||
| ) | |||
| // Enum value maps for CloudProvider. | |||
| var ( | |||
| CloudProvider_name = map[int32]string{ | |||
| 0: "ali", | |||
| 1: "tencent", | |||
| 2: "huawei", | |||
| 3: "aws", | |||
| } | |||
| CloudProvider_value = map[string]int32{ | |||
| "ali": 0, | |||
| "tencent": 1, | |||
| "huawei": 2, | |||
| "aws": 3, | |||
| } | |||
| ) | |||
| func (x CloudProvider) Enum() *CloudProvider { | |||
| p := new(CloudProvider) | |||
| *p = x | |||
| return p | |||
| } | |||
| func (x CloudProvider) String() string { | |||
| return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) | |||
| } | |||
| func (CloudProvider) Descriptor() protoreflect.EnumDescriptor { | |||
| return file_idl_pbtenant_tenant_proto_enumTypes[0].Descriptor() | |||
| } | |||
| func (CloudProvider) Type() protoreflect.EnumType { | |||
| return &file_idl_pbtenant_tenant_proto_enumTypes[0] | |||
| } | |||
| func (x CloudProvider) Number() protoreflect.EnumNumber { | |||
| return protoreflect.EnumNumber(x) | |||
| } | |||
| // Deprecated: Use CloudProvider.Descriptor instead. | |||
| func (CloudProvider) EnumDescriptor() ([]byte, []int) { | |||
| return file_idl_pbtenant_tenant_proto_rawDescGZIP(), []int{0} | |||
| } | |||
| // 云产品 | |||
| type CloudProduct int32 | |||
| const ( | |||
| // 0 - 所有产品 | |||
| CloudProduct_product_all CloudProduct = 0 | |||
| // 1 - ECS类产品:阿里云ECS,腾讯云CVM,华为云ECS,亚马逊EC2 | |||
| CloudProduct_product_ecs CloudProduct = 1 | |||
| // 2 - RDS类产品:阿里云RDS,腾讯云CDB | |||
| CloudProduct_product_rds CloudProduct = 2 | |||
| // 3 - Domain类产品:阿里云Domain | |||
| CloudProduct_product_domain CloudProduct = 3 | |||
| // 4 - OSS类产品:阿里云OSS | |||
| CloudProduct_product_oss CloudProduct = 4 | |||
| ) | |||
| // Enum value maps for CloudProduct. | |||
| var ( | |||
| CloudProduct_name = map[int32]string{ | |||
| 0: "product_all", | |||
| 1: "product_ecs", | |||
| 2: "product_rds", | |||
| 3: "product_domain", | |||
| 4: "product_oss", | |||
| } | |||
| CloudProduct_value = map[string]int32{ | |||
| "product_all": 0, | |||
| "product_ecs": 1, | |||
| "product_rds": 2, | |||
| "product_domain": 3, | |||
| "product_oss": 4, | |||
| } | |||
| ) | |||
| func (x CloudProduct) Enum() *CloudProduct { | |||
| p := new(CloudProduct) | |||
| *p = x | |||
| return p | |||
| } | |||
| func (x CloudProduct) String() string { | |||
| return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) | |||
| } | |||
| func (CloudProduct) Descriptor() protoreflect.EnumDescriptor { | |||
| return file_idl_pbtenant_tenant_proto_enumTypes[1].Descriptor() | |||
| } | |||
| func (CloudProduct) Type() protoreflect.EnumType { | |||
| return &file_idl_pbtenant_tenant_proto_enumTypes[1] | |||
| } | |||
| func (x CloudProduct) Number() protoreflect.EnumNumber { | |||
| return protoreflect.EnumNumber(x) | |||
| } | |||
| // Deprecated: Use CloudProduct.Descriptor instead. | |||
| func (CloudProduct) EnumDescriptor() ([]byte, []int) { | |||
| return file_idl_pbtenant_tenant_proto_rawDescGZIP(), []int{1} | |||
| } | |||
| // 阿里云区域,需要将对应的 _ 转化为 - | |||
| type AliRegionId int32 | |||
| const ( | |||
| AliRegionId_ali_all AliRegionId = 0 | |||
| AliRegionId_ali_cn_qingdao AliRegionId = 1 // 青岛 | |||
| AliRegionId_ali_cn_beijing AliRegionId = 2 // 北京 | |||
| AliRegionId_ali_cn_zhangjiakou AliRegionId = 3 // 张家口 | |||
| AliRegionId_ali_cn_huhehaote AliRegionId = 4 // 呼和浩特 | |||
| AliRegionId_ali_cn_wulanchabu AliRegionId = 5 // 乌兰察布 | |||
| AliRegionId_ali_cn_hangzhou AliRegionId = 6 // 杭州 | |||
| AliRegionId_ali_cn_shanghai AliRegionId = 7 // 上海 | |||
| AliRegionId_ali_cn_shenzhen AliRegionId = 8 // 深圳 | |||
| AliRegionId_ali_cn_heyuan AliRegionId = 9 // 河源 | |||
| AliRegionId_ali_cn_guangzhou AliRegionId = 10 // 广州 | |||
| AliRegionId_ali_cn_chengdu AliRegionId = 11 // 成都 | |||
| AliRegionId_ali_cn_hongkong AliRegionId = 12 // 中国香港-香港 | |||
| AliRegionId_ali_ap_southeast_1 AliRegionId = 13 // 亚太东南1-新加坡 | |||
| AliRegionId_ali_ap_southeast_2 AliRegionId = 14 // 亚太东南2-悉尼 | |||
| AliRegionId_ali_ap_southeast_3 AliRegionId = 15 // 亚太东南3-吉隆坡 | |||
| AliRegionId_ali_ap_southeast_5 AliRegionId = 16 // 亚太东南5-雅加达 | |||
| AliRegionId_ali_ap_south_1 AliRegionId = 17 // 亚太南部1-孟买 | |||
| AliRegionId_ali_ap_northeast_1 AliRegionId = 18 // 亚太东北1-东京 | |||
| AliRegionId_ali_us_west_1 AliRegionId = 19 // 美国西部1-硅谷 | |||
| AliRegionId_ali_us_east_1 AliRegionId = 20 // 美国东部1-弗吉尼亚 | |||
| AliRegionId_ali_eu_central_1 AliRegionId = 21 // 欧洲中部1-法兰克福 | |||
| AliRegionId_ali_eu_west_1 AliRegionId = 22 // 英国(伦敦)-伦敦 | |||
| AliRegionId_ali_me_east_1 AliRegionId = 23 // 中东东部1-迪拜 | |||
| ) | |||
| // Enum value maps for AliRegionId. | |||
| var ( | |||
| AliRegionId_name = map[int32]string{ | |||
| 0: "ali_all", | |||
| 1: "ali_cn_qingdao", | |||
| 2: "ali_cn_beijing", | |||
| 3: "ali_cn_zhangjiakou", | |||
| 4: "ali_cn_huhehaote", | |||
| 5: "ali_cn_wulanchabu", | |||
| 6: "ali_cn_hangzhou", | |||
| 7: "ali_cn_shanghai", | |||
| 8: "ali_cn_shenzhen", | |||
| 9: "ali_cn_heyuan", | |||
| 10: "ali_cn_guangzhou", | |||
| 11: "ali_cn_chengdu", | |||
| 12: "ali_cn_hongkong", | |||
| 13: "ali_ap_southeast_1", | |||
| 14: "ali_ap_southeast_2", | |||
| 15: "ali_ap_southeast_3", | |||
| 16: "ali_ap_southeast_5", | |||
| 17: "ali_ap_south_1", | |||
| 18: "ali_ap_northeast_1", | |||
| 19: "ali_us_west_1", | |||
| 20: "ali_us_east_1", | |||
| 21: "ali_eu_central_1", | |||
| 22: "ali_eu_west_1", | |||
| 23: "ali_me_east_1", | |||
| } | |||
| AliRegionId_value = map[string]int32{ | |||
| "ali_all": 0, | |||
| "ali_cn_qingdao": 1, | |||
| "ali_cn_beijing": 2, | |||
| "ali_cn_zhangjiakou": 3, | |||
| "ali_cn_huhehaote": 4, | |||
| "ali_cn_wulanchabu": 5, | |||
| "ali_cn_hangzhou": 6, | |||
| "ali_cn_shanghai": 7, | |||
| "ali_cn_shenzhen": 8, | |||
| "ali_cn_heyuan": 9, | |||
| "ali_cn_guangzhou": 10, | |||
| "ali_cn_chengdu": 11, | |||
| "ali_cn_hongkong": 12, | |||
| "ali_ap_southeast_1": 13, | |||
| "ali_ap_southeast_2": 14, | |||
| "ali_ap_southeast_3": 15, | |||
| "ali_ap_southeast_5": 16, | |||
| "ali_ap_south_1": 17, | |||
| "ali_ap_northeast_1": 18, | |||
| "ali_us_west_1": 19, | |||
| "ali_us_east_1": 20, | |||
| "ali_eu_central_1": 21, | |||
| "ali_eu_west_1": 22, | |||
| "ali_me_east_1": 23, | |||
| } | |||
| ) | |||
| func (x AliRegionId) Enum() *AliRegionId { | |||
| p := new(AliRegionId) | |||
| *p = x | |||
| return p | |||
| } | |||
| func (x AliRegionId) String() string { | |||
| return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) | |||
| } | |||
| func (AliRegionId) Descriptor() protoreflect.EnumDescriptor { | |||
| return file_idl_pbtenant_tenant_proto_enumTypes[2].Descriptor() | |||
| } | |||
| func (AliRegionId) Type() protoreflect.EnumType { | |||
| return &file_idl_pbtenant_tenant_proto_enumTypes[2] | |||
| } | |||
| func (x AliRegionId) Number() protoreflect.EnumNumber { | |||
| return protoreflect.EnumNumber(x) | |||
| } | |||
| // Deprecated: Use AliRegionId.Descriptor instead. | |||
| func (AliRegionId) EnumDescriptor() ([]byte, []int) { | |||
| return file_idl_pbtenant_tenant_proto_rawDescGZIP(), []int{2} | |||
| } | |||
| // 腾讯云区域,需要将对应的 _ 转化为 - | |||
| type TencentRegionId int32 | |||
| const ( | |||
| TencentRegionId_tc_all TencentRegionId = 0 | |||
| TencentRegionId_tc_ap_bangkok TencentRegionId = 1 // 曼谷 | |||
| TencentRegionId_tc_ap_beijing TencentRegionId = 2 // 北京 | |||
| TencentRegionId_tc_ap_chengdu TencentRegionId = 3 // 成都 | |||
| TencentRegionId_tc_ap_chongqing TencentRegionId = 4 // 重庆 | |||
| TencentRegionId_tc_ap_guangzhou TencentRegionId = 5 // 广州 | |||
| TencentRegionId_tc_ap_guangzhou_open TencentRegionId = 6 // 广州Open | |||
| TencentRegionId_tc_ap_hongkong TencentRegionId = 7 // 中国香港 | |||
| TencentRegionId_tc_ap_mumbai TencentRegionId = 8 // 孟买 | |||
| TencentRegionId_tc_ap_seoul TencentRegionId = 9 // 首尔 | |||
| TencentRegionId_tc_ap_shanghai TencentRegionId = 10 // 上海 | |||
| TencentRegionId_tc_ap_shanghai_fsi TencentRegionId = 11 // 上海金融 | |||
| TencentRegionId_tc_ap_shenzhen_fsi TencentRegionId = 12 // 深圳金融 | |||
| TencentRegionId_tc_ap_singapore TencentRegionId = 13 // 新加坡 | |||
| TencentRegionId_tc_ap_tokyo TencentRegionId = 14 // 东京 | |||
| TencentRegionId_tc_eu_frankfurt TencentRegionId = 15 // 法兰克福 | |||
| TencentRegionId_tc_eu_moscow TencentRegionId = 16 // 莫斯科 | |||
| TencentRegionId_tc_na_ashburn TencentRegionId = 17 // 阿什本 | |||
| TencentRegionId_tc_na_siliconvalley TencentRegionId = 18 // 硅谷 | |||
| TencentRegionId_tc_na_toronto TencentRegionId = 19 // 多伦多 | |||
| ) | |||
| // Enum value maps for TencentRegionId. | |||
| var ( | |||
| TencentRegionId_name = map[int32]string{ | |||
| 0: "tc_all", | |||
| 1: "tc_ap_bangkok", | |||
| 2: "tc_ap_beijing", | |||
| 3: "tc_ap_chengdu", | |||
| 4: "tc_ap_chongqing", | |||
| 5: "tc_ap_guangzhou", | |||
| 6: "tc_ap_guangzhou_open", | |||
| 7: "tc_ap_hongkong", | |||
| 8: "tc_ap_mumbai", | |||
| 9: "tc_ap_seoul", | |||
| 10: "tc_ap_shanghai", | |||
| 11: "tc_ap_shanghai_fsi", | |||
| 12: "tc_ap_shenzhen_fsi", | |||
| 13: "tc_ap_singapore", | |||
| 14: "tc_ap_tokyo", | |||
| 15: "tc_eu_frankfurt", | |||
| 16: "tc_eu_moscow", | |||
| 17: "tc_na_ashburn", | |||
| 18: "tc_na_siliconvalley", | |||
| 19: "tc_na_toronto", | |||
| } | |||
| TencentRegionId_value = map[string]int32{ | |||
| "tc_all": 0, | |||
| "tc_ap_bangkok": 1, | |||
| "tc_ap_beijing": 2, | |||
| "tc_ap_chengdu": 3, | |||
| "tc_ap_chongqing": 4, | |||
| "tc_ap_guangzhou": 5, | |||
| "tc_ap_guangzhou_open": 6, | |||
| "tc_ap_hongkong": 7, | |||
| "tc_ap_mumbai": 8, | |||
| "tc_ap_seoul": 9, | |||
| "tc_ap_shanghai": 10, | |||
| "tc_ap_shanghai_fsi": 11, | |||
| "tc_ap_shenzhen_fsi": 12, | |||
| "tc_ap_singapore": 13, | |||
| "tc_ap_tokyo": 14, | |||
| "tc_eu_frankfurt": 15, | |||
| "tc_eu_moscow": 16, | |||
| "tc_na_ashburn": 17, | |||
| "tc_na_siliconvalley": 18, | |||
| "tc_na_toronto": 19, | |||
| } | |||
| ) | |||
| func (x TencentRegionId) Enum() *TencentRegionId { | |||
| p := new(TencentRegionId) | |||
| *p = x | |||
| return p | |||
| } | |||
| func (x TencentRegionId) String() string { | |||
| return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) | |||
| } | |||
| func (TencentRegionId) Descriptor() protoreflect.EnumDescriptor { | |||
| return file_idl_pbtenant_tenant_proto_enumTypes[3].Descriptor() | |||
| } | |||
| func (TencentRegionId) Type() protoreflect.EnumType { | |||
| return &file_idl_pbtenant_tenant_proto_enumTypes[3] | |||
| } | |||
| func (x TencentRegionId) Number() protoreflect.EnumNumber { | |||
| return protoreflect.EnumNumber(x) | |||
| } | |||
| // Deprecated: Use TencentRegionId.Descriptor instead. | |||
| func (TencentRegionId) EnumDescriptor() ([]byte, []int) { | |||
| return file_idl_pbtenant_tenant_proto_rawDescGZIP(), []int{3} | |||
| } | |||
| // 华为云区域,需要将对应的 _ 转化为 - | |||
| type HuaweiRegionId int32 | |||
| const ( | |||
| HuaweiRegionId_hw_all HuaweiRegionId = 0 | |||
| HuaweiRegionId_hw_cn_north_1 HuaweiRegionId = 1 | |||
| HuaweiRegionId_hw_cn_north_4 HuaweiRegionId = 2 | |||
| HuaweiRegionId_hw_cn_south_1 HuaweiRegionId = 3 | |||
| HuaweiRegionId_hw_cn_east_2 HuaweiRegionId = 4 | |||
| HuaweiRegionId_hw_cn_east_3 HuaweiRegionId = 5 | |||
| HuaweiRegionId_hw_cn_southwest_2 HuaweiRegionId = 6 | |||
| HuaweiRegionId_hw_ap_southeast_1 HuaweiRegionId = 7 | |||
| HuaweiRegionId_hw_ap_southeast_2 HuaweiRegionId = 8 | |||
| HuaweiRegionId_hw_ap_southeast_3 HuaweiRegionId = 9 | |||
| HuaweiRegionId_hw_af_south_1 HuaweiRegionId = 10 | |||
| ) | |||
| // Enum value maps for HuaweiRegionId. | |||
| var ( | |||
| HuaweiRegionId_name = map[int32]string{ | |||
| 0: "hw_all", | |||
| 1: "hw_cn_north_1", | |||
| 2: "hw_cn_north_4", | |||
| 3: "hw_cn_south_1", | |||
| 4: "hw_cn_east_2", | |||
| 5: "hw_cn_east_3", | |||
| 6: "hw_cn_southwest_2", | |||
| 7: "hw_ap_southeast_1", | |||
| 8: "hw_ap_southeast_2", | |||
| 9: "hw_ap_southeast_3", | |||
| 10: "hw_af_south_1", | |||
| } | |||
| HuaweiRegionId_value = map[string]int32{ | |||
| "hw_all": 0, | |||
| "hw_cn_north_1": 1, | |||
| "hw_cn_north_4": 2, | |||
| "hw_cn_south_1": 3, | |||
| "hw_cn_east_2": 4, | |||
| "hw_cn_east_3": 5, | |||
| "hw_cn_southwest_2": 6, | |||
| "hw_ap_southeast_1": 7, | |||
| "hw_ap_southeast_2": 8, | |||
| "hw_ap_southeast_3": 9, | |||
| "hw_af_south_1": 10, | |||
| } | |||
| ) | |||
| func (x HuaweiRegionId) Enum() *HuaweiRegionId { | |||
| p := new(HuaweiRegionId) | |||
| *p = x | |||
| return p | |||
| } | |||
| func (x HuaweiRegionId) String() string { | |||
| return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) | |||
| } | |||
| func (HuaweiRegionId) Descriptor() protoreflect.EnumDescriptor { | |||
| return file_idl_pbtenant_tenant_proto_enumTypes[4].Descriptor() | |||
| } | |||
| func (HuaweiRegionId) Type() protoreflect.EnumType { | |||
| return &file_idl_pbtenant_tenant_proto_enumTypes[4] | |||
| } | |||
| func (x HuaweiRegionId) Number() protoreflect.EnumNumber { | |||
| return protoreflect.EnumNumber(x) | |||
| } | |||
| // Deprecated: Use HuaweiRegionId.Descriptor instead. | |||
| func (HuaweiRegionId) EnumDescriptor() ([]byte, []int) { | |||
| return file_idl_pbtenant_tenant_proto_rawDescGZIP(), []int{4} | |||
| } | |||
| // 亚马逊云区域,需要将对应的 _ 转化为 - | |||
| type AwsRegionId int32 | |||
| const ( | |||
| AwsRegionId_aws_all AwsRegionId = 0 | |||
| AwsRegionId_aws_us_east_2 AwsRegionId = 1 // US East (Ohio) | |||
| AwsRegionId_aws_us_east_1 AwsRegionId = 2 // US East (N. Virginia) | |||
| AwsRegionId_aws_us_west_1 AwsRegionId = 3 // US West (N. California) | |||
| AwsRegionId_aws_us_west_2 AwsRegionId = 4 // US West (Oregon) | |||
| AwsRegionId_aws_af_south_1 AwsRegionId = 5 // Africa (Cape Town) | |||
| AwsRegionId_aws_ap_east_1 AwsRegionId = 6 // Asia Pacific (Hong Kong) | |||
| AwsRegionId_aws_ap_south_1 AwsRegionId = 7 // Asia Pacific (Mumbai) | |||
| AwsRegionId_aws_ap_northeast_3 AwsRegionId = 8 // Asia Pacific (Osaka) | |||
| AwsRegionId_aws_ap_northeast_2 AwsRegionId = 9 // Asia Pacific (Seoul) | |||
| AwsRegionId_aws_ap_northeast_1 AwsRegionId = 10 // Asia Pacific (Singapore) | |||
| AwsRegionId_aws_ap_southeast_2 AwsRegionId = 11 // Asia Pacific (Sydney) | |||
| AwsRegionId_aws_ap_southeast_1 AwsRegionId = 12 // Asia Pacific (Tokyo) | |||
| AwsRegionId_aws_ca_central_1 AwsRegionId = 13 // Canada (Central) | |||
| AwsRegionId_aws_eu_central_1 AwsRegionId = 14 // Europe (Frankfurt) | |||
| AwsRegionId_aws_eu_west_1 AwsRegionId = 15 // Europe (Ireland) | |||
| AwsRegionId_aws_eu_west_2 AwsRegionId = 16 // Europe (London) | |||
| AwsRegionId_aws_eu_south_1 AwsRegionId = 17 // Europe (Milan) | |||
| AwsRegionId_aws_eu_west_3 AwsRegionId = 18 // Europe (Paris) | |||
| AwsRegionId_aws_eu_north_1 AwsRegionId = 19 // Europe (Stockholm) | |||
| AwsRegionId_aws_me_south_1 AwsRegionId = 20 // Middle East (Bahrain) | |||
| AwsRegionId_aws_sa_east_1 AwsRegionId = 21 // South America (São Paulo) | |||
| ) | |||
| // Enum value maps for AwsRegionId. | |||
| var ( | |||
| AwsRegionId_name = map[int32]string{ | |||
| 0: "aws_all", | |||
| 1: "aws_us_east_2", | |||
| 2: "aws_us_east_1", | |||
| 3: "aws_us_west_1", | |||
| 4: "aws_us_west_2", | |||
| 5: "aws_af_south_1", | |||
| 6: "aws_ap_east_1", | |||
| 7: "aws_ap_south_1", | |||
| 8: "aws_ap_northeast_3", | |||
| 9: "aws_ap_northeast_2", | |||
| 10: "aws_ap_northeast_1", | |||
| 11: "aws_ap_southeast_2", | |||
| 12: "aws_ap_southeast_1", | |||
| 13: "aws_ca_central_1", | |||
| 14: "aws_eu_central_1", | |||
| 15: "aws_eu_west_1", | |||
| 16: "aws_eu_west_2", | |||
| 17: "aws_eu_south_1", | |||
| 18: "aws_eu_west_3", | |||
| 19: "aws_eu_north_1", | |||
| 20: "aws_me_south_1", | |||
| 21: "aws_sa_east_1", | |||
| } | |||
| AwsRegionId_value = map[string]int32{ | |||
| "aws_all": 0, | |||
| "aws_us_east_2": 1, | |||
| "aws_us_east_1": 2, | |||
| "aws_us_west_1": 3, | |||
| "aws_us_west_2": 4, | |||
| "aws_af_south_1": 5, | |||
| "aws_ap_east_1": 6, | |||
| "aws_ap_south_1": 7, | |||
| "aws_ap_northeast_3": 8, | |||
| "aws_ap_northeast_2": 9, | |||
| "aws_ap_northeast_1": 10, | |||
| "aws_ap_southeast_2": 11, | |||
| "aws_ap_southeast_1": 12, | |||
| "aws_ca_central_1": 13, | |||
| "aws_eu_central_1": 14, | |||
| "aws_eu_west_1": 15, | |||
| "aws_eu_west_2": 16, | |||
| "aws_eu_south_1": 17, | |||
| "aws_eu_west_3": 18, | |||
| "aws_eu_north_1": 19, | |||
| "aws_me_south_1": 20, | |||
| "aws_sa_east_1": 21, | |||
| } | |||
| ) | |||
| func (x AwsRegionId) Enum() *AwsRegionId { | |||
| p := new(AwsRegionId) | |||
| *p = x | |||
| return p | |||
| } | |||
| func (x AwsRegionId) String() string { | |||
| return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) | |||
| } | |||
| func (AwsRegionId) Descriptor() protoreflect.EnumDescriptor { | |||
| return file_idl_pbtenant_tenant_proto_enumTypes[5].Descriptor() | |||
| } | |||
| func (AwsRegionId) Type() protoreflect.EnumType { | |||
| return &file_idl_pbtenant_tenant_proto_enumTypes[5] | |||
| } | |||
| func (x AwsRegionId) Number() protoreflect.EnumNumber { | |||
| return protoreflect.EnumNumber(x) | |||
| } | |||
| // Deprecated: Use AwsRegionId.Descriptor instead. | |||
| func (AwsRegionId) EnumDescriptor() ([]byte, []int) { | |||
| return file_idl_pbtenant_tenant_proto_rawDescGZIP(), []int{5} | |||
| } | |||
| // 云配置信息 | |||
| type CloudConfigs struct { | |||
| state protoimpl.MessageState | |||
| sizeCache protoimpl.SizeCache | |||
| unknownFields protoimpl.UnknownFields | |||
| // 云配置 | |||
| Configs []*CloudConfig `protobuf:"bytes,1,rep,name=configs,proto3" json:"configs,omitempty"` | |||
| } | |||
| func (x *CloudConfigs) Reset() { | |||
| *x = CloudConfigs{} | |||
| if protoimpl.UnsafeEnabled { | |||
| mi := &file_idl_pbtenant_tenant_proto_msgTypes[0] | |||
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||
| ms.StoreMessageInfo(mi) | |||
| } | |||
| } | |||
| func (x *CloudConfigs) String() string { | |||
| return protoimpl.X.MessageStringOf(x) | |||
| } | |||
| func (*CloudConfigs) ProtoMessage() {} | |||
| func (x *CloudConfigs) ProtoReflect() protoreflect.Message { | |||
| mi := &file_idl_pbtenant_tenant_proto_msgTypes[0] | |||
| if protoimpl.UnsafeEnabled && x != nil { | |||
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||
| if ms.LoadMessageInfo() == nil { | |||
| ms.StoreMessageInfo(mi) | |||
| } | |||
| return ms | |||
| } | |||
| return mi.MessageOf(x) | |||
| } | |||
| // Deprecated: Use CloudConfigs.ProtoReflect.Descriptor instead. | |||
| func (*CloudConfigs) Descriptor() ([]byte, []int) { | |||
| return file_idl_pbtenant_tenant_proto_rawDescGZIP(), []int{0} | |||
| } | |||
| func (x *CloudConfigs) GetConfigs() []*CloudConfig { | |||
| if x != nil { | |||
| return x.Configs | |||
| } | |||
| return nil | |||
| } | |||
| type CloudConfig struct { | |||
| state protoimpl.MessageState | |||
| sizeCache protoimpl.SizeCache | |||
| unknownFields protoimpl.UnknownFields | |||
| // 云服务提供商,具体参考 CloudProvider 的定义 | |||
| Provider CloudProvider `protobuf:"varint,1,opt,name=provider,proto3,enum=pbtenant.CloudProvider" json:"provider,omitempty"` | |||
| // 账户名称,由用户自定义,必须全局唯一,方便多个系统之间的维护 | |||
| Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` | |||
| // 认证方式1:与 access_secret 结合使用,两者均非空时生效 | |||
| AccessId string `protobuf:"bytes,3,opt,name=access_id,json=accessId,proto3" json:"access_id,omitempty"` | |||
| // 认证方式1:与 access_id 结合使用,两者均非空时生效 | |||
| AccessSecret string `protobuf:"bytes,4,opt,name=access_secret,json=accessSecret,proto3" json:"access_secret,omitempty"` | |||
| } | |||
| func (x *CloudConfig) Reset() { | |||
| *x = CloudConfig{} | |||
| if protoimpl.UnsafeEnabled { | |||
| mi := &file_idl_pbtenant_tenant_proto_msgTypes[1] | |||
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||
| ms.StoreMessageInfo(mi) | |||
| } | |||
| } | |||
| func (x *CloudConfig) String() string { | |||
| return protoimpl.X.MessageStringOf(x) | |||
| } | |||
| func (*CloudConfig) ProtoMessage() {} | |||
| func (x *CloudConfig) ProtoReflect() protoreflect.Message { | |||
| mi := &file_idl_pbtenant_tenant_proto_msgTypes[1] | |||
| if protoimpl.UnsafeEnabled && x != nil { | |||
| ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) | |||
| if ms.LoadMessageInfo() == nil { | |||
| ms.StoreMessageInfo(mi) | |||
| } | |||
| return ms | |||
| } | |||
| return mi.MessageOf(x) | |||
| } | |||
| // Deprecated: Use CloudConfig.ProtoReflect.Descriptor instead. | |||
| func (*CloudConfig) Descriptor() ([]byte, []int) { | |||
| return file_idl_pbtenant_tenant_proto_rawDescGZIP(), []int{1} | |||
| } | |||
| func (x *CloudConfig) GetProvider() CloudProvider { | |||
| if x != nil { | |||
| return x.Provider | |||
| } | |||
| return CloudProvider_ali | |||
| } | |||
| func (x *CloudConfig) GetName() string { | |||
| if x != nil { | |||
| return x.Name | |||
| } | |||
| return "" | |||
| } | |||
| func (x *CloudConfig) GetAccessId() string { | |||
| if x != nil { | |||
| return x.AccessId | |||
| } | |||
| return "" | |||
| } | |||
| func (x *CloudConfig) GetAccessSecret() string { | |||
| if x != nil { | |||
| return x.AccessSecret | |||
| } | |||
| return "" | |||
| } | |||
| var File_idl_pbtenant_tenant_proto protoreflect.FileDescriptor | |||
| var file_idl_pbtenant_tenant_proto_rawDesc = []byte{ | |||
| 0x0a, 0x19, 0x69, 0x64, 0x6c, 0x2f, 0x70, 0x62, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2f, 0x74, | |||
| 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x70, 0x62, 0x74, | |||
| 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, | |||
| 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, | |||
| 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, | |||
| 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, | |||
| 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, | |||
| 0x6f, 0x74, 0x6f, 0x22, 0x3f, 0x0a, 0x0c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x43, 0x6f, 0x6e, 0x66, | |||
| 0x69, 0x67, 0x73, 0x12, 0x2f, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, | |||
| 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x2e, | |||
| 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x6f, 0x6e, | |||
| 0x66, 0x69, 0x67, 0x73, 0x22, 0x98, 0x01, 0x0a, 0x0b, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x43, 0x6f, | |||
| 0x6e, 0x66, 0x69, 0x67, 0x12, 0x33, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, | |||
| 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x62, 0x74, 0x65, 0x6e, 0x61, 0x6e, | |||
| 0x74, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, | |||
| 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, | |||
| 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, | |||
| 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, | |||
| 0x52, 0x08, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x63, | |||
| 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, | |||
| 0x09, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x2a, | |||
| 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, | |||
| 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, | |||
| } | |||
| var ( | |||
| file_idl_pbtenant_tenant_proto_rawDescOnce sync.Once | |||
| file_idl_pbtenant_tenant_proto_rawDescData = file_idl_pbtenant_tenant_proto_rawDesc | |||
| ) | |||
| func file_idl_pbtenant_tenant_proto_rawDescGZIP() []byte { | |||
| file_idl_pbtenant_tenant_proto_rawDescOnce.Do(func() { | |||
| file_idl_pbtenant_tenant_proto_rawDescData = protoimpl.X.CompressGZIP(file_idl_pbtenant_tenant_proto_rawDescData) | |||
| }) | |||
| return file_idl_pbtenant_tenant_proto_rawDescData | |||
| } | |||
| var file_idl_pbtenant_tenant_proto_enumTypes = make([]protoimpl.EnumInfo, 6) | |||
| var file_idl_pbtenant_tenant_proto_msgTypes = make([]protoimpl.MessageInfo, 2) | |||
| var file_idl_pbtenant_tenant_proto_goTypes = []interface{}{ | |||
| (CloudProvider)(0), // 0: pbtenant.CloudProvider | |||
| (CloudProduct)(0), // 1: pbtenant.CloudProduct | |||
| (AliRegionId)(0), // 2: pbtenant.AliRegionId | |||
| (TencentRegionId)(0), // 3: pbtenant.TencentRegionId | |||
| (HuaweiRegionId)(0), // 4: pbtenant.HuaweiRegionId | |||
| (AwsRegionId)(0), // 5: pbtenant.AwsRegionId | |||
| (*CloudConfigs)(nil), // 6: pbtenant.CloudConfigs | |||
| (*CloudConfig)(nil), // 7: pbtenant.CloudConfig | |||
| } | |||
| var file_idl_pbtenant_tenant_proto_depIdxs = []int32{ | |||
| 7, // 0: pbtenant.CloudConfigs.configs:type_name -> pbtenant.CloudConfig | |||
| 0, // 1: pbtenant.CloudConfig.provider:type_name -> pbtenant.CloudProvider | |||
| 2, // [2:2] is the sub-list for method output_type | |||
| 2, // [2:2] is the sub-list for method input_type | |||
| 2, // [2:2] is the sub-list for extension type_name | |||
| 2, // [2:2] is the sub-list for extension extendee | |||
| 0, // [0:2] is the sub-list for field type_name | |||
| } | |||
| func init() { file_idl_pbtenant_tenant_proto_init() } | |||
| func file_idl_pbtenant_tenant_proto_init() { | |||
| if File_idl_pbtenant_tenant_proto != nil { | |||
| return | |||
| } | |||
| if !protoimpl.UnsafeEnabled { | |||
| file_idl_pbtenant_tenant_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { | |||
| switch v := v.(*CloudConfigs); i { | |||
| case 0: | |||
| return &v.state | |||
| case 1: | |||
| return &v.sizeCache | |||
| case 2: | |||
| return &v.unknownFields | |||
| default: | |||
| return nil | |||
| } | |||
| } | |||
| file_idl_pbtenant_tenant_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { | |||
| switch v := v.(*CloudConfig); i { | |||
| case 0: | |||
| return &v.state | |||
| case 1: | |||
| return &v.sizeCache | |||
| case 2: | |||
| return &v.unknownFields | |||
| default: | |||
| return nil | |||
| } | |||
| } | |||
| } | |||
| type x struct{} | |||
| out := protoimpl.TypeBuilder{ | |||
| File: protoimpl.DescBuilder{ | |||
| GoPackagePath: reflect.TypeOf(x{}).PkgPath(), | |||
| RawDescriptor: file_idl_pbtenant_tenant_proto_rawDesc, | |||
| NumEnums: 6, | |||
| NumMessages: 2, | |||
| NumExtensions: 0, | |||
| NumServices: 1, | |||
| }, | |||
| GoTypes: file_idl_pbtenant_tenant_proto_goTypes, | |||
| DependencyIndexes: file_idl_pbtenant_tenant_proto_depIdxs, | |||
| EnumInfos: file_idl_pbtenant_tenant_proto_enumTypes, | |||
| MessageInfos: file_idl_pbtenant_tenant_proto_msgTypes, | |||
| }.Build() | |||
| File_idl_pbtenant_tenant_proto = out.File | |||
| file_idl_pbtenant_tenant_proto_rawDesc = nil | |||
| file_idl_pbtenant_tenant_proto_goTypes = nil | |||
| file_idl_pbtenant_tenant_proto_depIdxs = nil | |||
| } | |||
| @@ -0,0 +1,65 @@ | |||
| // Code generated by protoc-gen-go-grpc. DO NOT EDIT. | |||
| // versions: | |||
| // - protoc-gen-go-grpc v1.2.0 | |||
| // - protoc (unknown) | |||
| // source: idl/pbtenant/tenant.proto | |||
| package pbtenant | |||
| import ( | |||
| grpc "google.golang.org/grpc" | |||
| ) | |||
| // 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 | |||
| // TenantServiceClient is the client API for TenantService 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 TenantServiceClient interface { | |||
| } | |||
| type tenantServiceClient struct { | |||
| cc grpc.ClientConnInterface | |||
| } | |||
| func NewTenantServiceClient(cc grpc.ClientConnInterface) TenantServiceClient { | |||
| return &tenantServiceClient{cc} | |||
| } | |||
| // TenantServiceServer is the server API for TenantService service. | |||
| // All implementations must embed UnimplementedTenantServiceServer | |||
| // for forward compatibility | |||
| type TenantServiceServer interface { | |||
| mustEmbedUnimplementedTenantServiceServer() | |||
| } | |||
| // UnimplementedTenantServiceServer must be embedded to have forward compatible implementations. | |||
| type UnimplementedTenantServiceServer struct { | |||
| } | |||
| func (UnimplementedTenantServiceServer) mustEmbedUnimplementedTenantServiceServer() {} | |||
| // UnsafeTenantServiceServer may be embedded to opt out of forward compatibility for this service. | |||
| // Use of this interface is not recommended, as added methods to TenantServiceServer will | |||
| // result in compilation errors. | |||
| type UnsafeTenantServiceServer interface { | |||
| mustEmbedUnimplementedTenantServiceServer() | |||
| } | |||
| func RegisterTenantServiceServer(s grpc.ServiceRegistrar, srv TenantServiceServer) { | |||
| s.RegisterService(&TenantService_ServiceDesc, srv) | |||
| } | |||
| // TenantService_ServiceDesc is the grpc.ServiceDesc for TenantService service. | |||
| // It's only intended for direct use with grpc.RegisterService, | |||
| // and not to be introspected or modified (even as a copy) | |||
| var TenantService_ServiceDesc = grpc.ServiceDesc{ | |||
| ServiceName: "pbtenant.TenantService", | |||
| HandlerType: (*TenantServiceServer)(nil), | |||
| Methods: []grpc.MethodDesc{}, | |||
| Streams: []grpc.StreamDesc{}, | |||
| Metadata: "idl/pbtenant/tenant.proto", | |||
| } | |||
| @@ -0,0 +1,96 @@ | |||
| { | |||
| "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": { | |||
| "@type": { | |||
| "type": "string" | |||
| } | |||
| }, | |||
| "additionalProperties": {} | |||
| }, | |||
| "rpcStatus": { | |||
| "type": "object", | |||
| "properties": { | |||
| "code": { | |||
| "type": "integer", | |||
| "format": "int32" | |||
| }, | |||
| "message": { | |||
| "type": "string" | |||
| }, | |||
| "details": { | |||
| "type": "array", | |||
| "items": { | |||
| "$ref": "#/definitions/protobufAny" | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,331 @@ | |||
| { | |||
| "swagger": "2.0", | |||
| "info": { | |||
| "title": "idl/pbecs/ecs.proto", | |||
| "version": "version not set" | |||
| }, | |||
| "tags": [ | |||
| { | |||
| "name": "EcsService" | |||
| } | |||
| ], | |||
| "consumes": [ | |||
| "application/json" | |||
| ], | |||
| "produces": [ | |||
| "application/json" | |||
| ], | |||
| "paths": { | |||
| "/apis/ecs": { | |||
| "post": { | |||
| "summary": "查询ECS全量 - 根据云类型", | |||
| "operationId": "EcsService_ListEcs", | |||
| "responses": { | |||
| "200": { | |||
| "description": "A successful response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/pbecsListResp" | |||
| } | |||
| }, | |||
| "default": { | |||
| "description": "An unexpected error response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/rpcStatus" | |||
| } | |||
| } | |||
| }, | |||
| "parameters": [ | |||
| { | |||
| "name": "body", | |||
| "in": "body", | |||
| "required": true, | |||
| "schema": { | |||
| "$ref": "#/definitions/pbecsListReq" | |||
| } | |||
| } | |||
| ], | |||
| "tags": [ | |||
| "EcsService" | |||
| ] | |||
| } | |||
| }, | |||
| "/apis/ecs/all": { | |||
| "post": { | |||
| "summary": "查询所有云的ECS", | |||
| "operationId": "EcsService_ListEcsAll", | |||
| "responses": { | |||
| "200": { | |||
| "description": "A successful response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/pbecsListResp" | |||
| } | |||
| }, | |||
| "default": { | |||
| "description": "An unexpected error response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/rpcStatus" | |||
| } | |||
| } | |||
| }, | |||
| "parameters": [ | |||
| { | |||
| "name": "body", | |||
| "in": "body", | |||
| "required": true, | |||
| "schema": { | |||
| "$ref": "#/definitions/pbecsListAllReq" | |||
| } | |||
| } | |||
| ], | |||
| "tags": [ | |||
| "EcsService" | |||
| ] | |||
| } | |||
| }, | |||
| "/apis/ecs/detail": { | |||
| "post": { | |||
| "summary": "查询ECS明细 - 支持云类型、区域、账户、分页等过滤条件", | |||
| "operationId": "EcsService_ListEcsDetail", | |||
| "responses": { | |||
| "200": { | |||
| "description": "A successful response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/pbecsListDetailResp" | |||
| } | |||
| }, | |||
| "default": { | |||
| "description": "An unexpected error response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/rpcStatus" | |||
| } | |||
| } | |||
| }, | |||
| "parameters": [ | |||
| { | |||
| "name": "body", | |||
| "in": "body", | |||
| "required": true, | |||
| "schema": { | |||
| "$ref": "#/definitions/pbecsListDetailReq" | |||
| } | |||
| } | |||
| ], | |||
| "tags": [ | |||
| "EcsService" | |||
| ] | |||
| } | |||
| } | |||
| }, | |||
| "definitions": { | |||
| "pbecsEcsInstance": { | |||
| "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": "array", | |||
| "items": { | |||
| "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": "vcp id" | |||
| }, | |||
| "resourceGroupId": { | |||
| "type": "string", | |||
| "title": "资源组id" | |||
| }, | |||
| "chargeType": { | |||
| "type": "string", | |||
| "title": "收费类型" | |||
| } | |||
| } | |||
| }, | |||
| "pbecsListAllReq": { | |||
| "type": "object" | |||
| }, | |||
| "pbecsListDetailReq": { | |||
| "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" | |||
| } | |||
| } | |||
| }, | |||
| "pbecsListDetailResp": { | |||
| "type": "object", | |||
| "properties": { | |||
| "ecses": { | |||
| "type": "array", | |||
| "items": { | |||
| "$ref": "#/definitions/pbecsEcsInstance" | |||
| }, | |||
| "title": "Ecs 机器集合" | |||
| }, | |||
| "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,出现问题后提供给云厂商,排查问题" | |||
| } | |||
| } | |||
| }, | |||
| "pbecsListReq": { | |||
| "type": "object", | |||
| "properties": { | |||
| "provider": { | |||
| "$ref": "#/definitions/pbtenantCloudProvider", | |||
| "title": "云名称" | |||
| } | |||
| } | |||
| }, | |||
| "pbecsListResp": { | |||
| "type": "object", | |||
| "properties": { | |||
| "ecses": { | |||
| "type": "array", | |||
| "items": { | |||
| "$ref": "#/definitions/pbecsEcsInstance" | |||
| }, | |||
| "title": "Ecs 机器集合" | |||
| } | |||
| } | |||
| }, | |||
| "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": { | |||
| "@type": { | |||
| "type": "string" | |||
| } | |||
| }, | |||
| "additionalProperties": {} | |||
| }, | |||
| "rpcStatus": { | |||
| "type": "object", | |||
| "properties": { | |||
| "code": { | |||
| "type": "integer", | |||
| "format": "int32" | |||
| }, | |||
| "message": { | |||
| "type": "string" | |||
| }, | |||
| "details": { | |||
| "type": "array", | |||
| "items": { | |||
| "$ref": "#/definitions/protobufAny" | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,428 @@ | |||
| { | |||
| "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/pbpodListPodResp" | |||
| } | |||
| }, | |||
| "default": { | |||
| "description": "An unexpected error response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/rpcStatus" | |||
| } | |||
| } | |||
| }, | |||
| "parameters": [ | |||
| { | |||
| "name": "body", | |||
| "in": "body", | |||
| "required": true, | |||
| "schema": { | |||
| "$ref": "#/definitions/pbpodListPodReq" | |||
| } | |||
| } | |||
| ], | |||
| "tags": [ | |||
| "PodService" | |||
| ] | |||
| } | |||
| }, | |||
| "/apis/pod/all": { | |||
| "post": { | |||
| "summary": "查询所有云的Pod", | |||
| "operationId": "PodService_ListPodAll", | |||
| "responses": { | |||
| "200": { | |||
| "description": "A successful response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/pbpodListPodResp" | |||
| } | |||
| }, | |||
| "default": { | |||
| "description": "An unexpected error response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/rpcStatus" | |||
| } | |||
| } | |||
| }, | |||
| "parameters": [ | |||
| { | |||
| "name": "body", | |||
| "in": "body", | |||
| "required": true, | |||
| "schema": { | |||
| "$ref": "#/definitions/pbpodListPodAllReq" | |||
| } | |||
| } | |||
| ], | |||
| "tags": [ | |||
| "PodService" | |||
| ] | |||
| } | |||
| }, | |||
| "/apis/pod/create": { | |||
| "post": { | |||
| "summary": "创建Pod", | |||
| "operationId": "PodService_CreatePod", | |||
| "responses": { | |||
| "200": { | |||
| "description": "A successful response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/pbpodCreatePodResp" | |||
| } | |||
| }, | |||
| "default": { | |||
| "description": "An unexpected error response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/rpcStatus" | |||
| } | |||
| } | |||
| }, | |||
| "parameters": [ | |||
| { | |||
| "name": "body", | |||
| "in": "body", | |||
| "required": true, | |||
| "schema": { | |||
| "$ref": "#/definitions/pbpodCreatePodReq" | |||
| } | |||
| } | |||
| ], | |||
| "tags": [ | |||
| "PodService" | |||
| ] | |||
| } | |||
| }, | |||
| "/apis/pod/detail": { | |||
| "post": { | |||
| "summary": "查询Pod明细", | |||
| "operationId": "PodService_ListPodDetail", | |||
| "responses": { | |||
| "200": { | |||
| "description": "A successful response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/pbpodListPodDetailResp" | |||
| } | |||
| }, | |||
| "default": { | |||
| "description": "An unexpected error response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/rpcStatus" | |||
| } | |||
| } | |||
| }, | |||
| "parameters": [ | |||
| { | |||
| "name": "body", | |||
| "in": "body", | |||
| "required": true, | |||
| "schema": { | |||
| "$ref": "#/definitions/pbpodListPodDetailReq" | |||
| } | |||
| } | |||
| ], | |||
| "tags": [ | |||
| "PodService" | |||
| ] | |||
| } | |||
| } | |||
| }, | |||
| "definitions": { | |||
| "pbpodCreatePodReq": { | |||
| "type": "object", | |||
| "properties": { | |||
| "provider": { | |||
| "$ref": "#/definitions/pbtenantCloudProvider", | |||
| "title": "云类型" | |||
| }, | |||
| "accountName": { | |||
| "type": "string", | |||
| "title": "账号名称" | |||
| }, | |||
| "podId": { | |||
| "type": "string", | |||
| "title": "实例id" | |||
| }, | |||
| "podName": { | |||
| "type": "string", | |||
| "title": "实例名称" | |||
| }, | |||
| "regionId": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "地域,数据中心" | |||
| }, | |||
| "containerImage": { | |||
| "type": "string", | |||
| "title": "镜像" | |||
| }, | |||
| "containerName": { | |||
| "type": "string", | |||
| "title": "容器名称" | |||
| }, | |||
| "cpuPod": { | |||
| "type": "number", | |||
| "format": "float", | |||
| "title": "v cpu数" | |||
| }, | |||
| "memoryPod": { | |||
| "type": "number", | |||
| "format": "float", | |||
| "title": "内存MB" | |||
| }, | |||
| "securityGroupId": { | |||
| "type": "string", | |||
| "title": "安全组ID 对应腾讯 SecurityGroupIds(腾讯必需)" | |||
| }, | |||
| "subnetId": { | |||
| "type": "string", | |||
| "title": "子网ID 对应腾讯 SubnetId(腾讯必需)" | |||
| }, | |||
| "vpcId": { | |||
| "type": "string", | |||
| "title": "VPC ID 对应腾讯 VpcId(腾讯必需)" | |||
| }, | |||
| "namespace": { | |||
| "type": "string", | |||
| "title": "名空间" | |||
| } | |||
| } | |||
| }, | |||
| "pbpodCreatePodResp": { | |||
| "type": "object", | |||
| "properties": { | |||
| "pods": { | |||
| "type": "array", | |||
| "items": { | |||
| "$ref": "#/definitions/pbpodPodInstance" | |||
| }, | |||
| "title": "Pod集合" | |||
| }, | |||
| "finished": { | |||
| "type": "boolean", | |||
| "title": "查询是否完成,如果为否-false,则可以将下面三个分页参数填入到请求中,继续查询" | |||
| }, | |||
| "requestId": { | |||
| "type": "string", | |||
| "title": "请求id,出现问题后提供给云厂商,排查问题" | |||
| } | |||
| } | |||
| }, | |||
| "pbpodListPodAllReq": { | |||
| "type": "object" | |||
| }, | |||
| "pbpodListPodDetailReq": { | |||
| "type": "object", | |||
| "properties": { | |||
| "provider": { | |||
| "$ref": "#/definitions/pbtenantCloudProvider", | |||
| "title": "云名称" | |||
| }, | |||
| "accountName": { | |||
| "type": "string", | |||
| "title": "账户名称,根据config.yaml中的配置,默认为第一个配置的账户" | |||
| }, | |||
| "regionId": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "区域Id,参考 tenant.proto 中的各个云的区域" | |||
| }, | |||
| "podId": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "podID" | |||
| }, | |||
| "pageNumber": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "分页相关参数,页码" | |||
| }, | |||
| "pageSize": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "分页相关参数,每页数量" | |||
| }, | |||
| "nextToken": { | |||
| "type": "string", | |||
| "title": "分页相关参数,下一页的token" | |||
| } | |||
| } | |||
| }, | |||
| "pbpodListPodDetailResp": { | |||
| "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,出现问题后提供给云厂商,排查问题" | |||
| } | |||
| } | |||
| }, | |||
| "pbpodListPodReq": { | |||
| "type": "object", | |||
| "properties": { | |||
| "provider": { | |||
| "$ref": "#/definitions/pbtenantCloudProvider", | |||
| "title": "云名称" | |||
| } | |||
| } | |||
| }, | |||
| "pbpodListPodResp": { | |||
| "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": "账号名称" | |||
| }, | |||
| "podId": { | |||
| "type": "string", | |||
| "title": "实例id" | |||
| }, | |||
| "podName": { | |||
| "type": "string", | |||
| "title": "实例名称" | |||
| }, | |||
| "regionId": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "地域,数据中心" | |||
| }, | |||
| "containerImage": { | |||
| "type": "string", | |||
| "title": "镜像" | |||
| }, | |||
| "containerName": { | |||
| "type": "string", | |||
| "title": "容器名称" | |||
| }, | |||
| "cpuPod": { | |||
| "type": "number", | |||
| "format": "float", | |||
| "title": "vcpu数" | |||
| }, | |||
| "memoryPod": { | |||
| "type": "number", | |||
| "format": "float", | |||
| "title": "内存MB" | |||
| }, | |||
| "securityGroupId": { | |||
| "type": "string", | |||
| "title": "安全组ID 对应腾讯 SecurityGroupIds(腾讯必需)" | |||
| }, | |||
| "subnetId": { | |||
| "type": "string", | |||
| "title": "子网ID 对应腾讯 SubnetId(腾讯必需)" | |||
| }, | |||
| "vpcId": { | |||
| "type": "string", | |||
| "title": "VPC ID 对应腾讯 VpcId(腾讯必需)" | |||
| }, | |||
| "namespace": { | |||
| "type": "string", | |||
| "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": { | |||
| "@type": { | |||
| "type": "string" | |||
| } | |||
| }, | |||
| "additionalProperties": {} | |||
| }, | |||
| "rpcStatus": { | |||
| "type": "object", | |||
| "properties": { | |||
| "code": { | |||
| "type": "integer", | |||
| "format": "int32" | |||
| }, | |||
| "message": { | |||
| "type": "string" | |||
| }, | |||
| "details": { | |||
| "type": "array", | |||
| "items": { | |||
| "$ref": "#/definitions/protobufAny" | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,43 @@ | |||
| { | |||
| "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": { | |||
| "@type": { | |||
| "type": "string" | |||
| } | |||
| }, | |||
| "additionalProperties": {} | |||
| }, | |||
| "rpcStatus": { | |||
| "type": "object", | |||
| "properties": { | |||
| "code": { | |||
| "type": "integer", | |||
| "format": "int32" | |||
| }, | |||
| "message": { | |||
| "type": "string" | |||
| }, | |||
| "details": { | |||
| "type": "array", | |||
| "items": { | |||
| "$ref": "#/definitions/protobufAny" | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,384 @@ | |||
| { | |||
| "consumes": [ | |||
| "application/json" | |||
| ], | |||
| "produces": [ | |||
| "application/json" | |||
| ], | |||
| "swagger": "2.0", | |||
| "info": { | |||
| "title": "idl/demo/demo.proto", | |||
| "version": "version not set" | |||
| }, | |||
| "paths": { | |||
| "/apis/demo": { | |||
| "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" | |||
| } | |||
| } | |||
| ], | |||
| "responses": { | |||
| "200": { | |||
| "description": "A successful response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/demoStringMessage" | |||
| } | |||
| }, | |||
| "default": { | |||
| "description": "An unexpected error response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/rpcStatus" | |||
| } | |||
| } | |||
| } | |||
| } | |||
| }, | |||
| "/apis/ecs": { | |||
| "post": { | |||
| "tags": [ | |||
| "EcsService" | |||
| ], | |||
| "summary": "查询ECS全量 - 根据云类型", | |||
| "operationId": "EcsService_ListEcs", | |||
| "parameters": [ | |||
| { | |||
| "name": "body", | |||
| "in": "body", | |||
| "required": true, | |||
| "schema": { | |||
| "$ref": "#/definitions/pbecsListReq" | |||
| } | |||
| } | |||
| ], | |||
| "responses": { | |||
| "200": { | |||
| "description": "A successful response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/pbecsListResp" | |||
| } | |||
| }, | |||
| "default": { | |||
| "description": "An unexpected error response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/rpcStatus" | |||
| } | |||
| } | |||
| } | |||
| } | |||
| }, | |||
| "/apis/ecs/all": { | |||
| "post": { | |||
| "tags": [ | |||
| "EcsService" | |||
| ], | |||
| "summary": "查询所有云的ECS", | |||
| "operationId": "EcsService_ListEcsAll", | |||
| "parameters": [ | |||
| { | |||
| "name": "body", | |||
| "in": "body", | |||
| "required": true, | |||
| "schema": { | |||
| "$ref": "#/definitions/pbecsListAllReq" | |||
| } | |||
| } | |||
| ], | |||
| "responses": { | |||
| "200": { | |||
| "description": "A successful response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/pbecsListResp" | |||
| } | |||
| }, | |||
| "default": { | |||
| "description": "An unexpected error response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/rpcStatus" | |||
| } | |||
| } | |||
| } | |||
| } | |||
| }, | |||
| "/apis/ecs/detail": { | |||
| "post": { | |||
| "tags": [ | |||
| "EcsService" | |||
| ], | |||
| "summary": "查询ECS明细 - 支持云类型、区域、账户、分页等过滤条件", | |||
| "operationId": "EcsService_ListEcsDetail", | |||
| "parameters": [ | |||
| { | |||
| "name": "body", | |||
| "in": "body", | |||
| "required": true, | |||
| "schema": { | |||
| "$ref": "#/definitions/pbecsListDetailReq" | |||
| } | |||
| } | |||
| ], | |||
| "responses": { | |||
| "200": { | |||
| "description": "A successful response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/pbecsListDetailResp" | |||
| } | |||
| }, | |||
| "default": { | |||
| "description": "An unexpected error response.", | |||
| "schema": { | |||
| "$ref": "#/definitions/rpcStatus" | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||
| }, | |||
| "definitions": { | |||
| "demoStringMessage": { | |||
| "type": "object", | |||
| "properties": { | |||
| "value": { | |||
| "type": "string" | |||
| } | |||
| } | |||
| }, | |||
| "pbecsEcsInstance": { | |||
| "type": "object", | |||
| "properties": { | |||
| "accountName": { | |||
| "type": "string", | |||
| "title": "账号名称" | |||
| }, | |||
| "chargeType": { | |||
| "type": "string", | |||
| "title": "收费类型" | |||
| }, | |||
| "cpu": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "vcpu数" | |||
| }, | |||
| "creationTime": { | |||
| "type": "string", | |||
| "title": "创建时间,ISO8601" | |||
| }, | |||
| "description": { | |||
| "type": "string", | |||
| "title": "实例描述" | |||
| }, | |||
| "expireTime": { | |||
| "type": "string", | |||
| "title": "过期时间" | |||
| }, | |||
| "innerIps": { | |||
| "type": "array", | |||
| "title": "内网ip", | |||
| "items": { | |||
| "type": "string" | |||
| } | |||
| }, | |||
| "instanceId": { | |||
| "type": "string", | |||
| "title": "实例id" | |||
| }, | |||
| "instanceName": { | |||
| "type": "string", | |||
| "title": "实例名称" | |||
| }, | |||
| "instanceType": { | |||
| "type": "string", | |||
| "title": "实例类型" | |||
| }, | |||
| "memory": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "内存MB" | |||
| }, | |||
| "provider": { | |||
| "title": "云类型", | |||
| "$ref": "#/definitions/pbtenantCloudProvider" | |||
| }, | |||
| "publicIps": { | |||
| "type": "array", | |||
| "title": "公网ip", | |||
| "items": { | |||
| "type": "string" | |||
| } | |||
| }, | |||
| "regionName": { | |||
| "type": "string", | |||
| "title": "地域,数据中心" | |||
| }, | |||
| "resourceGroupId": { | |||
| "type": "string", | |||
| "title": "资源组id" | |||
| }, | |||
| "status": { | |||
| "type": "string", | |||
| "title": "状态" | |||
| }, | |||
| "vpcId": { | |||
| "type": "string", | |||
| "title": "vcp id" | |||
| } | |||
| } | |||
| }, | |||
| "pbecsListAllReq": { | |||
| "type": "object" | |||
| }, | |||
| "pbecsListDetailReq": { | |||
| "type": "object", | |||
| "properties": { | |||
| "accountName": { | |||
| "type": "string", | |||
| "title": "账户名称,根据config.yaml中的配置,默认为第一个配置的账户" | |||
| }, | |||
| "nextToken": { | |||
| "type": "string", | |||
| "title": "分页相关参数,下一页的token" | |||
| }, | |||
| "pageNumber": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "分页相关参数,页码" | |||
| }, | |||
| "pageSize": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "分页相关参数,每页数量" | |||
| }, | |||
| "provider": { | |||
| "title": "云名称", | |||
| "$ref": "#/definitions/pbtenantCloudProvider" | |||
| }, | |||
| "regionId": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "区域Id,参考 tenant.proto 中的各个云的区域" | |||
| } | |||
| } | |||
| }, | |||
| "pbecsListDetailResp": { | |||
| "type": "object", | |||
| "properties": { | |||
| "ecses": { | |||
| "type": "array", | |||
| "title": "Ecs 机器集合", | |||
| "items": { | |||
| "$ref": "#/definitions/pbecsEcsInstance" | |||
| } | |||
| }, | |||
| "finished": { | |||
| "type": "boolean", | |||
| "title": "查询是否完成,如果为否-false,则可以将下面三个分页参数填入到请求中,继续查询" | |||
| }, | |||
| "nextToken": { | |||
| "type": "string", | |||
| "title": "分页相关参数,下一页的token" | |||
| }, | |||
| "pageNumber": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "分页相关参数,页码" | |||
| }, | |||
| "pageSize": { | |||
| "type": "integer", | |||
| "format": "int32", | |||
| "title": "分页相关参数,每页数量" | |||
| }, | |||
| "requestId": { | |||
| "type": "string", | |||
| "title": "请求id,出现问题后提供给云厂商,排查问题" | |||
| } | |||
| } | |||
| }, | |||
| "pbecsListReq": { | |||
| "type": "object", | |||
| "properties": { | |||
| "provider": { | |||
| "title": "云名称", | |||
| "$ref": "#/definitions/pbtenantCloudProvider" | |||
| } | |||
| } | |||
| }, | |||
| "pbecsListResp": { | |||
| "type": "object", | |||
| "properties": { | |||
| "ecses": { | |||
| "type": "array", | |||
| "title": "Ecs 机器集合", | |||
| "items": { | |||
| "$ref": "#/definitions/pbecsEcsInstance" | |||
| } | |||
| } | |||
| } | |||
| }, | |||
| "pbtenantCloudProvider": { | |||
| "description": "- ali: 0 - 阿里云\n - tencent: 1 - 腾讯云\n - huawei: 2 - 华为云\n - aws: 3 - 亚马逊云", | |||
| "type": "string", | |||
| "title": "云提供商", | |||
| "default": "ali", | |||
| "enum": [ | |||
| "ali", | |||
| "tencent", | |||
| "huawei", | |||
| "aws" | |||
| ] | |||
| }, | |||
| "protobufAny": { | |||
| "type": "object", | |||
| "properties": { | |||
| "typeUrl": { | |||
| "type": "string" | |||
| }, | |||
| "value": { | |||
| "type": "string", | |||
| "format": "byte" | |||
| } | |||
| } | |||
| }, | |||
| "rpcStatus": { | |||
| "type": "object", | |||
| "properties": { | |||
| "code": { | |||
| "type": "integer", | |||
| "format": "int32" | |||
| }, | |||
| "details": { | |||
| "type": "array", | |||
| "items": { | |||
| "$ref": "#/definitions/protobufAny" | |||
| } | |||
| }, | |||
| "message": { | |||
| "type": "string" | |||
| } | |||
| } | |||
| } | |||
| }, | |||
| "tags": [ | |||
| { | |||
| "name": "DemoService" | |||
| }, | |||
| { | |||
| "name": "EcsService" | |||
| } | |||
| ] | |||
| } | |||
| @@ -0,0 +1,81 @@ | |||
| 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" | |||
| "gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod" | |||
| "net" | |||
| "net/http" | |||
| "github.com/golang/glog" | |||
| "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" | |||
| "github.com/pkg/errors" | |||
| "google.golang.org/grpc" | |||
| ) | |||
| var ( | |||
| // command-line options: | |||
| // gRPC server endpoint | |||
| grpcServerEndpoint = flag.String("grpc-server-endpoint", ":9090", ":8081") | |||
| ) | |||
| func run() error { | |||
| ctx, cancel := context.WithCancel(context.Background()) | |||
| defer cancel() | |||
| // Register gRPC server endpoint | |||
| // Note: Make sure the gRPC server is running properly and accessible | |||
| mux := runtime.NewServeMux() | |||
| opts := []grpc.DialOption{grpc.WithInsecure()} | |||
| if err := demo.RegisterDemoServiceHandlerFromEndpoint(ctx, mux, *grpcServerEndpoint, opts); err != nil { | |||
| 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, "RegisterPodServiceHandlerFromEndpoint error") | |||
| } | |||
| // Start HTTP server (and proxy calls to gRPC server endpoint) | |||
| return http.ListenAndServe(":8081", mux) | |||
| } | |||
| func main() { | |||
| var configFile string | |||
| flag.StringVar(&configFile, "conf", "configs/config.yaml", "config.yaml") | |||
| flag.Parse() | |||
| defer glog.Flush() | |||
| if err := tenanter.LoadCloudConfigsFromFile(configFile); err != nil { | |||
| if !errors.Is(err, tenanter.ErrLoadTenanterFileEmpty) { | |||
| glog.Fatalf("LoadCloudConfigsFromFile error %+v", err) | |||
| } | |||
| glog.Warningf("LoadCloudConfigsFromFile empty file path %s", configFile) | |||
| } | |||
| glog.Infof("load tenant from file finished") | |||
| go func() { | |||
| lis, err := net.Listen("tcp", ":9090") | |||
| if err != nil { | |||
| glog.Fatalf("failed to listen: %v", err) | |||
| } | |||
| 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) | |||
| } | |||
| }() | |||
| if err := run(); err != nil { | |||
| glog.Fatal(err) | |||
| } | |||
| } | |||
| @@ -0,0 +1,13 @@ | |||
| #!/bin/bash | |||
| # 请先保证swagger的安装,可参考 https://goswagger.io/install.html | |||
| swagger mixin lan_trans/openapiv2/idl/*/*.json -o lan_trans/swagger.json | |||
| rm -rf lan_trans/openapiv2 | |||
| # 将机器的sshkey保存到公有云机器121.41.88.120上 | |||
| #scp -P 22 gen/swagger.json root@121.41.88.120:/root/doc | |||
| # 服务端运行的docker | |||
| # docker run --name swagger -d --rm -p 80:80 -v /root/doc:/usr/share/nginx/html/swagger -e SPEC_URL=swagger/swagger.json redocly/redoc | |||
| @@ -0,0 +1,14 @@ | |||
| #!/bin/bash | |||
| set -e | |||
| echo "" > coverage.txt | |||
| for d in $(go list ./internal/...); do | |||
| echo $d | |||
| # 部分sdk内部有并发问题,无法通过检查 | |||
| go test -race -coverprofile=profile.out -covermode=atomic $d | |||
| if [ -f profile.out ]; then | |||
| cat profile.out >> coverage.txt | |||
| rm profile.out | |||
| fi | |||
| done | |||