From 5c6a7ceae7bc4896ede32a6f53396c8a04608dd7 Mon Sep 17 00:00:00 2001 From: Ashish Tiwari Date: Fri, 17 May 2024 17:43:54 +0530 Subject: [PATCH] make global rules compatible with dashboard --- pkg/apisix/global_rule.go | 12 ++++++++++++ samples/deploy/crd/v1/ApisixGlobalRule.yaml | 2 ++ 2 files changed, 14 insertions(+) diff --git a/pkg/apisix/global_rule.go b/pkg/apisix/global_rule.go index 62386c9d..86110781 100644 --- a/pkg/apisix/global_rule.go +++ b/pkg/apisix/global_rule.go @@ -17,6 +17,7 @@ package apisix import ( "context" "encoding/json" + "fmt" "go.uber.org/zap" @@ -114,6 +115,17 @@ func (r *globalRuleClient) Create(ctx context.Context, obj *v1.GlobalRule, shoul return v, nil } + //Overwrite global rule ID with the plugin name + if len(obj.Plugins) == 0 { //This case will not happen as its handled at schema validation level + return nil, fmt.Errorf("global rule must have at least one plugin") + } + + //This is checked on dashboard that global rule id should be the plugin name + for pluginName := range obj.Plugins { + obj.ID = pluginName + break + } + log.Debugw("try to create global_rule", zap.String("id", obj.ID), zap.Any("plugins", obj.Plugins), diff --git a/samples/deploy/crd/v1/ApisixGlobalRule.yaml b/samples/deploy/crd/v1/ApisixGlobalRule.yaml index 7eff6f87..e9053787 100644 --- a/samples/deploy/crd/v1/ApisixGlobalRule.yaml +++ b/samples/deploy/crd/v1/ApisixGlobalRule.yaml @@ -51,6 +51,8 @@ spec: ingressClassName: type: string plugins: + minItems: 1 + maxItems: 1 type: array items: type: object