diff --git a/acceptance/bundle/artifacts/whl_dynamic/out.plan_update.direct.json b/acceptance/bundle/artifacts/whl_dynamic/out.plan_update.direct.json index d1a7465413..4baab1f343 100644 --- a/acceptance/bundle/artifacts/whl_dynamic/out.plan_update.direct.json +++ b/acceptance/bundle/artifacts/whl_dynamic/out.plan_update.direct.json @@ -150,10 +150,10 @@ "environments[0].spec.dependencies[0]": { "action": "update" }, - "tasks[1].for_each_task.task.libraries[0].whl": { + "tasks[task_key='TestTask'].for_each_task.task.libraries[0].whl": { "action": "update" }, - "tasks[1].libraries[0].whl": { + "tasks[task_key='TestTask'].libraries[0].whl": { "action": "update" } }, diff --git a/acceptance/bundle/migrate/basic/out.plan_update.json b/acceptance/bundle/migrate/basic/out.plan_update.json index 98f08f8616..46f5f0e219 100644 --- a/acceptance/bundle/migrate/basic/out.plan_update.json +++ b/acceptance/bundle/migrate/basic/out.plan_update.json @@ -67,7 +67,7 @@ "action": "skip", "reason": "server_side_default" }, - "tasks[0].notebook_task.source": { + "tasks[task_key='main'].notebook_task.source": { "action": "skip", "reason": "server_side_default" }, diff --git a/acceptance/bundle/resources/jobs/delete_task/out.plan_update.direct.json b/acceptance/bundle/resources/jobs/delete_task/out.plan_update.direct.json index 7c30a2de28..5c809bfe39 100644 --- a/acceptance/bundle/resources/jobs/delete_task/out.plan_update.direct.json +++ b/acceptance/bundle/resources/jobs/delete_task/out.plan_update.direct.json @@ -96,7 +96,7 @@ }, "changes": { "local": { - "tasks": { + "tasks[task_key='TestTask1']": { "action": "update" } }, diff --git a/acceptance/bundle/resources/jobs/tasks-reorder-locally/databricks.yml b/acceptance/bundle/resources/jobs/tasks-reorder-locally/databricks.yml new file mode 100644 index 0000000000..1ecc09b9cf --- /dev/null +++ b/acceptance/bundle/resources/jobs/tasks-reorder-locally/databricks.yml @@ -0,0 +1,13 @@ +bundle: + name: test-bundle + +resources: + jobs: + foo: + tasks: + - task_key: task_bb + notebook_task: + notebook_path: task_bb.py + - task_key: task_aa + notebook_task: + notebook_path: task_aa.py diff --git a/acceptance/bundle/resources/jobs/tasks-reorder-locally/foo.py b/acceptance/bundle/resources/jobs/tasks-reorder-locally/foo.py new file mode 100644 index 0000000000..1645e04b1d --- /dev/null +++ b/acceptance/bundle/resources/jobs/tasks-reorder-locally/foo.py @@ -0,0 +1 @@ +# Databricks notebook source diff --git a/acceptance/bundle/resources/jobs/tasks-reorder-locally/out.test.toml b/acceptance/bundle/resources/jobs/tasks-reorder-locally/out.test.toml new file mode 100644 index 0000000000..d560f1de04 --- /dev/null +++ b/acceptance/bundle/resources/jobs/tasks-reorder-locally/out.test.toml @@ -0,0 +1,5 @@ +Local = true +Cloud = false + +[EnvMatrix] + DATABRICKS_BUNDLE_ENGINE = ["terraform", "direct"] diff --git a/acceptance/bundle/resources/jobs/tasks-reorder-locally/output.txt b/acceptance/bundle/resources/jobs/tasks-reorder-locally/output.txt new file mode 100644 index 0000000000..66ef56be74 --- /dev/null +++ b/acceptance/bundle/resources/jobs/tasks-reorder-locally/output.txt @@ -0,0 +1,26 @@ + +>>> [CLI] bundle plan +create jobs.foo + +Plan: 1 to add, 0 to change, 0 to delete, 0 unchanged + +>>> [CLI] bundle deploy +Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files... +Deploying resources... +Updating deployment state... +Deployment complete! + +>>> [CLI] bundle plan +Plan: 0 to add, 0 to change, 0 to delete, 1 unchanged + +>>> [CLI] bundle plan +Plan: 0 to add, 0 to change, 0 to delete, 1 unchanged + +>>> [CLI] bundle deploy +Uploading bundle files to /Workspace/Users/[USERNAME]/.bundle/test-bundle/default/files... +Deploying resources... +Updating deployment state... +Deployment complete! + +>>> [CLI] bundle plan +Plan: 0 to add, 0 to change, 0 to delete, 1 unchanged diff --git a/acceptance/bundle/resources/jobs/tasks-reorder-locally/script b/acceptance/bundle/resources/jobs/tasks-reorder-locally/script new file mode 100644 index 0000000000..797fee17cb --- /dev/null +++ b/acceptance/bundle/resources/jobs/tasks-reorder-locally/script @@ -0,0 +1,12 @@ +trace $CLI bundle plan +trace $CLI bundle deploy +trace $CLI bundle plan | contains.py "0 to add, 0 to change, 0 to delete" + +update_file.py databricks.yml task_aa task_XX +update_file.py databricks.yml task_bb task_aa +update_file.py databricks.yml task_XX task_bb + +trace $CLI bundle plan + +trace $CLI bundle deploy +trace $CLI bundle plan | contains.py "0 to add, 0 to change, 0 to delete" diff --git a/acceptance/bundle/resources/jobs/tasks-reorder-locally/task_aa.py b/acceptance/bundle/resources/jobs/tasks-reorder-locally/task_aa.py new file mode 100644 index 0000000000..1645e04b1d --- /dev/null +++ b/acceptance/bundle/resources/jobs/tasks-reorder-locally/task_aa.py @@ -0,0 +1 @@ +# Databricks notebook source diff --git a/acceptance/bundle/resources/jobs/tasks-reorder-locally/task_bb.py b/acceptance/bundle/resources/jobs/tasks-reorder-locally/task_bb.py new file mode 100644 index 0000000000..1645e04b1d --- /dev/null +++ b/acceptance/bundle/resources/jobs/tasks-reorder-locally/task_bb.py @@ -0,0 +1 @@ +# Databricks notebook source diff --git a/acceptance/bundle/resources/jobs/tasks-reorder-locally/test.toml b/acceptance/bundle/resources/jobs/tasks-reorder-locally/test.toml new file mode 100644 index 0000000000..e1290bad9f --- /dev/null +++ b/acceptance/bundle/resources/jobs/tasks-reorder-locally/test.toml @@ -0,0 +1,2 @@ +RecordRequests = false +Ignore = [".databricks"] diff --git a/bundle/direct/dresources/job.go b/bundle/direct/dresources/job.go index 7d64217d96..c3a668409e 100644 --- a/bundle/direct/dresources/job.go +++ b/bundle/direct/dresources/job.go @@ -29,6 +29,16 @@ func (*ResourceJob) RemapState(jobs *jobs.Job) *jobs.JobSettings { return jobs.Settings } +func getTaskKey(x jobs.Task) (string, string) { + return "task_key", x.TaskKey +} + +func (*ResourceJob) KeyedSlices() map[string]any { + return map[string]any{ + "tasks": getTaskKey, + } +} + func (r *ResourceJob) DoRead(ctx context.Context, id string) (*jobs.Job, error) { idInt, err := parseJobID(id) if err != nil {