From d4e3755515cd89c774fc76a58c59e01128d26355 Mon Sep 17 00:00:00 2001 From: stefanprodan Date: Wed, 30 Sep 2020 10:07:22 +0300 Subject: [PATCH] Implement `fluxcd/pkg/meta/api` in APIs --- Makefile | 7 +- api/go.mod | 7 +- api/go.sum | 18 ++-- api/v1alpha1/alert_types.go | 4 +- api/v1alpha1/condition_types.go | 44 --------- api/v1alpha1/provider_types.go | 4 +- api/v1alpha1/receiver_types.go | 12 ++- api/v1alpha1/zz_generated.deepcopy.go | 23 +---- ...notification.toolkit.fluxcd.io_alerts.yaml | 6 +- ...ification.toolkit.fluxcd.io_providers.yaml | 6 +- ...ification.toolkit.fluxcd.io_receivers.yaml | 6 +- controllers/alert_controller.go | 11 ++- controllers/provider_controller.go | 11 ++- controllers/receiver_controller.go | 9 +- docs/api/notification.md | 98 +------------------ go.mod | 11 ++- go.sum | 18 +++- internal/server/receiver_handlers.go | 8 +- 18 files changed, 88 insertions(+), 215 deletions(-) diff --git a/Makefile b/Makefile index 941b188..bae705d 100644 --- a/Makefile +++ b/Makefile @@ -61,6 +61,11 @@ manifests: controller-gen api-docs: gen-crd-api-reference-docs $(API_REF_GEN) -api-dir=./api/v1alpha1 -config=./hack/api-docs/config.json -template-dir=./hack/api-docs/template -out-file=./docs/api/notification.md +# Run go mod tidy +tidy: + go mod tidy + cd api; go mod tidy + # Run go fmt against code fmt: go fmt ./... @@ -73,7 +78,7 @@ vet: # Generate code generate: controller-gen - $(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./..." + cd api; $(CONTROLLER_GEN) object:headerFile="../hack/boilerplate.go.txt" paths="./..." # Build the docker image docker-build: test diff --git a/api/go.mod b/api/go.mod index ef465e0..f3581ff 100644 --- a/api/go.mod +++ b/api/go.mod @@ -3,7 +3,8 @@ module github.com/fluxcd/notification-controller/api go 1.14 require ( - k8s.io/api v0.18.8 - k8s.io/apimachinery v0.18.8 - sigs.k8s.io/controller-runtime v0.6.2 + github.com/fluxcd/pkg/apis/meta v0.0.2 + k8s.io/api v0.18.9 + k8s.io/apimachinery v0.18.9 + sigs.k8s.io/controller-runtime v0.6.3 ) diff --git a/api/go.sum b/api/go.sum index 560eaf8..4262a68 100644 --- a/api/go.sum +++ b/api/go.sum @@ -25,7 +25,6 @@ github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:l github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -58,10 +57,12 @@ github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch v0.0.0-20200808040245-162e5629780b/go.mod h1:NAJj0yf/KaRKURN6nyi7A9IZydMivZEm9oQLWNjfKDc= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fluxcd/pkg/apis/meta v0.0.2 h1:kyA4Y0IzNjf1joBOnFqpWG7aNDHvtLExZcaHQM7qhRI= +github.com/fluxcd/pkg/apis/meta v0.0.2/go.mod h1:nCNps5JJOcEQr3MNDmZqI4o0chjePSUYL6Q2ktDtotU= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= @@ -170,7 +171,6 @@ github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpO github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -419,12 +419,12 @@ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= k8s.io/api v0.18.6/go.mod h1:eeyxr+cwCjMdLAmr2W3RyDI0VvTawSg/3RFFBEnmZGI= -k8s.io/api v0.18.8 h1:aIKUzJPb96f3fKec2lxtY7acZC9gQNDLVhfSGpxBAC4= -k8s.io/api v0.18.8/go.mod h1:d/CXqwWv+Z2XEG1LgceeDmHQwpUJhROPx16SlxJgERY= +k8s.io/api v0.18.9 h1:7VDtivqwbvLOf8hmXSd/PDSSbpCBq49MELg84EYBYiQ= +k8s.io/api v0.18.9/go.mod h1:9u/h6sUh6FxfErv7QqetX1EB3yBMIYOBXzdcf0Gf0rc= k8s.io/apiextensions-apiserver v0.18.6/go.mod h1:lv89S7fUysXjLZO7ke783xOwVTm6lKizADfvUM/SS/M= k8s.io/apimachinery v0.18.6/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko= -k8s.io/apimachinery v0.18.8 h1:jimPrycCqgx2QPearX3to1JePz7wSbVLq+7PdBTTwQ0= -k8s.io/apimachinery v0.18.8/go.mod h1:6sQd+iHEqmOtALqOFjSWp2KZ9F0wlU/nWm0ZgsYWMig= +k8s.io/apimachinery v0.18.9 h1:3ZABKQx3F3xPWlsGhCfUl8W+JXRRblV6Wo2A3zn0pvY= +k8s.io/apimachinery v0.18.9/go.mod h1:PF5taHbXgTEJLU+xMypMmYTXTWPJ5LaW8bfsisxnEXk= k8s.io/apiserver v0.18.6/go.mod h1:Zt2XvTHuaZjBz6EFYzpp+X4hTmgWGy8AthNVnTdm3Wg= k8s.io/client-go v0.18.6/go.mod h1:/fwtGLjYMS1MaM5oi+eXhKwG+1UHidUEXRh6cNsdO0Q= k8s.io/code-generator v0.18.6/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c= @@ -440,8 +440,8 @@ k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20200603063816-c1c6865ac451/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= -sigs.k8s.io/controller-runtime v0.6.2 h1:jkAnfdTYBpFwlmBn3pS5HFO06SfxvnTZ1p5PeEF/zAA= -sigs.k8s.io/controller-runtime v0.6.2/go.mod h1:vhcq/rlnENJ09SIRp3EveTaZ0yqH526hjf9iJdbUJ/E= +sigs.k8s.io/controller-runtime v0.6.3 h1:SBbr+inLPEKhvlJtrvDcwIpm+uhDvp63Bl72xYJtoOE= +sigs.k8s.io/controller-runtime v0.6.3/go.mod h1:WlZNXcM0++oyaQt4B7C2lEE5JYRs8vJUzRP4N4JpdAY= sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= sigs.k8s.io/structured-merge-diff/v3 v3.0.0 h1:dOmIZBMfhcHS09XZkMyUgkq5trg3/jRyJYFZUiaOp8E= sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= diff --git a/api/v1alpha1/alert_types.go b/api/v1alpha1/alert_types.go index eb1bf7b..6d18b51 100644 --- a/api/v1alpha1/alert_types.go +++ b/api/v1alpha1/alert_types.go @@ -19,6 +19,8 @@ package v1alpha1 import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/fluxcd/pkg/apis/meta" ) // AlertSpec defines an alerting rule for events involving a list of objects @@ -47,7 +49,7 @@ type AlertSpec struct { // AlertStatus defines the observed state of Alert type AlertStatus struct { // +optional - Conditions []Condition `json:"conditions,omitempty"` + Conditions []meta.Condition `json:"conditions,omitempty"` } // +genclient diff --git a/api/v1alpha1/condition_types.go b/api/v1alpha1/condition_types.go index 9890f8a..31cfc17 100644 --- a/api/v1alpha1/condition_types.go +++ b/api/v1alpha1/condition_types.go @@ -16,54 +16,10 @@ limitations under the License. package v1alpha1 -import ( - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// Condition contains condition information for a notification object. -type Condition struct { - // Type of the condition, currently ('Ready'). - // +required - Type string `json:"type"` - - // Status of the condition, one of ('True', 'False', 'Unknown'). - // +required - Status corev1.ConditionStatus `json:"status"` - - // LastTransitionTime is the timestamp corresponding to the last status - // change of this condition. - // +required - LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"` - - // Reason is a brief machine readable explanation for the condition's last - // transition. - // +required - Reason string `json:"reason,omitempty"` - - // Message is a human readable description of the details of the last - // transition, complementing reason. - // +optional - Message string `json:"message,omitempty"` -} - -const ( - // ReadyCondition represents the fact that a given object has passed - // validation and was acknowledge by the controller. - ReadyCondition string = "Ready" -) - const ( // InitializedReason represents the fact that a given resource has been initialized. InitializedReason string = "Initialized" - // ProgressingReason represents the fact that a resource reconciliation - // is underway. - ProgressingReason string = "Progressing" - // TokenNotFound represents the fact that receiver token can't be found. TokenNotFoundReason string = "TokenNotFound" - - // SuspendedReason represents the fact that the resource reconciliation is suspended. - SuspendedReason string = "Suspended" ) diff --git a/api/v1alpha1/provider_types.go b/api/v1alpha1/provider_types.go index 123e441..556736b 100644 --- a/api/v1alpha1/provider_types.go +++ b/api/v1alpha1/provider_types.go @@ -19,6 +19,8 @@ package v1alpha1 import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/fluxcd/pkg/apis/meta" ) // ProviderSpec defines the desired state of Provider @@ -58,7 +60,7 @@ const ( // ProviderStatus defines the observed state of Provider type ProviderStatus struct { // +optional - Conditions []Condition `json:"conditions,omitempty"` + Conditions []meta.Condition `json:"conditions,omitempty"` } // +genclient diff --git a/api/v1alpha1/receiver_types.go b/api/v1alpha1/receiver_types.go index 0d60224..487d712 100644 --- a/api/v1alpha1/receiver_types.go +++ b/api/v1alpha1/receiver_types.go @@ -19,6 +19,8 @@ package v1alpha1 import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/fluxcd/pkg/apis/meta" ) // ReceiverSpec defines the desired state of Receiver @@ -52,7 +54,7 @@ type ReceiverSpec struct { // ReceiverStatus defines the observed state of Receiver type ReceiverStatus struct { // +optional - Conditions []Condition `json:"conditions,omitempty"` + Conditions []meta.Condition `json:"conditions,omitempty"` // Generated webhook URL in the format // of '/hook/sha256sum(token+name+namespace)'. @@ -69,9 +71,9 @@ const ( ) func ReceiverReady(receiver Receiver, reason, message, url string) Receiver { - receiver.Status.Conditions = []Condition{ + receiver.Status.Conditions = []meta.Condition{ { - Type: ReadyCondition, + Type: meta.ReadyCondition, Status: corev1.ConditionTrue, LastTransitionTime: metav1.Now(), Reason: reason, @@ -84,9 +86,9 @@ func ReceiverReady(receiver Receiver, reason, message, url string) Receiver { } func ReceiverNotReady(receiver Receiver, reason, message string) Receiver { - receiver.Status.Conditions = []Condition{ + receiver.Status.Conditions = []meta.Condition{ { - Type: ReadyCondition, + Type: meta.ReadyCondition, Status: corev1.ConditionFalse, LastTransitionTime: metav1.Now(), Reason: reason, diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index 594b534..2e36c3a 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -21,6 +21,7 @@ limitations under the License. package v1alpha1 import ( + "github.com/fluxcd/pkg/apis/meta" "k8s.io/api/core/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) @@ -110,7 +111,7 @@ func (in *AlertStatus) DeepCopyInto(out *AlertStatus) { *out = *in if in.Conditions != nil { in, out := &in.Conditions, &out.Conditions - *out = make([]Condition, len(*in)) + *out = make([]meta.Condition, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -127,22 +128,6 @@ func (in *AlertStatus) DeepCopy() *AlertStatus { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Condition) DeepCopyInto(out *Condition) { - *out = *in - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Condition. -func (in *Condition) DeepCopy() *Condition { - if in == nil { - return nil - } - out := new(Condition) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CrossNamespaceObjectReference) DeepCopyInto(out *CrossNamespaceObjectReference) { *out = *in @@ -242,7 +227,7 @@ func (in *ProviderStatus) DeepCopyInto(out *ProviderStatus) { *out = *in if in.Conditions != nil { in, out := &in.Conditions, &out.Conditions - *out = make([]Condition, len(*in)) + *out = make([]meta.Condition, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -349,7 +334,7 @@ func (in *ReceiverStatus) DeepCopyInto(out *ReceiverStatus) { *out = *in if in.Conditions != nil { in, out := &in.Conditions, &out.Conditions - *out = make([]Condition, len(*in)) + *out = make([]meta.Condition, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } diff --git a/config/crd/bases/notification.toolkit.fluxcd.io_alerts.yaml b/config/crd/bases/notification.toolkit.fluxcd.io_alerts.yaml index 48c80be..931c085 100644 --- a/config/crd/bases/notification.toolkit.fluxcd.io_alerts.yaml +++ b/config/crd/bases/notification.toolkit.fluxcd.io_alerts.yaml @@ -105,8 +105,8 @@ spec: properties: conditions: items: - description: Condition contains condition information for a notification - object. + description: Condition contains condition information of a toolkit + resource. properties: lastTransitionTime: description: LastTransitionTime is the timestamp corresponding @@ -126,7 +126,7 @@ spec: 'Unknown'). type: string type: - description: Type of the condition, currently ('Ready'). + description: Type of the condition. type: string required: - status diff --git a/config/crd/bases/notification.toolkit.fluxcd.io_providers.yaml b/config/crd/bases/notification.toolkit.fluxcd.io_providers.yaml index d0ac74a..5046248 100644 --- a/config/crd/bases/notification.toolkit.fluxcd.io_providers.yaml +++ b/config/crd/bases/notification.toolkit.fluxcd.io_providers.yaml @@ -82,8 +82,8 @@ spec: properties: conditions: items: - description: Condition contains condition information for a notification - object. + description: Condition contains condition information of a toolkit + resource. properties: lastTransitionTime: description: LastTransitionTime is the timestamp corresponding @@ -103,7 +103,7 @@ spec: 'Unknown'). type: string type: - description: Type of the condition, currently ('Ready'). + description: Type of the condition. type: string required: - status diff --git a/config/crd/bases/notification.toolkit.fluxcd.io_receivers.yaml b/config/crd/bases/notification.toolkit.fluxcd.io_receivers.yaml index 1ba5d45..6957bfe 100644 --- a/config/crd/bases/notification.toolkit.fluxcd.io_receivers.yaml +++ b/config/crd/bases/notification.toolkit.fluxcd.io_receivers.yaml @@ -113,8 +113,8 @@ spec: properties: conditions: items: - description: Condition contains condition information for a notification - object. + description: Condition contains condition information of a toolkit + resource. properties: lastTransitionTime: description: LastTransitionTime is the timestamp corresponding @@ -134,7 +134,7 @@ spec: 'Unknown'). type: string type: - description: Type of the condition, currently ('Ready'). + description: Type of the condition. type: string required: - status diff --git a/controllers/alert_controller.go b/controllers/alert_controller.go index 82c8b84..187347c 100644 --- a/controllers/alert_controller.go +++ b/controllers/alert_controller.go @@ -27,6 +27,8 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" + "github.com/fluxcd/pkg/apis/meta" + "github.com/fluxcd/notification-controller/api/v1alpha1" ) @@ -51,17 +53,16 @@ func (r *AlertReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) { log := r.Log.WithValues("controller", strings.ToLower(alert.Kind), "request", req.NamespacedName) init := true - for _, condition := range alert.Status.Conditions { - if condition.Type == v1alpha1.ReadyCondition && condition.Status == corev1.ConditionTrue { + if c := meta.GetCondition(alert.Status.Conditions, meta.ReadyCondition); c != nil { + if c.Status == corev1.ConditionTrue { init = false - break } } if init { - alert.Status.Conditions = []v1alpha1.Condition{ + alert.Status.Conditions = []meta.Condition{ { - Type: v1alpha1.ReadyCondition, + Type: meta.ReadyCondition, Status: corev1.ConditionTrue, LastTransitionTime: metav1.Now(), Reason: v1alpha1.InitializedReason, diff --git a/controllers/provider_controller.go b/controllers/provider_controller.go index b3ac3eb..164321e 100644 --- a/controllers/provider_controller.go +++ b/controllers/provider_controller.go @@ -27,6 +27,8 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" + "github.com/fluxcd/pkg/apis/meta" + "github.com/fluxcd/notification-controller/api/v1alpha1" ) @@ -51,17 +53,16 @@ func (r *ProviderReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) { log := r.Log.WithValues("controller", strings.ToLower(provider.Kind), "request", req.NamespacedName) init := true - for _, condition := range provider.Status.Conditions { - if condition.Type == v1alpha1.ReadyCondition && condition.Status == corev1.ConditionTrue { + if c := meta.GetCondition(provider.Status.Conditions, meta.ReadyCondition); c != nil { + if c.Status == corev1.ConditionTrue { init = false - break } } if init { - provider.Status.Conditions = []v1alpha1.Condition{ + provider.Status.Conditions = []meta.Condition{ { - Type: v1alpha1.ReadyCondition, + Type: meta.ReadyCondition, Status: corev1.ConditionTrue, LastTransitionTime: metav1.Now(), Reason: v1alpha1.InitializedReason, diff --git a/controllers/receiver_controller.go b/controllers/receiver_controller.go index 3107c97..7cb94c4 100644 --- a/controllers/receiver_controller.go +++ b/controllers/receiver_controller.go @@ -29,6 +29,8 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" + "github.com/fluxcd/pkg/apis/meta" + "github.com/fluxcd/notification-controller/api/v1alpha1" ) @@ -66,11 +68,8 @@ func (r *ReceiverReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) { } isReady := false - for _, condition := range receiver.Status.Conditions { - if condition.Type == v1alpha1.ReadyCondition && condition.Status == corev1.ConditionTrue { - isReady = true - break - } + if c := meta.GetCondition(receiver.Status.Conditions, meta.ReadyCondition); c != nil { + isReady = c.Status == corev1.ConditionTrue } receiverURL := fmt.Sprintf("/hook/%s", sha256sum(token+receiver.Name+receiver.Namespace)) diff --git a/docs/api/notification.md b/docs/api/notification.md index 79e4a23..f6c6cc6 100644 --- a/docs/api/notification.md +++ b/docs/api/notification.md @@ -515,9 +515,7 @@ Defaults to false.

