@@ -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+
564598func fetchKongVersion (ctx context.Context , config reconcilerUtils.KongClientConfig ) (string , error ) {
565599 var version string
566600
0 commit comments