Skip to content

Commit

Permalink
Add link to openshift console
Browse files Browse the repository at this point in the history
Signed-off-by: Ruben Vargas <ruben.vp8510@gmail.com>
  • Loading branch information
rubenvp8510 committed Jul 21, 2020
1 parent b59a4c3 commit 5e0607e
Show file tree
Hide file tree
Showing 14 changed files with 562 additions and 0 deletions.
43 changes: 43 additions & 0 deletions pkg/consolelink/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package consolelink

import (
"fmt"

consolev1 "github.com/openshift/api/console/v1"
routev1 "github.com/openshift/api/route/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

v1 "github.com/jaegertracing/jaeger-operator/pkg/apis/jaegertracing/v1"
)

// RouteAnnotation used to annotate the link with the route name
var RouteAnnotation = "consolelink.jaegertracing.io/route"

// Get returns an ConsoleLink specification for the current instance
func Get(jaeger *v1.Jaeger, route *routev1.Route) *consolev1.ConsoleLink {
return &consolev1.ConsoleLink{
ObjectMeta: metav1.ObjectMeta{
Name: jaeger.Namespace + ".jaeger-consolelink-" + jaeger.Name,
Labels: map[string]string{
"app.kubernetes.io/instance": jaeger.Name,
"app.kubernetes.io/managed-by": "jaeger-operator",
},
Annotations: map[string]string{
RouteAnnotation: route.Name,
},
},
Spec: consolev1.ConsoleLinkSpec{
Location: consolev1.ApplicationMenu,
ApplicationMenu: &consolev1.ApplicationMenuSpec{},
Link: consolev1.Link{
Text: "Jaeger [" + jaeger.Namespace + "]",
},
},
}

}

// UpdateHref returns an ConsoleLink with the href value derived from the route
func UpdateHref(link *consolev1.ConsoleLink, route routev1.Route) {
link.Spec.Href = fmt.Sprintf("https://%s", route.Spec.Host)
}
59 changes: 59 additions & 0 deletions pkg/consolelink/main_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package consolelink

import (
"testing"

corev1 "github.com/openshift/api/route/v1"
"github.com/stretchr/testify/assert"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"

v1 "github.com/jaegertracing/jaeger-operator/pkg/apis/jaegertracing/v1"
)

func TestConsoleLinkGet(t *testing.T) {
jaegerName := "TestConsoleLinkJaeger"
jaegerNamespace := "TestNS"
routerNamer := "TestConsoleLinkRoute"

jaeger := v1.NewJaeger(types.NamespacedName{Name: jaegerName, Namespace: jaegerNamespace})
route := &corev1.Route{
TypeMeta: metav1.TypeMeta{
Kind: "Route",
APIVersion: "route.openshift.io/v1",
},
ObjectMeta: metav1.ObjectMeta{
Name: routerNamer,
},
}

link := Get(jaeger, route)
assert.Equal(t, link.Name, jaeger.Namespace+".jaeger-consolelink-"+jaeger.Name)
assert.Contains(t, link.Annotations, RouteAnnotation)
assert.Equal(t, link.Annotations[RouteAnnotation], routerNamer)
}

func TestUpdateHref(t *testing.T) {
jaegerName := "TestConsoleLinkJaeger"
jaegerNamespace := "TestNS"
routerNamer := "TestConsoleLinkRoute"

jaeger := v1.NewJaeger(types.NamespacedName{Name: jaegerName, Namespace: jaegerNamespace})
route := &corev1.Route{
TypeMeta: metav1.TypeMeta{
Kind: "Route",
APIVersion: "route.openshift.io/v1",
},
ObjectMeta: metav1.ObjectMeta{
Name: routerNamer,
},
}

link := Get(jaeger, route)
assert.Equal(t, link.Spec.Href, "")

route.Spec.Host = "namespace.somehostname"
UpdateHref(link, *route)
assert.Equal(t, link.Spec.Href, "https://"+route.Spec.Host)

}
5 changes: 5 additions & 0 deletions pkg/controller/controller.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package controller

