Add tencent create

Signed-off-by: zhouqunjie <450705171@qq.com>
This commit is contained in:
zhouqunjie 2022-04-05 16:20:05 +08:00
parent 580e731a36
commit c39c043eec
6 changed files with 135 additions and 94 deletions

View File

@ -5,6 +5,7 @@ import (
"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"
"strconv"
"sync"
alieci "github.com/aliyun/alibaba-cloud-sdk-go/services/eci"
@ -27,7 +28,6 @@ func newAliEciClient(region tenanter.Region, tenant tenanter.Tenanter) (Poder, e
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()
@ -90,8 +90,8 @@ func (eci *AliEci) ListPodDetail(ctx context.Context, req *pbpod.ListPodDetailRe
RegionId: 0,
ContainerImage: v.Containers[k].Image,
ContainerName: v.Containers[k].Name,
CpuPod: v.Cpu,
MemoryPod: v.Memory,
CpuPod: strconv.FormatFloat(float64(v.Cpu), 'f', 6, 64),
MemoryPod: strconv.FormatFloat(float64(v.Memory), 'f', 6, 64),
SecurityGroupId: v.SecurityGroupId,
SubnetId: v.InternetIp,
VpcId: v.VpcId,

View File

@ -33,7 +33,7 @@ func NewPodClient(provider pbtenant.CloudProvider, region tenanter.Region, tenan
case pbtenant.CloudProvider_ali:
return newAliEciClient(region, tenant)
case pbtenant.CloudProvider_tencent:
return nil, nil
return newTencentEksClient(region, tenant)
case pbtenant.CloudProvider_huawei:
return nil, nil
//TODO aws

View File

@ -1,67 +1,112 @@
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())
//}
import (
"context"
"github.com/pkg/errors"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common"
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile"
tencenteks "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525"
"gitlink.org.cn/JCCE/PCM/common/tenanter"
"gitlink.org.cn/JCCE/PCM/lan_trans/idl/pbpod"
"strconv"
"sync"
)
var tencentClientMutex sync.Mutex
type TencentEks struct {
cli *tencenteks.Client
region tenanter.Region
tenanter tenanter.Tenanter
}
func newTencentEksClient(region tenanter.Region, tenant tenanter.Tenanter) (Poder, error) {
var (
client *tencenteks.Client
err error
)
switch t := tenant.(type) {
case *tenanter.AccessKeyTenant:
tencentClientMutex.Lock()
credential := common.NewCredential(
t.GetId(),
t.GetSecret(),
)
cpf := profile.NewClientProfile()
client, err = tencenteks.NewClient(credential, region.GetName(), cpf)
tencentClientMutex.Unlock()
default:
}
if err != nil {
return nil, errors.Wrap(err, "init ali ecs client error")
}
return &TencentEks{
cli: client,
region: region,
tenanter: tenant,
}, nil
}
func (eks TencentEks) CreatePod(ctx context.Context, req *pbpod.CreatePodReq) (*pbpod.CreatePodResp, error) {
request := tencenteks.NewCreateEKSContainerInstancesRequest()
eksCiName := req.PodName
containerName := req.ContainerName
containerImage := req.ContainerImage
eksCpu := req.CpuPod
eksMemory := req.MemoryPod
securityGroupId := req.SecurityGroupId
securityGroupIds := make([]*string, 1)
securityGroupIds[0] = &securityGroupId
subNetId := req.SubnetId
vpcId := req.VpcId
request.EksCiName = &eksCiName
container := make([]*tencenteks.Container, 1)
container[0] = new(tencenteks.Container)
container[0].Name = &containerName
container[0].Image = &containerImage
//container[0].Cpu = containerCpuPt
//container[0].Memory = containerMemoryPt
request.Containers = container
eksCpu64, err := strconv.ParseFloat(eksCpu, 64)
eksMemory64, err := strconv.ParseFloat(eksMemory, 64)
request.Cpu = &eksCpu64
request.Memory = &eksMemory64
request.SecurityGroupIds = securityGroupIds
request.SubnetId = &subNetId
request.VpcId = &vpcId
resp, err := eks.cli.CreateEKSContainerInstances(request)
if err != nil {
return nil, errors.Wrap(err, "Tencent CreatePod error")
}
isFinished := false
if resp.Response.RequestId != nil {
isFinished = true
}
return &pbpod.CreatePodResp{
Pods: nil,
Finished: isFinished,
RequestId: *resp.Response.RequestId,
}, nil
}
func (eks TencentEks) ListPodDetail(ctx context.Context, req *pbpod.ListPodDetailReq) (resp *pbpod.ListPodDetailResp, err error) {
//TODO implement me
panic("implement me")
}
//
//func ListEksInstance(cloudStack string, akskPath string, configPath string) {
//

View File

@ -22,9 +22,9 @@ message PodInstance {
//
string container_name = 7;
// vcpu数
float cpu_pod = 8;
string cpu_pod = 8;
// MB
float memory_pod = 9;
string memory_pod = 9;
//ID SecurityGroupIds()
string security_group_id = 10;
@ -54,9 +54,9 @@ message CreatePodReq {
//
string container_name = 7;
// v cpu数
float cpu_pod = 8;
string cpu_pod = 8;
// MB
float memory_pod = 9;
string memory_pod = 9;
//ID SecurityGroupIds()
string security_group_id = 10;
//ID SubnetId()

View File

@ -42,9 +42,9 @@ type PodInstance struct {
// 容器名称
ContainerName string `protobuf:"bytes,7,opt,name=container_name,json=containerName,proto3" json:"container_name,omitempty"`
// vcpu数
CpuPod float32 `protobuf:"fixed32,8,opt,name=cpu_pod,json=cpuPod,proto3" json:"cpu_pod,omitempty"`
CpuPod string `protobuf:"bytes,8,opt,name=cpu_pod,json=cpuPod,proto3" json:"cpu_pod,omitempty"`
// 内存MB
MemoryPod float32 `protobuf:"fixed32,9,opt,name=memory_pod,json=memoryPod,proto3" json:"memory_pod,omitempty"`
MemoryPod string `protobuf:"bytes,9,opt,name=memory_pod,json=memoryPod,proto3" json:"memory_pod,omitempty"`
//安全组ID 对应腾讯 SecurityGroupIds(腾讯必需)
SecurityGroupId string `protobuf:"bytes,10,opt,name=security_group_id,json=securityGroupId,proto3" json:"security_group_id,omitempty"`
//子网ID 对应腾讯 SubnetId(腾讯必需)
@ -136,18 +136,18 @@ func (x *PodInstance) GetContainerName() string {
return ""
}
func (x *PodInstance) GetCpuPod() float32 {
func (x *PodInstance) GetCpuPod() string {
if x != nil {
return x.CpuPod
}
return 0
return ""
}
func (x *PodInstance) GetMemoryPod() float32 {
func (x *PodInstance) GetMemoryPod() string {
if x != nil {
return x.MemoryPod
}
return 0
return ""
}
func (x *PodInstance) GetSecurityGroupId() string {
@ -198,9 +198,9 @@ type CreatePodReq struct {
// 容器名称
ContainerName string `protobuf:"bytes,7,opt,name=container_name,json=containerName,proto3" json:"container_name,omitempty"`
// v cpu数
CpuPod float32 `protobuf:"fixed32,8,opt,name=cpu_pod,json=cpuPod,proto3" json:"cpu_pod,omitempty"`
CpuPod string `protobuf:"bytes,8,opt,name=cpu_pod,json=cpuPod,proto3" json:"cpu_pod,omitempty"`
// 内存MB
MemoryPod float32 `protobuf:"fixed32,9,opt,name=memory_pod,json=memoryPod,proto3" json:"memory_pod,omitempty"`
MemoryPod string `protobuf:"bytes,9,opt,name=memory_pod,json=memoryPod,proto3" json:"memory_pod,omitempty"`
//安全组ID 对应腾讯 SecurityGroupIds(腾讯必需)
SecurityGroupId string `protobuf:"bytes,10,opt,name=security_group_id,json=securityGroupId,proto3" json:"security_group_id,omitempty"`
//子网ID 对应腾讯 SubnetId(腾讯必需)
@ -292,18 +292,18 @@ func (x *CreatePodReq) GetContainerName() string {
return ""
}
func (x *CreatePodReq) GetCpuPod() float32 {
func (x *CreatePodReq) GetCpuPod() string {
if x != nil {
return x.CpuPod
}
return 0
return ""
}
func (x *CreatePodReq) GetMemoryPod() float32 {
func (x *CreatePodReq) GetMemoryPod() string {
if x != nil {
return x.MemoryPod
}
return 0
return ""
}
func (x *CreatePodReq) GetSecurityGroupId() string {
@ -754,9 +754,9 @@ var file_idl_pbpod_pod_proto_rawDesc = []byte{
0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e,
0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63,
0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07,
0x63, 0x70, 0x75, 0x5f, 0x70, 0x6f, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x63,
0x63, 0x70, 0x75, 0x5f, 0x70, 0x6f, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63,
0x70, 0x75, 0x50, 0x6f, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f,
0x70, 0x6f, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x72,
0x70, 0x6f, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x72,
0x79, 0x50, 0x6f, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79,
0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64,
@ -782,9 +782,9 @@ var file_idl_pbpod_pod_proto_rawDesc = []byte{
0x61, 0x67, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72,
0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e,
0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x70,
0x75, 0x5f, 0x70, 0x6f, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x63, 0x70, 0x75,
0x75, 0x5f, 0x70, 0x6f, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x70, 0x75,
0x50, 0x6f, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x70, 0x6f,
0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x50,
0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x50,
0x6f, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x67,
0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73,
0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1b,

View File

@ -183,13 +183,11 @@
"title": "容器名称"
},
"cpuPod": {
"type": "number",
"format": "float",
"type": "string",
"title": "v cpu数"
},
"memoryPod": {
"type": "number",
"format": "float",
"type": "string",
"title": "内存MB"
},
"securityGroupId": {
@ -358,13 +356,11 @@
"title": "容器名称"
},
"cpuPod": {
"type": "number",
"format": "float",
"type": "string",
"title": "vcpu数"
},
"memoryPod": {
"type": "number",
"format": "float",
"type": "string",
"title": "内存MB"
},
"securityGroupId": {