Skip to content

Commit

Permalink
Scan deployments for agent injection
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 May 30, 2019
1 parent 0a14f3d commit 875263a
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 0 deletions.
26 changes: 26 additions & 0 deletions pkg/controller/jaeger/jaeger_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"github.com/pkg/errors"
log "github.com/sirupsen/logrus"
"github.com/spf13/viper"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
k8serrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/runtime"
Expand All @@ -21,6 +22,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/source"

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

Expand Down Expand Up @@ -220,5 +222,29 @@ func (r *ReconcileJaeger) apply(jaeger v1.Jaeger, str strategy.S) error {
}
}

if err := r.scanDeployments(jaeger); err != nil {
return err
}

return nil
}

func (r *ReconcileJaeger) scanDeployments(jaeger v1.Jaeger) error {
pods := &v1.JaegerList{}
deps := &appsv1.DeploymentList{}

opts := &client.ListOptions{}
if err := r.client.List(context.Background(), opts, pods); err != nil {
return err
}
if err := r.client.List(context.Background(), opts, deps); err != nil {
return err
}
injectedDeps := inject.RequireInjections(&jaeger, pods, deps)
for _, d := range injectedDeps {
if err := r.client.Update(context.Background(), d); err != nil {
return err
}
}
return nil
}
31 changes: 31 additions & 0 deletions pkg/inject/sidecar.go
Original file line number Diff line number Diff line change
Expand Up @@ -177,3 +177,34 @@ func hasEnv(name string, vars []corev1.EnvVar) bool {
}
return false
}

// RequireInjections deployments
func RequireInjections(jaeger *v1.Jaeger, pods *v1.JaegerList, deps *appsv1.DeploymentList) []*appsv1.Deployment {
requireUpdates := make([]*appsv1.Deployment, 0)
for i := 0; i < len(deps.Items); i++ {
dep := &deps.Items[i]
if Needed(dep) {
if belongsToJaegerInstance(dep, jaeger, len(pods.Items) == 1) {
// a suitable jaeger instance was found! let's inject a sidecar pointing to it then
log.WithFields(log.Fields{
"deployment": dep.Name,
"namespace": dep.Namespace,
"jaeger": jaeger.Name,
"jaeger-namespace": jaeger.Namespace,
}).Info("Injecting Jaeger Agent sidecar")
dep.Annotations[Annotation] = jaeger.Name
newDep := Sidecar(jaeger, dep)
requireUpdates = append(requireUpdates, newDep)
} else {
log.WithField("deployment", dep.Name).Info("No suitable Jaeger instances found to inject a sidecar")
}
}
}
return requireUpdates
}

func belongsToJaegerInstance(dep *appsv1.Deployment, instance *v1.Jaeger, uniqueInstance bool) bool {
annotation := dep.Annotations[Annotation]
return strings.EqualFold(annotation, "true") &&
uniqueInstance || annotation == instance.Name
}

0 comments on commit 875263a

Please sign in to comment.