Skip to content

Commit

Permalink
ttt: add consumer group support and fix update bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
aboudreault committed Jan 23, 2023
1 parent b62a3f6 commit 2217acc
Show file tree
Hide file tree
Showing 17 changed files with 342 additions and 104 deletions.
7 changes: 4 additions & 3 deletions .github/workflows/integration-enterprise.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@ jobs:
- 'kong/kong-gateway:2.4.1.3'
- 'kong/kong-gateway:2.5.1.2'
- 'kong/kong-gateway:2.6.0.2'
- 'kong/kong-gateway:2.7.0.0'
- 'kong/kong-gateway:2.8.0.0'
- 'kong/kong-gateway:3.0.0.0'
- 'kong/kong-gateway:2.7'
- 'kong/kong-gateway:2.8'
- 'kong/kong-gateway:3.0'
- 'kong/kong-gateway:3.1'
env:
KONG_ANONYMOUS_REPORTS: "off"
KONG_IMAGE: ${{ matrix.kong_image }}
Expand Down
2 changes: 1 addition & 1 deletion crud/registry.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ func (r *Registry) Delete(ctx context.Context, kind Kind, args ...Arg) (Arg, err
return res, nil
}

// Do calls an aciton based on op with args and returns the result and error.
// Do calls an action based on op with args and returns the result and error.
func (r *Registry) Do(ctx context.Context, kind Kind, op Op, args ...Arg) (Arg, error) {
a, err := r.Get(kind)
if err != nil {
Expand Down
12 changes: 12 additions & 0 deletions file/kong_json_schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,12 @@
},
"name": {
"type": "string"
},
"tags": {
"items": {
"type": "string"
},
"type": "array"
}
},
"additionalProperties": false,
Expand Down Expand Up @@ -517,6 +523,12 @@
"$ref": "#/definitions/ConsumerGroupPlugin"
},
"type": "array"
},
"tags": {
"items": {
"type": "string"
},
"type": "array"
}
},
"additionalProperties": false,
Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ require (
github.com/hashicorp/go-retryablehttp v0.7.2
github.com/hexops/gotextdiff v1.0.3
github.com/imdario/mergo v0.3.13
github.com/kong/go-kong v0.34.1-0.20221222170410-6c81ce561662
github.com/kong/go-kong v0.35.0
github.com/mitchellh/go-homedir v1.1.0
github.com/shirou/gopsutil/v3 v3.22.12
github.com/spf13/cobra v1.6.1
Expand All @@ -27,7 +27,7 @@ require (
github.com/stretchr/testify v1.8.1
github.com/xeipuuv/gojsonschema v1.2.0
golang.org/x/sync v0.1.0
k8s.io/code-generator v0.26.0
k8s.io/code-generator v0.26.1
sigs.k8s.io/yaml v1.3.0
)

Expand Down
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -198,8 +198,8 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kong/go-kong v0.34.1-0.20221222170410-6c81ce561662 h1:IIIAzs6eNp+lA+E0k9oooAyqmAJyAA/9Ebyb0y19mrU=
github.com/kong/go-kong v0.34.1-0.20221222170410-6c81ce561662/go.mod h1:G30uJtuJOjJXFL1vulIrz/27KhPdE2g0GtJZlNINU6U=
github.com/kong/go-kong v0.35.0 h1:N+J1hZrRNL+92YDe/42M5fI5bjZSOHePq1p7OHWiUSU=
github.com/kong/go-kong v0.35.0/go.mod h1:4xT4uMMGcysH3qOqm458JyIbDBUw8MVAQIi+DP8ggtc=
github.com/kong/semver/v4 v4.0.1 h1:DIcNR8W3gfx0KabFBADPalxxsp+q/5COwIFkkhrFQ2Y=
github.com/kong/semver/v4 v4.0.1/go.mod h1:LImQ0oT15pJvSns/hs2laLca2zcYoHu5EsSNY0J6/QA=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
Expand Down Expand Up @@ -640,8 +640,8 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
k8s.io/code-generator v0.26.0 h1:ZDY+7Gic9p/lACgD1G72gQg2CvNGeAYZTPIncv+iALM=
k8s.io/code-generator v0.26.0/go.mod h1:OMoJ5Dqx1wgaQzKgc+ZWaZPfGjdRq/Y3WubFrZmeI3I=
k8s.io/code-generator v0.26.1 h1:dusFDsnNSKlMFYhzIM0jAO1OlnTN5WYwQQ+Ai12IIlo=
k8s.io/code-generator v0.26.1/go.mod h1:OMoJ5Dqx1wgaQzKgc+ZWaZPfGjdRq/Y3WubFrZmeI3I=
k8s.io/gengo v0.0.0-20220902162205-c0856e24416d h1:U9tB195lKdzwqicbJvyJeOXV7Klv+wNAWENRnXEGi08=
k8s.io/gengo v0.0.0-20220902162205-c0856e24416d/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
Expand Down
64 changes: 52 additions & 12 deletions konnect/consumer_group.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,25 @@ func CreateConsumerGroup(ctx context.Context, client *kong.Client, entity interf
return &cg.Item, nil
}

func UpdateConsumerGroup(ctx context.Context, client *kong.Client,
cgID *string, entity interface{},
) (*kong.ConsumerGroup, error) {
if isEmptyString(cgID) {
return nil, fmt.Errorf("update consumer-group: consumer-group ID cannot be nil")
}
endpoint := fmt.Sprintf("/v1/consumer-groups/%v", *cgID)
req, err := client.NewRequest(http.MethodPut, endpoint, nil, entity)
if err != nil {
return nil, err
}
var cg konnectResponseObj
_, err = client.Do(ctx, req, &cg)
if err != nil {
return nil, err
}
return &cg.Item, nil
}

// GetConsumerGroup fetches a ConsumerGroup from Konnect.
func GetConsumerGroup(ctx context.Context,
client *kong.Client, nameOrID *string,
Expand Down Expand Up @@ -96,7 +115,7 @@ func ListAllConsumerGroupMembers(
ctx context.Context, client *kong.Client, cgID *string,
) ([]*kong.Consumer, error) {
if isEmptyString(cgID) {
return nil, fmt.Errorf("list consumer-group members: consumer-group ID cannot be nil")
return nil, fmt.Errorf("list consumer-group-members: consumer-group ID cannot be nil")
}
var members, data []*kong.Consumer
var err error
Expand Down Expand Up @@ -149,7 +168,7 @@ func CreateRateLimitingAdvancedPlugin(
ctx context.Context, client *kong.Client, cgID *string, config kong.Configuration,
) (*kong.ConsumerGroupRLA, error) {
if isEmptyString(cgID) {
return nil, fmt.Errorf("update consumer-group override: consumer-group ID cannot be nil")
return nil, fmt.Errorf("create consumer-group override: consumer-group ID cannot be nil")
}
return upsertRateLimitingAdvancedPlugin(
ctx, client, *cgID, config, http.MethodPost,
Expand Down Expand Up @@ -214,7 +233,7 @@ func GetConsumerGroupRateLimitingAdvancedPlugin(
}, nil
}

// DeleteConsumerGroup deletes a ConsumerGroup plugin in Kong
// DeleteRateLimitingAdvancedPlugin deletes a ConsumerGroup plugin in Kong
func DeleteRateLimitingAdvancedPlugin(
ctx context.Context, client *kong.Client, cgID *string,
) error {
Expand Down Expand Up @@ -259,7 +278,7 @@ func ListConsumerGroupMembers(ctx context.Context,
return consumers, next, nil
}

// Get fetches a ConsumerGroup from Kong.
// GetConsumerGroupObject Get fetches a ConsumerGroup from Kong.
func GetConsumerGroupObject(ctx context.Context,
client *kong.Client, cgID *string,
) (*kong.ConsumerGroupObject, error) {
Expand Down Expand Up @@ -299,15 +318,15 @@ func GetConsumerGroupObject(ctx context.Context,
return group, nil
}

// Delete deletes a ConsumerGroup in Kong
// DeleteConsumerGroup deletes a ConsumerGroup in Kong
func DeleteConsumerGroup(
ctx context.Context, client *kong.Client, nameOrID *string,
ctx context.Context, client *kong.Client, cgID *string,
) error {
if isEmptyString(nameOrID) {
return fmt.Errorf("deleting consumer-group: nameOrID cannot be nil")
if isEmptyString(cgID) {
return fmt.Errorf("delete consumer-group: ID cannot be nil")
}

endpoint := fmt.Sprintf("/v1/consumer-groups/%v", *nameOrID)
endpoint := fmt.Sprintf("/v1/consumer-groups/%v", *cgID)
req, err := client.NewRequest("DELETE", endpoint, nil, nil)
if err != nil {
return err
Expand All @@ -321,7 +340,7 @@ func DeleteConsumerGroupMember(
ctx context.Context, client *kong.Client, cgID, consumer *string,
) error {
if isEmptyString(cgID) {
return fmt.Errorf("deleting consumer-group: nameOrID cannot be nil")
return fmt.Errorf("delete consumer-group-member: ID cannot be nil")
}

endpoint := fmt.Sprintf("/v1/consumers/%s/groups/%s/members", *consumer, *cgID)
Expand All @@ -337,8 +356,10 @@ func DeleteConsumerGroupMember(
func CreateConsumerGroupMember(
ctx context.Context, client *kong.Client, cgID, consumer *string,
) error {
if isEmptyString(cgID) {
return fmt.Errorf("deleting consumer-group: nameOrID cannot be nil")
if isEmptyString(consumer) {
return fmt.Errorf("create consumer-group-member: consumer cannot be nil")
} else if isEmptyString(cgID) {
return fmt.Errorf("create consumer-group-member: consumer group ID cannot be nil")
}

endpoint := fmt.Sprintf("/v1/consumers/%s/groups/%s/members", *consumer, *cgID)
Expand All @@ -351,6 +372,25 @@ func CreateConsumerGroupMember(
return err
}

func UpdateConsumerGroupMember(
ctx context.Context, client *kong.Client, cgID, consumer *string,
) error {
if isEmptyString(consumer) {
return fmt.Errorf("create consumer-group-member: consumer cannot be nil")
} else if isEmptyString(cgID) {
return fmt.Errorf("create consumer-group-member: consumer group ID cannot be nil")
}

endpoint := fmt.Sprintf("/v1/consumers/%s/groups/%s/members", *consumer, *cgID)
req, err := client.NewRequest("PUT", endpoint, nil, nil)
if err != nil {
return err
}

_, err = client.Do(ctx, req, nil)
return err
}

// list fetches a list of an entity in Kong.
// opt can be used to control pagination.
func list(ctx context.Context,
Expand Down
16 changes: 8 additions & 8 deletions state/consumer_group.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ func (k *ConsumerGroupsCollection) Add(consumerGroup ConsumerGroup) error {
if !utils.Empty(consumerGroup.Name) {
searchBy = append(searchBy, *consumerGroup.Name)
}
_, err := getconsumerGroup(txn, searchBy...)
_, err := getConsumerGroup(txn, searchBy...)
if err == nil {
return fmt.Errorf("inserting consumerGroup %v: %w", consumerGroup.Console(), ErrAlreadyExists)
} else if err != ErrNotFound {
Expand All @@ -60,7 +60,7 @@ func (k *ConsumerGroupsCollection) Add(consumerGroup ConsumerGroup) error {
return nil
}

func getconsumerGroup(txn *memdb.Txn, IDs ...string) (*ConsumerGroup, error) {
func getConsumerGroup(txn *memdb.Txn, IDs ...string) (*ConsumerGroup, error) {
for _, id := range IDs {
res, err := multiIndexLookupUsingTxn(txn, consumerGroupTableName,
[]string{"name", "id"}, id)
Expand Down Expand Up @@ -88,7 +88,7 @@ func (k *ConsumerGroupsCollection) Get(nameOrID string) (*ConsumerGroup, error)

txn := k.db.Txn(false)
defer txn.Abort()
consumerGroup, err := getconsumerGroup(txn, nameOrID)
consumerGroup, err := getConsumerGroup(txn, nameOrID)
if err != nil {
if err == ErrNotFound {
return nil, ErrNotFound
Expand All @@ -98,7 +98,7 @@ func (k *ConsumerGroupsCollection) Get(nameOrID string) (*ConsumerGroup, error)
return consumerGroup, nil
}

// Update udpates an existing consumerGroup.
// Update updates an existing consumerGroup.
func (k *ConsumerGroupsCollection) Update(consumerGroup ConsumerGroup) error {
if utils.Empty(consumerGroup.ID) {
return errIDRequired
Expand All @@ -107,7 +107,7 @@ func (k *ConsumerGroupsCollection) Update(consumerGroup ConsumerGroup) error {
txn := k.db.Txn(true)
defer txn.Abort()

err := deleteconsumerGroup(txn, *consumerGroup.ID)
err := deleteConsumerGroup(txn, *consumerGroup.ID)
if err != nil {
return err
}
Expand All @@ -121,8 +121,8 @@ func (k *ConsumerGroupsCollection) Update(consumerGroup ConsumerGroup) error {
return nil
}

func deleteconsumerGroup(txn *memdb.Txn, nameOrID string) error {
consumerGroup, err := getconsumerGroup(txn, nameOrID)
func deleteConsumerGroup(txn *memdb.Txn, nameOrID string) error {
consumerGroup, err := getConsumerGroup(txn, nameOrID)
if err != nil {
return err
}
Expand All @@ -143,7 +143,7 @@ func (k *ConsumerGroupsCollection) Delete(nameOrID string) error {
txn := k.db.Txn(true)
defer txn.Abort()

err := deleteconsumerGroup(txn, nameOrID)
err := deleteConsumerGroup(txn, nameOrID)
if err != nil {
return err
}
Expand Down
3 changes: 2 additions & 1 deletion state/consumer_group_consumers.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ func getAllByConsumerGroupID(txn *memdb.Txn, consumerGroupID string) ([]*Consume
}

func getConsumerGroupConsumer(txn *memdb.Txn, consumerGroupID string, IDs ...string) (*ConsumerGroupConsumer, error) {
// TODO this could be a simple First command, to check for the username index
consumers, err := getAllByConsumerGroupID(txn, consumerGroupID)
if err != nil {
return nil, err
Expand Down Expand Up @@ -163,7 +164,7 @@ func (k *ConsumerGroupConsumersCollection) Update(consumer ConsumerGroupConsumer
defer txn.Abort()

res, err := multiIndexLookupUsingTxn(txn, consumerGroupConsumerTableName,
[]string{"id", "username"}, *consumer.Consumer)
[]string{"id", "username"}, *consumer.Consumer.ID, *consumer.ConsumerGroup.ID)
if err != nil {
return err
}
Expand Down
6 changes: 3 additions & 3 deletions state/consumer_group_plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ func (k *ConsumerGroupPluginsCollection) Update(plugin ConsumerGroupPlugin) erro
defer txn.Abort()

res, err := multiIndexLookupUsingTxn(txn, consumerGroupPluginTableName,
[]string{"id", "name"}, nameOrID)
[]string{"id", "name"}, nameOrID, *plugin.ConsumerGroup.ID)
if err != nil {
return err
}
Expand All @@ -186,7 +186,7 @@ func (k *ConsumerGroupPluginsCollection) Update(plugin ConsumerGroupPlugin) erro
return nil
}

func deleteconsumerGroupPlugin(txn *memdb.Txn, nameOrID, consumerGroupID string) error {
func deleteConsumerGroupPlugin(txn *memdb.Txn, nameOrID, consumerGroupID string) error {
consumer, err := getConsumerGroupPlugin(txn, consumerGroupID, nameOrID)
if err != nil {
return err
Expand All @@ -211,7 +211,7 @@ func (k *ConsumerGroupPluginsCollection) Delete(nameOrID, consumerGroupID string
txn := k.db.Txn(true)
defer txn.Abort()

err := deleteconsumerGroupPlugin(txn, nameOrID, consumerGroupID)
err := deleteConsumerGroupPlugin(txn, nameOrID, consumerGroupID)
if err != nil {
return err
}
Expand Down
Loading

0 comments on commit 2217acc

Please sign in to comment.