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 60f5ed6 commit 03ee9fb
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 2 deletions.
56 changes: 55 additions & 1 deletion pkg/autodetect/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,15 @@ import (

log "github.com/sirupsen/logrus"
"github.com/spf13/viper"
appsv1 "k8s.io/api/apps/v1"
authenticationapi "k8s.io/api/authentication/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/discovery"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/manager"

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

// Background represents a procedure that runs in the background, periodically auto-detecting features
Expand Down Expand Up @@ -66,6 +68,57 @@ func (b *Background) Stop() {
b.ticker.Stop()
}

func (b *Background) RequireInjections(deps *appsv1.DeploymentList) []*appsv1.Deployment {
instances := &v1.JaegerList{}
opts := &client.ListOptions{}
if err := b.cl.List(context.Background(), opts, 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 {
opts := &client.ListOptions{}
deps := &appsv1.DeploymentList{}

if err := b.cl.List(context.Background(), opts, deps); err != nil {
return err
}
injectedDeps := b.RequireInjections(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 @@ -79,6 +132,7 @@ func (b *Background) autoDetectCapabilities() {
}

b.detectClusterRoles()
b.detectDeploymentUpdates()
}

func (b *Background) availableAPIs() (*metav1.APIGroupList, error) {
Expand Down
11 changes: 10 additions & 1 deletion pkg/inject/sidecar.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,16 @@ func Sidecar(jaeger *v1.Jaeger, dep *appsv1.Deployment) *appsv1.Deployment {
return dep
}

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)
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 Expand Up @@ -196,7 +206,6 @@ func hasEnv(name string, vars []corev1.EnvVar) bool {
func CleanSidecars(deployments []appsv1.Deployment) {
for i := 0; i < len(deployments); i++ {
dep := &deployments[i]
delete(dep.Annotations, Annotation)
delete(dep.Labels, Annotation)
for c := 0; c < len(dep.Spec.Template.Spec.Containers); c++ {
if dep.Spec.Template.Spec.Containers[c].Name == "jaeger-agent" {
Expand Down

0 comments on commit 03ee9fb

Please sign in to comment.