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

fixup e2e tests: wrong check during codemodules getInstaller inside provisioner #4347

Merged
merged 12 commits into from
Jan 28, 2025
Merged
3 changes: 1 addition & 2 deletions pkg/controllers/csi/provisioner/controller_test.go
Original file line number Diff line number Diff line change
@@ -292,8 +292,7 @@ func createPMCSecret(t *testing.T, dk *dynakube.DynaKube) *corev1.Secret {
func createPMCSourceFile(t *testing.T, prov OneAgentProvisioner, dk *dynakube.DynaKube) {
t.Helper()

targetDir, err := prov.getTargetDir(*dk)
require.NoError(t, err)
targetDir := prov.getTargetDir(*dk)

pmcPath := filepath.Join(targetDir, processmoduleconfig.RuxitAgentProcPath)
pmcDir := filepath.Dir(pmcPath)
50 changes: 20 additions & 30 deletions pkg/controllers/csi/provisioner/install.go
Original file line number Diff line number Diff line change
@@ -3,7 +3,6 @@ package csiprovisioner
import (
"context"
"encoding/base64"
"errors"

"github.com/Dynatrace/dynatrace-operator/pkg/api/v1beta3/dynakube"
"github.com/Dynatrace/dynatrace-operator/pkg/arch"
@@ -24,10 +23,7 @@ func (provisioner *OneAgentProvisioner) installAgent(ctx context.Context, dk dyn
return err
}

targetDir, err := provisioner.getTargetDir(dk)
if err != nil {
return err
}
targetDir := provisioner.getTargetDir(dk)

_, err = agentInstaller.InstallAgent(ctx, targetDir)
if err != nil {
@@ -43,8 +39,21 @@ func (provisioner *OneAgentProvisioner) installAgent(ctx context.Context, dk dyn
}

func (provisioner *OneAgentProvisioner) getInstaller(ctx context.Context, dk dynakube.DynaKube) (installer.Installer, error) {
switch {
case dk.OneAgent().GetCodeModulesVersion() != "":
if dk.OneAgent().GetCustomCodeModulesImage() != "" {
props := &image.Properties{
ImageUri: dk.OneAgent().GetCodeModulesImage(),
ApiReader: provisioner.apiReader,
Dynakube: &dk,
PathResolver: provisioner.path,
}

imageInstaller, err := provisioner.imageInstallerBuilder(ctx, provisioner.fs, props)
if err != nil {
return nil, err
}

return imageInstaller, nil
} else {
dtc, err := buildDtc(provisioner, ctx, dk)
if err != nil {
return nil, err
@@ -64,40 +73,21 @@ func (provisioner *OneAgentProvisioner) getInstaller(ctx context.Context, dk dyn
urlInstaller := provisioner.urlInstallerBuilder(provisioner.fs, dtc, props)

return urlInstaller, nil
case dk.OneAgent().GetCodeModulesImage() != "":
props := &image.Properties{
ImageUri: dk.OneAgent().GetCodeModulesImage(),
ApiReader: provisioner.apiReader,
Dynakube: &dk,
PathResolver: provisioner.path,
}

imageInstaller, err := provisioner.imageInstallerBuilder(ctx, provisioner.fs, props)
if err != nil {
return nil, err
}

return imageInstaller, nil
default:
return nil, errors.New("missing version/image information to download CodeModule")
}
}

func (provisioner *OneAgentProvisioner) getTargetDir(dk dynakube.DynaKube) (string, error) {
func (provisioner *OneAgentProvisioner) getTargetDir(dk dynakube.DynaKube) string {
var dirName string

switch {
case dk.OneAgent().GetCodeModulesImage() != "":
if dk.OneAgent().GetCustomCodeModulesImage() != "" {
// An image URI often contains one or several slashes, which is problematic when trying to use it as a folder name.
// Easiest to just base64 encode it
dirName = base64.StdEncoding.EncodeToString([]byte(dk.OneAgent().GetCodeModulesImage()))
case dk.OneAgent().GetCodeModulesVersion() != "":
} else {
dirName = dk.OneAgent().GetCodeModulesVersion()
default:
return "", errors.New("failed to determine the target directory for the CodeModule download")
}

return provisioner.path.AgentSharedBinaryDirForAgent(dirName), nil
return provisioner.path.AgentSharedBinaryDirForAgent(dirName)
}

func (provisioner *OneAgentProvisioner) createLatestVersionSymlink(dk dynakube.DynaKube, targetDir string) error {
15 changes: 2 additions & 13 deletions pkg/controllers/csi/provisioner/install_test.go
Original file line number Diff line number Diff line change
@@ -12,8 +12,7 @@ func TestGetTargetDir(t *testing.T) {
prov := createProvisioner(t)
dk := createDynaKubeWithVersion(t)

targetDir, err := prov.getTargetDir(*dk)
require.NoError(t, err)
targetDir := prov.getTargetDir(*dk)
require.Contains(t, targetDir, dk.OneAgent().GetCodeModulesVersion())
})

@@ -22,17 +21,7 @@ func TestGetTargetDir(t *testing.T) {
dk := createDynaKubeWithImage(t)

expectedDir := base64.StdEncoding.EncodeToString([]byte(dk.OneAgent().GetCodeModulesImage()))
targetDir, err := prov.getTargetDir(*dk)
require.NoError(t, err)
targetDir := prov.getTargetDir(*dk)
require.Contains(t, targetDir, expectedDir)
})

t.Run("nothing set => error (shouldn't be possible in real life)", func(t *testing.T) {
prov := createProvisioner(t)
dk := createDynaKubeBase(t)

targetDir, err := prov.getTargetDir(*dk)
require.Error(t, err)
require.Empty(t, targetDir)
})
}