Merge pull request '合并覆盖' (#2) from pod_dev_v0.1 into master

This commit is contained in:
devad 2022-04-05 12:32:17 +08:00
commit 580e731a36
96 changed files with 8485 additions and 2337 deletions

33
.gitignore vendored Normal file
View File

@ -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/

64
.golangci.yml Normal file
View File

@ -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

View File

@ -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

View File

@ -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
}

View File

@ -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)
}
}

View File

@ -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
}

View File

@ -1,14 +0,0 @@
#阿里
[alibaba]
access_key =
secret_key =
#华为
[huawei]
access_key =
secret_key =
#腾讯
[tencent]
access_key =
secret_key =

View File

@ -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
}

View File

@ -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]

View File

@ -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)
}

View File

@ -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

View File

@ -1,4 +0,0 @@
// +k8s:deepcopy-gen=package
// +groupName=networking.cci.io
// +groupGoName=NetworkingCCI
package v1beta1

View File

@ -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
}

View File

@ -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"
)

View File

@ -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
}

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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
}

View File

@ -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

View File

@ -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}
}

View File

@ -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

View File

@ -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))
}

View File

@ -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

View File

@ -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))
}

View File

@ -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

View File

@ -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

View File

@ -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
}

View File

@ -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
}

View File

@ -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{}

View File

@ -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
}

View File

@ -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
}

View File

@ -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{})
}

View File

@ -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
})
}

View File

@ -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
}

View File

@ -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{})
}

View File

@ -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

View File

@ -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())
}

View File

@ -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
}

View File

@ -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
//}

View File

@ -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{})
//}

View File

@ -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
}

View File

@ -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())
//}

View File

@ -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
}

View File

@ -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)
})
}
}

View File

@ -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())
}

View File

@ -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
}

View File

@ -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
//}

View File

@ -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
}

View File

@ -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)
}
})
}
}

View File

@ -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
// }

View File

@ -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
}

View File

@ -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())
}

View File

@ -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
}

24
buf.gen.yaml Normal file
View File

@ -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

13
buf.yaml Normal file
View File

@ -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

21
common/server/server.go Normal file
View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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())
}

130
common/tenanter/region.go Normal file
View File

@ -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 := &region{
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
}

View File

@ -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)
}
})
}
}

101
common/tenanter/tenanter.go Normal file
View File

@ -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
}

View File

@ -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))
}
})
}
}

14
configs/config.yaml Normal file
View File

@ -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"

1
examples/main.go Normal file
View File

@ -0,0 +1 @@
package examples

5
gen.sh Executable file
View File

@ -0,0 +1,5 @@
#/bin/bash
rm -rf lan_trans/gen/*
buf mod update
buf generate

40
go.mod
View File

@ -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
)

35
idl/demo/demo.proto Normal file
View File

@ -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 : {}
};
}
}

119
idl/pbecs/ecs.proto Normal file
View File

@ -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 : "*"
};
}
}

164
idl/pbpod/pod.proto Normal file
View File

@ -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 : "*"
};
}
}

155
idl/pbtenant/tenant.proto Normal file
View File

@ -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,CVMECSEC2
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"
}
};
}

View File

@ -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
}

View File

@ -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
)

View File

@ -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",
}

View File

@ -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
}

View File

@ -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
)

View File

@ -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",
}

File diff suppressed because it is too large Load Diff

View File

@ -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
)

View File

@ -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",
}

View File

@ -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
}

View File

@ -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",
}

View File

@ -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"
}
}
}
}
}
}

View File

@ -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"
}
}
}
}
}
}

View File

@ -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"
}
}
}
}
}
}

View File

@ -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"
}
}
}
}
}
}

384
lan_trans/swagger.json Normal file
View File

@ -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"
}
]
}

81
main.go Normal file
View File

@ -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)
}
}

13
swagger.sh Executable file
View File

@ -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

14
unittest.sh Executable file
View File

@ -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