import (
consolev1 "github.com/openshift/api/console/v1"
routev1 "github.com/openshift/api/route/v1"
"sigs.k8s.io/controller-runtime/pkg/manager"

Expand All @@ -17,6 +18,10 @@ func AddToManager(m manager.Manager) error {
return err
}

if err := consolev1.Install(m.GetScheme()); err != nil {
return err
}

// Registry just the ImageStream - adding osimagev1.AddToScheme(..) causes
// the SecretList to be registered again, which resulted in
// https://github.com/kubernetes-sigs/controller-runtime/issues/362
Expand Down
86 changes: 86 additions & 0 deletions pkg/controller/jaeger/consolelink.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package jaeger

import (
"context"

osconsolev1 "github.com/openshift/api/console/v1"
osroutev1 "github.com/openshift/api/route/v1"
log "github.com/sirupsen/logrus"
"go.opentelemetry.io/otel/global"
"k8s.io/apimachinery/pkg/types"
"sigs.k8s.io/controller-runtime/pkg/client"

v1 "github.com/jaegertracing/jaeger-operator/pkg/apis/jaegertracing/v1"
"github.com/jaegertracing/jaeger-operator/pkg/consolelink"
"github.com/jaegertracing/jaeger-operator/pkg/inventory"
"github.com/jaegertracing/jaeger-operator/pkg/tracing"
)

func (r *ReconcileJaeger) updateHref(ctx context.Context,
jaeger v1.Jaeger, links []osconsolev1.ConsoleLink) []osconsolev1.ConsoleLink {

for i, cl := range links {
routeName := cl.Annotations[consolelink.RouteAnnotation]
route := osroutev1.Route{}
if err := r.rClient.Get(ctx, types.NamespacedName{Name: routeName, Namespace: cl.Namespace}, &route); err != nil {
jaeger.Logger().WithError(err).WithFields(log.Fields{
"consoleLink": cl.Name,
"namespace": cl.Namespace,
}).Warn("updating console link href")
}
consolelink.UpdateHref(&links[i], route)
}
return links
}

func (r *ReconcileJaeger) applyConsoleLink(ctx context.Context, jaeger v1.Jaeger, desired []osconsolev1.ConsoleLink) error {
tracer := global.TraceProvider().GetTracer(v1.ReconciliationTracer)
ctx, span := tracer.Start(ctx, "applyConsoleLink")
defer span.End()

opts := []client.ListOption{
client.InNamespace(jaeger.Namespace),
client.MatchingLabels(map[string]string{
"app.kubernetes.io/instance": jaeger.Name,
"app.kubernetes.io/managed-by": "jaeger-operator",
}),
}
list := &osconsolev1.ConsoleLinkList{}
if err := r.rClient.List(ctx, list, opts...); err != nil {
return tracing.HandleError(err, span)
}

desiredWithHref := r.updateHref(ctx, jaeger, desired)
inv := inventory.ForConsoleLinks(list.Items, desiredWithHref)
for _, d := range inv.Create {
jaeger.Logger().WithFields(log.Fields{
"consoleLink": d.Name,
"namespace": d.Namespace,
}).Debug("creating console link")
if err := r.client.Create(ctx, &d); err != nil {
return tracing.HandleError(err, span)
}
}

for _, d := range inv.Update {
jaeger.Logger().WithFields(log.Fields{
"consoleLink": d.Name,
"namespace": d.Namespace,
}).Debug("updating console link")
if err := r.client.Update(ctx, &d); err != nil {
return tracing.HandleError(err, span)
}
}

for _, d := range inv.Delete {
jaeger.Logger().WithFields(log.Fields{
"consoleLink": d.Name,
"namespace": d.Namespace,
}).Debug("deleting console link")
if err := r.client.Delete(ctx, &d); err != nil {
return tracing.HandleError(err, span)
}
}

return nil
}
Loading

0 comments on commit 5e0607e

Please sign in to comment.