Public/func_Set-LogicAppParameters.ps1

Function Set-LogicAppParameters {
    <#
    .SYNOPSIS
    Update logic app parameters for domain and environment
    .DESCRIPTION
    Update logic app parameters for domain and environment ...
    .PARAMETER CdfConfig
    The CdfConfig object that holds the current scope configurations (Platform, Application and Domain)
    .PARAMETER AppSettings
    The service configuration from cdf-config.json.
    .PARAMETER Parameters
    Hashtable with contents of logic app standard parameters.json. See examples.

    .OUTPUTS
    Hashtable with updated app settings.

    .EXAMPLE

    $appsettings = @{
        "AzureWebJobsStorage"= "",
        "WORKFLOWS_SUBSCRIPTION_ID"= "",
        "PlatformKeyVaultUri"= "<KeyVaultName>.vault.azure.net",
        "DomainStorageAccountUri"= "<StorageAccountName>.vault.azure.net",
        "SVC_SETTING_02" = "VAL02"
        "EXT_SETTING_04" = "VAL04"
    }
    $parameters = @{
        "OtherParam": { ... },
        "SVC_SETTING_01": {
            type: "string"
            value = "VAL01"
        }
        "SVC_SETTING_02": {
            type: "string"
            value = "VAL02"
        }
        "EXT_SETTING_03": {
            type: "string"
            value = "VAL03"
        }
    }

    Set-CdfLogicAppParameters `
        -CdfConfig $CdfConfig `
        -AppSettings $appsettings `
        -Parameters $parameters

    $parameters (json):
    {
        "OtherParam": { ... },
        "Platform": { ... },
        "Application": { ... },
        "Domain": { ... },
        "Service": {
          "type": "object",
          "value" {
            ...
            "SETTING_02": "@appsetting('SVC_SETTING_02')"
          }
        },
        "External": {
         "type": "object",
          "value" {
            ...
            "SETTING_04": "@appsetting('EXT_SETTING_04')"
          }
        },
        "SVC_SETTING_01": {
            type: "string"
            value = "VAL01"
        },
        "SVC_SETTING_02": {
            type: "string"
            value = "@appsetting('SVC_SETTING_02')"
        },
        "EXT_SETTING_03": {
            type: "string"
            value = "VAL03"
        },
        "EXT_SETTING_04": {
            type: "string"
            value = "@appsetting('EXT_SETTING_04')"
        }
    }
    #>


    [CmdletBinding()]
    Param(
        [ValidateNotNullOrEmpty()]
        [Parameter(ValueFromPipeline = $true, Mandatory = $true)]
        [hashtable]$CdfConfig,
        [Parameter(Mandatory = $true)]
        [hashtable]$AppSettings,
        [Parameter(Mandatory = $true)]
        [hashtable]$Parameters
    )


    #############################################################
    # Update service parameter values
    #############################################################
    Write-Verbose "Setting service CDF parameters"

    $platformId = $CdfConfig.Platform.Config.platformId
    $platformInstance = $CdfConfig.Platform.Config.instanceId
    $appId = $CdfConfig.Application.Config.applicationId
    $appInstance = $CdfConfig.Application.Config.instanceId

    # Set framework parameters
    $Parameters.Environment.value = $CdfConfig.Application.Env
    $Parameters.Platform.value.Key = "$platformId$platformInstance"
    $Parameters.Platform.value.TemplateName = $CdfConfig.Platform.Config.templateName
    $Parameters.Platform.value.TemplateVersion = $CdfConfig.Platform.Config.templateVersion
    $Parameters.Application.value.Key = "$appId$appInstance"
    $Parameters.Application.value.TemplateName = $CdfConfig.Application.Config.templateName
    $Parameters.Application.value.TemplateVersion = $CdfConfig.Application.Config.templateVersion
    $Parameters.Domain.value.Name = $CdfConfig.Domain.Config.domainName
    $Parameters.Service.value.Name = $CdfConfig.Service.Config.serviceName
    $Parameters.Service.value.Group = $CdfConfig.Service.Config.serviceGroup
    $Parameters.Service.value.Type = $CdfConfig.Service.Config.serviceType
    $Parameters.Service.value.Template = $CdfConfig.Service.Config.serviceTemplate
    $Parameters.BuildContext.value.BuildTimestamp = Get-Date -Format o
    $Parameters.BuildContext.value.BuildRun = $CdfConfig.Service.Tags.BuildRun
    $Parameters.BuildContext.value.BuildRepo = $CdfConfig.Service.Tags.BuildRepo
    $Parameters.BuildContext.value.BuildBranch = $CdfConfig.Service.Tags.BuildBranch
    $Parameters.BuildContext.value.BuildCommit = $CdfConfig.Service.Tags.BuildCommit
    $Parameters.BuildContext.value.TemplateEnv = $CdfConfig.Service.Tags.TemplateEnv
    $Parameters.BuildContext.value.TemplateName = $CdfConfig.Service.Tags.TemplateName
    $Parameters.BuildContext.value.TemplateVersion = $CdfConfig.Service.Tags.TemplateVersion
    $Parameters.BuildContext.value.TemplateInstance = $CdfConfig.Service.Tags.TemplateInstance


    foreach ($AppSettingKey in $AppSettings.Keys) {
        $ParameterName = $AppSettingKey.Substring(4)
        if ($AppSettingKey.StartsWith('SVC_')) {
            $Parameters.Service.value[$ParameterName] = "@appsetting('$AppSettingKey')"
        }

        if ($AppSettingKey.StartsWith('EXT_')) {
            $Parameters.External.value[$ParameterName] = "@appsetting('$AppSettingKey')"
        }

        # For future use add app settings as individual parameters too
        $Parameters[$appSettingKey] = @{
            type  = 'string'
            value = "@appsetting('$appSettingKey')"
        }
    }

    return $AppSettings
}