Functions/Set-SecretEnvironmentVariable.ps1

<#
.SYNOPSIS
Sets Environment Variables based on rows in CSV.
 
.DESCRIPTION
Takes Secret Scopes from config, finds correspinding $csv files and sets $env:vars to be used for Set-DatabricksSecrets.
 
Main config entry used is "secretsCsvPath"
 
This is the folder location of where local secrets csvs are, not the actual file itself.
A secrets folder can be named with the secret scope as a prefix
For example, if a config has these scopes -
 
    "secretScopes":["scopeOne","scopeTwo"]
 
    then two folders - "scopeOne/scopeOne_secrets.csv" and "scopeTwo/scopeTwo_secrets.csv" are required.
 
    Note that the csv file names do not need to be named the same, but for consistencies sake limit it to one file with a sensible name
 
.PARAMETER config
config passed in that includes secret scopes and secret scopes csv
 
.EXAMPLE
Set-DatabricksSecrets -config $config
 
.NOTES
Author: Sabin IO
 
#>

Function Set-SecretEnvironmentVariable {  
    [cmdletbinding()]
    Param(
        [parameter(Mandatory = $true)][psobject]$config
    )
    Write-Verbose "Setting secrets in csv as environment variables..."
    foreach ($secretScope in $config.secretScopes) {
        Write-Verbose "Finding all csv file with prefix $secretScope"
        $secretCsvFolderPath = Join-Path $config.secretsCsvPath $secretScope
        $secretCsvFilePath = Get-ChildItem $secretCsvFolderPath
        Write-Verbose "csv folder path: $secretCsvFolderPath"
        Write-Verbose "csv file path: $secretCsvFilePath"
        $databricksSecrets = Import-Csv -Path $secretCsvFilePath -Header "Name", "Value" | Select-Object -Skip 1
        foreach ($databricksSecret in $databricksSecrets) {
            if (($databricksSecret.Name.StartsWith($secretScope))-eq $false) {
                $databricksSecret.Name = $secretScope+$databricksSecret.Name 
            }
            Write-Host "creating envvar $($databricksSecret.Name)"
            Set-Item "env:$($databricksSecret.Name)" $databricksSecret.Value
        }
    }
}