Functions/Export-DatabricksJobConfigAsJson.ps1
<#
.SYNOPSIS Exports DataBricks jobs and Saves as json. .DESCRIPTION Exports Databricks jobs and saves as json. .PARAMETER BearerToken Your Databricks Bearer token to authenticate to your workspace (see User Settings in Datatbricks WebUI) .PARAMETER Region Azure Region - must match the URL of your Databricks workspace, example northeurope .PARAMETER LocalOutputPath Local directroy to save json files. .PARAMETER JobConfig The job config to export as a json file. .EXAMPLE Export-DatabricksJobConfigAsJson -BearerToken $bearerToken -Region $config.Region -LocalOutputPath $localOutputPath -JobConfig $job -Verbose .NOTES Author: Sabin IO #> Function Export-DatabricksJobConfigAsJson { [cmdletbinding()] Param( [parameter(Mandatory = $false)][string]$BearerToken, [parameter(Mandatory = $false)][string]$Region, [parameter(Mandatory = $true)][string]$LocalOutputPath, [parameter(Mandatory = $true)][psobject]$JobConfig ) $invalidChars = [System.IO.Path]::GetInvalidFileNameChars() -join '' $re = "[{0}]" -f [regex]::Escape($invalidChars) $jobName = ($JobConfig.name -replace $re) $jobFileName = $jobName + '.job.config.json' <# We need to replace the existing cluster id with a named cluster for cross workspace #> if (($JobConfig.PSObject.Properties.Item('existing_cluster_id'))) { Write-Output "Job Name $($JobConfig.name) has existing_cluster_id, replacing with existing_cluster_name" $cluster = Get-DatabricksClusters -BearerToken $BearerToken -Region $Region -ClusterId $JobConfig.existing_cluster_id $JobConfig.PSObject.Properties.Remove('existing_cluster_id') $JobConfig | Add-Member -NotePropertyName 'existing_cluster_name' -NotePropertyValue $cluster.cluster_name } <# Shallow sort job config into ordered hashtable for source control purposes #> if (($JobConfig.PSObject.Properties.Item('new_cluster'))) { $new_cluster = $JobConfig.new_cluster | Remove-JobNewClusterMetaDataAsPSObject $JobConfig.PSObject.Properties.Remove('new_cluster') $new_cluster_sorted = $new_cluster | ConvertTo-OrderedHashtableFromPSCustomObject $new_cluster_psobject = [PSCustomObject]$new_cluster_sorted $JobConfig | Add-Member -NotePropertyName 'new_cluster' -NotePropertyValue $new_cluster_psobject } $tmp = $JobConfig | Remove-JobMetaDataAsPSObject $JobConfigAsJson = $tmp | ConvertTo-OrderedHashtableFromPSCustomObject | ConvertTo-Json -Depth 100 $LocalExportPath = Join-Path $LocalOutputPath $jobFileName Write-Output "Exporting job `"$($jobName)`" to `"$($LocalExportPath)`"" New-Item -Force -Path $LocalExportPath -Value $JobConfigAsJson -Type file | Out-Null } |