Functions/Publish-DatabricksClusterConfigToWorkspace.ps1

<#
.SYNOPSIS
Deploys DataBricks Cluster from configuration json file to a workspace
 
.DESCRIPTION
Deploys DataBricks Cluster from configuration json file to a workspace
 
.PARAMETER config
Configuration json file from the environment used to workout whether to deploy a clusters from a folder or file(s)
 
.PARAMETER clusterConfig
The name path of the clusters configuration files.
 
.EXAMPLE
Publish-DatabricksClusterConfigToWorkspace -config $config -bearerToken 'dapi1234567890' -clusterConfig '<path-to-file>'
 
.NOTES
Author: Sabin IO
 
#>
 
Function Publish-DatabricksClusterConfigToWorkspace {
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)][string]$clusterConfig
        
    )
    try {

        $cluster = Get-Content -Raw -Path $clusterConfig | ConvertFrom-Json
        $ExistingClusterConfig = Get-DatabricksClusters | Where-Object { $_.cluster_name -eq $cluster.cluster_name } 
        $ClusterId = $ExistingClusterConfig.cluster_id
        $ExistingClusterConfig | Remove-ClusterMetaDataAsPSObject

        if ($ExistingClusterConfig) {
           $Diffs =  Compare-DatabricksCluster -cluster $cluster -ExistingClusterConfig $ExistingClusterConfig
            if ($Diffs.Count -gt 0) {
                Write-Verbose "Cluster `"$($cluster.cluster_name)`" exists - updating cluster"
                New-DatabricksCluster -InputObject $cluster
                
            }
            else {
                Write-Warning "Cluster `"$($cluster.cluster_name)`" unchanged - not deploying to prevent unnecessary restart of cluster"
            }
            return $ClusterId
        }
        else {
            Write-Output "No cluster found with this name `"$($cluster.cluster_name)`" - creating new cluster"
            New-DatabricksCluster -InputObject $cluster
        }
    }
    catch {
        throw $_.Exception
    }
}