Skip to content

Commit a0569ea

Browse files
authored
feat: skip export of Konnect managed plugins (#564)
Plugins created by Konnect are tagged with 'konnect-managed-plugin'. decK should not allow users to interact with any plugins with this tag.
1 parent b0184e8 commit a0569ea

File tree

4 files changed

+121
-3
lines changed

4 files changed

+121
-3
lines changed

dump/dump.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -168,11 +168,11 @@ func getProxyConfiguration(ctx context.Context, group *errgroup.Group,
168168
if err != nil {
169169
return fmt.Errorf("plugins: %w", err)
170170
}
171+
plugins = excludeKonnectManagedPlugins(plugins)
171172
if config.SkipConsumers {
172-
state.Plugins = excludeConsumersPlugins(plugins)
173-
} else {
174-
state.Plugins = plugins
173+
plugins = excludeConsumersPlugins(plugins)
175174
}
175+
state.Plugins = plugins
176176
return nil
177177
})
178178

dump/dump_konnect.go

+22
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77

88
"github.com/kong/deck/konnect"
99
"github.com/kong/deck/utils"
10+
"github.com/kong/go-kong/kong"
1011
"golang.org/x/sync/errgroup"
1112
"golang.org/x/sync/semaphore"
1213
)
@@ -168,3 +169,24 @@ func kongServiceIDs(cpID string,
168169
}
169170
return res
170171
}
172+
173+
// excludeKonnectManagedPlugins filters out konnect-managed plugins
174+
func excludeKonnectManagedPlugins(plugins []*kong.Plugin) []*kong.Plugin {
175+
filtered := []*kong.Plugin{}
176+
for _, p := range plugins {
177+
if isManagedByKonnect(p) {
178+
continue
179+
}
180+
filtered = append(filtered, p)
181+
}
182+
return filtered
183+
}
184+
185+
func isManagedByKonnect(plugin *kong.Plugin) bool {
186+
for _, t := range plugin.Tags {
187+
if *t == konnect.KonnectManagedPluginTag {
188+
return true
189+
}
190+
}
191+
return false
192+
}

dump/dump_konnect_test.go

+91
Original file line numberDiff line numberDiff line change
@@ -280,3 +280,94 @@ func Test_filterNonKongPackages(t *testing.T) {
280280
})
281281
}
282282
}
283+
284+
func Test_excludeKonnectManagedPlugins(t *testing.T) {
285+
tests := []struct {
286+
name string
287+
plugins []*kong.Plugin
288+
want []*kong.Plugin
289+
}{
290+
{
291+
name: "exclude konnect tags",
292+
plugins: []*kong.Plugin{
293+
{
294+
Name: kong.String("rate-limiting"),
295+
Tags: []*string{kong.String("tag1")},
296+
},
297+
{
298+
Name: kong.String("basic-auth"),
299+
Tags: []*string{},
300+
},
301+
{
302+
Name: kong.String("key-auth"),
303+
Tags: []*string{
304+
kong.String("konnect-app-registration"),
305+
kong.String("konnect-managed-plugin"),
306+
},
307+
},
308+
{
309+
Name: kong.String("acl"),
310+
Tags: []*string{
311+
kong.String("konnect-app-registration"),
312+
kong.String("konnect-managed-plugin"),
313+
},
314+
},
315+
{
316+
Name: kong.String("prometheus"),
317+
Tags: []*string{
318+
kong.String("konnect-managed-plugin"),
319+
},
320+
},
321+
},
322+
want: []*kong.Plugin{
323+
{
324+
Name: kong.String("rate-limiting"),
325+
Tags: []*string{kong.String("tag1")},
326+
},
327+
{
328+
Name: kong.String("basic-auth"),
329+
Tags: []*string{},
330+
},
331+
},
332+
},
333+
{
334+
name: "empty input",
335+
plugins: []*kong.Plugin{},
336+
want: []*kong.Plugin{},
337+
},
338+
{
339+
name: "all konnect managed",
340+
plugins: []*kong.Plugin{
341+
{
342+
Name: kong.String("key-auth"),
343+
Tags: []*string{
344+
kong.String("konnect-app-registration"),
345+
kong.String("konnect-managed-plugin"),
346+
},
347+
},
348+
{
349+
Name: kong.String("acl"),
350+
Tags: []*string{
351+
kong.String("konnect-app-registration"),
352+
kong.String("konnect-managed-plugin"),
353+
},
354+
},
355+
{
356+
Name: kong.String("prometheus"),
357+
Tags: []*string{
358+
kong.String("konnect-managed-plugin"),
359+
},
360+
},
361+
},
362+
want: []*kong.Plugin{},
363+
},
364+
}
365+
for _, tt := range tests {
366+
t.Run(tt.name, func(t *testing.T) {
367+
got := excludeKonnectManagedPlugins(tt.plugins)
368+
if !reflect.DeepEqual(got, tt.want) {
369+
t.Errorf("excludeKonnectManagedPlugins() = %v, want %v", got, tt.want)
370+
}
371+
})
372+
}
373+
}

konnect/utils.go

+5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
package konnect
22

3+
const (
4+
// KonnectManagedPluginTag is used by Konnect to tag internally-managed plugins
5+
KonnectManagedPluginTag = "konnect-managed-plugin"
6+
)
7+
38
func emptyString(p *string) bool {
49
return p == nil || *p == ""
510
}

0 commit comments

Comments
 (0)