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 Oct 24, 2019
1 parent b6211a4 commit 983680d
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 0 deletions.
49 changes: 49 additions & 0 deletions pkg/autodetect/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,54 @@ func (b *Background) Stop() {
b.ticker.Stop()
}

func (b *Background) requireUpdates(deps *appsv1.DeploymentList) []*appsv1.Deployment {
instances := &v1.JaegerList{}
if err := b.cl.List(context.Background(), instances); err != nil {
return nil
}
requireUpdates := make([]*appsv1.Deployment, 0)
for i := 0; i < len(deps.Items); i++ {
dep := &deps.Items[i]
if inject.Needed(dep) { // If sidecar is not present and should be
jaeger := inject.Select(dep, instances)
if jaeger != nil { // Instance exists.
jaeger.Logger().WithFields(log.Fields{
"deploymentName": dep.Name,
"deploymentNamespace": dep.Namespace,
}).Info("Injecting Jaeger Agent sidecar")
dep.Annotations[inject.Annotation] = jaeger.Name
newDep := inject.Sidecar(jaeger, dep)
requireUpdates = append(requireUpdates, newDep)
}
} else {
// Try to update the sidecar if is required
jaeger := inject.Select(dep, instances)
updated := inject.UpdateSideCar(jaeger, dep)
if updated {
if err := b.cl.Update(context.Background(), dep); err != nil {
return nil
}
}
}
}
return requireUpdates
}

func (b *Background) detectDeploymentUpdates() error {
deps := &appsv1.DeploymentList{}
if err := b.cl.List(context.Background(), deps); err != nil {
return err
}
injectedDeps := b.requireUpdates(deps)
for _, d := range injectedDeps {
if err := b.cl.Update(context.Background(), d); err != nil {
return err
}
}

return nil
}

func (b *Background) autoDetectCapabilities() {
apiList, err := b.availableAPIs()
if err != nil {
Expand All @@ -92,6 +140,7 @@ func (b *Background) autoDetectCapabilities() {

b.detectClusterRoles()
b.cleanDeployments()
b.detectDeploymentUpdates()

}

Expand Down
11 changes: 11 additions & 0 deletions pkg/inject/sidecar.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,17 @@ func Sidecar(jaeger *v1.Jaeger, dep *appsv1.Deployment) *appsv1.Deployment {
return dep
}

// UpdateSideCar modify the deployment side car with the latest parameters if it's required.
func UpdateSideCar(jaeger *v1.Jaeger, dep *appsv1.Deployment) bool {
for i := range dep.Spec.Template.Spec.Containers {
if dep.Spec.Template.Spec.Containers[i].Name == "jaeger-agent" {
dep.Spec.Template.Spec.Containers[i] = container(jaeger, dep)
return true
}
}
return false
}

// Needed determines whether a pod needs to get a sidecar injected or not
func Needed(dep *appsv1.Deployment) bool {
if dep.Annotations[Annotation] == "" {
Expand Down

0 comments on commit 983680d

Please sign in to comment.