diff --git a/pkg/models/alerting/rulegroup.go b/pkg/models/alerting/rulegroup.go index bb416b306..88c4c51c3 100644 --- a/pkg/models/alerting/rulegroup.go +++ b/pkg/models/alerting/rulegroup.go @@ -102,6 +102,7 @@ func (o *ruleGroupOperator) listRuleGroups(ctx context.Context, namespace string // copy status info of statusRuleGroups to matched rulegroups var groups = make([]runtime.Object, len(resourceRuleGroups)) for i := range resourceRuleGroups { + setRuleGroupResourceTypeMeta(resourceRuleGroups[i]) g := &kapialertingv2beta1.RuleGroup{ RuleGroup: *resourceRuleGroups[i], Status: kapialertingv2beta1.RuleGroupStatus{ @@ -295,6 +296,8 @@ func (o *ruleGroupOperator) GetRuleGroup(ctx context.Context, namespace, name st return nil, err } + setRuleGroupResourceTypeMeta(resourceRuleGroup) + ret := &kapialertingv2beta1.RuleGroup{ RuleGroup: *resourceRuleGroup, Status: kapialertingv2beta1.RuleGroupStatus{ @@ -384,6 +387,7 @@ func (o *ruleGroupOperator) listClusterRuleGroups(ctx context.Context, selector // copy status info of statusRuleGroups to matched rulegroups var groups = make([]runtime.Object, len(resourceRuleGroups)) for i := range resourceRuleGroups { + setRuleGroupResourceTypeMeta(resourceRuleGroups[i]) g := &kapialertingv2beta1.ClusterRuleGroup{ ClusterRuleGroup: *resourceRuleGroups[i], Status: kapialertingv2beta1.RuleGroupStatus{ @@ -488,6 +492,8 @@ func (o *ruleGroupOperator) GetClusterRuleGroup(ctx context.Context, name string return nil, err } + setRuleGroupResourceTypeMeta(resourceRuleGroup) + ret := &kapialertingv2beta1.ClusterRuleGroup{ ClusterRuleGroup: *resourceRuleGroup, Status: kapialertingv2beta1.RuleGroupStatus{ @@ -573,6 +579,7 @@ func (o *ruleGroupOperator) listGlobalRuleGroups(ctx context.Context, selector l // copy status info of statusRuleGroups to matched rulegroups var groups = make([]runtime.Object, len(resourceRuleGroups)) for i := range resourceRuleGroups { + setRuleGroupResourceTypeMeta(resourceRuleGroups[i]) g := &kapialertingv2beta1.GlobalRuleGroup{ GlobalRuleGroup: *resourceRuleGroups[i], Status: kapialertingv2beta1.RuleGroupStatus{ @@ -731,6 +738,8 @@ func (o *ruleGroupOperator) GetGlobalRuleGroup(ctx context.Context, name string) return nil, err } + setRuleGroupResourceTypeMeta(resourceRuleGroup) + ret := &kapialertingv2beta1.GlobalRuleGroup{ GlobalRuleGroup: *resourceRuleGroup, Status: kapialertingv2beta1.RuleGroupStatus{ @@ -889,3 +898,23 @@ type wrapAlert struct { kapialertingv2beta1.Alert runtime.Object } + +var ( + apiVersion = alertingv2beta1.SchemeGroupVersion.String() +) + +// set TypeMeta info because the objects getted by lister.List() and lister.Get() may have no TypeMeta +// related issue: https://github.com/kubernetes/client-go/issues/541 +func setRuleGroupResourceTypeMeta(obj runtime.Object) { + switch o := obj.(type) { + case *alertingv2beta1.RuleGroup: + o.APIVersion = apiVersion + o.Kind = alertingv2beta1.ResourceKindRuleGroup + case *alertingv2beta1.ClusterRuleGroup: + o.APIVersion = apiVersion + o.Kind = alertingv2beta1.ResourceKindClusterRuleGroup + case *alertingv2beta1.GlobalRuleGroup: + o.APIVersion = apiVersion + o.Kind = alertingv2beta1.ResourceKindGlobalRuleGroup + } +} diff --git a/staging/src/kubesphere.io/api/alerting/v2beta1/rulegroup_types.go b/staging/src/kubesphere.io/api/alerting/v2beta1/rulegroup_types.go index e5f28da49..6968c036c 100644 --- a/staging/src/kubesphere.io/api/alerting/v2beta1/rulegroup_types.go +++ b/staging/src/kubesphere.io/api/alerting/v2beta1/rulegroup_types.go @@ -25,6 +25,12 @@ import ( "k8s.io/apimachinery/pkg/util/intstr" ) +const ( + ResourceKindRuleGroup = "RuleGroup" + ResourceKindClusterRuleGroup = "ClusterRuleGroup" + ResourceKindGlobalRuleGroup = "GlobalRuleGroup" +) + // Duration is a valid time unit // Supported units: y, w, d, h, m, s, ms Examples: `30s`, `1m`, `1h20m15s` // +kubebuilder:validation:Pattern:="^(0|(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?)$"