Skip to content

Commit

Permalink
Standardize image defaulting (#355)
Browse files Browse the repository at this point in the history
* Standardize image defaulting

* Add more logic to the defaulting.Image

* Default tags only if new present in the image name
  • Loading branch information
clamoriniere committed Aug 16, 2021
1 parent 18dac27 commit 7cb27ba
Show file tree
Hide file tree
Showing 23 changed files with 484 additions and 159 deletions.
5 changes: 0 additions & 5 deletions api/v1alpha1/const.go
Original file line number Diff line number Diff line change
Expand Up @@ -318,9 +318,4 @@ const (
ClusterRoleKind = "ClusterRole"
RoleKind = "Role"
ServiceAccountKind = "ServiceAccount"

// Container Registries

DefaultImageRegistry = "gcr.io/datadoghq"
JMXTagSuffix = "-jmx"
)
18 changes: 10 additions & 8 deletions api/v1alpha1/datadogagent_default.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"strings"
"time"

"github.com/DataDog/datadog-operator/pkg/defaulting"
"github.com/DataDog/datadog-operator/pkg/utils"
edsdatadoghqv1alpha1 "github.com/DataDog/extendeddaemonset/api/v1alpha1"
appsv1 "k8s.io/api/apps/v1"
Expand All @@ -21,8 +22,6 @@ import (
// default values
const (
defaultLogLevel string = "INFO"
defaultAgentImageTag string = "7.28.0"
defaultClusterAgentImageTag string = "1.12.0"
defaultAgentImageName string = "agent"
defaultClusterAgentImageName string = "cluster-agent"
defaultCollectEvents bool = false
Expand Down Expand Up @@ -189,7 +188,7 @@ func DefaultDatadogAgentSpecAgent(agent *DatadogAgentSpecAgentSpec) *DatadogAgen
agentOverride.UseExtendedDaemonset = agent.UseExtendedDaemonset
}

if img := DefaultDatadogAgentSpecAgentImage(agent, defaultAgentImageName, defaultAgentImageTag); !IsEqualStruct(*img, ImageConfig{}) {
if img := DefaultDatadogAgentSpecAgentImage(agent, defaultAgentImageName, defaulting.AgentLatestVersion); !IsEqualStruct(*img, ImageConfig{}) {
agentOverride.Image = img
}

Expand Down Expand Up @@ -242,7 +241,8 @@ func DefaultDatadogAgentSpecAgentImage(agent *DatadogAgentSpecAgentSpec, name, t
imgOverride.Name = agent.Image.Name
}

if agent.Image.Tag == "" {
// Only default Tag if not already present in the image.Name
if !defaulting.IsImageNameContainsTag(agent.Image.Name) && agent.Image.Tag == "" {
agent.Image.Tag = tag
imgOverride.Tag = agent.Image.Tag
}
Expand Down Expand Up @@ -955,7 +955,7 @@ func DefaultDatadogAgentSpecClusterAgent(clusterAgent *DatadogAgentSpecClusterAg
if clusterAgent.Image == nil {
clusterAgent.Image = &ImageConfig{}
}
if img := DefaultDatadogClusterAgentImage(clusterAgent, defaultClusterAgentImageName, defaultClusterAgentImageTag); !IsEqualStruct(*img, ImageConfig{}) {
if img := DefaultDatadogClusterAgentImage(clusterAgent, defaultClusterAgentImageName, defaulting.ClusterAgentLatestVersion); !IsEqualStruct(*img, ImageConfig{}) {
clusterAgentOverride.Image = img
}

Expand Down Expand Up @@ -1083,7 +1083,8 @@ func DefaultDatadogClusterAgentImage(dca *DatadogAgentSpecClusterAgentSpec, name
imgOverride.Name = dca.Image.Name
}

if dca.Image.Tag == "" {
// Only default Tag if not already present in the image.Name
if !defaulting.IsImageNameContainsTag(dca.Image.Name) && dca.Image.Tag == "" {
dca.Image.Tag = tag
imgOverride.Tag = dca.Image.Tag
}
Expand Down Expand Up @@ -1119,7 +1120,7 @@ func DefaultDatadogAgentSpecClusterChecksRunner(clusterChecksRunner *DatadogAgen
clcOverride.Enabled = clusterChecksRunner.Enabled
}

if img := DefaultDatadogAgentSpecClusterChecksRunnerImage(clusterChecksRunner, defaultAgentImageName, defaultAgentImageTag); !IsEqualStruct(img, ImageConfig{}) {
if img := DefaultDatadogAgentSpecClusterChecksRunnerImage(clusterChecksRunner, defaultAgentImageName, defaulting.AgentLatestVersion); !IsEqualStruct(img, ImageConfig{}) {
clcOverride.Image = img
}

Expand Down Expand Up @@ -1151,7 +1152,8 @@ func DefaultDatadogAgentSpecClusterChecksRunnerImage(clc *DatadogAgentSpecCluste
imgOverride.Name = clc.Image.Name
}

if clc.Image.Tag == "" {
// Only default Tag if not already present in the image.Name
if !defaulting.IsImageNameContainsTag(clc.Image.Name) && clc.Image.Tag == "" {
clc.Image.Tag = tag
imgOverride.Tag = clc.Image.Tag
}
Expand Down
23 changes: 11 additions & 12 deletions api/v1alpha1/datadogagent_default_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"path"
"testing"

"github.com/DataDog/datadog-operator/pkg/defaulting"
edsdatadoghqv1alpha1 "github.com/DataDog/extendeddaemonset/api/v1alpha1"
"github.com/google/go-cmp/cmp"
assert "github.com/stretchr/testify/require"
Expand Down Expand Up @@ -290,7 +291,7 @@ func TestDefaultDatadogAgentSpecClusterAgent(t *testing.T) {
Enabled: NewBoolPointer(true),
Image: &ImageConfig{
Name: defaultClusterAgentImageName,
Tag: defaultClusterAgentImageTag,
Tag: defaulting.ClusterAgentLatestVersion,
PullPolicy: &defaultImagePullPolicy,
},
Config: &ClusterAgentConfig{
Expand All @@ -314,7 +315,7 @@ func TestDefaultDatadogAgentSpecClusterAgent(t *testing.T) {
Enabled: NewBoolPointer(true),
Image: &ImageConfig{
Name: defaultClusterAgentImageName,
Tag: defaultClusterAgentImageTag,
Tag: defaulting.ClusterAgentLatestVersion,
PullPolicy: &defaultImagePullPolicy,
PullSecrets: &[]corev1.LocalObjectReference{},
},
Expand Down Expand Up @@ -368,7 +369,7 @@ func TestDefaultDatadogAgentSpecClusterAgent(t *testing.T) {
},
overrideExpected: &DatadogAgentSpecClusterAgentSpec{
Image: &ImageConfig{
Tag: defaultClusterAgentImageTag,
Tag: defaulting.ClusterAgentLatestVersion,
},
Config: &ClusterAgentConfig{
ExternalMetrics: &ExternalMetricsConfig{
Expand All @@ -380,7 +381,7 @@ func TestDefaultDatadogAgentSpecClusterAgent(t *testing.T) {
Enabled: NewBoolPointer(true),
Image: &ImageConfig{
Name: "foo",
Tag: defaultClusterAgentImageTag,
Tag: defaulting.ClusterAgentLatestVersion,
PullPolicy: (*corev1.PullPolicy)(NewStringPointer("Always")),
PullSecrets: &[]corev1.LocalObjectReference{},
},
Expand Down Expand Up @@ -445,7 +446,7 @@ func TestDefaultDatadogAgentSpecAgent(t *testing.T) {
UseExtendedDaemonset: NewBoolPointer(false),
Image: &ImageConfig{
Name: defaultAgentImageName,
Tag: defaultAgentImageTag,
Tag: defaulting.AgentLatestVersion,
PullPolicy: &defaultImagePullPolicy,
},
Config: &NodeAgentConfig{
Expand Down Expand Up @@ -491,7 +492,7 @@ func TestDefaultDatadogAgentSpecAgent(t *testing.T) {
UseExtendedDaemonset: NewBoolPointer(false),
Image: &ImageConfig{
Name: defaultAgentImageName,
Tag: defaultAgentImageTag,
Tag: defaulting.AgentLatestVersion,
PullPolicy: &defaultImagePullPolicy,
PullSecrets: &[]corev1.LocalObjectReference{},
},
Expand Down Expand Up @@ -569,7 +570,6 @@ func TestDefaultDatadogAgentSpecAgent(t *testing.T) {
Enabled: NewBoolPointer(true),
UseExtendedDaemonset: NewBoolPointer(false),
Image: &ImageConfig{
Tag: defaultAgentImageTag, // TODO fix this in the patch cycle
PullPolicy: &defaultImagePullPolicy,
},
Config: &NodeAgentConfig{
Expand Down Expand Up @@ -620,7 +620,6 @@ func TestDefaultDatadogAgentSpecAgent(t *testing.T) {
UseExtendedDaemonset: NewBoolPointer(false),
Image: &ImageConfig{
Name: "gcr.io/datadog/agent:6.26.0",
Tag: defaultAgentImageTag,
PullPolicy: &defaultImagePullPolicy,
PullSecrets: &[]corev1.LocalObjectReference{},
},
Expand Down Expand Up @@ -720,7 +719,7 @@ func TestDefaultDatadogAgentSpecClusterChecksRunner(t *testing.T) {
Config: &ClusterChecksRunnerConfig{},
Image: &ImageConfig{
Name: "gcr.io/datadog/agent:latest",
Tag: defaultAgentImageTag,
Tag: defaulting.AgentLatestVersion,
},
},
overrideExpected: &DatadogAgentSpecClusterChecksRunnerSpec{
Expand All @@ -741,7 +740,7 @@ func TestDefaultDatadogAgentSpecClusterChecksRunner(t *testing.T) {
Enabled: NewBoolPointer(true),
Image: &ImageConfig{
Name: "gcr.io/datadog/agent:latest",
Tag: defaultAgentImageTag,
Tag: defaulting.AgentLatestVersion,
PullPolicy: &defaultImagePullPolicy,
PullSecrets: &[]corev1.LocalObjectReference{},
},
Expand All @@ -767,7 +766,7 @@ func TestDefaultDatadogAgentSpecClusterChecksRunner(t *testing.T) {
},
Image: &ImageConfig{
Name: "agent",
Tag: defaultAgentImageTag,
Tag: defaulting.AgentLatestVersion,
},
},
overrideExpected: &DatadogAgentSpecClusterChecksRunnerSpec{
Expand All @@ -786,7 +785,7 @@ func TestDefaultDatadogAgentSpecClusterChecksRunner(t *testing.T) {
Enabled: NewBoolPointer(true),
Image: &ImageConfig{
Name: "agent",
Tag: defaultAgentImageTag,
Tag: defaulting.AgentLatestVersion,
PullPolicy: &defaultImagePullPolicy,
PullSecrets: &[]corev1.LocalObjectReference{},
},
Expand Down
6 changes: 3 additions & 3 deletions api/v1alpha1/datadogagent_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -1232,9 +1232,9 @@ type DatadogAgentSpecClusterChecksRunnerSpec struct {
// +k8s:openapi-gen=true
type ImageConfig struct {
// Define the image to use:
// Use "gcr.io/datadoghq/agent:latest" for Datadog Agent 7
// Use "datadog/dogstatsd:latest" for Standalone Datadog Agent DogStatsD6
// Use "gcr.io/datadoghq/cluster-agent:latest" for Datadog Cluster Agent
// Use "gcr.io/datadoghq/agent" for Datadog Agent 7
// Use "datadog/dogstatsd" for Standalone Datadog Agent DogStatsD
// Use "gcr.io/datadoghq/cluster-agent" for Datadog Cluster Agent
// Use "agent" with the registry and tag configurations for <registry>/agent:<tag>
// Use "cluster-agent" with the registry and tag configurations for <registry>/cluster-agent:<tag>
Name string `json:"name,omitempty"`
Expand Down
3 changes: 2 additions & 1 deletion api/v1alpha1/test/new.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (

datadoghqv1alpha1 "github.com/DataDog/datadog-operator/api/v1alpha1"
"github.com/DataDog/datadog-operator/pkg/controller/utils/comparison"
"github.com/DataDog/datadog-operator/pkg/defaulting"
edsdatadoghqv1alpha1 "github.com/DataDog/extendeddaemonset/api/v1alpha1"
apiregistrationv1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1"
)
Expand All @@ -23,7 +24,7 @@ var (
// apiVersion datadoghqv1alpha1 api version
apiVersion = fmt.Sprintf("%s/%s", datadoghqv1alpha1.GroupVersion.Group, datadoghqv1alpha1.GroupVersion.Version)
pullPolicy = corev1.PullIfNotPresent
defaultImage = "gcr.io/datadoghq/agent:latest"
defaultImage = defaulting.GetLatestAgentImage()
)

// NewDatadogAgentOptions set of option for the DatadogAgent creation
Expand Down
2 changes: 1 addition & 1 deletion api/v1alpha1/zz_generated.openapi.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 5 additions & 4 deletions cmd/kubectl-datadog/agent/upgrade/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"fmt"

"github.com/DataDog/datadog-operator/api/v1alpha1"
"github.com/DataDog/datadog-operator/pkg/defaulting"
"github.com/DataDog/datadog-operator/pkg/plugin/common"

"github.com/spf13/cobra"
Expand All @@ -22,9 +23,9 @@ import (
var (
image string
latest bool
latestImage = "gcr.io/datadoghq/agent:latest"
latestImage = defaulting.GetLatestAgentImage()
upgradeExample = `
# upgrade the version of the datadog agent to latest
# upgrade the version of the datadog agent to known release (%[2]s)
%[1]s upgrade --latest
# upgrade the version of the datadog agent defined in DatadogAgent named foo to latest
Expand Down Expand Up @@ -58,7 +59,7 @@ func New(streams genericclioptions.IOStreams) *cobra.Command {
cmd := &cobra.Command{
Use: "upgrade [flags]",
Short: "Upgrade the Datadog Agent version",
Example: fmt.Sprintf(upgradeExample, "kubectl datadog agent"),
Example: fmt.Sprintf(upgradeExample, "kubectl datadog agent", defaulting.AgentLatestVersion),
SilenceUsage: true,
RunE: func(c *cobra.Command, args []string) error {
if err := o.complete(c, args); err != nil {
Expand All @@ -72,7 +73,7 @@ func New(streams genericclioptions.IOStreams) *cobra.Command {
}

cmd.Flags().StringVarP(&image, "image", "i", "", "The image of the Datadog Agent")
cmd.Flags().BoolVarP(&latest, "latest", "l", false, "Upgrade to gcr.io/datadoghq/agent:latest")
cmd.Flags().BoolVarP(&latest, "latest", "l", false, fmt.Sprintf("Upgrade to %s", defaulting.GetLatestAgentImage()))

o.ConfigFlags.AddFlags(cmd.Flags())

Expand Down
3 changes: 2 additions & 1 deletion cmd/kubectl-datadog/agent/upgrade/upgrade_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"testing"

datadoghqv1alpha1 "github.com/DataDog/datadog-operator/api/v1alpha1"
"github.com/DataDog/datadog-operator/pkg/defaulting"

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
Expand Down Expand Up @@ -106,7 +107,7 @@ func Test_options_upgrade(t *testing.T) {
_ = c.Create(context.TODO(), dd)
return dd
},
image: "gcr.io/datadoghq/agent:latest",
image: defaulting.GetLatestAgentImage(),
wantErr: false,
wantFunc: func(c client.Client, image string) error {
dd := &datadoghqv1alpha1.DatadogAgent{}
Expand Down
11 changes: 6 additions & 5 deletions cmd/kubectl-datadog/clusteragent/upgrade/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"fmt"

"github.com/DataDog/datadog-operator/api/v1alpha1"
"github.com/DataDog/datadog-operator/pkg/defaulting"
"github.com/DataDog/datadog-operator/pkg/plugin/common"

"github.com/spf13/cobra"
Expand All @@ -22,12 +23,12 @@ import (
var (
image string
latest bool
latestImage = "gcr.io/datadoghq/cluster-agent:latest"
latestImage = defaulting.GetLatestClusterAgentImage()
upgradeExample = `
# upgrade the version of the datadog cluster agent to latest
# upgrade the version of the datadog cluster agent to latest known release %[2]s
%[1]s upgrade --latest
# upgrade the version of the datadog cluster agent defined in DatadogAgent named foo to latest
# upgrade the version of the datadog cluster agent defined in DatadogAgent named "foo" to latest
%[1]s upgrade foo --latest
# upgrade the datadog cluster agent with a custom image
Expand Down Expand Up @@ -58,7 +59,7 @@ func New(streams genericclioptions.IOStreams) *cobra.Command {
cmd := &cobra.Command{
Use: "upgrade [flags]",
Short: "Upgrade the Datadog Cluster Agent version",
Example: fmt.Sprintf(upgradeExample, "kubectl datadog clusteragent"),
Example: fmt.Sprintf(upgradeExample, "kubectl datadog clusteragent", defaulting.ClusterAgentLatestVersion),
SilenceUsage: true,
RunE: func(c *cobra.Command, args []string) error {
if err := o.complete(c, args); err != nil {
Expand All @@ -72,7 +73,7 @@ func New(streams genericclioptions.IOStreams) *cobra.Command {
}

cmd.Flags().StringVarP(&image, "image", "i", "", "The image of the Datadog Cluster Agent")
cmd.Flags().BoolVarP(&latest, "latest", "l", false, "Upgrade to gcr.io/datadoghq/cluster-agent:latest")
cmd.Flags().BoolVarP(&latest, "latest", "l", false, fmt.Sprintf("Upgrade to %s", defaulting.GetLatestClusterAgentImage()))

o.ConfigFlags.AddFlags(cmd.Flags())

Expand Down
3 changes: 2 additions & 1 deletion cmd/kubectl-datadog/clusteragent/upgrade/upgrade_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"testing"

datadoghqv1alpha1 "github.com/DataDog/datadog-operator/api/v1alpha1"
"github.com/DataDog/datadog-operator/pkg/defaulting"

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
Expand Down Expand Up @@ -41,7 +42,7 @@ func Test_options_upgrade(t *testing.T) {
_ = c.Create(context.TODO(), dd)
return dd
},
image: "gcr.io/datadoghq/cluster-agent:latest",
image: defaulting.GetLatestClusterAgentImage(),
wantErr: false,
wantFunc: func(c client.Client, image string) error {
dd := &datadoghqv1alpha1.DatadogAgent{}
Expand Down

0 comments on commit 7cb27ba

Please sign in to comment.