Skip to content

Commit

Permalink
Uses unstructured client to annotate object
Browse files Browse the repository at this point in the history
Signed-off-by: Somtochi Onyekwere <somtochionyekwere@gmail.com>
  • Loading branch information
somtochiama committed Mar 4, 2021
1 parent c7c64c0 commit 9aba08e
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 83 deletions.
48 changes: 32 additions & 16 deletions docs/spec/v1beta1/receiver.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,16 +87,20 @@ spec:
secretRef:
name: webhook-token
resources:
- kind: GitRepository
- apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: GitRepository
name: webapp
namespace: default
- kind: HelmRepository
- apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: HelmRepository
name: webapp
namespace: default
- kind: Bucket
- apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: Bucket
name: webapp
namespace: default
- kind: ImageRepository
- apiVersion: image.toolkit.fluxcd.io/v1alpha1
kind: ImageRepository
name: webapp
namespace: default
```
Expand All @@ -116,7 +120,8 @@ spec:
secretRef:
name: webhook-token
resources:
- kind: GitRepository
- apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: GitRepository
name: webapp
namespace: default
```
Expand Down Expand Up @@ -169,9 +174,11 @@ spec:
secretRef:
name: webhook-token
resources:
- kind: GitRepository
- apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: GitRepository
name: webapp
- kind: HelmRepository
- apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: HelmRepository
name: webapp
```

Expand All @@ -194,9 +201,11 @@ spec:
secretRef:
name: webhook-token
resources:
- kind: GitRepository
- apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: GitRepository
name: webapp-frontend
- kind: GitRepository
- apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: GitRepository
name: webapp-backend
```

Expand All @@ -218,7 +227,8 @@ spec:
secretRef:
name: webhook-token
resources:
- kind: GitRepository
- apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: GitRepository
name: webapp
```

Expand All @@ -238,9 +248,11 @@ spec:
secretRef:
name: webhook-token
resources:
- kind: HelmRepository
- apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: HelmRepository
name: webapp
- kind: ImageRepository
- apiVersion: image.toolkit.fluxcd.io/v1alpha1
kind: ImageRepository
name: webapp
```

Expand All @@ -260,7 +272,8 @@ spec:
secretRef:
name: webhook-token
resources:
- kind: ImageRepository
- apiVersion: image.toolkit.fluxcd.io/v1alpha1
kind: ImageRepository
name: webapp
```

Expand All @@ -277,7 +290,8 @@ spec:
secretRef:
name: webhook-token
resources:
- kind: ImageRepository
- apiVersion: image.toolkit.fluxcd.io/v1alpha1
kind: ImageRepository
name: webapp
```

Expand All @@ -294,7 +308,8 @@ spec:
secretRef:
name: webhook-token
resources:
- kind: ImageRepository
- apiVersion: image.toolkit.fluxcd.io/v1alpha1
kind: ImageRepository
name: webapp
```

Expand All @@ -315,7 +330,8 @@ spec:
secretRef:
name: webhook-token
resources:
- kind: ImageRepository
- apiVersion: image.toolkit.fluxcd.io/v1alpha1
kind: ImageRepository
name: webapp
namespace: default
```
Expand Down
2 changes: 0 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,10 @@ go 1.15
replace github.com/fluxcd/notification-controller/api => ./api

