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 Jul 31, 2019
1 parent ed0fa6d commit 3adaea1
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 0 deletions.
24 changes: 24 additions & 0 deletions pkg/controller/jaeger/jaeger_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,30 @@ 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
}

Expand Down
30 changes: 30 additions & 0 deletions pkg/inject/sidecar.go
Original file line number Diff line number Diff line change
Expand Up @@ -199,4 +199,34 @@ func CleanSidecars(deployments []appsv1.Deployment) {
}
}
}

// 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 3adaea1

Please sign in to comment.