Skip to content

Commit

Permalink
[feat] api list/update tag for loadbalancer
Browse files Browse the repository at this point in the history
  • Loading branch information
cuongpiger committed May 7, 2024
1 parent 2137319 commit 45b3e13
Show file tree
Hide file tree
Showing 12 changed files with 222 additions and 14 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ module github.com/vngcloud/vngcloud-go-sdk
go 1.22

require (
github.com/cuongpiger/joat v1.0.4
github.com/cuongpiger/joat v1.0.8
github.com/imroc/req/v3 v3.43.3
)

Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1
github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY=
github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU=
github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA=
github.com/cuongpiger/joat v1.0.4 h1:8ZdrjAHZgCE5m47ILx2SKBp0ubf5yBey7UaidyOPbJM=
github.com/cuongpiger/joat v1.0.4/go.mod h1:x1yiXQOWGFMzR+UH7YLFAH1u5LiMGjorgJZRjSGkoZY=
github.com/cuongpiger/joat v1.0.8 h1:hNHQ5pMFIelQdEnkqy4txGzrdTxnsZJ/JFKzu92UKms=
github.com/cuongpiger/joat v1.0.8/go.mod h1:x1yiXQOWGFMzR+UH7YLFAH1u5LiMGjorgJZRjSGkoZY=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
Expand Down
5 changes: 5 additions & 0 deletions vngcloud/objects/loadbalancer.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,8 @@ type LoadBalancer struct {
SubnetID string
Internal bool
}

type LoadBalancerTag struct {
Key string
Value string
}
13 changes: 13 additions & 0 deletions vngcloud/services/loadbalancer/v2/loadbalancer/irequests.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package loadbalancer

import lsobj "github.com/vngcloud/vngcloud-go-sdk/vngcloud/objects"

