Skip to content

Commit

Permalink
Show warning and rewrite paths
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewnester committed Sep 5, 2024
1 parent 87c6b4d commit 7604da5
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 64 deletions.
66 changes: 66 additions & 0 deletions bundle/config/mutator/rewrite_workspace_prefix.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package mutator

import (
"context"
"fmt"
"strings"

"github.com/databricks/cli/bundle"
"github.com/databricks/cli/libs/diag"
"github.com/databricks/cli/libs/dyn"
)

type rewriteWorkspacePrefix struct{}

// RewriteWorkspacePrefix finds any strings in bundle configration that have
// workspace prefix plus workspace path variable used and removes workspace prefix from it.
func RewriteWorkspacePrefix() bundle.Mutator {
return &rewriteWorkspacePrefix{}
}

func (m *rewriteWorkspacePrefix) Name() string {
return "RewriteWorkspacePrefix"
}

func (m *rewriteWorkspacePrefix) Apply(ctx context.Context, b *bundle.Bundle) diag.Diagnostics {
diags := diag.Diagnostics{}
paths := []string{
"/Workspace/${workspace.root_path}",
"/Workspace/${workspace.file_path}",
"/Workspace/${workspace.artifact_path}",
"/Workspace/${workspace.state_path}",
}

err := b.Config.Mutate(func(root dyn.Value) (dyn.Value, error) {
// Walk through the bundle configuration, check all the string leafs and
// see if any of the prefixes are used in the remote path.
return dyn.Walk(root, func(p dyn.Path, v dyn.Value) (dyn.Value, error) {
vv, ok := v.AsString()
if !ok {
return v, nil
}

for _, path := range paths {
if strings.Contains(vv, path) {
diags = append(diags, diag.Diagnostic{
Severity: diag.Warning,
Summary: fmt.Sprintf("%s used in the remote path %s. Please change to use %s instead", path, vv, strings.ReplaceAll(vv, "/Workspace/", "")),
Locations: v.Locations(),
Paths: []dyn.Path{p},
})

// Remove the workspace prefix from the string.
return dyn.NewValue(strings.ReplaceAll(vv, "/Workspace/", ""), v.Locations()), nil
}
}

return v, nil
})
})

if err != nil {
return diag.FromErr(err)
}

return diags
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package validate
package mutator

import (
"context"
Expand Down Expand Up @@ -61,7 +61,7 @@ func TestNoWorkspacePrefixUsed(t *testing.T) {
},
}

diags := bundle.Apply(context.Background(), b, NoWorkspacePrefixUsed())
diags := bundle.Apply(context.Background(), b, RewriteWorkspacePrefix())
require.Len(t, diags, 3)

expectedErrors := map[string]bool{
Expand All @@ -71,8 +71,15 @@ func TestNoWorkspacePrefixUsed(t *testing.T) {
}

for _, d := range diags {
require.Equal(t, d.Severity, diag.Error)
require.Equal(t, d.Severity, diag.Warning)
require.Contains(t, expectedErrors, d.Summary)
delete(expectedErrors, d.Summary)
}

require.Equal(t, "${workspace.root_path}/file1.py", b.Config.Resources.Jobs["test_job"].JobSettings.Tasks[0].SparkPythonTask.PythonFile)
require.Equal(t, "${workspace.file_path}/notebook1", b.Config.Resources.Jobs["test_job"].JobSettings.Tasks[1].NotebookTask.NotebookPath)
require.Equal(t, "${workspace.artifact_path}/jar1.jar", b.Config.Resources.Jobs["test_job"].JobSettings.Tasks[1].Libraries[0].Jar)
require.Equal(t, "${workspace.file_path}/notebook2", b.Config.Resources.Jobs["test_job"].JobSettings.Tasks[2].NotebookTask.NotebookPath)
require.Equal(t, "${workspace.artifact_path}/jar2.jar", b.Config.Resources.Jobs["test_job"].JobSettings.Tasks[2].Libraries[0].Jar)

}
60 changes: 0 additions & 60 deletions bundle/config/validate/no_workspace_prefix_used.go

This file was deleted.

2 changes: 1 addition & 1 deletion bundle/phases/initialize.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ func Initialize() bundle.Mutator {

// This mutator needs to be run before variable interpolation because it
// searches for strings with variable references in them.
validate.NoWorkspacePrefixUsed(),
mutator.RewriteWorkspacePrefix(),

mutator.SetVariables(),
// Intentionally placed before ResolveVariableReferencesInLookup, ResolveResourceReferences,
Expand Down

0 comments on commit 7604da5

Please sign in to comment.