functions/KeyVaultSecret.ps1

function Get-SpqKeyVaultSecretName {
    Param(
        [parameter(Mandatory = $true)] [object] $ResourceObject
    )

    $name = "UNEXPECTED"
    # this is checking to see if the secret-owning-object is actually a sub-object, such as an EventHubAuthoirzationRule.
    # if it is, it uses just the second part of the name, i.e. the name of the AuthoirizationRule, not the EventHub that owns it
    if ($ResourceObject.name.Split("/").Count -eq 2) {
        $name = $ResourceObject.name.Split("/")[1] + "-key"
    }
    else {
        $name = $ResourceObject.name + "-key"
    }

    return $name
}

function Get-SpqKeyVaultRefForConncetionString {
    Param(
        [parameter(Mandatory = $true)] [string] $ApplicationCode,
        [parameter(Mandatory = $true)] [string] $EnvironmentName,
        [parameter(Mandatory = $true)] [string] $Location,
        [parameter(Mandatory = $true)] [object] $KeyOwningObject,
        [string] $ExceptionGuid,
        [parameter(Mandatory = $true)] [object] $KeyVault
    )

    $referenceToKey = "NOTFOUND"

    switch ($KeyOwningObject.type) {
        "Microsoft.DocumentDB/databaseAccounts" { 
            $referenceToKey = Get-SpqReferenceToCosmosDbAccountConnectionString -CosmosDbAccount $KeyOwningObject; break
        }
        "Microsoft.Storage/storageAccounts" {
            $referenceToKey = Get-SpqReferenceToStorageConnectionString -Storage $KeyOwningObject; break 
        }
        # Not implemented yet
        # "Microsoft.Search/searchServices" {
        # $referenceToKey = Get-SpqReferenceToSearchAdminKeyConnectionString -Search $KeyOwningObject; break
        # }
        # "Microsoft.EventHub/namespaces/AuthorizationRules" {
        # $referenceToKey = Get-SpqReferenceToNamespaceAuthorizationRuleKey -NamespaceAuthorizationRule $KeyOwningObject; break
        # }
        # "Microsoft.EventHub/namespaces/eventhubs" {
        # $referenceToKey = Get-ReferenceToEventHubKey -Storage $KeyOwningObject; break
        # }
    }

    
    $secretName = Get-SpqKeyVaultSecretName -ResourceObject $KeyOwningObject

    $json = '
    {
        "type": "Microsoft.KeyVault/vaults/secrets",
        "name": "'
 + $KeyVault.name + '/' + $secretName + '",
        "apiVersion": "2018-02-14",
        "location": "'
 + $Location + '",
        "dependsOn": [
            "[resourceId(''Microsoft.KeyVault/vaults'', '''
 + $KeyVault.name + ''')]"
        ],
        "properties": {
            "value": "'
 + $referenceToKey + '"
        }
    }
    '

    return ConvertFrom-Json $json
}

function Get-SpqKeyVaultRefForKey {
    Param(
        [parameter(Mandatory = $true)] [string] $ApplicationCode,
        [parameter(Mandatory = $true)] [string] $EnvironmentName,
        [parameter(Mandatory = $true)] [string] $Location,
        [parameter(Mandatory = $true)] [object] $KeyOwningObject,
        [string] $ExceptionGuid,
        [parameter(Mandatory = $true)] [object] $KeyVault
    )

    $referenceToKey = "NOTFOUND"

    switch ($KeyOwningObject.type) {
        "Microsoft.DocumentDB/databaseAccounts" { 
            $referenceToKey = Get-SpqReferenceToCosmosDbAccountKey -CosmosDbAccount $KeyOwningObject; break
        }
        "Microsoft.Storage/storageAccounts" {
            $referenceToKey = Get-SpqReferenceToStorageKey -Storage $KeyOwningObject; break 
        }
        "Microsoft.Search/searchServices" { 
            $referenceToKey = Get-SpqReferenceToSearchAdminKey -Search $KeyOwningObject; break 
        }
        "Microsoft.EventHub/namespaces/AuthorizationRules" { 
            $referenceToKey = Get-SpqReferenceToNamespaceAuthorizationRuleKey -NamespaceAuthorizationRule $KeyOwningObject; break
        }
        # Not implemented yet
        # "Microsoft.EventHub/namespaces/eventhubs" {
        # $referenceToKey = Get-ReferenceToEventHubKey -Storage $KeyOwningObject; break
        # }
    }

    
    $secretName = Get-SpqKeyVaultSecretName -ResourceObject $KeyOwningObject

    $json = '
    {
        "type": "Microsoft.KeyVault/vaults/secrets",
        "name": "'
 + $KeyVault.name + '/' + $secretName + '",
        "apiVersion": "2018-02-14",
        "location": "'
 + $Location + '",
        "dependsOn": [
            "[resourceId(''Microsoft.KeyVault/vaults'', '''
 + $KeyVault.name + ''')]"
        ],
        "properties": {
            "value": "'
 + $referenceToKey + '"
        }
    }
    '

    return ConvertFrom-Json $json
}

# function Get-SpqKeyVaultSecret {

# }