Skip to content

Commit

Permalink
Changed deployments and sidecar to derive image at runtime
Browse files Browse the repository at this point in the history
Signed-off-by: Juraci Paixão Kröhling <[email protected]>
  • Loading branch information
jpkrohling committed Jul 30, 2019
1 parent d4fa83a commit 7e77335
Show file tree
Hide file tree
Showing 21 changed files with 212 additions and 60 deletions.
3 changes: 2 additions & 1 deletion pkg/controller/jaeger/jaeger_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,8 @@ func defaultStrategyChooser(instance *v1.Jaeger, secrets []corev1.Secret) strate
}

func (r *ReconcileJaeger) apply(jaeger v1.Jaeger, str strategy.S) error {
if err := r.applyUpgrades(jaeger); err != nil {
jaeger, err := r.applyUpgrades(jaeger)
if err != nil {
return err
}

Expand Down
12 changes: 6 additions & 6 deletions pkg/controller/jaeger/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,20 @@ import (
"github.com/jaegertracing/jaeger-operator/pkg/version"
)

func (r *ReconcileJaeger) applyUpgrades(jaeger v1.Jaeger) error {
func (r *ReconcileJaeger) applyUpgrades(jaeger v1.Jaeger) (v1.Jaeger, error) {
currentVersions := version.Get()

if len(jaeger.Status.Version) > 0 {
if jaeger.Status.Version != currentVersions.Jaeger {
// in theory, the version from the Status could be higher than currentVersions.Jaeger, but we let the upgrade routine
// check/handle it
if err := upgrade.ManagedInstance(r.client, jaeger); err != nil {
return err
upgraded, err := upgrade.ManagedInstance(r.client, jaeger)
if err != nil {
return jaeger, err
}
jaeger = upgraded
}
}

jaeger.Status.Version = currentVersions.Jaeger

return nil
return jaeger, nil
}
35 changes: 35 additions & 0 deletions pkg/controller/jaeger/upgrade_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package jaeger

import (
"testing"

"github.com/spf13/viper"
"github.com/stretchr/testify/assert"
"k8s.io/apimachinery/pkg/types"

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

func TestDirectNextMinor(t *testing.T) {
viper.Set("jaeger-version", "")
defer viper.Reset()

// prepare
nsn := types.NamespacedName{
Name: "my-instance",
}

r := &ReconcileJaeger{}
j := *v1.NewJaeger(nsn)
j.Status.Version = "1.12.0"

//test
j, err := r.applyUpgrades(j)

// verify
assert.NoError(t, err)

// we cannot make any other assumptions here, but we know that 1.12.0 is an older
// version, so, at least the status field should have been updated
assert.NotEqual(t, "1.12.0", j.Status.Version)
}
11 changes: 6 additions & 5 deletions pkg/deployment/agent.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,6 @@ type Agent struct {

// NewAgent builds a new Agent struct based on the given spec
func NewAgent(jaeger *v1.Jaeger) *Agent {
if jaeger.Spec.Agent.Image == "" {
jaeger.Spec.Agent.Image = fmt.Sprintf("%s:%s", viper.GetString("jaeger-agent-image"), version.Get().Jaeger)
}

return &Agent{jaeger: jaeger}
}

Expand Down Expand Up @@ -76,6 +72,11 @@ func (a *Agent) Get() *appsv1.DaemonSet {
// see https://github.com/jaegertracing/jaeger-operator/issues/334
sort.Strings(args)

image := a.jaeger.Spec.Agent.Image
if image == "" {
image = fmt.Sprintf("%s:%s", viper.GetString("jaeger-agent-image"), version.Get().Jaeger)
}

return &appsv1.DaemonSet{
TypeMeta: metav1.TypeMeta{
APIVersion: "apps/v1",
Expand Down Expand Up @@ -106,7 +107,7 @@ func (a *Agent) Get() *appsv1.DaemonSet {
},
Spec: corev1.PodSpec{
Containers: []corev1.Container{{
Image: a.jaeger.Spec.Agent.Image,
Image: image,
Name: "jaeger-agent-daemonset",
Args: args,
Ports: []corev1.ContainerPort{
Expand Down
18 changes: 12 additions & 6 deletions pkg/deployment/agent_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,18 +28,24 @@ func reset() {
}

func TestNewAgent(t *testing.T) {
jaeger := v1.NewJaeger(types.NamespacedName{Name: "TestNewAgent"})
NewAgent(jaeger)
assert.Contains(t, jaeger.Spec.Agent.Image, "jaeger-agent")
jaeger := v1.NewJaeger(types.NamespacedName{Name: "my-instance"})
jaeger.Spec.Agent.Strategy = "daemonset"

d := NewAgent(jaeger).Get()
assert.Empty(t, jaeger.Spec.Agent.Image)
assert.Contains(t, d.Spec.Template.Spec.Containers[0].Image, "jaeger-agent")
}

func TestDefaultAgentImage(t *testing.T) {
viper.Set("jaeger-agent-image", "org/custom-agent-image")
defer reset()

jaeger := v1.NewJaeger(types.NamespacedName{Name: "TestNewAgent"})
NewAgent(jaeger)
assert.Equal(t, "org/custom-agent-image:0.0.0", jaeger.Spec.Agent.Image)
jaeger := v1.NewJaeger(types.NamespacedName{Name: "my-instance"})
jaeger.Spec.Agent.Strategy = "daemonset"

d := NewAgent(jaeger).Get()
assert.Empty(t, jaeger.Spec.Agent.Image)
assert.Equal(t, "org/custom-agent-image:0.0.0", d.Spec.Template.Spec.Containers[0].Image)
}

func TestGetDefaultAgentDeployment(t *testing.T) {
Expand Down
13 changes: 7 additions & 6 deletions pkg/deployment/all-in-one.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
"sort"
"strconv"

"github.com/spf13/viper"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand All @@ -19,6 +18,7 @@ import (
"github.com/jaegertracing/jaeger-operator/pkg/storage"
"github.com/jaegertracing/jaeger-operator/pkg/util"
"github.com/jaegertracing/jaeger-operator/pkg/version"
"github.com/spf13/viper"
)

// AllInOne builds pods for jaegertracing/all-in-one
Expand All @@ -28,10 +28,6 @@ type AllInOne struct {

// NewAllInOne builds a new AllInOne struct based on the given spec
func NewAllInOne(jaeger *v1.Jaeger) *AllInOne {
if jaeger.Spec.AllInOne.Image == "" {
jaeger.Spec.AllInOne.Image = fmt.Sprintf("%s:%s", viper.GetString("jaeger-all-in-one-image"), version.Get().Jaeger)
}

return &AllInOne{jaeger: jaeger}
}

Expand Down Expand Up @@ -78,6 +74,11 @@ func (a *AllInOne) Get() *appsv1.Deployment {
})
}

image := a.jaeger.Spec.AllInOne.Image
if image == "" {
image = fmt.Sprintf("%s:%s", viper.GetString("jaeger-all-in-one-image"), version.Get().Jaeger)
}

return &appsv1.Deployment{
TypeMeta: metav1.TypeMeta{
APIVersion: "apps/v1",
Expand Down Expand Up @@ -109,7 +110,7 @@ func (a *AllInOne) Get() *appsv1.Deployment {
},
Spec: corev1.PodSpec{
Containers: []corev1.Container{{
Image: a.jaeger.Spec.AllInOne.Image,
Image: image,
Name: "jaeger",
Args: options,
Env: []corev1.EnvVar{
Expand Down
4 changes: 3 additions & 1 deletion pkg/deployment/all-in-one_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,11 @@ func TestDefaultAllInOneImage(t *testing.T) {
viper.Set("jaeger-all-in-one-image", "org/custom-all-in-one-image")
defer viper.Reset()

d := NewAllInOne(v1.NewJaeger(types.NamespacedName{Name: "TestAllInOneDefaultImage"})).Get()
jaeger := v1.NewJaeger(types.NamespacedName{Name: "my-instance"})
d := NewAllInOne(jaeger).Get()

assert.Len(t, d.Spec.Template.Spec.Containers, 1)
assert.Empty(t, jaeger.Spec.AllInOne.Image)
assert.Equal(t, "org/custom-all-in-one-image:0.0.0", d.Spec.Template.Spec.Containers[0].Image)

envvars := []corev1.EnvVar{
Expand Down
2 changes: 1 addition & 1 deletion pkg/deployment/args.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package deployment

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

func allArgs(optionsList ...v1.Options) []string {
Expand Down
11 changes: 6 additions & 5 deletions pkg/deployment/collector.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,6 @@ func NewCollector(jaeger *v1.Jaeger) *Collector {
jaeger.Spec.Collector.Replicas = &replicaSize
}

if jaeger.Spec.Collector.Image == "" {
jaeger.Spec.Collector.Image = fmt.Sprintf("%s:%s", viper.GetString("jaeger-collector-image"), version.Get().Jaeger)
}

return &Collector{jaeger: jaeger}
}

Expand Down Expand Up @@ -94,6 +90,11 @@ func (c *Collector) Get() *appsv1.Deployment {
// see https://github.com/jaegertracing/jaeger-operator/issues/334
sort.Strings(options)

image := c.jaeger.Spec.Collector.Image
if image == "" {
image = fmt.Sprintf("%s:%s", viper.GetString("jaeger-collector-image"), version.Get().Jaeger)
}

return &appsv1.Deployment{
TypeMeta: metav1.TypeMeta{
APIVersion: "apps/v1",
Expand Down Expand Up @@ -126,7 +127,7 @@ func (c *Collector) Get() *appsv1.Deployment {
},
Spec: corev1.PodSpec{
Containers: []corev1.Container{{
Image: c.jaeger.Spec.Collector.Image,
Image: image,
Name: "jaeger-collector",
Args: options,
Env: []corev1.EnvVar{
Expand Down
4 changes: 3 additions & 1 deletion pkg/deployment/collector_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,13 @@ func TestDefaultCollectorImage(t *testing.T) {
viper.Set("jaeger-collector-image", "org/custom-collector-image")
defer viper.Reset()

collector := NewCollector(v1.NewJaeger(types.NamespacedName{Name: "TestCollectorImage"}))
jaeger := v1.NewJaeger(types.NamespacedName{Name: "my-instance"})
collector := NewCollector(jaeger)
dep := collector.Get()

containers := dep.Spec.Template.Spec.Containers
assert.Len(t, containers, 1)
assert.Empty(t, jaeger.Spec.Collector.Image)
assert.Equal(t, "org/custom-collector-image:0.0.0", containers[0].Image)

envvars := []corev1.EnvVar{
Expand Down
11 changes: 6 additions & 5 deletions pkg/deployment/ingester.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,6 @@ func NewIngester(jaeger *v1.Jaeger) *Ingester {
jaeger.Spec.Ingester.Replicas = &replicaSize
}

if jaeger.Spec.Ingester.Image == "" {
jaeger.Spec.Ingester.Image = fmt.Sprintf("%s:%s", viper.GetString("jaeger-ingester-image"), version.Get().Jaeger)
}

return &Ingester{jaeger: jaeger}
}

Expand Down Expand Up @@ -88,6 +84,11 @@ func (i *Ingester) Get() *appsv1.Deployment {
// see https://github.com/jaegertracing/jaeger-operator/issues/334
sort.Strings(options)

image := i.jaeger.Spec.Ingester.Image
if image == "" {
image = fmt.Sprintf("%s:%s", viper.GetString("jaeger-ingester-image"), version.Get().Jaeger)
}

return &appsv1.Deployment{
TypeMeta: metav1.TypeMeta{
APIVersion: "apps/v1",
Expand Down Expand Up @@ -119,7 +120,7 @@ func (i *Ingester) Get() *appsv1.Deployment {
},
Spec: corev1.PodSpec{
Containers: []corev1.Container{{
Image: i.jaeger.Spec.Ingester.Image,
Image: image,
Name: "jaeger-ingester",
Args: options,
Env: []corev1.EnvVar{
Expand Down
4 changes: 3 additions & 1 deletion pkg/deployment/ingester_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,11 +94,13 @@ func TestDefaultIngesterImage(t *testing.T) {
viper.Set("jaeger-ingester-image", "org/custom-ingester-image")
defer viper.Reset()

ingester := NewIngester(newIngesterJaeger("TestDefaultIngesterImage"))
jaeger := newIngesterJaeger("my-instance")
ingester := NewIngester(jaeger)
dep := ingester.Get()

containers := dep.Spec.Template.Spec.Containers
assert.Len(t, containers, 1)
assert.Empty(t, jaeger.Spec.Ingester.Image)
assert.Equal(t, "org/custom-ingester-image:0.0.0", containers[0].Image)

envvars := []corev1.EnvVar{
Expand Down
13 changes: 7 additions & 6 deletions pkg/deployment/query.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
"sort"
"strconv"

"github.com/spf13/viper"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand All @@ -18,6 +17,7 @@ import (
"github.com/jaegertracing/jaeger-operator/pkg/storage"
"github.com/jaegertracing/jaeger-operator/pkg/util"
"github.com/jaegertracing/jaeger-operator/pkg/version"
"github.com/spf13/viper"
)

// Query builds pods for jaegertracing/jaeger-query
Expand All @@ -37,10 +37,6 @@ func NewQuery(jaeger *v1.Jaeger) *Query {
jaeger.Spec.Query.Replicas = &replicaSize
}

if jaeger.Spec.Query.Image == "" {
jaeger.Spec.Query.Image = fmt.Sprintf("%s:%s", viper.GetString("jaeger-query-image"), version.Get().Jaeger)
}

return &Query{jaeger: jaeger}
}

Expand Down Expand Up @@ -92,6 +88,11 @@ func (q *Query) Get() *appsv1.Deployment {
// see https://github.com/jaegertracing/jaeger-operator/issues/334
sort.Strings(options)

image := q.jaeger.Spec.Query.Image
if image == "" {
image = fmt.Sprintf("%s:%s", viper.GetString("jaeger-query-image"), version.Get().Jaeger)
}

return &appsv1.Deployment{
TypeMeta: metav1.TypeMeta{
APIVersion: "apps/v1",
Expand Down Expand Up @@ -124,7 +125,7 @@ func (q *Query) Get() *appsv1.Deployment {
},
Spec: corev1.PodSpec{
Containers: []corev1.Container{{
Image: q.jaeger.Spec.Query.Image,
Image: image,
Name: "jaeger-query",
Args: options,
Env: []corev1.EnvVar{
Expand Down
4 changes: 3 additions & 1 deletion pkg/deployment/query_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,11 +79,13 @@ func TestDefaultQueryImage(t *testing.T) {
viper.Set("jaeger-query-image", "org/custom-query-image")
defer viper.Reset()

query := NewQuery(v1.NewJaeger(types.NamespacedName{Name: "TestQueryImage"}))
jaeger := v1.NewJaeger(types.NamespacedName{Name: "TestQueryImage"})
query := NewQuery(jaeger)
dep := query.Get()
containers := dep.Spec.Template.Spec.Containers

assert.Len(t, containers, 1)
assert.Empty(t, jaeger.Spec.Query.Image)
assert.Equal(t, "org/custom-query-image:0.0.0", containers[0].Image)
}

Expand Down
11 changes: 9 additions & 2 deletions pkg/inject/sidecar.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@ import (
"strings"

log "github.com/sirupsen/logrus"
"github.com/spf13/viper"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"

"github.com/jaegertracing/jaeger-operator/pkg/apis/jaegertracing/v1"
v1 "github.com/jaegertracing/jaeger-operator/pkg/apis/jaegertracing/v1"
"github.com/jaegertracing/jaeger-operator/pkg/deployment"
"github.com/jaegertracing/jaeger-operator/pkg/service"
"github.com/jaegertracing/jaeger-operator/pkg/util"
"github.com/jaegertracing/jaeger-operator/pkg/version"
)

var (
Expand Down Expand Up @@ -117,8 +119,13 @@ func container(jaeger *v1.Jaeger) corev1.Container {
// see https://github.com/jaegertracing/jaeger-operator/issues/334
sort.Strings(args)

image := jaeger.Spec.Agent.Image
if image == "" {
image = fmt.Sprintf("%s:%s", viper.GetString("jaeger-agent-image"), version.Get().Jaeger)
}

return corev1.Container{
Image: jaeger.Spec.Agent.Image,
Image: image,
Name: "jaeger-agent",
Args: args,
Ports: []corev1.ContainerPort{
Expand Down
Loading

0 comments on commit 7e77335

Please sign in to comment.