type ICreateOptsBuilder interface {
ToRequestBody() interface{}
GetProjectID() string
Expand Down Expand Up @@ -37,3 +39,14 @@ type ICreateTagOptsBuilder interface {
GetLoadBalancerID() string
ToRequestBody() interface{}
}

type IListTagsOptsBuilder interface {
GetProjectID() string
GetLoadBalancerID() string
}

type IUpdateTagOptsBuilder interface {
GetProjectID() string
GetLoadBalancerID() string
ToRequestBody(ptags []*lsobj.LoadBalancerTag) interface{}
}
4 changes: 4 additions & 0 deletions vngcloud/services/loadbalancer/v2/loadbalancer/iresponses.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,7 @@ type ICommonResponse interface {
type IUpdateResponse interface {
ToLoadBalancerObject() *objects.LoadBalancer
}

type IListTagsResponse interface {
ToLoadBalancerTags() []*objects.LoadBalancerTag
}
52 changes: 50 additions & 2 deletions vngcloud/services/loadbalancer/v2/loadbalancer/loadbalancer.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package loadbalancer

import (
"encoding/json"
ljson "encoding/json"

lsclient "github.com/vngcloud/vngcloud-go-sdk/client"
lserr "github.com/vngcloud/vngcloud-go-sdk/error"
Expand Down Expand Up @@ -65,7 +65,7 @@ func ListBySubnetID(pSc *lsclient.ServiceClient, pOpts IListBySubnetIDOptsBuilde
}

if resp.StatusCode == 200 {
err = json.Unmarshal(resp.Bytes(), &response)
err = ljson.Unmarshal(resp.Bytes(), &response)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -134,3 +134,51 @@ func CreateTag(psc *lsclient.ServiceClient, popts ICreateTagOptsBuilder) *lserr.

return nil
}

func ListTags(psc *lsclient.ServiceClient, popts IListTagsOptsBuilder) ([]*lsobj.LoadBalancerTag, *lserr.SdkError) {
response := NewListTagsResponse()
errResp := lserr.NewErrorResponse()
resp, err := psc.Get(listTagsURL(psc, popts), &lsclient.RequestOpts{
JSONError: errResp,
OkCodes: []int{200},
})

if err != nil {
sdkErr := lserrHandler.ErrorHandler(err)
return nil, sdkErr
}

if err := ljson.Unmarshal(resp.Bytes(), &response); err != nil {
return nil, lserrHandler.ErrorHandler(err)
}

var lstTags []*lsobj.LoadBalancerTag
for _, item := range response {
if item != nil {
lstTags = append(lstTags, item.ToLoadBalancerTagObject())
}
}

return lstTags, nil
}

func UpdateTag(psc *lsclient.ServiceClient, popts IUpdateTagOptsBuilder) *lserr.SdkError {
tags, sdkErr := ListTags(psc, NewListTagsOpts(popts.GetProjectID(), popts.GetLoadBalancerID()))
if sdkErr != nil {
return sdkErr
}

body := popts.ToRequestBody(tags)
errResp := lserr.NewErrorResponse()
_, err := psc.Put(updateTagURL(psc, popts), &lsclient.RequestOpts{
JSONBody: body,
JSONError: errResp,
OkCodes: []int{200},
})

if err != nil {
return lserrHandler.ErrorHandler(err)
}

return nil
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ func NewSC2() *client.ServiceClient {
var (
identityURL = "https://iamapis.vngcloud.vn/accounts-api/v2"
vLbURL = "https://hcm-3.api.vngcloud.vn/vserver/vserver-gateway/v2"
clientID = "b6f689d8e8822bcb"
clientSecret = "e4db56813ca"
clientID = "b6f688d8e8822bcb"
clientSecret = "e4db5f1f56813ca"
)

provider, _ := vngcloud.NewClient(identityURL)
Expand Down Expand Up @@ -233,3 +233,35 @@ func TestList(t *testing.T) {
fmt.Printf("%+v\n", lb.Name)
}
}

func TestListTags(t *testing.T) {
vlb := NewSC2()
projectID = "pro-462803f3-6858-466f-bf05-df2b33faa360"
loadbalancerID = "lb-76654bb0-72fe-4694-9f43-cc1be0317a5e"

opt := NewListTagsOpts(projectID, loadbalancerID)

resp, err := ListTags(vlb, opt)
if err != nil {
fmt.Printf("Error: %s\n", err)
}

for _, tag := range resp {
fmt.Printf("%+v\n", tag)
}
}

func TestUpdateTag(t *testing.T) {
vlb := NewSC2()
projectID = "pro-462803f3-6858-466f-bf05-df2b33faa360"
loadbalancerID = "lb-3a886fec-c853-4ef9-974b-308d7587880a"

opt := NewUpdateTagOpts(projectID, loadbalancerID, map[string]string{
"vks-owned-cluster": "asdadadadasdas",
})

err := UpdateTag(vlb, opt)
if err != nil {
fmt.Printf("Error: %s\n", err)
}
}
50 changes: 45 additions & 5 deletions vngcloud/services/loadbalancer/v2/loadbalancer/requests.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,15 @@ package loadbalancer

import (
lfmt "fmt"
lstr "strings"

ljparser "github.com/cuongpiger/joat/parser"

lsobj "github.com/vngcloud/vngcloud-go-sdk/vngcloud/objects"
lsCm "github.com/vngcloud/vngcloud-go-sdk/vngcloud/services/common"
lbCm "github.com/vngcloud/vngcloud-go-sdk/vngcloud/services/loadbalancer/v2"
lsListener "github.com/vngcloud/vngcloud-go-sdk/vngcloud/services/loadbalancer/v2/listener"
lsPool "github.com/vngcloud/vngcloud-go-sdk/vngcloud/services/loadbalancer/v2/pool"
lstr "strings"
)

const (
Expand Down Expand Up @@ -128,14 +131,14 @@ func (s *UpdateOpts) ToRequestBody() interface{} {

type (
CreateTagOpts struct {
ResourceID string `json:"resourceId"`
ResourceType string `json:"resourceType"`
TagRequestList []CreateTagOptsTag `json:"tagRequestList"`
ResourceID string `json:"resourceId"`
ResourceType string `json:"resourceType"`
TagRequestList []TagOptsTag `json:"tagRequestList"`
lsCm.CommonOpts
lbCm.LoadBalancerV2Common
}

CreateTagOptsTag struct {
TagOptsTag struct {
IsEdited bool `json:"isEdited"`
Key string `json:"key"`
Value string `json:"value"`
Expand All @@ -145,3 +148,40 @@ type (
func (s *CreateTagOpts) ToRequestBody() interface{} {
return s
}

type ListTagsOpts struct {
lsCm.CommonOpts
lbCm.LoadBalancerV2Common
}

type (
UpdateTagOpts struct {
ResourceID string `json:"resourceId"`
ResourceType string `json:"resourceType"`
TagRequestList []TagOptsTag `json:"tagRequestList"`
lsCm.CommonOpts
lbCm.LoadBalancerV2Common
}
)

func (s *UpdateTagOpts) ToRequestBody(ptags []*lsobj.LoadBalancerTag) interface{} {
st := map[string]TagOptsTag{}
for _, tag := range ptags {
st[tag.Key] = TagOptsTag{
IsEdited: false,
Key: tag.Key,
Value: tag.Value,
}
}

for _, tag := range s.TagRequestList {
st[tag.Key] = tag
}

s.TagRequestList = make([]TagOptsTag, 0)
for _, tag := range st {
s.TagRequestList = append(s.TagRequestList, tag)
}

return s
}
32 changes: 30 additions & 2 deletions vngcloud/services/loadbalancer/v2/loadbalancer/requests_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@ func NewCreateTagOpts(pprojectID, plbId string, ptags map[string]string) ICreate
opts.ResourceID = plbId

if ptags != nil {
opts.TagRequestList = make([]CreateTagOptsTag, 0)
opts.TagRequestList = make([]TagOptsTag, 0)
for key, value := range ptags {
opts.TagRequestList = append(opts.TagRequestList, CreateTagOptsTag{
opts.TagRequestList = append(opts.TagRequestList, TagOptsTag{
Key: key,
Value: value,
})
Expand All @@ -56,3 +56,31 @@ func NewCreateTagOpts(pprojectID, plbId string, ptags map[string]string) ICreate

return opts
}

func NewListTagsOpts(pprojectID, plbId string) IListTagsOptsBuilder {
opts := new(ListTagsOpts)
opts.ProjectID = pprojectID
opts.LoadBalancerID = plbId
return opts
}

func NewUpdateTagOpts(pprojectID, plbId string, ptags map[string]string) IUpdateTagOptsBuilder {
opts := new(UpdateTagOpts)
opts.ProjectID = pprojectID
opts.LoadBalancerID = plbId
opts.ResourceType = "LOAD-BALANCER"
opts.ResourceID = plbId

if ptags != nil {
opts.TagRequestList = make([]TagOptsTag, 0)
for key, value := range ptags {
opts.TagRequestList = append(opts.TagRequestList, TagOptsTag{
Key: key,
Value: value,
IsEdited: true,
})
}
}

return opts
}
17 changes: 17 additions & 0 deletions vngcloud/services/loadbalancer/v2/loadbalancer/responses.go
Original file line number Diff line number Diff line change
Expand Up @@ -187,3 +187,20 @@ func (s *UpdateResponse) ToLoadBalancerObject() *objects.LoadBalancer {
UUID: s.UUID,
}
}

type ListTagsResponse struct {
Key string `json:"key"`
Value string `json:"value"`
CreatedAt string `json:"createdAt"`
}

func (s *ListTagsResponse) ToLoadBalancerTagObject() *objects.LoadBalancerTag {
if s == nil {
return nil
}

return &objects.LoadBalancerTag{
Key: s.Key,
Value: s.Value,
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,8 @@ func NewListResponse() IListResponse {
func NewUpdateResponse() IUpdateResponse {
return &UpdateResponse{}
}

func NewListTagsResponse() []*ListTagsResponse {
var resp []*ListTagsResponse
return resp
}
16 changes: 16 additions & 0 deletions vngcloud/services/loadbalancer/v2/loadbalancer/urls.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,19 @@ func createTagUrl(psc *client.ServiceClient, popts ICreateTagOptsBuilder) string
"resource",
popts.GetLoadBalancerID())
}

func listTagsURL(psc *client.ServiceClient, popts IListTagsOptsBuilder) string {
return psc.ServiceURL(
popts.GetProjectID(),
"tag",
"resource",
popts.GetLoadBalancerID())
}

func updateTagURL(psc *client.ServiceClient, popts IUpdateTagOptsBuilder) string {
return psc.ServiceURL(
popts.GetProjectID(),
"tag",
"resource",
popts.GetLoadBalancerID())
}

0 comments on commit 45b3e13

Please sign in to comment.