From 029c0d7a26c0a3cd507f15f5dcdbff0a09799c24 Mon Sep 17 00:00:00 2001 From: kv Date: Mon, 31 May 2021 11:30:03 +0800 Subject: [PATCH] feat: add events and status for ApisixClusterConfig resource (#502) --- pkg/ingress/apisix_cluster_config.go | 10 ++++++++++ pkg/kube/apisix/apis/config/v2alpha1/types.go | 3 ++- .../config/v2alpha1/zz_generated.deepcopy.go | 1 + .../typed/config/v2alpha1/apisixclusterconfig.go | 16 ++++++++++++++++ .../v2alpha1/fake/fake_apisixclusterconfig.go | 11 +++++++++++ samples/deploy/rbac/apisix_view_clusterrole.yaml | 2 ++ test/e2e/scaffold/ingress.go | 2 ++ 7 files changed, 44 insertions(+), 1 deletion(-) diff --git a/pkg/ingress/apisix_cluster_config.go b/pkg/ingress/apisix_cluster_config.go index 5df2e5d2dd..9af9f3df58 100644 --- a/pkg/ingress/apisix_cluster_config.go +++ b/pkg/ingress/apisix_cluster_config.go @@ -19,7 +19,9 @@ import ( "time" "go.uber.org/zap" + corev1 "k8s.io/api/core/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/tools/cache" "k8s.io/client-go/util/workqueue" @@ -140,6 +142,8 @@ func (c *apisixClusterConfigController) sync(ctx context.Context, ev *types.Even zap.Error(err), zap.Any("opts", clusterOpts), ) + c.controller.recorderEvent(acc, corev1.EventTypeWarning, _resourceSyncAborted, err) + c.controller.recordStatus(acc, _resourceSyncAborted, err, metav1.ConditionFalse) return err } } @@ -152,6 +156,8 @@ func (c *apisixClusterConfigController) sync(ctx context.Context, ev *types.Even zap.String("key", key), zap.Any("object", acc), ) + c.controller.recorderEvent(acc, corev1.EventTypeWarning, _resourceSyncAborted, err) + c.controller.recordStatus(acc, _resourceSyncAborted, err, metav1.ConditionFalse) return err } log.Debugw("translated global_rule", @@ -169,8 +175,12 @@ func (c *apisixClusterConfigController) sync(ctx context.Context, ev *types.Even zap.Any("global_rule", globalRule), zap.Any("cluster", acc.Name), ) + c.controller.recorderEvent(acc, corev1.EventTypeWarning, _resourceSyncAborted, err) + c.controller.recordStatus(acc, _resourceSyncAborted, err, metav1.ConditionFalse) return err } + c.controller.recorderEvent(acc, corev1.EventTypeNormal, _resourceSynced, nil) + c.controller.recordStatus(acc, _resourceSynced, nil, metav1.ConditionTrue) return nil } diff --git a/pkg/kube/apisix/apis/config/v2alpha1/types.go b/pkg/kube/apisix/apis/config/v2alpha1/types.go index c978e924b9..0e49ddd414 100644 --- a/pkg/kube/apisix/apis/config/v2alpha1/types.go +++ b/pkg/kube/apisix/apis/config/v2alpha1/types.go @@ -263,7 +263,8 @@ type ApisixClusterConfig struct { metav1.ObjectMeta `json:"metadata" yaml:"metadata"` // Spec defines the desired state of ApisixClusterConfigSpec. - Spec ApisixClusterConfigSpec `json:"spec" yaml:"spec"` + Spec ApisixClusterConfigSpec `json:"spec" yaml:"spec"` + Status ApisixStatus `json:"status,omitempty" yaml:"status,omitempty"` } // ApisixClusterConfigSpec defines the desired state of ApisixClusterConfigSpec. diff --git a/pkg/kube/apisix/apis/config/v2alpha1/zz_generated.deepcopy.go b/pkg/kube/apisix/apis/config/v2alpha1/zz_generated.deepcopy.go index cdc867cb5c..836b88acbd 100644 --- a/pkg/kube/apisix/apis/config/v2alpha1/zz_generated.deepcopy.go +++ b/pkg/kube/apisix/apis/config/v2alpha1/zz_generated.deepcopy.go @@ -48,6 +48,7 @@ func (in *ApisixClusterConfig) DeepCopyInto(out *ApisixClusterConfig) { out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) return } diff --git a/pkg/kube/apisix/client/clientset/versioned/typed/config/v2alpha1/apisixclusterconfig.go b/pkg/kube/apisix/client/clientset/versioned/typed/config/v2alpha1/apisixclusterconfig.go index ab3e13fe9f..1917523ae1 100644 --- a/pkg/kube/apisix/client/clientset/versioned/typed/config/v2alpha1/apisixclusterconfig.go +++ b/pkg/kube/apisix/client/clientset/versioned/typed/config/v2alpha1/apisixclusterconfig.go @@ -39,6 +39,7 @@ type ApisixClusterConfigsGetter interface { type ApisixClusterConfigInterface interface { Create(ctx context.Context, apisixClusterConfig *v2alpha1.ApisixClusterConfig, opts v1.CreateOptions) (*v2alpha1.ApisixClusterConfig, error) Update(ctx context.Context, apisixClusterConfig *v2alpha1.ApisixClusterConfig, opts v1.UpdateOptions) (*v2alpha1.ApisixClusterConfig, error) + UpdateStatus(ctx context.Context, apisixClusterConfig *v2alpha1.ApisixClusterConfig, opts v1.UpdateOptions) (*v2alpha1.ApisixClusterConfig, error) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error Get(ctx context.Context, name string, opts v1.GetOptions) (*v2alpha1.ApisixClusterConfig, error) @@ -127,6 +128,21 @@ func (c *apisixClusterConfigs) Update(ctx context.Context, apisixClusterConfig * return } +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *apisixClusterConfigs) UpdateStatus(ctx context.Context, apisixClusterConfig *v2alpha1.ApisixClusterConfig, opts v1.UpdateOptions) (result *v2alpha1.ApisixClusterConfig, err error) { + result = &v2alpha1.ApisixClusterConfig{} + err = c.client.Put(). + Resource("apisixclusterconfigs"). + Name(apisixClusterConfig.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(apisixClusterConfig). + Do(ctx). + Into(result) + return +} + // Delete takes name of the apisixClusterConfig and deletes it. Returns an error if one occurs. func (c *apisixClusterConfigs) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { return c.client.Delete(). diff --git a/pkg/kube/apisix/client/clientset/versioned/typed/config/v2alpha1/fake/fake_apisixclusterconfig.go b/pkg/kube/apisix/client/clientset/versioned/typed/config/v2alpha1/fake/fake_apisixclusterconfig.go index 7b5af35716..f348ee669b 100644 --- a/pkg/kube/apisix/client/clientset/versioned/typed/config/v2alpha1/fake/fake_apisixclusterconfig.go +++ b/pkg/kube/apisix/client/clientset/versioned/typed/config/v2alpha1/fake/fake_apisixclusterconfig.go @@ -95,6 +95,17 @@ func (c *FakeApisixClusterConfigs) Update(ctx context.Context, apisixClusterConf return obj.(*v2alpha1.ApisixClusterConfig), err } +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeApisixClusterConfigs) UpdateStatus(ctx context.Context, apisixClusterConfig *v2alpha1.ApisixClusterConfig, opts v1.UpdateOptions) (*v2alpha1.ApisixClusterConfig, error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateSubresourceAction(apisixclusterconfigsResource, "status", apisixClusterConfig), &v2alpha1.ApisixClusterConfig{}) + if obj == nil { + return nil, err + } + return obj.(*v2alpha1.ApisixClusterConfig), err +} + // Delete takes name of the apisixClusterConfig and deletes it. Returns an error if one occurs. func (c *FakeApisixClusterConfigs) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { _, err := c.Fake. diff --git a/samples/deploy/rbac/apisix_view_clusterrole.yaml b/samples/deploy/rbac/apisix_view_clusterrole.yaml index 5e99d01d92..ef9d3427aa 100644 --- a/samples/deploy/rbac/apisix_view_clusterrole.yaml +++ b/samples/deploy/rbac/apisix_view_clusterrole.yaml @@ -146,7 +146,9 @@ rules: - apisixtlses - apisixtlses/status - apisixclusterconfigs + - apisixclusterconfigs/status - apisixconsumers + - apisixconsumers/status verbs: - '*' - apiGroups: diff --git a/test/e2e/scaffold/ingress.go b/test/e2e/scaffold/ingress.go index 56892808f5..75c29ca00b 100644 --- a/test/e2e/scaffold/ingress.go +++ b/test/e2e/scaffold/ingress.go @@ -158,7 +158,9 @@ rules: - apisixtlses - apisixtlses/status - apisixclusterconfigs + - apisixclusterconfigs/status - apisixconsumers + - apisixconsumers/status verbs: - '*' - apiGroups: