Skip to main content

Configuration

WhatIF uses JSON configuration files injected at deploy time by the release pipeline.

Environment configuration​

The following values must be confirmed before any configuration files are prepared.

  • Source SQL Server connection values and authentication method
  • Secret references, including Key Vault URLs and secret names
  • Rating API endpoint and header requirements

Web Application Configuration​

The web application reads runtime configuration from server-computed.json. All values are injected by the release pipeline at deploy time.

{
"baseurl_Configuration": {
"name": "baseurl_Configuration",
"code": "baseurl_Configuration",
"baseurl": "[ConfigurationApiEndpoint]"
},
"baseurl_Initiatives": {
"name": "baseurl_Initiatives",
"code": "baseurl_Initiatives",
"baseurl": "[InitiativesApiEndpoint]"
},
"baseurl_WhatIf": {
"name": "baseurl_WhatIf",
"code": "baseurl_WhatIf",
"baseurl": "[WhatIfApiEndpoint]"
},
"baseurl_Model": {
"name": "baseurl_Model",
"code": "baseurl_Model",
"baseurl": "[ModelApiEndpoint]"
},
"logging": {
"enabled": true,
"level": "[LogLevel]"
},
"appSettings": {
"pollIntervalMs": "[PollIntervalMilliseconds]",
"ensureCapacitiesEnabled": "[EnsureCapacitiesEnabled]",
"isForcePublishEnabled": "[IsForcePublishEnabled]",
"isDeletePipelineEnabled": "[IsDeletePipelineEnabled]",
"isConfigSyncPipelineEnabled": "[IsConfigSyncPipelineEnabled]",
"planDeterminationFactor": "[PlanDeterminationFactor]"
},
"fabric": {
"workspaceId": "[FabricWorkspaceId]",
"itemId": "[FabricItemId]",
"jobType": "Pipeline"
},
"fabricDeletePipeline": {
"workspaceId": "[FabricDeleteWorkspaceId]",
"itemId": "[FabricDeleteItemId]",
"jobType": "Pipeline"
},
"fabricConfigSyncPipeline": {
"workspaceId": "[FabricConfigSyncWorkspaceId]",
"itemId": "[FabricConfigSyncItemId]",
"jobType": "Pipeline"
},
"powerbi": {
"baseUrl": "[PowerBiBaseUrl]",
"scenarioCompareUrl": "[PowerBiScenarioCompareUrl]",
"scenarioFilterTemplate": "[PowerBiScenarioFilterTemplate]",
"customStyleTemplate": "[PowerBiCustomStyleTemplate]",
"pages": {
"premiumDisplacement": "[PowerBiPagePremiumDisplacement]",
"winnerLoser": "[PowerBiPageWinnerLoser]",
"segmentAnalysis": "[PowerBiPageSegmentAnalysis]",
"rateCompare": "[PowerBiPageRateCompare]",
"coverageUtilization": "[PowerBiPageCoverageUtilization]"
}
}
}

API Configuration​

The API reads runtime configuration from appsettings.json. Sensitive values are stored in Azure Key Vault and referenced by secret name.

{
"LogSettings": {
"Enabled": true,
"LoggingLevel": "[LoggingLevel]",
"LogTo": "[LogTo]",
"Cloud": {
"ConnectionString": "[LogCloudConnectionString]"
}
},
"ConnectionStrings": {
"DefaultConnection": "[DefaultConnection]",
"BookDataLakehouseConnection": "[BookDataLakehouseConnection]",
"DashboardSummaryLakehouseConnection": "[DashboardSummaryLakehouseConnection]",
"RatingOutputLakeHouseConnection": "[RatingOutputLakeHouseConnection]"
},
"CorsSettings": {
"AllowedOrigins": [ "[CorsAllowedOrigins]" ]
},
"JwtSettings": {
"Secret": "[JwtSecret]",
"Issuer": "[JwtIssuer]",
"Audience": "[JwtAudience]",
"ExpirationMinutes": "[JwtExpirationMinutes]",
"RefreshTokenExpirationDays": "[JwtRefreshTokenExpirationDays]"
},
"Fabric": {
"TenantId": "[FabricTenantId]",
"ClientId": "[FabricClientId]",
"ClientSecret": "[FabricClientSecret]",
"UseKeyVault": "[FabricUseKeyVault]",
"KeyVaultUrl": "[FabricKeyVaultUrl]",
"ClientIdSecretName": "[FabricClientIdSecretName]",
"ClientKeySecretName": "[FabricClientKeySecretName]",
"TenantIdSecretName": "[FabricTenantIdSecretName]",
"EnableCapacityResume": "[FabricEnableCapacityResume]",
"EnableCapacitySuspend": "[FabricEnableCapacitySuspend]",
"SubscriptionId": "[FabricSubscriptionId]",
"ResourceGroupName": "[FabricResourceGroupName]",
"ApiVersion": "[FabricApiVersion]",
"CapacityResumeDelayMs": "[FabricCapacityResumeDelayMs]"
},
"MailConfig": {
"SmtpServer": "[MailSmtpServer]",
"MailId": "[MailId]",
"MailPassword": "[MailPassword]",
"MailFrom": "[MailFrom]",
"Subject": "[MailSubject]",
"Port": "[MailPort]"
},
"AppSettings": {
"BaseUrl": "[AppBaseUrl]"
}
}

Variable substitution​

For nested properties, use dot notation:

ObjectName.PropertyName = Value

Example:

WhatIf.ClientId = your-client-id
WhatIf.ApiEndpoint = https://api.example.com

Variable sources​

Embedded variables​

Embedded variables are defined directly in the pipeline definition and are carried automatically on export and import. They are the recommended approach for environment-specific values such as resource names, endpoints, and workspace IDs.

Variable groups​

Variable groups are stored separately in ADO and are not included in pipeline exports. They must be created independently in each target environment and are appropriate for sensitive values such as connection strings and service principal credentials. Required groups must be documented to ensure consistent configuration across environments.