Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add operator agent install method #915

Merged
merged 56 commits into from
Sep 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
feee1ab
add agent-with-operator install method
fanny-jiang May 17, 2024
ea94860
Refactor helm kubernetes agent
fanny-jiang Jun 12, 2024
7d144ae
Merge branch 'main' into fanny/CECO-1147/operator-agent-install
fanny-jiang Jun 12, 2024
cc40cd7
export kubernetes obj ref
fanny-jiang Jun 14, 2024
5c2a4a9
fix component export and cleanup
fanny-jiang Jun 17, 2024
dec1cbf
Merge branch 'main' into fanny/refactor-k8s-agent
fanny-jiang Jun 17, 2024
72dd87b
fix var naming
fanny-jiang Jun 17, 2024
95fa8f1
Merge branch 'fanny/CECO-1147/operator-agent-install' into fanny/add-…
fanny-jiang Jun 18, 2024
df3db88
Merge branch 'main' into fanny/refactor-k8s-agent
fanny-jiang Jun 21, 2024
5483ec7
Merge branch 'main' into fanny/refactor-k8s-agent
fanny-jiang Jun 27, 2024
b6aa46e
wip
fanny-jiang Jun 28, 2024
491942a
fix fakeIntake param
fanny-jiang Jun 28, 2024
08969a9
Merge branch 'fanny/refactor-k8s-agent' into fanny/add-operator
fanny-jiang Jun 28, 2024
fa71349
update test
fanny-jiang Jun 28, 2024
95909d2
Merge branch 'main' into fanny/refactor-k8s-agent
fanny-jiang Jun 28, 2024
e255a03
fix linter errors
fanny-jiang Jun 28, 2024
1e694eb
Merge branch 'fanny/refactor-k8s-agent' into fanny/add-operator
fanny-jiang Jun 28, 2024
d2bc1fe
cleanup
fanny-jiang Jun 28, 2024
fb5e273
Merge branch 'fanny/refactor-k8s-agent' into fanny/add-operator
fanny-jiang Jun 28, 2024
7f3b920
update go.mod
fanny-jiang Jun 28, 2024
9e81f6b
fix stackname
fanny-jiang Jul 3, 2024
8979e1f
wip
fanny-jiang Jul 8, 2024
5218436
Merge remote-tracking branch 'refs/remotes/origin/main' into fanny/ad…
fanny-jiang Jul 8, 2024
eed2310
wip
fanny-jiang Jul 8, 2024
e6f99d6
fix merging dda configs
fanny-jiang Jul 10, 2024
f55ba7b
update go deps, fix tests
fanny-jiang Jul 10, 2024
d659ee3
fix go.mod
fanny-jiang Jul 10, 2024
7d9303d
Merge branch 'main' into fanny/add-operator
fanny-jiang Jul 12, 2024
c605fed
Merge branch 'main' into fanny/add-operator
fanny-jiang Jul 12, 2024
5514217
update go.mod and go.sum
fanny-jiang Jul 12, 2024
75fd27e
[test] execute operator kind test from dist
pducolin Jul 15, 2024
8663b10
Merge branch 'main' into fanny/add-operator
fanny-jiang Jul 15, 2024
16f2456
Merge branch 'main' into fanny/add-operator
fanny-jiang Jul 23, 2024
e06602f
fix var and use aws.create-kind
fanny-jiang Jul 23, 2024
452f9a1
Merge branch 'main' into fanny/add-operator
fanny-jiang Jul 24, 2024
4878112
Merge branch 'main' into fanny/add-operator
fanny-jiang Jul 25, 2024
0101f0f
fix variables and tests
fanny-jiang Jul 25, 2024
a65ec2d
fix tests
fanny-jiang Jul 25, 2024
b1ff474
Merge branch 'main' into fanny/add-operator
fanny-jiang Jul 29, 2024
6ab134a
fix ecr var
fanny-jiang Jul 29, 2024
c4157be
fix operator helm dependency
fanny-jiang Jul 29, 2024
db5d61c
Merge branch 'main' into fanny/add-operator
fanny-jiang Jul 30, 2024
0317cb1
Merge branch 'main' into fanny/add-operator
fanny-jiang Jul 31, 2024
2c8c072
Merge branch 'main' into fanny/add-operator
fanny-jiang Jul 31, 2024
bdf48d0
Merge branch 'main' into fanny/add-operator
fanny-jiang Aug 1, 2024
187e772
address review comments
fanny-jiang Aug 2, 2024
85b4c96
Merge branch 'main' into fanny/add-operator
fanny-jiang Aug 2, 2024
ee6d090
Merge branch 'main' into fanny/add-operator
fanny-jiang Aug 5, 2024
dccefa5
update go.sum
fanny-jiang Aug 5, 2024
6fd8670
Merge branch 'main' into fanny/add-operator
fanny-jiang Aug 6, 2024
7e5a741
Merge branch 'main' into fanny/add-operator
fanny-jiang Aug 23, 2024
ed99854
Merge branch 'main' into fanny/add-operator
fanny-jiang Aug 27, 2024
b9ec9ff
Merge branch 'main' into fanny/add-operator
fanny-jiang Sep 3, 2024
e3d0d7b
remove install_agent_with_operator from inv deploy funcs
fanny-jiang Sep 5, 2024
9856162
Merge branch 'main' into fanny/add-operator
fanny-jiang Sep 5, 2024
7738696
Merge branch 'main' into fanny/add-operator
fanny-jiang Sep 6, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions common/config/environment.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ const (
DDTestingWorkloadNamespace = "ddtestworkload"
DDDogstatsdNamespace = "dddogstatsd"
DDUpdaterConfigNamespace = "ddupdater"
DDOperatorConfigNamespace = "ddoperator"

// Infra namespace
DDInfraEnvironment = "env"
Expand All @@ -34,12 +35,15 @@ const (

// Agent Namespace
DDAgentDeployParamName = "deploy"
DDAgentDeployWithOperatorParamName = "deployWithOperator"
DDAgentVersionParamName = "version"
DDAgentPipelineID = "pipeline_id"
DDAgentCommitSHA = "commit_sha"
DDAgentFullImagePathParamName = "fullImagePath"
DDClusterAgentVersionParamName = "clusterAgentVersion"
DDClusterAgentFullImagePathParamName = "clusterAgentFullImagePath"
DDOperatorVersionParamName = "operatorVersion"
DDOperatorFullImagePathParamName = "operatorFullImagePath"
DDImagePullRegistryParamName = "imagePullRegistry"
DDImagePullUsernameParamName = "imagePullUsername"
DDImagePullPasswordParamName = "imagePullPassword"
Expand Down Expand Up @@ -71,6 +75,7 @@ type CommonEnvironment struct {
TestingWorkloadConfig *sdkconfig.Config
DogstatsdConfig *sdkconfig.Config
UpdaterConfig *sdkconfig.Config
OperatorConfig *sdkconfig.Config

username string
}
Expand Down Expand Up @@ -98,6 +103,8 @@ type Env interface {
ClusterAgentVersion() string
AgentFullImagePath() string
ClusterAgentFullImagePath() string
OperatorFullImagePath() string
OperatorVersion() string
ImagePullRegistry() string
ImagePullUsername() string
ImagePullPassword() pulumi.StringOutput
Expand Down Expand Up @@ -132,6 +139,7 @@ func NewCommonEnvironment(ctx *pulumi.Context) (CommonEnvironment, error) {
DogstatsdConfig: sdkconfig.New(ctx, DDDogstatsdNamespace),
UpdaterConfig: sdkconfig.New(ctx, DDUpdaterConfigNamespace),
commonNamer: namer.NewNamer(ctx, ""),
OperatorConfig: sdkconfig.New(ctx, DDOperatorConfigNamespace),
providerRegistry: newProviderRegistry(ctx),
}
// store username
Expand All @@ -147,6 +155,8 @@ func NewCommonEnvironment(ctx *pulumi.Context) (CommonEnvironment, error) {
ctx.Log.Debug(fmt.Sprintf("pipeline id: %s", env.PipelineID()), nil)
ctx.Log.Debug(fmt.Sprintf("deploy: %v", env.AgentDeploy()), nil)
ctx.Log.Debug(fmt.Sprintf("full image path: %v", env.AgentFullImagePath()), nil)
ctx.Log.Debug(fmt.Sprintf("deploy with Operator: %v", env.AgentDeployWithOperator()), nil)
ctx.Log.Debug(fmt.Sprintf("operator full image path: %v", env.OperatorFullImagePath()), nil)
return env, nil
}

Expand Down Expand Up @@ -226,6 +236,10 @@ func (e *CommonEnvironment) AgentDeploy() bool {
return e.GetBoolWithDefault(e.AgentConfig, DDAgentDeployParamName, true)
}

func (e *CommonEnvironment) AgentDeployWithOperator() bool {
return e.GetBoolWithDefault(e.AgentConfig, DDAgentDeployWithOperatorParamName, false)
}

func (e *CommonEnvironment) AgentVersion() string {
return e.AgentConfig.Get(DDAgentVersionParamName)
}
Expand All @@ -250,6 +264,14 @@ func (e *CommonEnvironment) ClusterAgentFullImagePath() string {
return e.AgentConfig.Get(DDClusterAgentFullImagePathParamName)
}

func (e *CommonEnvironment) OperatorVersion() string {
return e.OperatorConfig.Get(DDOperatorVersionParamName)
}

func (e *CommonEnvironment) OperatorFullImagePath() string {
return e.OperatorConfig.Get(DDOperatorFullImagePathParamName)
}

func (e *CommonEnvironment) ImagePullRegistry() string {
return e.AgentConfig.Get(DDImagePullRegistryParamName)
}
Expand Down
4 changes: 4 additions & 0 deletions common/config/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ func ClusterAgentSemverVersion(e Env) (*semver.Version, error) {
return anyAgentSemverVersion(e.ClusterAgentVersion())
}

func OperatorSemverVersion(e Env) (*semver.Version, error) {
return anyAgentSemverVersion(e.OperatorVersion())
}

func tagListToKeyValueMap(tagList []string) (map[string]string, error) {
tags := map[string]string{}
for _, tag := range tagList {
Expand Down
39 changes: 39 additions & 0 deletions common/utils/kubernetes.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
package utils

import (
"encoding/base64"
"encoding/json"

corev1 "github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/core/v1"
metav1 "github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes/meta/v1"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
"gopkg.in/yaml.v3"

"github.com/DataDog/test-infra-definitions/common/config"
)

const imagePullSecretName = "registry-credentials"

// KubeConfigYAMLToJSON safely converts a yaml kubeconfig to a json string.
func KubeConfigYAMLToJSON(kubeConfig pulumi.StringOutput) pulumi.StringInput {
return kubeConfig.ApplyT(func(config string) (string, error) {
Expand All @@ -23,3 +30,35 @@ func KubeConfigYAMLToJSON(kubeConfig pulumi.StringOutput) pulumi.StringInput {
return string(jsonConfig), nil
}).(pulumi.StringInput)
}

// NewImagePullSecret creates an image pull secret based on environment
func NewImagePullSecret(e config.Env, namespace string, opts ...pulumi.ResourceOption) (*corev1.Secret, error) {
pducolin marked this conversation as resolved.
Show resolved Hide resolved
dockerConfigJSON := e.ImagePullPassword().ApplyT(func(password string) (string, error) {
dockerConfigJSON, err := json.Marshal(map[string]map[string]map[string]string{
"auths": {
e.ImagePullRegistry(): {
"username": e.ImagePullUsername(),
"password": password,
"auth": base64.StdEncoding.EncodeToString([]byte(e.ImagePullUsername() + ":" + password)),
},
},
})
return string(dockerConfigJSON), err
}).(pulumi.StringOutput)

return corev1.NewSecret(
e.Ctx(),
imagePullSecretName,
&corev1.SecretArgs{
Metadata: metav1.ObjectMetaArgs{
Namespace: pulumi.StringPtr(namespace),
Name: pulumi.StringPtr(imagePullSecretName),
},
StringData: pulumi.StringMap{
".dockerconfigjson": dockerConfigJSON,
},
Type: pulumi.StringPtr("kubernetes.io/dockerconfigjson"),
},
opts...,
)
}
68 changes: 68 additions & 0 deletions components/datadog/agent/kubernetes_operator.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package agent

import (
"github.com/pulumi/pulumi-kubernetes/sdk/v4/go/kubernetes"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"

"github.com/DataDog/test-infra-definitions/common/config"
"github.com/DataDog/test-infra-definitions/common/utils"
"github.com/DataDog/test-infra-definitions/components"
"github.com/DataDog/test-infra-definitions/components/datadog/agentwithoperatorparams"
"github.com/DataDog/test-infra-definitions/components/datadog/apps/dda"
"github.com/DataDog/test-infra-definitions/components/datadog/operator"
"github.com/DataDog/test-infra-definitions/components/datadog/operatorparams"
)

func NewDDAWithOperator(e config.Env, resourceName string, kubeProvider *kubernetes.Provider, operatorOpts []operatorparams.Option, ddaOptions ...agentwithoperatorparams.Option) (*KubernetesAgent, error) {
return components.NewComponent(e, resourceName, func(comp *KubernetesAgent) error {

operatorParams, err := operatorparams.NewParams(e, operatorOpts...)
if err != nil {
return err
}

ddaParams, err := agentwithoperatorparams.NewParams(ddaOptions...)

if err != nil {
return err
}

operatorComp, err := operator.NewOperator(e, resourceName, kubeProvider, operatorOpts...)

if err != nil {
return err
}

_, err = dda.K8sAppDefinition(e, kubeProvider, "datadog", ddaParams.FakeIntake, ddaParams.KubeletTLSVerify, e.Ctx().Stack(), ddaParams.DDAConfig, utils.PulumiDependsOn(operatorComp))

if err != nil {
return err
}

baseName := "dda-linux"

comp.LinuxNodeAgent, err = NewKubernetesObjRef(e, baseName+"-nodeAgent", operatorParams.Namespace, "Pod", pulumi.String("appVersion").ToStringOutput(), pulumi.String("Version").ToStringOutput(), map[string]string{"app": baseName + "-datadog"})

if err != nil {
return err
}

comp.LinuxClusterAgent, err = NewKubernetesObjRef(e, baseName+"-clusterAgent", operatorParams.Namespace, "Pod", pulumi.String("appVersion").ToStringOutput(), pulumi.String("Version").ToStringOutput(), map[string]string{
"app": baseName + "-datadog-cluster-agent",
})

if err != nil {
return err
}

comp.LinuxClusterChecks, err = NewKubernetesObjRef(e, baseName+"-clusterChecks", operatorParams.Namespace, "Pod", pulumi.String("appVersion").ToStringOutput(), pulumi.String("version").ToStringOutput(), map[string]string{
"app": baseName + "-datadog-clusterchecks",
})

if err != nil {
return err
}

return nil
})
}
68 changes: 68 additions & 0 deletions components/datadog/agentwithoperatorparams/params.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package agentwithoperatorparams

import (
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"

"github.com/DataDog/test-infra-definitions/common"
"github.com/DataDog/test-infra-definitions/common/utils"
"github.com/DataDog/test-infra-definitions/components/datadog/fakeintake"
)

type Params struct {
PulumiResourceOptions []pulumi.ResourceOption

Namespace string
FakeIntake *fakeintake.Fakeintake
DDAConfig string
KubeletTLSVerify bool
}

type Option = func(*Params) error

func NewParams(options ...Option) (*Params, error) {
version := &Params{
Namespace: "datadog",
}
return common.ApplyOption(version, options)
}

// WithNamespace sets the namespace to deploy the agent to.
func WithNamespace(namespace string) func(*Params) error {
return func(p *Params) error {
p.Namespace = namespace
return nil
}
}

// WithTLSKubeletVerify toggles kubelet TLS verification.
func WithTLSKubeletVerify(verify bool) func(*Params) error {
return func(p *Params) error {
p.KubeletTLSVerify = verify
return nil
}
}

// WithPulumiResourceOptions sets the resources to depend on.
func WithPulumiResourceOptions(resources ...pulumi.ResourceOption) func(*Params) error {
return func(p *Params) error {
p.PulumiResourceOptions = append(p.PulumiResourceOptions, resources...)
return nil
}
}

// WithDDAConfig configures the DatadogAgent resource.
func WithDDAConfig(config string) func(*Params) error {
return func(p *Params) error {
p.DDAConfig = p.DDAConfig + config
return nil
}
}

// WithFakeIntake configures the Agent to use the given fake intake.
func WithFakeIntake(fakeintake *fakeintake.Fakeintake) func(*Params) error {
return func(p *Params) error {
p.PulumiResourceOptions = append(p.PulumiResourceOptions, utils.PulumiDependsOn(fakeintake))
p.FakeIntake = fakeintake
return nil
}
}
Loading