conditions
- -[]Condition - +[]github.com/fluxcd/pkg/apis/meta.Condition @@ -528,92 +526,6 @@ Defaults to false.

-

Condition -

-

-(Appears on: -AlertStatus, -ProviderStatus, -ReceiverStatus) -

-

Condition contains condition information for a notification object.

-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FieldDescription
-type
- -string - -
-

Type of the condition, currently (‘Ready’).

-
-status
- - -Kubernetes core/v1.ConditionStatus - - -
-

Status of the condition, one of (‘True’, ‘False’, ‘Unknown’).

-
-lastTransitionTime
- - -Kubernetes meta/v1.Time - - -
-

LastTransitionTime is the timestamp corresponding to the last status -change of this condition.

-
-reason
- -string - -
-

Reason is a brief machine readable explanation for the condition’s last -transition.

-
-message
- -string - -
-(Optional) -

Message is a human readable description of the details of the last -transition, complementing reason.

-
-
-

CrossNamespaceObjectReference

@@ -786,9 +698,7 @@ Kubernetes core/v1.LocalObjectReference conditions
- -[]Condition - +[]github.com/fluxcd/pkg/apis/meta.Condition @@ -906,9 +816,7 @@ Defaults to false.

conditions
- -[]Condition - +[]github.com/fluxcd/pkg/apis/meta.Condition diff --git a/go.mod b/go.mod index 9a9cfb8..22b593b 100644 --- a/go.mod +++ b/go.mod @@ -6,8 +6,9 @@ replace github.com/fluxcd/notification-controller/api => ./api require ( github.com/fluxcd/notification-controller/api v0.0.11 + github.com/fluxcd/pkg/apis/meta v0.0.2 github.com/fluxcd/pkg/recorder v0.0.6 - github.com/fluxcd/pkg/runtime v0.0.3 + github.com/fluxcd/pkg/runtime v0.0.6 github.com/fluxcd/source-controller/api v0.0.17 github.com/go-logr/logr v0.1.0 github.com/google/go-github/v32 v32.0.0 @@ -18,8 +19,8 @@ require ( github.com/whilp/git-urls v1.0.0 github.com/xanzy/go-gitlab v0.37.0 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 - k8s.io/api v0.18.8 - k8s.io/apimachinery v0.18.8 - k8s.io/client-go v0.18.8 - sigs.k8s.io/controller-runtime v0.6.2 + k8s.io/api v0.18.9 + k8s.io/apimachinery v0.18.9 + k8s.io/client-go v0.18.9 + sigs.k8s.io/controller-runtime v0.6.3 ) diff --git a/go.sum b/go.sum index 8da0f23..e68895b 100644 --- a/go.sum +++ b/go.sum @@ -64,11 +64,15 @@ github.com/evanphx/json-patch v0.0.0-20200808040245-162e5629780b/go.mod h1:NAJj0 github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5IcNrDCXZ6OoTAWu7M= github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= +github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fluxcd/pkg/apis/meta v0.0.2 h1:kyA4Y0IzNjf1joBOnFqpWG7aNDHvtLExZcaHQM7qhRI= +github.com/fluxcd/pkg/apis/meta v0.0.2/go.mod h1:nCNps5JJOcEQr3MNDmZqI4o0chjePSUYL6Q2ktDtotU= github.com/fluxcd/pkg/recorder v0.0.6 h1:me/n8syeeGXz50OXoPX3jgIj9AtinvhHdKT9Dy+MbHs= github.com/fluxcd/pkg/recorder v0.0.6/go.mod h1:IfQxfVRSNsWs3B0Yp5B6ObEWwKHILlAx8N7XkoDdhFg= -github.com/fluxcd/pkg/runtime v0.0.3 h1:x9rOThl1qh5srIUpW0YHEj1I84swMj5m76UqrR1QknY= -github.com/fluxcd/pkg/runtime v0.0.3/go.mod h1:ECBTeplxhgbCJYIjmtwn3ZS0A91/+6YtOS4w2G0LeK4= +github.com/fluxcd/pkg/runtime v0.0.6 h1:m7qwr2wRePs1vzVlM0Y88vitXSsv1lb3QCJflRpa3qQ= +github.com/fluxcd/pkg/runtime v0.0.6/go.mod h1:iLjncjktQVpqpb1NsY2fW+UYDFOtVyt+yJrxqrrK8A0= github.com/fluxcd/source-controller/api v0.0.17 h1:LQR6VR/CATAV+RDcK3rPgA66IW5CFbhAH4Prm0UBL5Y= github.com/fluxcd/source-controller/api v0.0.17/go.mod h1:PUe+EYQ/s+KPnz2iOCgdf+L6clM0SWkyvdXIpbfpkQE= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -474,15 +478,19 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh k8s.io/api v0.18.6/go.mod h1:eeyxr+cwCjMdLAmr2W3RyDI0VvTawSg/3RFFBEnmZGI= k8s.io/api v0.18.8 h1:aIKUzJPb96f3fKec2lxtY7acZC9gQNDLVhfSGpxBAC4= k8s.io/api v0.18.8/go.mod h1:d/CXqwWv+Z2XEG1LgceeDmHQwpUJhROPx16SlxJgERY= +k8s.io/api v0.18.9 h1:7VDtivqwbvLOf8hmXSd/PDSSbpCBq49MELg84EYBYiQ= +k8s.io/api v0.18.9/go.mod h1:9u/h6sUh6FxfErv7QqetX1EB3yBMIYOBXzdcf0Gf0rc= k8s.io/apiextensions-apiserver v0.18.6 h1:vDlk7cyFsDyfwn2rNAO2DbmUbvXy5yT5GE3rrqOzaMo= k8s.io/apiextensions-apiserver v0.18.6/go.mod h1:lv89S7fUysXjLZO7ke783xOwVTm6lKizADfvUM/SS/M= k8s.io/apimachinery v0.18.6/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko= k8s.io/apimachinery v0.18.8 h1:jimPrycCqgx2QPearX3to1JePz7wSbVLq+7PdBTTwQ0= k8s.io/apimachinery v0.18.8/go.mod h1:6sQd+iHEqmOtALqOFjSWp2KZ9F0wlU/nWm0ZgsYWMig= +k8s.io/apimachinery v0.18.9 h1:3ZABKQx3F3xPWlsGhCfUl8W+JXRRblV6Wo2A3zn0pvY= +k8s.io/apimachinery v0.18.9/go.mod h1:PF5taHbXgTEJLU+xMypMmYTXTWPJ5LaW8bfsisxnEXk= k8s.io/apiserver v0.18.6/go.mod h1:Zt2XvTHuaZjBz6EFYzpp+X4hTmgWGy8AthNVnTdm3Wg= k8s.io/client-go v0.18.6/go.mod h1:/fwtGLjYMS1MaM5oi+eXhKwG+1UHidUEXRh6cNsdO0Q= -k8s.io/client-go v0.18.8 h1:SdbLpIxk5j5YbFr1b7fq8S7mDgDjYmUxSbszyoesoDM= -k8s.io/client-go v0.18.8/go.mod h1:HqFqMllQ5NnQJNwjro9k5zMyfhZlOwpuTLVrxjkYSxU= +k8s.io/client-go v0.18.9 h1:sPHX49yOtUqv1fl49TwV3f8cC0N3etSnwgFGsIsXnZc= +k8s.io/client-go v0.18.9/go.mod h1:UjkEetDmr40P9NX0Ok3Idt08FCf2I4mIHgjFsot77uY= k8s.io/code-generator v0.18.6/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c= k8s.io/component-base v0.18.6/go.mod h1:knSVsibPR5K6EW2XOjEHik6sdU5nCvKMrzMt2D4In14= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= @@ -501,6 +509,8 @@ k8s.io/utils v0.0.0-20200603063816-c1c6865ac451/go.mod h1:jPW/WVKK9YHAvNhRxK0md/ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= sigs.k8s.io/controller-runtime v0.6.2 h1:jkAnfdTYBpFwlmBn3pS5HFO06SfxvnTZ1p5PeEF/zAA= sigs.k8s.io/controller-runtime v0.6.2/go.mod h1:vhcq/rlnENJ09SIRp3EveTaZ0yqH526hjf9iJdbUJ/E= +sigs.k8s.io/controller-runtime v0.6.3 h1:SBbr+inLPEKhvlJtrvDcwIpm+uhDvp63Bl72xYJtoOE= +sigs.k8s.io/controller-runtime v0.6.3/go.mod h1:WlZNXcM0++oyaQt4B7C2lEE5JYRs8vJUzRP4N4JpdAY= sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= sigs.k8s.io/structured-merge-diff/v3 v3.0.0 h1:dOmIZBMfhcHS09XZkMyUgkq5trg3/jRyJYFZUiaOp8E= sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= diff --git a/internal/server/receiver_handlers.go b/internal/server/receiver_handlers.go index b060cb6..3fe25f4 100644 --- a/internal/server/receiver_handlers.go +++ b/internal/server/receiver_handlers.go @@ -31,7 +31,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "github.com/fluxcd/notification-controller/api/v1alpha1" - consts "github.com/fluxcd/pkg/runtime" + "github.com/fluxcd/pkg/apis/meta" sourcev1 "github.com/fluxcd/source-controller/api/v1alpha1" ) @@ -225,7 +225,7 @@ func (s *ReceiverServer) annotate(ctx context.Context, resource v1alpha1.CrossNa if source.Annotations == nil { source.Annotations = make(map[string]string) } - source.Annotations[consts.ReconcileAtAnnotation] = metav1.Now().String() + source.Annotations[meta.ReconcileAtAnnotation] = metav1.Now().String() if err := s.kubeClient.Update(ctx, &source); err != nil { return fmt.Errorf("unable to annotate Bucket '%s' error: %w", resourceName, err) } @@ -237,7 +237,7 @@ func (s *ReceiverServer) annotate(ctx context.Context, resource v1alpha1.CrossNa if source.Annotations == nil { source.Annotations = make(map[string]string) } - source.Annotations[consts.ReconcileAtAnnotation] = metav1.Now().String() + source.Annotations[meta.ReconcileAtAnnotation] = metav1.Now().String() if err := s.kubeClient.Update(ctx, &source); err != nil { return fmt.Errorf("unable to annotate GitRepository '%s' error: %w", resourceName, err) } @@ -249,7 +249,7 @@ func (s *ReceiverServer) annotate(ctx context.Context, resource v1alpha1.CrossNa if source.Annotations == nil { source.Annotations = make(map[string]string) } - source.Annotations[consts.ReconcileAtAnnotation] = metav1.Now().String() + source.Annotations[meta.ReconcileAtAnnotation] = metav1.Now().String() if err := s.kubeClient.Update(ctx, &source); err != nil { return fmt.Errorf("unable to annotate HelmRepository '%s' error: %w", resourceName, err) }