databricks-cli/bundle/libraries/libraries.go

92 lines
1.8 KiB
Go

package libraries
import (
"github.com/databricks/cli/bundle"
"github.com/databricks/databricks-sdk-go/service/jobs"
)
func findAllTasks(b *bundle.Bundle) map[string]([]jobs.Task) {
r := b.Config.Resources
result := make(map[string]([]jobs.Task), 0)
for k := range b.Config.Resources.Jobs {
result[k] = append(result[k], r.Jobs[k].JobSettings.Tasks...)
}
return result
}
func FindAllEnvironments(b *bundle.Bundle) map[string]([]jobs.JobEnvironment) {
jobEnvs := make(map[string]([]jobs.JobEnvironment), 0)
for jobKey, job := range b.Config.Resources.Jobs {
if len(job.Environments) == 0 {
continue
}
jobEnvs[jobKey] = job.Environments
}
return jobEnvs
}
func isEnvsWithLocalLibraries(envs []jobs.JobEnvironment) bool {
for _, e := range envs {
if e.Spec == nil {
continue
}
for _, l := range e.Spec.Dependencies {
if IsLibraryLocal(l) {
return true
}
}
}
return false
}
func FindTasksWithLocalLibraries(b *bundle.Bundle) []jobs.Task {
tasks := findAllTasks(b)
envs := FindAllEnvironments(b)
allTasks := make([]jobs.Task, 0)
for k, jobTasks := range tasks {
for i := range jobTasks {
task := jobTasks[i]
if isTaskWithLocalLibraries(task) {
allTasks = append(allTasks, task)
}
}
if envs[k] != nil && isEnvsWithLocalLibraries(envs[k]) {
allTasks = append(allTasks, jobTasks...)
}
}
return allTasks
}
func isTaskWithLocalLibraries(task jobs.Task) bool {
for _, l := range task.Libraries {
p, err := libraryPath(&l)
// If there's an error, skip the library because it's not of supported type
if err != nil {
continue
}
if IsLibraryLocal(p) {
return true
}
}
return false
}
func IsTaskWithWorkspaceLibraries(task jobs.Task) bool {
for _, l := range task.Libraries {
if IsWorkspaceLibrary(&l) {
return true
}
}
return false
}