Skip to content

Commit

Permalink
Update cce v2 services
Browse files Browse the repository at this point in the history
  • Loading branch information
gola committed Aug 21, 2020
1 parent a8e5471 commit fc314cd
Show file tree
Hide file tree
Showing 9 changed files with 754 additions and 38 deletions.
2 changes: 1 addition & 1 deletion bce/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import (

// Constants and default values for the package bce
const (
SDK_VERSION = "0.9.19"
SDK_VERSION = "0.9.20"
URI_PREFIX = "/" // now support uri without prefix "v1" so just set root path
DEFAULT_DOMAIN = "baidubce.com"
DEFAULT_PROTOCOL = "http"
Expand Down
145 changes: 144 additions & 1 deletion doc/CCEv2.md
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,21 @@ s, _ := json.MarshalIndent(resp, "", "\t")
fmt.Println("Response:"+ string(s))
```

## 获取节点组的节点列表
使用以下代码可以获取节点组的节点列表
```go
args := &ListInstanceByInstanceGroupIDArgs{
ClusterID: "your-cluster-id",
InstanceGroupID: "your-instance-group-id",
PageSize: 0,
{ageNo: 0,
}
resp, err := ccev2Client.ListInstancesByInstanceGroupID(args)

s, _ := json.MarshalIndent(resp, "", "\t")
fmt.Println("Response:" + string(s))
```
## 删除节点(集群缩容)
使用以下代码可以删除集群内的一个节点
```go
Expand Down Expand Up @@ -593,6 +608,127 @@ s, _ := json.MarshalIndent(resp, "", "\t")
fmt.Println("Response:"+ string(s))
```
## 创建节点组
使用以下代码可以创建节点组
```go
args := &CreateInstanceGroupArgs{
ClusterID: CCE_CLUSTER_ID,
Request: &CreateInstanceGroupRequest{
types.InstanceGroupSpec{
InstanceGroupName: "your-instance-group-name",
CleanPolicy: types.DeleteCleanPolicy,
Replicas: 3,
InstanceTemplate: types.InstanceTemplate{
InstanceSpec: types.InstanceSpec{
ClusterRole: types.ClusterRoleNode,
Existed: false,
MachineType: types.MachineTypeBCC,
InstanceType: bccapi.InstanceTypeN3,
VPCConfig: types.VPCConfig{
VPCID: "your-vpc-id",
VPCSubnetID: "your-vpc-subnet-id",
SecurityGroupID: "your-secuirity-group-id",
AvailableZone: types.AvailableZoneA,
},
DeployCustomConfig: types.DeployCustomConfig{
PreUserScript: "your-script",
PostUserScript:"your-script",
},
InstanceResource: types.InstanceResource{
CPU: 1,
MEM: 4,
RootDiskSize: 40,
LocalDiskSize: 0,
},
ImageID: IMAGE_TEST_ID,
InstanceOS: types.InstanceOS{
ImageType: bccapi.ImageTypeSystem,
},
NeedEIP: false,
AdminPassword: "your-admin-password",
SSHKeyID: "your-ssh-key-id",
InstanceChargingType: bccapi.PaymentTimingPostPaid,
RuntimeType: types.RuntimeTypeDocker,
},
},
},
},
}
resp, err := ccev2Client.CreateInstanceGroup(args)

s, _ = json.MarshalIndent(resp, "", "\t")
fmt.Println("Response:" + string(s))
```
## 获取节点组列表
使用以下代码可以获取节点组列表
```go
args := &ListInstanceGroupsArgs{
ClusterID: "your-cluster-id",
ListOption: &InstanceGroupListOption{
PageNo: 0,
PageSize: 0,
},
}
resp, err := ccev2Client.ListInstanceGroups(args)

s, _ := json.MarshalIndent(resp, "", "\t")
fmt.Println("Response:" + string(s))
```
## 查询节点组详情
使用以下代码可以查询节点组详情
```go
args := &GetInstanceGroupArgs{
ClusterID: "your-cluster-id",
InstanceGroupID: "your-instance-group-id",
}
resp, err := ccev2Client.GetInstanceGroup(args)

s, _ := json.MarshalIndent(resp, "", "\t")
fmt.Println("Response:" + string(s))
```
## 修改节点组内节点副本数
使用以下代码可以修改节点组内节点副本数
```go
args := &UpdateInstanceGroupReplicasArgs{
ClusterID: "your-cluster-id",
InstanceGroupID: "your-instance-group-id",
Request: &UpdateInstanceGroupReplicasRequest{
Replicas: 1,
DeleteInstance: true,
DeleteOption: &types.DeleteOption{
MoveOut: false,
DeleteCDSSnapshot: true,
DeleteResource: true,
},
},
}
resp, err := ccev2Client.UpdateInstanceGroupReplicas(args)

s, _ := json.MarshalIndent(resp, "", "\t")
fmt.Println("Response:" + string(s))
```
## 删除节点组
使用以下代码可以删除节点组
```go
args := &DeleteInstanceGroupArgs{
ClusterID: "your-cluster-id",
InstanceGroupID: "your-instance-group-id",
DeleteInstances: true,
}
resp, err := ccev2Client.DeleteInstanceGroup(args)

s, _ := json.MarshalIndent(resp, "", "\t")
fmt.Println("Response:" + string(s))
```
# 错误处理
GO语言以error类型标识错误,CCE支持两种错误见下表:
Expand Down Expand Up @@ -687,4 +823,11 @@ myLogger.Info("this is my own logger from the CCE go sdk")
- 支持创建集群、获取集群列表、获取集群详情、删除集群。
- 支持创建节点(集群扩容)、获取集群的节点列表、获取节点详情、删除节点(集群缩容)
- 支持检查集群网络网段、检查容器网络网段、推荐集群网络网段、推荐容器网络网段
- 支持查询集群配额、集群节点配额
- 支持查询集群配额、集群节点配额
## v1.1.0 [2020-08-20]
增加节点组相关接口:
- 支持节点组创建、获取节点组列表、查询节点组详情、修改节点组内节点副本数、删除节点组
- 获取节点组的节点列表
136 changes: 132 additions & 4 deletions services/cce/v2/ccev2.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package v2

import (
"encoding/json"
"fmt"
"strconv"

Expand All @@ -10,12 +11,27 @@ import (

// 创建集群
func (c *Client) CreateCluster(args *CreateClusterArgs) (*CreateClusterResponse, error) {
if args == nil {
if args == nil || args.CreateClusterRequest == nil {
return nil, fmt.Errorf("args is nil")
}

//给其中可能存在的user script用base64编码
err := encodeUserScriptInInstanceSet(args.CreateClusterRequest.MasterSpecs)
if err != nil{
return nil ,err
}

err = encodeUserScriptInInstanceSet(args.CreateClusterRequest.NodeSpecs)
if err != nil{
return nil ,err
}


s, _ := json.MarshalIndent(args, "", "\t")
fmt.Println("Args:" + string(s))

result := &CreateClusterResponse{}
err := bce.NewRequestBuilder(c).
err = bce.NewRequestBuilder(c).
WithMethod(http.POST).
WithURL(getClusterURI()).
WithBody(args.CreateClusterRequest).
Expand Down Expand Up @@ -90,8 +106,17 @@ func (c *Client) CreateInstances(args *CreateInstancesArgs) (*CreateInstancesRes
return nil, fmt.Errorf("args is nil")
}

//给其中可能存在的user script用base64编码
err := encodeUserScriptInInstanceSet(args.Instances)
if err != nil{
return nil ,err
}

s, _ := json.MarshalIndent(args, "", "\t")
fmt.Println("Args:" + string(s))

result := &CreateInstancesResponse{}
err := bce.NewRequestBuilder(c).
err = bce.NewRequestBuilder(c).
WithMethod(http.POST).
WithURL(getClusterInstanceListURI(args.ClusterID)).
WithBody(args.Instances).
Expand Down Expand Up @@ -250,4 +275,107 @@ func (c *Client) GetClusterNodeQuota(clusterID string) (*GetQuotaResponse, error
Do()

return result, err
}
}

//创建节点组
func (c *Client) CreateInstanceGroup(args *CreateInstanceGroupArgs) (*CreateInstanceGroupResponse, error) {
if args == nil {
return nil, fmt.Errorf("args is nil")
}

encodeUserScript(&args.Request.InstanceTemplate.InstanceSpec)

result := &CreateInstanceGroupResponse{}
err := bce.NewRequestBuilder(c).
WithMethod(http.POST).
WithURL(getInstanceGroupURI(args.ClusterID)).
WithBody(args.Request).
WithResult(result).
Do()

return result, err
}

//获取节点组列表
func (c *Client) ListInstanceGroups(args *ListInstanceGroupsArgs) (*ListInstanceGroupResponse, error) {
if args == nil {
return nil, fmt.Errorf("args is nil")
}

result := &ListInstanceGroupResponse{}
err := bce.NewRequestBuilder(c).
WithMethod(http.GET).
WithQueryParamFilter("pageNo", strconv.Itoa(args.ListOption.PageNo)).
WithQueryParamFilter("pageSize", strconv.Itoa(args.ListOption.PageSize)).
WithURL(getInstanceGroupListURI(args.ClusterID)).
WithResult(result).
Do()

return result, err
}

func (c *Client) ListInstancesByInstanceGroupID(args *ListInstanceByInstanceGroupIDArgs) (*ListInstancesByInstanceGroupIDResponse, error) {
if args == nil {
return nil, fmt.Errorf("args is nil")
}

result := &ListInstancesByInstanceGroupIDResponse{}
err := bce.NewRequestBuilder(c).
WithMethod(http.GET).
WithQueryParamFilter("pageNo", strconv.Itoa(args.PageNo)).
WithQueryParamFilter("pageSize", strconv.Itoa(args.PageSize)).
WithURL(getClusterInstanceListWithInstanceGroupIDURI(args.ClusterID, args.InstanceGroupID)).
WithResult(result).
Do()

return result, err
}

//获取节点组详情
func (c *Client) GetInstanceGroup(args *GetInstanceGroupArgs) (*GetInstanceGroupResponse, error) {
if args == nil {
return nil, fmt.Errorf("args is nil")
}

result := &GetInstanceGroupResponse{}
err := bce.NewRequestBuilder(c).
WithMethod(http.GET).
WithURL(getInstanceGroupWithIDURI(args.ClusterID, args.InstanceGroupID)).
WithResult(result).
Do()

return result, err
}

//更新节点组副本数
func (c *Client) UpdateInstanceGroupReplicas(args *UpdateInstanceGroupReplicasArgs) (*UpdateInstanceGroupReplicasResponse, error) {
if args == nil {
return nil, fmt.Errorf("args is nil")
}

result := &UpdateInstanceGroupReplicasResponse{}
err := bce.NewRequestBuilder(c).
WithMethod(http.PUT).
WithURL(getInstanceGroupReplicasURI(args.ClusterID, args.InstanceGroupID)).
WithBody(args.Request).
WithResult(result).
Do()

return result, err
}

//删除节点组
func (c *Client) DeleteInstanceGroup(args *DeleteInstanceGroupArgs) (*DeleteInstanceGroupResponse, error) {
if args == nil {
return nil, fmt.Errorf("args is nil")
}

result := &DeleteInstanceGroupResponse{}
err := bce.NewRequestBuilder(c).
WithMethod(http.DELETE).
WithURL(getInstanceGroupWithIDURI(args.ClusterID, args.InstanceGroupID)).
WithResult(result).
Do()

return result, err
}
34 changes: 27 additions & 7 deletions services/cce/v2/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,14 @@ modification history
package v2

import (
"encoding/base64"

"github.com/baidubce/bce-sdk-go/bce"
"github.com/baidubce/bce-sdk-go/services/cce/v2/types"
)

const (
URI_PREFIX = bce.URI_PREFIX + "/api/cce/service/v2"
URI_PREFIX = bce.URI_PREFIX + "api/cce/service/v2"

DEFAULT_ENDPOINT = "cce." + bce.DEFAULT_REGION + ".baidubce.com"

Expand All @@ -38,10 +41,6 @@ const (

REQUEST_NODE_URL = "/node"

REQUEST_KUBECONFIG_URL = "/kubeconfig"

REQUEST_KUBECONFIG_ADMIN_URL = "/admin"

REQUEST_NET_URL = "/net"

REQUEST_NET_CHECK_CONTAINER_NETWORK_CIDR_URL = "/check_container_network_cidr"
Expand Down Expand Up @@ -139,6 +138,27 @@ func getQuotaNodeURI(clusterID string) string {
return URI_PREFIX + REQUEST_QUOTA_URL + REQUEST_CLUSTER_URL + "/" + clusterID + REQUEST_NODE_URL
}

func getAdminKubeConfigURI(clusterID, kubeconfigType string) string {
return URI_PREFIX + REQUEST_KUBECONFIG_URL + "/" + clusterID + REQUEST_KUBECONFIG_ADMIN_URL + "/" + kubeconfigType

func encodeUserScriptInInstanceSet(instancesSets []*InstanceSet) error {
if instancesSets == nil {
return nil
}
for _, instanceSet := range instancesSets {
encodeUserScript(&instanceSet.InstanceSpec)
}
return nil
}

func encodeUserScript(instanceSpec *types.InstanceSpec) {
if instanceSpec == nil{
return
}
if instanceSpec.DeployCustomConfig.PreUserScript != "" {
base64Str := base64.StdEncoding.EncodeToString([]byte(instanceSpec.DeployCustomConfig.PreUserScript))
instanceSpec.DeployCustomConfig.PreUserScript = base64Str
}
if instanceSpec.DeployCustomConfig.PostUserScript != "" {
base64Str := base64.StdEncoding.EncodeToString([]byte(instanceSpec.DeployCustomConfig.PostUserScript))
instanceSpec.DeployCustomConfig.PostUserScript = base64Str
}
}
Loading

0 comments on commit fc314cd

Please sign in to comment.