require (
github.com/fluxcd/image-reflector-controller/api v0.7.0
github.com/fluxcd/notification-controller/api v0.9.0
github.com/fluxcd/pkg/apis/meta v0.8.0
github.com/fluxcd/pkg/recorder v0.0.6
github.com/fluxcd/pkg/runtime v0.8.3
github.com/fluxcd/source-controller/api v0.9.0
github.com/go-logr/logr v0.3.0
github.com/google/go-github/v32 v32.1.0
github.com/hashicorp/go-retryablehttp v0.6.8
Expand Down
4 changes: 0 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -97,17 +97,13 @@ github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLi
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/image-reflector-controller/api v0.7.0 h1:Mlu9ybrL+MtWcaIex4+FOcYuk+0vA/7bYj8MxVvLR1A=
github.com/fluxcd/image-reflector-controller/api v0.7.0/go.mod h1:KHWknF2xu/GZ4uLSQcAmfONZYjsbwNqyk3OvMQTmMsA=
github.com/fluxcd/pkg/apis/meta v0.7.0/go.mod h1:yHuY8kyGHYz22I0jQzqMMGCcHViuzC/WPdo9Gisk8Po=
github.com/fluxcd/pkg/apis/meta v0.8.0 h1:wqWpUsxhKHB1ZztcvOz+vnyhdKW9cWmjFp8Vci/XOdk=
github.com/fluxcd/pkg/apis/meta v0.8.0/go.mod h1:yHuY8kyGHYz22I0jQzqMMGCcHViuzC/WPdo9Gisk8Po=
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.8.3 h1:Zjk4fyAfBdBQ4GTokjisab7KyHHczCqKSpJi8+oVrNw=
github.com/fluxcd/pkg/runtime v0.8.3/go.mod h1:AM/hMD0mKtRqhKPU7NGDzm+3UXPpdnX8oBlcxLt11AY=
github.com/fluxcd/source-controller/api v0.9.0 h1:ohV8AvmvkUK0N7+YKPIOlMSLaNG0SpFcNLtlmW18xuM=
github.com/fluxcd/source-controller/api v0.9.0/go.mod h1:68+cPuz1G45f0SDRwEfTL419011ffveLIDA9nssLlkU=
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
Expand Down
101 changes: 48 additions & 53 deletions internal/server/receiver_handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,15 @@ import (
"encoding/json"
"fmt"
"io/ioutil"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema"
"net/http"
"net/url"
"sigs.k8s.io/controller-runtime/pkg/client"
"strings"
"time"

imagev1 "github.com/fluxcd/image-reflector-controller/api/v1alpha1"
"github.com/fluxcd/pkg/apis/meta"
sourcev1 "github.com/fluxcd/source-controller/api/v1beta1"
"github.com/google/go-github/v32/github"
corev1 "k8s.io/api/core/v1"
apimeta "k8s.io/apimachinery/pkg/api/meta"
Expand Down Expand Up @@ -344,62 +345,47 @@ func (s *ReceiverServer) annotate(ctx context.Context, resource v1beta1.CrossNam
if resource.Namespace != "" {
namespace = resource.Namespace
}
resourceName := types.NamespacedName{
objectKey := client.ObjectKey{
Namespace: namespace,
Name: resource.Name,
}

switch resource.Kind {
case sourcev1.BucketKind:
var source sourcev1.Bucket
if err := s.kubeClient.Get(ctx, resourceName, &source); err != nil {
return fmt.Errorf("unable to read %s '%s' error: %w", resource.Kind, resourceName, err)
}
if source.Annotations == nil {
source.Annotations = make(map[string]string)
}
source.Annotations[meta.ReconcileRequestAnnotation] = metav1.Now().String()
if err := s.kubeClient.Update(ctx, &source); err != nil {
return fmt.Errorf("unable to annotate %s '%s' error: %w", resource.Kind, resourceName, err)
}
case sourcev1.GitRepositoryKind:
var source sourcev1.GitRepository
if err := s.kubeClient.Get(ctx, resourceName, &source); err != nil {
return fmt.Errorf("unable to read %s '%s' error: %w", resource.Kind, resourceName, err)
}
if source.Annotations == nil {
source.Annotations = make(map[string]string)
}
source.Annotations[meta.ReconcileRequestAnnotation] = metav1.Now().String()
if err := s.kubeClient.Update(ctx, &source); err != nil {
return fmt.Errorf("unable to annotate %s '%s' error: %w", resource.Kind, resourceName, err)
}
case sourcev1.HelmRepositoryKind:
var source sourcev1.HelmRepository
if err := s.kubeClient.Get(ctx, resourceName, &source); err != nil {
return fmt.Errorf("unable to read %s '%s' error: %w", resource.Kind, resourceName, err)
}
if source.Annotations == nil {
source.Annotations = make(map[string]string)
}
source.Annotations[meta.ReconcileRequestAnnotation] = metav1.Now().String()
if err := s.kubeClient.Update(ctx, &source); err != nil {
return fmt.Errorf("unable to annotate %s '%s' error: %w", resource.Kind, resourceName, err)
}
case imagev1.ImageRepositoryKind:
var source imagev1.ImageRepository
if err := s.kubeClient.Get(ctx, resourceName, &source); err != nil {
return fmt.Errorf("unable to read %s '%s' error: %w", resource.Kind, resourceName, err)
}
if source.Annotations == nil {
source.Annotations = make(map[string]string)
}
source.Annotations[meta.ReconcileRequestAnnotation] = metav1.Now().String()
if err := s.kubeClient.Update(ctx, &source); err != nil {
return fmt.Errorf("unable to annotate %s '%s' error: %w", resource.Kind, resourceName, err)
apiVersionMap := map[string]string{
"Bucket": "source.toolkit.fluxcd.io/v1beta1",
"HelmRepository": "source.toolkit.fluxcd.io/v1beta1",
"GitRepository": "source.toolkit.fluxcd.io/v1beta1",
"ImageRepository": "image.toolkit.fluxcd.io/v1alpha1",
}

apiVersion := resource.APIVersion
if apiVersion == "" {
if apiVersionMap[resource.Kind] == "" {
return fmt.Errorf("apiVersion must be specified for kind '%s'", resource.Kind)
}
default:
return fmt.Errorf("kind '%s not suppored", resource.Kind)
apiVersion = apiVersionMap[resource.Kind]
}

group, version := getGroupVersion(apiVersion)

u := &unstructured.Unstructured{}
u.SetGroupVersionKind(schema.GroupVersionKind{
Group: group,
Kind: resource.Kind,
Version: version,
})

if err := s.kubeClient.Get(ctx, objectKey, u); err != nil {
return fmt.Errorf("unable to read %s '%s' error: %w", resource.Kind, objectKey, err)
}

sourceAnnotations := u.GetAnnotations()
if sourceAnnotations == nil {
sourceAnnotations = make(map[string]string)
}
sourceAnnotations[meta.ReconcileRequestAnnotation] = metav1.Now().String()
u.SetAnnotations(sourceAnnotations)
if err := s.kubeClient.Update(ctx, u); err != nil {
return fmt.Errorf("unable to annotate %s '%s' error: %w", resource.Kind, objectKey, err)
}

return nil
Expand Down Expand Up @@ -436,3 +422,12 @@ func verifyHmacSignature(key []byte, signature string, payload []byte) bool {
expectedMAC := hex.EncodeToString(mac.Sum(nil))
return hmac.Equal([]byte(signature), []byte(expectedMAC))
}

func getGroupVersion(s string) (string, string) {
slice := strings.Split(s, "/")
if len(slice) == 1 {
return "", slice[0]
}

return slice[0], slice[1]
}
11 changes: 3 additions & 8 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,17 +26,14 @@ import (
ctrl "sigs.k8s.io/controller-runtime"
crtlmetrics "sigs.k8s.io/controller-runtime/pkg/metrics"

imagev1 "github.com/fluxcd/image-reflector-controller/api/v1alpha1"
"github.com/fluxcd/notification-controller/api/v1beta1"
"github.com/fluxcd/notification-controller/controllers"
"github.com/fluxcd/notification-controller/internal/server"
"github.com/fluxcd/pkg/runtime/client"
"github.com/fluxcd/pkg/runtime/logger"
"github.com/fluxcd/pkg/runtime/metrics"
"github.com/fluxcd/pkg/runtime/pprof"
"github.com/fluxcd/pkg/runtime/probes"
sourcev1 "github.com/fluxcd/source-controller/api/v1beta1"

"github.com/fluxcd/notification-controller/api/v1beta1"
"github.com/fluxcd/notification-controller/controllers"
"github.com/fluxcd/notification-controller/internal/server"
// +kubebuilder:scaffold:imports
)

Expand All @@ -49,8 +46,6 @@ func init() {
_ = clientgoscheme.AddToScheme(scheme)

_ = v1beta1.AddToScheme(scheme)
_ = sourcev1.AddToScheme(scheme)
_ = imagev1.AddToScheme(scheme)
// +kubebuilder:scaffold:scheme
}

Expand Down

0 comments on commit 9aba08e

Please sign in to comment.