Skip to content
Snippets Groups Projects
Commit b40b66f0 authored by Michal Kolodziejski's avatar Michal Kolodziejski :bug:
Browse files

Reconcile GitlabPagesSite if its Route changes

parent 146e083f
No related branches found
No related tags found
No related merge requests found
Pipeline #2819049 passed
...@@ -97,6 +97,9 @@ func (r *GitlabPagesSiteReconciler) newRouteForGitlabPagesSite(gitlabPagesSite * ...@@ -97,6 +97,9 @@ func (r *GitlabPagesSiteReconciler) newRouteForGitlabPagesSite(gitlabPagesSite *
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: gitlabPagesSite.Name, Name: gitlabPagesSite.Name,
Namespace: r.Namespace, Namespace: r.Namespace,
Annotations: map[string]string{
"webservices.cern.ch/static-site-owner": types.NamespacedName{Name: gitlabPagesSite.Name, Namespace: gitlabPagesSite.Namespace}.String(),
},
}, },
Spec: routev1.RouteSpec{ Spec: routev1.RouteSpec{
TLS: &routev1.TLSConfig{ TLS: &routev1.TLSConfig{
...@@ -114,13 +117,6 @@ func (r *GitlabPagesSiteReconciler) newRouteForGitlabPagesSite(gitlabPagesSite * ...@@ -114,13 +117,6 @@ func (r *GitlabPagesSiteReconciler) newRouteForGitlabPagesSite(gitlabPagesSite *
}, },
} }
// Set GitlabPagesSite instance as the owner and controller. This will set
// the OwnerReferences to the route, and will trigger a deletion of the
// route when the GitlabPagesSite parent gets deleted.
// if err := controllerutil.SetControllerReference(gitlabPagesSite, route, r.Scheme); err != nil {
// return nil, fmt.Errorf("failed to set controller reference for route creation with err: %v", err)
// }
return route, nil return route, nil
} }
......
...@@ -20,6 +20,7 @@ import ( ...@@ -20,6 +20,7 @@ import (
"context" "context"
"fmt" "fmt"
"reflect" "reflect"
"strings"
"time" "time"
"github.com/go-logr/logr" "github.com/go-logr/logr"
...@@ -32,7 +33,10 @@ import ( ...@@ -32,7 +33,10 @@ import (
ctrl "sigs.k8s.io/controller-runtime" ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
"sigs.k8s.io/controller-runtime/pkg/handler"
"sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
"sigs.k8s.io/controller-runtime/pkg/source"
authzalpha1 "gitlab.cern.ch/paas-tools/operators/authz-operator/api/v1alpha1" authzalpha1 "gitlab.cern.ch/paas-tools/operators/authz-operator/api/v1alpha1"
webservicescernchv1alpha1 "gitlab.cern.ch/paas-tools/operators/static-site-operator/api/v1alpha1" webservicescernchv1alpha1 "gitlab.cern.ch/paas-tools/operators/static-site-operator/api/v1alpha1"
...@@ -109,6 +113,16 @@ func (r *GitlabPagesSiteReconciler) Reconcile(ctx context.Context, req ctrl.Requ ...@@ -109,6 +113,16 @@ func (r *GitlabPagesSiteReconciler) Reconcile(ctx context.Context, req ctrl.Requ
if err != nil { if err != nil {
return ctrl.Result{}, err return ctrl.Result{}, err
} }
route, err := r.getRoute(gitlabPagesSite)
if err != nil {
return ctrl.Result{}, err
}
err = r.Delete(context.TODO(), route, &client.DeleteOptions{})
if err != nil {
return ctrl.Result{}, err
}
} }
r.logger.Info("GitlabPagesSite has been deleted") r.logger.Info("GitlabPagesSite has been deleted")
...@@ -166,7 +180,23 @@ func (r *GitlabPagesSiteReconciler) Reconcile(ctx context.Context, req ctrl.Requ ...@@ -166,7 +180,23 @@ func (r *GitlabPagesSiteReconciler) Reconcile(ctx context.Context, req ctrl.Requ
func (r *GitlabPagesSiteReconciler) SetupWithManager(mgr ctrl.Manager) error { func (r *GitlabPagesSiteReconciler) SetupWithManager(mgr ctrl.Manager) error {
return ctrl.NewControllerManagedBy(mgr). return ctrl.NewControllerManagedBy(mgr).
For(&webservicescernchv1alpha1.GitlabPagesSite{}). For(&webservicescernchv1alpha1.GitlabPagesSite{}).
// TODO: We can't set the controller reference for now since the `Route` and `GitlabPagesSite` live in different namespaces Watches(&source.Kind{Type: &routev1.Route{}}, handler.EnqueueRequestsFromMapFunc(
Owns(&routev1.Route{}). func(a client.Object) []reconcile.Request {
namespace := a.GetNamespace()
// we only care about the `Route`s within the namespace specified by r.Namespace
if namespace != r.Namespace {
return []reconcile.Request{}
}
annotations := a.GetAnnotations()
if annotations != nil && annotations["webservices.cern.ch/static-site-owner"] != "" {
parts := strings.Split(annotations["webservices.cern.ch/static-site-owner"], "/")
return []reconcile.Request{{NamespacedName: types.NamespacedName{Name: parts[1], Namespace: parts[0]}}}
}
return []reconcile.Request{}
}),
).
Complete(r) Complete(r)
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment