Skip to content

Commit 3364815

Browse files
committed
Check if the running Gateway is licensed before fetching Consumer Groups
1 parent 4d4a0fd commit 3364815

File tree

1 file changed

+43
-9
lines changed

1 file changed

+43
-9
lines changed

cmd/common.go

Lines changed: 43 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -209,27 +209,36 @@ func syncMain(ctx context.Context, filenames []string, dry bool, parallelism,
209209
// load Kong version after workspace
210210
var kongVersion string
211211
var parsedKongVersion semver.Version
212+
isLicensedKongEnterprise := false
212213
if mode == modeKonnect {
213214
kongVersion = fetchKonnectKongVersion()
215+
isLicensedKongEnterprise = true
214216
} else {
215217
kongVersion, err = fetchKongVersion(ctx, wsConfig)
216218
if err != nil {
217219
return fmt.Errorf("reading Kong version: %w", err)
218220
}
219-
}
220-
parsedKongVersion, err = reconcilerUtils.ParseKongVersion(kongVersion)
221-
if err != nil {
222-
return fmt.Errorf("parsing Kong version: %w", err)
221+
222+
// Are we running enterprise?
223+
v, err := kong.ParseSemanticVersion(kongVersion)
224+
if err != nil {
225+
return fmt.Errorf("parsing Kong version: %w", err)
226+
}
227+
228+
// Check if there's an active license for Consumer Group checks
229+
if v.IsKongGatewayEnterprise() {
230+
isLicensedKongEnterprise, err = isLicensed(ctx, wsConfig)
231+
if err != nil {
232+
return fmt.Errorf("checking if Kong is licensed: %w", err)
233+
}
234+
}
223235
}
224236

225-
// Are we running enterprise?
226-
v, err := kong.ParseSemanticVersion(kongVersion)
237+
parsedKongVersion, err = reconcilerUtils.ParseKongVersion(kongVersion)
227238
if err != nil {
228239
return fmt.Errorf("parsing Kong version: %w", err)
229240
}
230241

231-
isKongEnterprise := v.IsKongGatewayEnterprise()
232-
233242
if parsedKongVersion.GTE(reconcilerUtils.Kong300Version) &&
234243
targetContent.FormatVersion != utils.FormatVersion30 {
235244
formatVersion := targetContent.FormatVersion
@@ -264,7 +273,7 @@ func syncMain(ctx context.Context, filenames []string, dry bool, parallelism,
264273
}
265274

266275
// Consumer groups are an enterprise 3.4+ feature
267-
if parsedKongVersion.GTE(reconcilerUtils.Kong340Version) && isKongEnterprise {
276+
if parsedKongVersion.GTE(reconcilerUtils.Kong340Version) && isLicensedKongEnterprise {
268277
dumpConfig.LookUpSelectorTagsConsumerGroups, err = determineLookUpSelectorTagsConsumerGroups(*targetContent)
269278
if err != nil {
270279
return fmt.Errorf("error determining lookup selector tags for consumer groups: %w", err)
@@ -561,6 +570,31 @@ func performDiff(ctx context.Context, currentState, targetState *state.KongState
561570
return int(totalOps), nil
562571
}
563572

573+
func isLicensed(ctx context.Context, config reconcilerUtils.KongClientConfig) (bool, error) {
574+
client, err := reconcilerUtils.GetKongClient(config)
575+
if err != nil {
576+
return false, err
577+
}
578+
579+
req, err := http.NewRequest("GET",
580+
reconcilerUtils.CleanAddress(config.Address)+"/",
581+
nil)
582+
if err != nil {
583+
return false, err
584+
}
585+
var resp map[string]interface{}
586+
_, err = client.Do(ctx, req, &resp)
587+
if err != nil {
588+
return false, err
589+
}
590+
_, ok := resp["license"]
591+
if !ok {
592+
return false, nil
593+
}
594+
595+
return true, nil
596+
}
597+
564598
func fetchKongVersion(ctx context.Context, config reconcilerUtils.KongClientConfig) (string, error) {
565599
var version string
566600

0 commit comments

Comments
 (0)