{ "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#", "handler": "Microsoft.Azure.CreateUIDef", "version": "0.1.2-preview", "parameters": { "basics": [ { "name": "infoForBeforeDeployment", "type": "Microsoft.Common.InfoBox", "visible": true, "options": { "icon": "Info", "text": "The Azure identity deploying this offer must have one of the following two sets of Azure role-based access control roles:
  • Contributor and User Access Administrator of the current subscription.
  • Owner of the current subscription.

  • This offer always deploys WebLogic Server using the 'Model in image' domain home source type, even when the persistent volume checkbox is checked in 'Configure AKS cluster' blade. Click this link for more information on domain home source types." } }, { "name": "basicsRequired", "type": "Microsoft.Common.Section", "label": "Credentials for WebLogic", "elements": [ { "name": "wlsUserName", "type": "Microsoft.Common.TextBox", "label": "Username for WebLogic Administrator", "defaultValue": "weblogic", "toolTip": "Use only letters and numbers", "constraints": { "required": true, "validations": [ { "regex": "^[a-z0-9A-Z]{1,30}$", "message": "The value must be 1-30 characters long and must only contain letters and numbers." } ] }, "visible": true }, { "name": "wlsPassword", "type": "Microsoft.Common.PasswordBox", "label": { "password": "Password for WebLogic Administrator", "confirmPassword": "Confirm password" }, "toolTip": "Password for WebLogic Administrator", "constraints": { "required": true, "regex": "^(?=.*[A-Z])(?=.*[a-z])(?=.*\\d)[A-Za-z\\d]{12,}$", "validationMessage": "The password must contain at least 12 characters, with at least 1 uppercase letter, 1 lowercase letter and 1 number, and special characters are not allowed." }, "options": { "hideConfirmation": false }, "visible": true }, { "name": "wdtRuntimePassword", "type": "Microsoft.Common.PasswordBox", "label": { "password": "Password for WebLogic Model encryption", "confirmPassword": "Confirm password" }, "toolTip": "Model in Image requires a runtime encryption secret with a secure `password` key. This secret is used by the operator to encrypt model and domain home artifacts before it adds them to a runtime ConfigMap or log. See https://aka.ms/wls-aks-model-runtime-encryption-secret.", "constraints": { "required": true, "regex": "^(?=.*[A-Z])(?=.*[a-z])(?=.*\\d)[A-Za-z\\d]{12,}$", "validationMessage": "The password must contain at least 12 characters, with at least 1 uppercase letter, 1 lowercase letter and 1 number, and special characters are not allowed." }, "options": { "hideConfirmation": false }, "visible": true } ], "visible": true }, { "name": "basicsOptional", "type": "Microsoft.Common.Section", "label": "Optional Basic Configuration", "elements": [ { "name": "basicsOptionalAcceptDefaults", "type": "Microsoft.Common.OptionsGroup", "label": "Accept defaults for optional configuration?", "defaultValue": "Yes", "toolTip": "Select 'No' to edit optional basic configuration.", "constraints": { "allowedValues": [ { "label": "Yes", "value": "false" }, { "label": "No", "value": "true" } ], "required": true } }, { "name": "managedServerPrefix", "type": "Microsoft.Common.TextBox", "label": "Name prefix for Managed Server", "toolTip": "The string to prepend to the name of the managed server.", "defaultValue": "managed-server", "constraints": { "required": true, "regex": "^(?=.{3,20}$)[a-zA-Z](?!.*--)[a-zA-Z0-9-]*[a-zA-Z0-9]$", "validationMessage": "The prefix must be between 3 and 20 characters long and contain letters, numbers and hyphens(-). The name must begin with a letter, end with a letter or digit, and not contain consecutive hyphens." }, "visible": "[bool(basics('basicsOptional').basicsOptionalAcceptDefaults)]" }, { "name": "wlsDomainName", "type": "Microsoft.Common.TextBox", "label": "WebLogic Domain Name", "toolTip": "The name of the WebLogic Domain to create.", "defaultValue": "domain1", "constraints": { "required": true, "regex": "^[a-z0-9A-Z]{3,20}$", "validationMessage": "The Domain Name must be between 3 and 20 characters long and contain letters, numbers only." }, "visible": "[bool(basics('basicsOptional').basicsOptionalAcceptDefaults)]" }, { "name": "wlsDomainUID", "type": "Microsoft.Common.TextBox", "label": "WebLogic Domain UID", "toolTip": "The UID of the WebLogic Domain to create.", "defaultValue": "sample-domain1", "constraints": { "required": true, "regex": "^(?=.{3,20}$)[a-zA-Z](?!.*--)[a-zA-Z0-9-]*[a-zA-Z0-9]$", "validationMessage": "The prefix must be between 3 and 20 characters long and contain letters, numbers and hyphens(-). The name must begin with a letter, end with a letter or digit, and not contain consecutive hyphens." }, "visible": "[bool(basics('basicsOptional').basicsOptionalAcceptDefaults)]" }, { "name": "wlsClusterSize", "type": "Microsoft.Common.Slider", "min": 5, "max": 1000, "label": "Maximum dynamic cluster size", "defaultValue": 5, "showStepMarkers": false, "toolTip": "The maximum size of the dynamic WebLogic cluster.", "constraints": { "required": true }, "visible": "[bool(basics('basicsOptional').basicsOptionalAcceptDefaults)]" }, { "name": "wlsJavaOption", "type": "Microsoft.Common.TextBox", "label": "Custom Java Options to start WebLogic Server", "placeholder": "-Xms1200m -XX:MaxNewSize=300m -Dweblogic.webservice.i18n.charset=utf-8", "toolTip": "Specify Java options to start WebLogic Server.", "constraints": { "regex": "^-[a-z0-9A-Z:./+_=-]+(\\s-[a-z0-9A-Z:./+_=-]+){0,99}$", "validationMessage": "Allow letters, numbers, space, colon(:), plus(+), minus(-), full stop(.), slash(/), equal sign(=), underscore(_), and the value must be less then 100 Java options." }, "visible": "[bool(basics('basicsOptional').basicsOptionalAcceptDefaults)]" }, { "name": "enableT3TunnelingTextBlock", "type": "Microsoft.Common.TextBlock", "visible": false, "options": { "text": "If checked, configure the necessary settings to enable T3 tunneling. You must take additional action on the Networking tab if either of these are checked.", "link": { "label": "Learn more", "uri": "https://aka.ms/wls-aks-t3-tunneling" } } }, { "name": "enableAdminT3Tunneling", "type": "Microsoft.Common.CheckBox", "label": "Enable T3 tunneling for Administration Server", "toolTip": "If checked, enable T3 tunneling for Administration Server", "visible": false }, { "name": "enableClusterT3Tunneling", "type": "Microsoft.Common.CheckBox", "label": "Enable T3 tunneling for WebLogic cluster", "toolTip": "If checked, enable T3 tunneling for WebLogic cluster.", "visible": false } ], "visible": true }, { "name": "howToReportIssues", "type": "Microsoft.Common.Section", "label": "Report issues, get help, and share feedback", "elements": [ { "name": "help", "type": "Microsoft.Common.TextBlock", "visible": true, "options": { "text": "See the documentation for this offer in the Oracle WebLogic Kubernetes Operator.", "link": { "label": "Offer documentation", "uri": "https://aka.ms/wls-aks-docs" } } }, { "name": "howToReportIssueText", "type": "Microsoft.Common.TextBlock", "visible": true, "options": { "text": "If you encounter problems during the deployment of Oracle WebLogic Server, report them here.", "link": { "label": "Issue tracker", "uri": "https://aka.ms/arm-oraclelinux-wls-issues?version=${project.version}" } } }, { "name": "howToJoinSlack", "type": "Microsoft.Common.TextBlock", "visible": true, "options": { "text": "If you want to interact directly with the Oracle WebLogic community, join the public Slack channel named 'oracle-weblogic'.", "link": { "label": "Join Slack", "uri": "https://aka.ms/arm-oraclelinux-wls-slack" } } }, { "name": "survey", "type": "Microsoft.Common.TextBlock", "visible": true, "options": { "text": "To get free help with Azure migration from the development team, fill out this survey.", "link": { "label": "Take survey", "uri": "https://aka.ms/wls-on-azure-survey" } } } ], "visible": true } ], "steps": [ { "name": "section_aks", "label": "Configure AKS cluster", "subLabel": { "preValidation": "Provide required info for AKS cluster configuration", "postValidation": "Done" }, "bladeTitle": "Configure AKS cluster", "elements": [ { "name": "clusterInfo", "type": "Microsoft.Common.Section", "label": "Azure Kubernetes Service", "elements": [ { "name": "createAKSCluster", "type": "Microsoft.Common.OptionsGroup", "label": "Create a new AKS cluster?", "defaultValue": "Yes", "toolTip": "Select 'Yes' to create a new AKS cluster, or select 'No' to provide an existing AKS cluster.", "constraints": { "allowedValues": [ { "label": "Yes", "value": "true" }, { "label": "No", "value": "false" } ], "required": true } }, { "name": "aksClusterSelector", "type": "Microsoft.Solutions.ResourceSelector", "label": "Select AKS cluster", "toolTip": "Select the existing AKS cluster.", "resourceType": "Microsoft.ContainerService/managedClusters", "options": { "filter": { "subscription": "onBasics", "location": "onBasics" } }, "visible": "[not(bool(steps('section_aks').clusterInfo.createAKSCluster))]" }, { "name": "aksSupportedVersionTextBlock", "type": "Microsoft.Common.TextBlock", "visible": "[bool(steps('section_aks').clusterInfo.createAKSCluster)]", "options": { "icon": "Info", "text": "AKS supports a range of Kubernetes versions. This offer is tested with a specific Kubernetes version known to work with WebLogic Server on AKS; click 'Learn more' to find the version information.", "link": { "label": "Learn more", "uri": "https://aka.ms/wls-aks-well-tested-version" } } }, { "name": "aksNodeCount", "type": "Microsoft.Common.Slider", "min": 1, "max": 1000, "label": "Node count", "defaultValue": 3, "showStepMarkers": false, "toolTip": "The number of nodes that should be created along with the cluster. You will be able to resize the cluster later.", "constraints": { "required": true }, "visible": "[bool(steps('section_aks').clusterInfo.createAKSCluster)]" }, { "name": "nodeVMSizeSelector", "type": "Microsoft.Compute.SizeSelector", "label": "Node size", "toolTip": "The size of virtual machine to provision.", "recommendedSizes": [ "Standard_DS2_v2" ], "constraints": { "numAvailabilityZonesRequired": 3, "zone": "3" }, "options": { "hideDiskTypeFilter": false }, "osPlatform": "Linux", "count": "[steps('section_aks').clusterInfo.aksNodeCount]", "visible": "[bool(steps('section_aks').clusterInfo.createAKSCluster)]" }, { "name": "enableAzureMonitoringTextBlock", "type": "Microsoft.Common.TextBlock", "visible": "[bool(steps('section_aks').clusterInfo.createAKSCluster)]", "options": { "icon": "Info", "text": "If checked, configure the necessary settings to integrate with Container insights. Container insights gives you performance visibility by collecting memory and processor metrics from controllers, nodes, and containers that are available in Kubernetes through the Metrics API. Container logs are also collected. Metrics are written to the metrics store and log data is written to the logs store associated with your Log Analytics workspace.", "link": { "label": "Learn more", "uri": "https://aka.ms/wls-aks-container-insights" } } }, { "name": "enableAzureMonitoring", "type": "Microsoft.Common.CheckBox", "label": "Enable Container insights", "toolTip": "If checked, configure the necessary settings to integrate with Container insights.", "visible": "[bool(steps('section_aks').clusterInfo.createAKSCluster)]" }, { "name": "enableAzureFileShareTextBlock", "type": "Microsoft.Common.TextBlock", "visible": "[bool(steps('section_aks').clusterInfo.createAKSCluster)]", "options": { "icon": "Info", "text": "If checked, configure the necessary settings to mount a persistent volume to the nodes of the AKS cluster. This can be useful for storing log files outside of the AKS cluster, among other possible uses. An Azure Storage Account and an Azure Files share will be provisioned; static persistent volume with the Azure Files share will be mounted to the nodes of the AKS cluster.", "link": { "label": "Learn more", "uri": "https://aka.ms/wls-aks-persistent-storage" } } }, { "name": "enableAzureFileShare", "toolTip": "If checked, configure the necessary settings to mount a persistent volume to the nodes of the AKS cluster.", "type": "Microsoft.Common.CheckBox", "label": "Create Persistent Volume using Azure File share service", "visible": "[bool(steps('section_aks').clusterInfo.createAKSCluster)]" } ] }, { "name": "imageInfo", "type": "Microsoft.Common.Section", "label": "Image selection", "elements": [ { "name": "useOracleImage", "type": "Microsoft.Common.OptionsGroup", "label": "Use a pre-existing, WebLogic Server Docker image from Oracle Container Registry?", "defaultValue": "Yes", "toolTip": "Select 'Yes' to a use pre-existing, WebLogic Server Docker image from the public Oracle Container Registry. Select 'No' to use a pre-existing Docker image, assumed to be a compatible WebLogic Server image, from the specified ACR instance. This allows the use of custom images, such as with a specific set of patches (PSUs).", "constraints": { "allowedValues": [ { "label": "Yes", "value": "true" }, { "label": "No", "value": "false" } ], "required": true } }, { "name": "userProvidedAcrInfo", "type": "Microsoft.Common.InfoBox", "visible": "[not(bool(steps('section_aks').imageInfo.useOracleImage))]", "options": { "icon": "Info", "text": "Make sure the Azure Container Registry has enabled the admin user.", "uri": "https://docs.microsoft.com/en-us/azure/container-registry/container-registry-authentication#admin-account" } }, { "name": "userProvidedAcrSelector", "type": "Microsoft.Solutions.ResourceSelector", "label": "Select existing ACR instance", "toolTip": "Select the existing ACR instance.", "resourceType": "Microsoft.ContainerRegistry/registries", "options": { "filter": { "subscription": "onBasics", "location": "onBasics" } }, "visible": "[not(bool(steps('section_aks').imageInfo.useOracleImage))]" }, { "name": "userProvidedImagePath", "type": "Microsoft.Common.TextBox", "visible": "[not(bool(steps('section_aks').imageInfo.useOracleImage))]", "label": "Please provide the image path", "toolTip": "Please provide the image path, the image must be stored in the selected ACR above", "defaultValue": "", "constraints": { "required": "[not(bool(steps('section_aks').imageInfo.useOracleImage))]", "regex": "[concat(coalesce(last(split(steps('section_aks').imageInfo.userProvidedAcrSelector.id, '/')), ''), '.*$')]", "validationMessage": "The image must be stored in the selected ACR above" } }, { "name": "oracleCreateACR", "type": "Microsoft.Common.OptionsGroup", "visible": "[bool(steps('section_aks').imageInfo.useOracleImage)]", "label": "Create a new Azure Container Registry to store application images?", "defaultValue": "Yes", "toolTip": "Select 'Yes' to create a new ACR instance, or select 'No' to provide an existing ACR instance.", "constraints": { "allowedValues": [ { "label": "Yes", "value": "true" }, { "label": "No", "value": "false" } ], "required": true } }, { "name": "oracleAcrInfo", "type": "Microsoft.Common.InfoBox", "visible": "[and(bool(steps('section_aks').imageInfo.useOracleImage),not(bool(steps('section_aks').imageInfo.oracleCreateACR)))]", "options": { "icon": "Info", "text": "Make sure the Azure Container Registry has enabled the admin user.", "uri": "https://docs.microsoft.com/en-us/azure/container-registry/container-registry-authentication#admin-account" } }, { "name": "oracleAcrSelector", "type": "Microsoft.Solutions.ResourceSelector", "label": "Select ACR instance", "toolTip": "Select the existing ACR instance.", "resourceType": "Microsoft.ContainerRegistry/registries", "options": { "filter": { "subscription": "onBasics", "location": "onBasics" } }, "visible": "[and(bool(steps('section_aks').imageInfo.useOracleImage),not(bool(steps('section_aks').imageInfo.oracleCreateACR)))]" }, { "name": "ocrSSOInfo", "type": "Microsoft.Common.InfoBox", "visible": "[bool(steps('section_aks').imageInfo.useOracleImage)]", "options": { "icon": "Info", "text": "Provide an Oracle Single Sign-On (SSO) account to access the Oracle Registry Server. Select the link to create an Oracle SSO account.", "uri": "https://aka.ms/wls-aks-create-sso-account" } }, { "name": "ocrSSOUserName", "type": "Microsoft.Common.TextBox", "label": "Username for Oracle Single Sign-On authentication", "defaultValue": "example@contoso.com", "toolTip": "Username for Oracle Single Sign-On authentication to login the Oracle Container Registry.", "constraints": { "required": true, "regex": "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$", "validationMessage": "The value must be an email address." }, "visible": "[bool(steps('section_aks').imageInfo.useOracleImage)]" }, { "name": "ocrSSOPassword", "type": "Microsoft.Common.PasswordBox", "label": { "password": "Password for Oracle Single Sign-On authentication", "confirmPassword": "Confirm password" }, "toolTip": "Password for Oracle Single Sign-On authentication to login the Oracle Container Registry.", "constraints": { "required": true, "regex": "^(?=.*[A-Z])(?=.*[a-z])(?=.*\\d)[A-Za-z\\d\\$\\&\\+\\,:\\=\\?@#|'.\\^\\*!\\-_~/'\\[\\]\\{\\}\"]{8,}$", "validationMessage": "The password must contain at least 8 characters, with at least 1 uppercase letter, 1 lowercase letter and 1 number, and special characters, but should not contain > < ( ) % ; \\." }, "options": { "hideConfirmation": false }, "visible": "[bool(steps('section_aks').imageInfo.useOracleImage)]" }, { "name": "isSSOSupportEntitled", "type": "Microsoft.Common.OptionsGroup", "label": "Is the specified SSO account associated with an active Oracle support contract?", "defaultValue": "Yes", "toolTip": "If 'Yes' is selected, the deployment process will pull from the CPU WebLogic Server image repository in the Oracle Container Registry (OCR). If 'No' is selected the deployment process will pull from the WebLogic Server image repository in OCR.", "constraints": { "allowedValues": [ { "label": "Yes", "value": "true" }, { "label": "No", "value": "false" } ], "required": true }, "visible": "[bool(steps('section_aks').imageInfo.useOracleImage)]" }, { "name": "fromImageInfo", "type": "Microsoft.Common.InfoBox", "visible": "[bool(steps('section_aks').imageInfo.useOracleImage)]", "options": { "icon": "Warning", "text": "The Oracle Standard Terms and Restrictions for the WebLogic Server images must be accepted in the Oracle Container Registry.

    To accept the license agreement of available Patched WebLogic Server Images:
  • Log on to Oracle Container Registry
  • Navigate to middleware/weblogic_cpu
  • Accept license agreement

  • To accept the license agreement of available General WebLogic Server Images:
  • Log on to Oracle Container Registry
  • Navigate to middleware/weblogic
  • Accept license agreement
  • " } }, { "name": "oracleImageSelector", "type": "Microsoft.Common.DropDown", "label": "Select desired combination of WebLogic Server, JDK and Operating System or fully qualified Docker tag", "defaultValue": "14.1.1.0-11", "multiLine": true, "toolTip": "Select image", "constraints": { "allowedValues": [ { "label": "14.1.1.0-8", "description": "14c on JDK 8 on Oracle Linux 7", "value": "14.1.1.0-8" }, { "label": "14.1.1.0-11", "description": "14c on JDK 11 on Oracle Linux 7", "value": "14.1.1.0-11" }, { "label": "12.2.1.4", "description": "12cR2 (12.2.1.4) on JDK 8 on Oracle Linux 7", "value": "12.2.1.4" }, { "label": "12.2.1.3", "description": "12cR2 (12.2.1.3) on JDK 8 on Oracle Linux 7", "value": "12.2.1.3" }, { "label": "14.1.1.0-8-ol8", "description": "14c on JDK 8 on Oracle Linux 8", "value": "14.1.1.0-8-ol8" }, { "label": "14.1.1.0-11-ol8", "description": "14c on JDK 11 on Oracle Linux 8", "value": "14.1.1.0-11-ol8" }, { "label": "12.2.1.4-ol8", "description": "12cR2 (12.2.1.4) on JDK 8 on Oracle Linux 8", "value": "12.2.1.4-ol8" }, { "label": "12.2.1.3-ol8", "description": "12cR2 (12.2.1.3) on JDK 8 on Oracle Linux 8", "value": "12.2.1.3-ol8" }, { "label": "Others", "description": "Specify fully qualified Oracle Container Registry tag", "value": "others" } ], "required": true }, "visible": "[bool(steps('section_aks').imageInfo.useOracleImage)]" }, { "name": "fromOracleImage", "type": "Microsoft.Common.TextBox", "visible": "[and(bool(steps('section_aks').imageInfo.useOracleImage),equals(steps('section_aks').imageInfo.oracleImageSelector, 'others'))]", "label": "WebLogic Docker tag", "defaultValue": "14.1.1.0-slim-11", "toolTip": "Docker tag that comes after 'container-registry.oracle.com/middleware/weblogic:' in the fromOracleImage option to 'imagetool'.", "constraints": { "required": true, "validations": [ { "regex": "^[a-z0-9\\-\\.]+$", "message": "Must be a valid Docker tag for WebLogic on Oracle Container Registry" } ] } } ], "visible": true }, { "name": "jeeAppInfo", "type": "Microsoft.Common.Section", "label": "Java EE Application", "elements": [ { "name": "uploadAppPackage", "type": "Microsoft.Common.OptionsGroup", "label": "Deploy your application package?", "defaultValue": "Yes", "toolTip": "Select 'Yes' to deploy your application.", "constraints": { "allowedValues": [ { "label": "Yes", "value": "true" }, { "label": "No", "value": "false" } ], "required": true } }, { "name": "appInfoBox", "type": "Microsoft.Common.InfoBox", "options": { "icon": "Info", "text": "You must select the application files from Azure Storage Account.
    Follow the steps to upload your applications to an Azure Storage Account:
  • Create a Storage Account
  • Create a container and upload application files
  • " }, "visible": "[bool(steps('section_aks').jeeAppInfo.uploadAppPackage)]" }, { "name": "appPackageUrl", "type": "Microsoft.Common.FileUpload", "label": "Application package (.war,.ear,.jar)", "toolTip": "The application package to deploy.", "constraints": { "required": true, "accept": ".war,.ear,.jar" }, "options": { "multiple": true, "uploadMode": "url", "openMode": "binary" }, "visible": "[bool(steps('section_aks').jeeAppInfo.uploadAppPackage)]" }, { "name": "validateApplicationsInfo", "type": "Microsoft.Common.InfoBox", "visible": "[bool(steps('section_aks').jeeAppInfo.uploadAppPackage)]", "options": { "icon": "Info", "text": "If checked, verify the deployed app reaches the ACTIVE state and fail the deployment if it does not. See the documentation link for more information.", "uri": "https://aka.ms/wls-aks-deployment-state" } }, { "name": "validateApplications", "type": "Microsoft.Common.CheckBox", "label": "Fail deployment if application does not become ACTIVE.", "toolTip": "If checked, verify the deployed app reaches the ACTIVE state and fail the deployment if it does not. See the documentation link for more information.", "visible": "[bool(steps('section_aks').jeeAppInfo.uploadAppPackage)]" }, { "name": "appReplicas", "type": "Microsoft.Common.TextBox", "label": "Number of WebLogic Managed Server replicas", "defaultValue": "2", "toolTip": "The number of WebLogic Managed Server replicas to deploy.", "constraints": { "required": true, "regex": "^(1|2|3|4|5){1}$", "validationMessage": "Number of WebLogic Managed Server replicas to deploy, limit 1-5." } } ], "visible": true } ] }, { "name": "section_sslConfiguration", "type": "Microsoft.Common.Section", "label": "TLS/SSL configuration", "elements": [ { "name": "sslConfigurationText", "type": "Microsoft.Common.TextBlock", "visible": true, "options": { "text": "Selecting 'Yes' here will cause the offer to configure WebLogic Server Administration Console, Remote Console and cluster to use HTTPS (Secure) ports, with your own TLS/SSL certificate.", "link": { "label": "Learn more", "uri": "https://aka.ms/arm-oraclelinux-wls-ssl-config" } } }, { "name": "enableCustomSSL", "type": "Microsoft.Common.OptionsGroup", "label": "Configure end to end TLS/SSL to WebLogic Server Administration Console and cluster on HTTPS (Secure) port, with your own certificate?", "defaultValue": "No", "toolTip": "Select 'Yes' to configure end to end TLS/SSL to WebLogic Server Administration Console and cluster on HTTPS (Secure) port, with your own certificate.", "constraints": { "allowedValues": [ { "label": "Yes", "value": true }, { "label": "No", "value": false } ], "required": false } }, { "name": "sslText00", "type": "Microsoft.Common.TextBlock", "visible": "[steps('section_sslConfiguration').enableCustomSSL]", "options": { "text": "Choose an option for providing the TLS/SSL KeyStore and enter the values for the required fields:" } }, { "name": "sslText01", "type": "Microsoft.Common.TextBlock", "visible": "[steps('section_sslConfiguration').enableCustomSSL]", "options": { "text": "    ⁃ Upload existing KeyStores." } }, { "name": "sslText02", "type": "Microsoft.Common.TextBlock", "visible": "[steps('section_sslConfiguration').enableCustomSSL]", "options": { "text": "    ⁃ Use KeyStores stored in Azure Key Vault.", "link": { "label": "Learn more", "uri": "https://aka.ms/wls-aks-tls-ssl" } } }, { "name": "sslConfigurationAccessOption", "type": "Microsoft.Common.OptionsGroup", "visible": "[steps('section_sslConfiguration').enableCustomSSL]", "label": "How would you like to provide required configuration", "defaultValue": "Upload existing KeyStores", "toolTip": "Select 'Upload existing KeyStores' to use local stored KeyStores.", "constraints": { "allowedValues": [ { "label": "Upload existing KeyStores", "value": "uploadConfig" }, { "label": "Use KeyStores stored in Azure Key Vault", "value": "keyVaultStoredConfig" } ], "required": false } }, { "name": "uploadedCustomSSLSettings", "type": "Microsoft.Common.Section", "visible": "[and(steps('section_sslConfiguration').enableCustomSSL, equals(steps('section_sslConfiguration').sslConfigurationAccessOption, 'uploadConfig'))]", "label": "TLS/SSL configuration settings", "elements": [ { "name": "sslKeystoreInfo0", "type": "Microsoft.Common.InfoBox", "visible": "true", "options": { "icon": "Info", "text": "You must provide different files for identity and trust KeyStores. Select here for more details.", "uri": "https://aka.ms/arm-oraclelinux-wls-ssl-configuration" } }, { "name": "uploadedCustomIdentityKeyStoreData", "type": "Microsoft.Common.FileUpload", "label": "Identity KeyStore Data file(.jks,.p12)", "toolTip": "Identity KeyStore for TLS/SSL configuration", "constraints": { "required": true, "accept": ".jks,.p12" }, "options": { "multiple": false, "uploadMode": "file", "openMode": "binary" }, "visible": true }, { "name": "uploadedCustomIdentityKeyStorePassphrase", "type": "Microsoft.Common.PasswordBox", "label": { "password": "Password", "confirmPassword": "Confirm password" }, "toolTip": " The passphrase for the Identity KeyStore", "constraints": { "required": true, "regex": "^.{6,}$", "validationMessage": "Keypass must be at least 6 characters long." }, "options": { "hideConfirmation": false }, "visible": true }, { "name": "uploadedCustomIdentityKeyStoreType", "type": "Microsoft.Common.DropDown", "visible": "true", "label": "The Identity KeyStore type (JKS,PKCS12)", "defaultValue": "JKS", "toolTip": "One of the supported KeyStore types", "constraints": { "allowedValues": [ { "label": "JKS", "value": "JKS" }, { "label": "PKCS12", "value": "PKCS12" } ], "required": true } }, { "name": "uploadedPrivateKeyAlias", "type": "Microsoft.Common.TextBox", "visible": "true", "label": "The alias of the server's private key within the Identity KeyStore", "defaultValue": "", "toolTip": "Use only letters and numbers", "constraints": { "required": true, "regex": "^[a-z0-9A-Z]{1,30}$", "validationMessage": "The value must be 1-30 characters long and must only contain letters and numbers." } }, { "name": "uploadedPrivateKeyPassPhrase", "type": "Microsoft.Common.PasswordBox", "visible": "true", "label": { "password": "The passphrase for the server's private key within the Identity KeyStore", "confirmPassword": "Confirm passphrase" }, "toolTip": "Use only letters and numbers", "constraints": { "required": true, "regex": "^.{6,}$", "validationMessage": "Keypass must be at least 6 characters long." }, "options": { "hideConfirmation": false } }, { "name": "uploadedCustomTrustKeyStoreData", "type": "Microsoft.Common.FileUpload", "label": "Trust KeyStore Data file(.jks,.p12)", "toolTip": "Trust KeyStore for TLS/SSL configuration.", "constraints": { "required": true, "accept": ".jks,.p12" }, "options": { "multiple": false, "uploadMode": "file", "openMode": "binary" }, "visible": true }, { "name": "uploadedCustomTrustKeyStorePassPhrase", "type": "Microsoft.Common.PasswordBox", "label": { "password": "Password", "confirmPassword": "Confirm password" }, "toolTip": " The passphrase for the Trust KeyStore", "constraints": { "required": true, "regex": "^.{6,}$", "validationMessage": "Keypass must be at least 6 characters long." }, "options": { "hideConfirmation": false }, "visible": true }, { "name": "uploadedCustomTrustKeyStoreType", "type": "Microsoft.Common.DropDown", "visible": "true", "label": "The Trust KeyStore type (JKS,PKCS12)", "defaultValue": "JKS", "toolTip": "One of the supported KeyStore types", "constraints": { "allowedValues": [ { "label": "JKS", "value": "JKS" }, { "label": "PKCS12", "value": "PKCS12" } ], "required": true } } ] }, { "name": "keyVaultStoredCustomSSLSettings", "type": "Microsoft.Common.Section", "visible": "[and(steps('section_sslConfiguration').enableCustomSSL, equals(steps('section_sslConfiguration').sslConfigurationAccessOption, 'keyVaultStoredConfig'))]", "label": "TLS/SSL configuration settings", "elements": [ { "name": "sslKeystoreInfo1", "type": "Microsoft.Common.InfoBox", "visible": "true", "options": { "icon": "Info", "text": "You must provide different files for identity and trust KeyStores. Select here for more details.", "uri": "https://aka.ms/arm-oraclelinux-wls-ssl-configuration" } }, { "name": "keyVaultText", "type": "Microsoft.Common.TextBlock", "visible": "true", "options": { "text": "Enabling a HTTPS (Secure) port for the Administration Console requires you to obtain a valid TLS/SSL certificate. The offer will look for the certificate and other configuration items in the Azure Key Vault specified here.", "link": { "label": "Learn more", "uri": "https://aka.ms/wls-aks-ssl-key-vault" } } }, { "name": "keyVaultResourceGroup", "type": "Microsoft.Common.TextBox", "visible": "true", "label": "Resource group name in current subscription containing the Key Vault", "defaultValue": "", "toolTip": "Use only letters and numbers", "constraints": { "required": true, "regex": "^[a-z0-9A-Z.\\-_()]{0,89}([a-z0-9A-Z\\-_()]{1}){3,63}$", "validationMessage": "[if(greater(length(steps('section_sslConfiguration').keyVaultStoredCustomSSLSettings.keyVaultResourceGroup), 90),'Resource group names only allow up to 90 characters.', 'Resource group names only allow alphanumeric characters, periods, underscores, hyphens and parenthesis and cannot end in a period.')]" } }, { "name": "keyVaultName", "type": "Microsoft.Common.TextBox", "visible": "true", "label": "Name of the Azure Key Vault containing secrets for the TLS/SSL certificate", "defaultValue": "", "toolTip": "Use only letters and numbers", "constraints": { "required": true, "regex": "^(?=.{3,24}$)[a-zA-Z](?!.*--)[a-zA-Z0-9-]*[a-zA-Z0-9]$", "validationMessage": "[if(or(greater(length(steps('section_sslConfiguration').keyVaultStoredCustomSSLSettings.keyVaultName), 24), less(length(steps('section_sslConfiguration').keyVaultStoredCustomSSLSettings.keyVaultName), 3)),'Vault name must be between 3-24 alphanumeric characters. The name must begin with a letter, end with a letter or digit, and not contain consecutive hyphens.','Vault name must only contain alphanumeric characters and dashes and cannot start with a number')]" } }, { "name": "keyVaultCustomIdentityKeyStoreDataSecretName", "type": "Microsoft.Common.TextBox", "visible": "true", "label": "The name of the secret in the specified Key Vault whose value is the Identity KeyStore Data", "defaultValue": "", "toolTip": "Use only letters and numbers", "constraints": { "required": true, "regex": "^[a-z0-9A-Z]{1,30}$", "validationMessage": "The value must be 1-30 characters long and must only contain letters and numbers." } }, { "name": "keyVaultCustomIdentityKeyStorePassPhraseSecretName", "type": "Microsoft.Common.TextBox", "visible": "true", "label": "The name of the secret in the specified Key Vault whose value is the passphrase for the Identity KeyStore", "defaultValue": "", "toolTip": "Use only letters and numbers", "constraints": { "required": true, "regex": "^[a-z0-9A-Z]{1,30}$", "validationMessage": "The value must be 1-30 characters long and must only contain letters and numbers." } }, { "name": "keyVaultCustomIdentityKeyStoreType", "type": "Microsoft.Common.DropDown", "visible": "true", "label": "The Identity KeyStore type (JKS,PKCS12)", "defaultValue": "JKS", "toolTip": "One of the supported KeyStore types", "constraints": { "allowedValues": [ { "label": "JKS", "value": "JKS" }, { "label": "PKCS12", "value": "PKCS12" } ], "required": true } }, { "name": "keyVaultPrivateKeyAliasSecretName", "type": "Microsoft.Common.TextBox", "visible": "true", "label": "The name of the secret in the specified Key Vault whose value is the Private Key Alias", "defaultValue": "", "toolTip": "Use only letters and numbers", "constraints": { "required": true, "regex": "^[a-z0-9A-Z]{1,30}$", "validationMessage": "The value must be 1-30 characters long and must only contain letters and numbers." } }, { "name": "keyVaultPrivateKeyPassPhraseSecretName", "type": "Microsoft.Common.TextBox", "visible": "true", "label": "The name of the secret in the specified Key Vault whose value is the passphrase for the Private Key", "defaultValue": "", "toolTip": "Use only letters and numbers", "constraints": { "required": true, "regex": "^[a-z0-9A-Z]{1,30}$", "validationMessage": "The value must be 1-30 characters long and must only contain letters and numbers." } }, { "name": "keyVaultCustomTrustKeyStoreDataSecretName", "type": "Microsoft.Common.TextBox", "visible": "true", "label": "The name of the secret in the specified Key Vault whose value is the Trust KeyStore Data", "defaultValue": "", "toolTip": "Use only letters and numbers", "constraints": { "required": true, "regex": "^[a-z0-9A-Z]{1,30}$", "validationMessage": "The value must be 1-30 characters long and must only contain letters and numbers." } }, { "name": "keyVaultCustomTrustKeyStorePassPhraseSecretName", "type": "Microsoft.Common.TextBox", "visible": "true", "label": "The name of the secret in the specified Key Vault whose value is the passphrase for the Trust KeyStore", "defaultValue": "", "toolTip": "Use only letters and numbers", "constraints": { "required": true, "regex": "^[a-z0-9A-Z]{1,30}$", "validationMessage": "The value must be 1-30 characters long and must only contain letters and numbers." } }, { "name": "keyVaultCustomTrustKeyStoreType", "type": "Microsoft.Common.DropDown", "visible": "true", "label": "The Trust KeyStore type (JKS,PKCS12)", "defaultValue": "JKS", "toolTip": "One of the supported KeyStore types", "constraints": { "allowedValues": [ { "label": "JKS", "value": "JKS" }, { "label": "PKCS12", "value": "PKCS12" } ], "required": true } } ] } ] }, { "name": "section_appGateway", "type": "Microsoft.Common.Section", "label": "Networking", "subLabel": { "preValidation": "Provide required information for networking", "postValidation": "Done" }, "bladeTitle": "Networking", "elements": [ { "name": "connectToAGText", "type": "Microsoft.Common.TextBlock", "visible": true, "options": { "text": "This blade allows configuring options for load balancing and ingress controller." } }, { "name": "lbSVCInfo", "type": "Microsoft.Common.Section", "label": "Standard Load Balancer service", "elements": [ { "name": "enableLBSVCText", "type": "Microsoft.Common.TextBlock", "visible": true, "options": { "text": "Selecting 'Yes' here will cause the offer to provision the Azure Load Balancer service to expose WebLogic Server Administration Console and cluster.", "link": { "label": "Learn more", "uri": "https://aka.ms/wls-aks-standard-load-balancer" } } }, { "name": "enableLBSVC", "type": "Microsoft.Common.OptionsGroup", "label": "Create Standard Load Balancer services for Oracle WebLogic Server?", "defaultValue": "No", "toolTip": "Select 'Yes' to create Standard Load Balancer services for Oracle WebLogic Server.", "constraints": { "allowedValues": [ { "label": "Yes", "value": true }, { "label": "No", "value": false } ], "required": false } }, { "name": "enableInternalLBText", "type": "Microsoft.Common.TextBlock", "visible": "[steps('section_appGateway').lbSVCInfo.enableLBSVC]", "options": { "text": "If checked, the offer will configure the load balancer as an internal load balancer.", "link": { "label": "Learn more", "uri": "https://aka.ms/wls-aks-internal-load-balancer" } } }, { "name": "enableInternalLB", "type": "Microsoft.Common.CheckBox", "label": "Use Internal Load Balancer", "toolTip": "If checked, the offer will configure the load balancer as an internal load balancer.", "visible": "[steps('section_appGateway').lbSVCInfo.enableLBSVC]" }, { "name": "infoBoxForLbSvc", "type": "Microsoft.Common.InfoBox", "visible": "[steps('section_appGateway').lbSVCInfo.enableLBSVC]", "options": { "icon": "info", "text": "There must be at least one and at most two entries." } }, { "name": "lbSVC", "type": "Microsoft.Common.EditableGrid", "ariaLabel": "Enter information", "label": "Standard Load Balancer service", "toolTip": "Create Azure Standard Load Balancer service for Administration Console and cluster.", "visible": "[steps('section_appGateway').lbSVCInfo.enableLBSVC]", "constraints": { "width": "Full", "rows": { "count": { "min": 0, "max": 2 } }, "columns": [ { "id": "colName", "header": "Service name prefix", "width": "2fr", "element": { "type": "Microsoft.Common.TextBox", "placeholder": "Input a prefix...", "toolTip": "Input a prefix for service name. For example, inputing 'domain1-admin-server' will cause provisioning a Load Balancer service named with 'domain1-admin-server*' and exposing the Oracle WebLogic Administration Server to Internet.", "constraints": { "required": true, "validations": [ { "isValid": "[lessOrEquals(length(filter(steps('section_appGateway').lbSVCInfo.lbSVC, (item) => equals(item.colName, last(take(steps('section_appGateway').lbSVCInfo.lbSVC, $rowIndex)).colName))),1)]", "message": "You can not input the same service prefix repeadly, please change any of the value." }, { "regex": "^(?=.{3,20}$)[a-zA-Z](?!.*--)[a-zA-Z0-9-]*[a-zA-Z0-9]$", "message": "The prefix must be between 3 and 20 characters long and contain letters, numbers and hyphens(-). The name must begin with a letter, end with a letter or digit, and not contain consecutive hyphens." } ] } } }, { "id": "colTarget", "header": "Target", "width": "2fr", "element": { "type": "Microsoft.Common.DropDown", "placeholder": "Select a target...", "toolTip": "Create Azure Standard Load Balancer Servicer for the selected target.", "constraints": { "allowedValues": [ { "label": "admin-server", "value": "adminServer" }, { "label": "cluster-1", "value": "cluster1" } ], "required": true } } }, { "id": "colPort", "header": "Port", "width": "1fr", "element": { "type": "Microsoft.Common.TextBox", "placeholder": "Input a port...", "toolTip": "Public port for the target service, it's suggested to use 7001 for Oracle WebLogic Administration Server, and 8001 for cluster.", "constraints": { "required": true, "validations": [ { "isValid": "[lessOrEquals(length(filter(steps('section_appGateway').lbSVCInfo.lbSVC, (item) => equals(item.colTarget, last(take(steps('section_appGateway').lbSVCInfo.lbSVC, $rowIndex)).colTarget))),1)]", "message": "You can not select the same target repeatedly." }, { "regex": "^()([1-9]|[1-5]?[0-9]{2,4}|6[1-4][0-9]{3}|65[1-4][0-9]{2}|655[1-2][0-9]|6553[1-5])$", "message": "Only numbers are allowed, and the value must be 1-65535." } ] } } } ] } } ], "visible": true }, { "name": "appgwIngress", "type": "Microsoft.Common.Section", "label": "Application Gateway Ingress Controller", "elements": [ { "name": "enableAppGatewayText", "type": "Microsoft.Common.TextBlock", "visible": true, "options": { "text": "Selecting 'Yes' here will cause the offer to configure an Application Gateway Ingress Controller", "link": { "label": "Learn more", "uri": "https://aka.ms/wls-aks-app-gateway-ingress-controller" } } }, { "name": "enableAppGateway", "type": "Microsoft.Common.OptionsGroup", "label": "Connect to Azure Application Gateway?", "defaultValue": "No", "toolTip": "Select 'Yes' to create an Azure Application Gateway Ingress as the load balancer for the cluster and admin server.", "constraints": { "allowedValues": [ { "label": "Yes", "value": true }, { "label": "No", "value": false } ], "required": false } }, { "name": "vnetInfo", "type": "Microsoft.Common.InfoBox", "visible": "[steps('section_appGateway').appgwIngress.enableAppGateway]", "options": { "icon": "Info", "text": "When creating a new virtual network, the subnet's address prefix is calculated automatically based on the virtual network's address prefix. When using an existing virtual network, a minimum virtual network size of /24 and a minimum subnet size of /24 are required. Additionally, the subnet must be dedicated only for use by the Application Gateway." } }, { "name": "vnetForApplicationGateway", "type": "Microsoft.Network.VirtualNetworkCombo", "label": { "virtualNetwork": "Virtual network", "subnets": "Subnets" }, "toolTip": { "virtualNetwork": "Select a virtual network in which to place the Application Gateway.", "subnets": "The subnet must be dedicated only for use by the Application Gateway." }, "defaultValue": { "name": "[concat('wlsaks-vnet',take(guid(), 8))]", "addressPrefixSize": "/24" }, "constraints": { "minAddressPrefixSize": "/24" }, "options": { "hideExisting": false }, "subnets": { "gatewaySubnet": { "label": "Subnet", "defaultValue": { "name": "wls-aks-gateway-subnet", "addressPrefixSize": "/24" }, "constraints": { "minAddressPrefixSize": "/24", "minAddressCount": 250, "requireContiguousAddresses": false } } }, "visible": "[steps('section_appGateway').appgwIngress.enableAppGateway]" }, { "name": "appgwUsePrivateIP", "type": "Microsoft.Common.CheckBox", "label": "Configure frontend IP with private IP address", "toolTip": "If checked, expose WebLogic Server with private IP address.", "visible": false }, { "name": "keyVaultText00", "type": "Microsoft.Common.TextBlock", "visible": "[steps('section_appGateway').appgwIngress.enableAppGateway]", "options": { "text": "Choose an option for providing the TLS/SSL certificate:" } }, { "name": "keyVaultText01", "type": "Microsoft.Common.TextBlock", "visible": "[steps('section_appGateway').appgwIngress.enableAppGateway]", "options": { "text": "    ⁃ Upload a TLS/SSL certificate: Upload the pre-signed certificate now." } }, { "name": "keyVaultText02", "type": "Microsoft.Common.TextBlock", "visible": "[steps('section_appGateway').appgwIngress.enableAppGateway]", "options": { "text": "    ⁃ Identify an Azure Key Vault: The Key Vault must already contain the certificate and its password stored as secrets." } }, { "name": "keyVaultText03", "type": "Microsoft.Common.TextBlock", "visible": "[steps('section_appGateway').appgwIngress.enableAppGateway]", "options": { "text": "    ⁃ Generate a self-signed front-end certificate: Generate a self-signed front-end certificate and apply it during deployment.", "link": { "label": "Learn more", "uri": "https://aka.ms/wls-aks-application-gateway-ssl-key-vault" } } }, { "name": "certificateOption", "type": "Microsoft.Common.OptionsGroup", "label": "Select desired TLS/SSL certificate option", "defaultValue": "Upload a TLS/SSL certificate", "toolTip": "Select desired TLS/SSL certificate option", "constraints": { "allowedValues": [ { "label": "Upload a TLS/SSL certificate", "value": "haveCert" }, { "label": "Identify an Azure Key Vault", "value": "haveKeyVault" }, { "label": "Generate a self-signed front-end certificate", "value": "generateCert" } ], "required": true }, "visible": "[steps('section_appGateway').appgwIngress.enableAppGateway]" }, { "name": "keyVaultSSLCertData", "type": "Microsoft.Common.FileUpload", "label": "Front-End TLS/SSL certificate(.pfx)", "toolTip": "TLS/SSL certificate used for App Gateway", "constraints": { "required": true, "accept": ".pfx" }, "options": { "multiple": false, "uploadMode": "file", "openMode": "binary" }, "visible": "[equals(steps('section_appGateway').appgwIngress.certificateOption, 'haveCert')]" }, { "name": "appGatewaySSLCertPassword", "type": "Microsoft.Common.PasswordBox", "label": { "password": "Password", "confirmPassword": "Confirm password" }, "toolTip": "Front-End TLS/SSL certificate password", "constraints": { "required": "[equals(steps('section_appGateway').appgwIngress.certificateOption, 'haveCert')]", "regex": "^((?=.*[0-9])(?=.*[a-z])|(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])|(?=.*[0-9])(?=.*[a-z])(?=.*[!@#$%^&*])|(?=.*[0-9])(?=.*[A-Z])(?=.*[!@#$%^&*])|(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*])).{6,128}$", "validationMessage": "The password must contain at least 6 characters, with at least 1 uppercase letter, 1 lowercase letter and 1 number." }, "options": { "hideConfirmation": false }, "visible": "[equals(steps('section_appGateway').appgwIngress.certificateOption, 'haveCert')]" }, { "name": "keyVaultBackendSSLCertData", "type": "Microsoft.Common.FileUpload", "label": "Trusted root certificate(.cer, .cert)", "toolTip": "Trusted root certificate (CA certificate) used to set up end to end TLS/SSL", "constraints": { "required": true, "accept": ".cer, .cert" }, "options": { "multiple": false, "uploadMode": "file", "openMode": "binary" }, "visible": "[and(steps('section_appGateway').appgwIngress.enableAppGateway, steps('section_sslConfiguration').enableCustomSSL, not(equals(steps('section_appGateway').appgwIngress.certificateOption, 'haveKeyVault')))]" }, { "name": "keyVaultResourceGroup", "type": "Microsoft.Common.TextBox", "label": "Resource group name in current subscription containing the Key Vault", "defaultValue": "", "toolTip": "Use only letters and numbers", "constraints": { "required": true, "regex": "^[a-z0-9A-Z.\\-_()]{0,89}([a-z0-9A-Z\\-_()]{1}){3,63}$", "validationMessage": "[if(greater(length(steps('section_appGateway').appgwIngress.keyVaultResourceGroup), 90),'Resource group names only allow up to 90 characters.', 'Resource group names only allow alphanumeric characters, periods, underscores, hyphens and parenthesis and cannot end in a period.')]" }, "visible": "[equals(steps('section_appGateway').appgwIngress.certificateOption, 'haveKeyVault')]" }, { "name": "keyVaultName", "type": "Microsoft.Common.TextBox", "label": "Name of the Azure Key Vault containing secrets for the certificate for TLS/SSL Termination", "defaultValue": "", "toolTip": "Use only letters and numbers", "constraints": { "required": true, "regex": "^(?=.{3,24}$)[a-zA-Z](?!.*--)[a-zA-Z0-9-]*[a-zA-Z0-9]$", "validationMessage": "[if(or(greater(length(steps('section_appGateway').appgwIngress.keyVaultName), 24), less(length(steps('section_appGateway').appgwIngress.keyVaultName), 3)),'Vault name must be between 3-24 alphanumeric characters. The name must begin with a letter, end with a letter or digit, and not contain consecutive hyphens.','Vault name must only contain alphanumeric characters and dashes and cannot start with a number')]" }, "visible": "[equals(steps('section_appGateway').appgwIngress.certificateOption, 'haveKeyVault')]" }, { "name": "keyVaultSSLCertDataSecretName", "type": "Microsoft.Common.TextBox", "label": "The name of the secret in the specified Key Vault whose value is the front-end TLS/SSL certificate data", "defaultValue": "", "toolTip": "Use only letters and numbers", "constraints": { "required": true, "regex": "^[a-z0-9A-Z]{1,30}$", "validationMessage": "The value must be 1-30 characters long and must only contain letters and numbers." }, "visible": "[equals(steps('section_appGateway').appgwIngress.certificateOption, 'haveKeyVault')]" }, { "name": "keyVaultSSLCertPasswordSecretName", "type": "Microsoft.Common.TextBox", "label": "The name of the secret in the specified Key Vault whose value is the password for the front-end TLS/SSL certificate", "defaultValue": "", "toolTip": "Use only letters and numbers", "constraints": { "required": true, "regex": "^[a-z0-9A-Z]{1,30}$", "validationMessage": "The value must be 1-30 characters long and must only contain letters and numbers." }, "visible": "[equals(steps('section_appGateway').appgwIngress.certificateOption, 'haveKeyVault')]" }, { "name": "keyVaultBackendSSLCertDataSecretName", "type": "Microsoft.Common.TextBox", "label": "The name of the secret in the specified Key Vault whose value is the trusted root certificate data", "defaultValue": "", "toolTip": "Use only letters and numbers", "constraints": { "required": true, "regex": "^[a-z0-9A-Z]{1,30}$", "validationMessage": "The value must be 1-30 characters long and must only contain letters and numbers." }, "visible": "[and(steps('section_sslConfiguration').enableCustomSSL, equals(steps('section_appGateway').appgwIngress.certificateOption, 'haveKeyVault'))]" }, { "name": "enableCookieBasedAffinity", "type": "Microsoft.Common.CheckBox", "label": "Enable cookie based affinity", "toolTip": "If checked, enable cookie based affinity", "visible": "[steps('section_appGateway').appgwIngress.enableAppGateway]" }, { "name": "appgwForAdminServer", "type": "Microsoft.Common.OptionsGroup", "label": "Create ingress for Administration Console. Make sure no application with path /console*, it will cause conflict with Administration Console path.", "defaultValue": "No", "toolTip": "Select 'Yes' to Create ingress for Administration Console. Make sure no application with path /console*, it will cause conflict with Administration Console path.", "constraints": { "allowedValues": [ { "label": "Yes", "value": true }, { "label": "No", "value": false } ] }, "visible": "[steps('section_appGateway').appgwIngress.enableAppGateway]" }, { "name": "appgwForAdminRemote", "type": "Microsoft.Common.OptionsGroup", "label": "Create ingress for WebLogic Remote Console. Make sure no application with path /remoteconsole*, it will cause conflict with WebLogic Remote Console path.", "defaultValue": "No", "toolTip": "Select 'Yes' to Create ingress for WebLogic Remote Console. Make sure no application with path /remoteconsole*, it will cause conflict with WebLogic Remote Console path.", "constraints": { "allowedValues": [ { "label": "Yes", "value": true }, { "label": "No", "value": false } ] }, "visible": "[steps('section_appGateway').appgwIngress.enableAppGateway]" } ], "visible": true } ] }, { "name": "section_dnsConfiguration", "type": "Microsoft.Common.Section", "label": "DNS configuration", "elements": [ { "name": "dnsConfigurationText", "type": "Microsoft.Common.TextBlock", "visible": true, "options": { "text": "Selecting 'Yes' here will cause the offer to provision Oracle WebLogic Server Administration Console, cluster, and Remote Console using custom DNS Name (example: admin.contoso.com)", "link": { "label": "Learn more", "uri": "https://aka.ms/arm-oraclelinux-wls-dns" } } }, { "name": "enableDNSConfiguration", "type": "Microsoft.Common.OptionsGroup", "label": "Configure Custom DNS Alias", "defaultValue": "No", "toolTip": "Select 'Yes' to configure Custom DNS Alias.", "constraints": { "allowedValues": [ { "label": "Yes", "value": true }, { "label": "No", "value": false } ], "required": false } }, { "name": "bringDNSZone", "type": "Microsoft.Common.OptionsGroup", "label": "Use an existing Azure DNS Zone", "defaultValue": "No", "toolTip": "Select 'Yes' to configure Custom DNS Alias based on an existing Azure DNS Zone. Select 'No' to create an Azure DNS Zone and Custom DNS Alias.", "constraints": { "allowedValues": [ { "label": "Yes", "value": true }, { "label": "No", "value": false } ] }, "visible": "[steps('section_dnsConfiguration').enableDNSConfiguration]" }, { "name": "dnszoneName", "type": "Microsoft.Common.TextBox", "label": "DNS Zone Name", "defaultValue": "", "toolTip": "Each label must only contain letters, numbers, underscores, and dashes. Use periods to separate Domains", "constraints": { "required": true, "regex": "^([0-9a-zA-Z_-]{1,63}\\.){1,33}[0-9a-zA-Z_-]{1,63}$", "validationMessage": "There must be between 2 and 34 labels. For example, \"contoso.com\" has 2 labels. Each label must contain between 1 and 63 characters. Each label must only contain letters, numbers, underscores, and dashes." }, "visible": "[steps('section_dnsConfiguration').enableDNSConfiguration]" }, { "name": "dnsZoneResourceGroup", "type": "Microsoft.Common.TextBox", "label": "Name of the resource group contains the DNS Zone in current subscription", "defaultValue": "", "toolTip": "Name of the resource group which contains the DNS Zone in current subscription", "constraints": { "required": true, "regex": "^[a-z0-9A-Z.\\-_()]{0,89}([a-z0-9A-Z\\-_()]{1}){3,63}$", "validationMessage": "[if(greater(length(steps('section_dnsConfiguration').dnsZoneResourceGroup), 90),'Resource group names only allow up to 90 characters.', 'Resource group names only allow alphanumeric characters, periods, underscores, hyphens and parenthesis and cannot end in a period.')]" }, "visible": "[and(steps('section_dnsConfiguration').enableDNSConfiguration,steps('section_dnsConfiguration').bringDNSZone)]" }, { "name": "dnszoneAdminConsoleLabel", "type": "Microsoft.Common.TextBox", "label": "Label for Oracle WebLogic Server Administration Console", "defaultValue": "admin", "toolTip": "Specify a label to generate subdomain of Oracle WebLogic Server Administration Console", "constraints": { "required": true, "validations": [ { "regex": "^([0-9a-zA-Z_-]{1,63}\\.){0,33}[0-9a-zA-Z_-]{1,63}$", "message": "Each label must contain between 1 and 63 characters. Each label must only contain letters, numbers, underscores, and dashes." }, { "isValid": "[less(sub(length(concat(steps('section_dnsConfiguration').dnszoneAdminConsoleLabel,'.',steps('section_dnsConfiguration').dnszoneName)),length(replace(concat(steps('section_dnsConfiguration').dnszoneAdminConsoleLabel,'.',steps('section_dnsConfiguration').dnszoneName), '.', ''))),34)]", "message": "Subdomain must be between 2 and 34 labels. For example, \"admin.contoso.com\" has 3 labels." } ] }, "visible": "[steps('section_dnsConfiguration').enableDNSConfiguration]" }, { "name": "dnszoneAdminT3ChannelLabel", "type": "Microsoft.Common.TextBox", "label": "Label for Oracle WebLogic Administration Server T3 channel", "defaultValue": "admin-t3", "toolTip": "Specify a label to generate subdomain of Oracle WebLogic Administration Server T3 channel", "constraints": { "required": true, "validations": [ { "regex": "^([0-9a-zA-Z_-]{1,63}\\.){0,33}[0-9a-zA-Z_-]{1,63}$", "message": "Each label must contain between 1 and 63 characters. Each label must only contain letters, numbers, underscores, and dashes." }, { "isValid": "[less(sub(length(concat(steps('section_dnsConfiguration').dnszoneAdminT3ChannelLabel,'.',steps('section_dnsConfiguration').dnszoneName)),length(replace(concat(steps('section_dnsConfiguration').dnszoneAdminT3ChannelLabel,'.',steps('section_dnsConfiguration').dnszoneName), '.', ''))),34)]", "message": "Subdomain must be between 2 and 34 labels. For example, \"admin-t3.contoso.com\" has 3 labels." } ] }, "visible": "[and(steps('section_dnsConfiguration').enableDNSConfiguration,basics('basicsOptional').enableAdminT3Tunneling, steps('section_appGateway').lbSVCInfo.enableLBSVC)]" }, { "name": "dnszoneGatewayLabel", "type": "Microsoft.Common.TextBox", "label": "Label for WebLogic Cluster", "defaultValue": "www", "toolTip": "Specify a label to generate subdomain of WebLogic Cluster", "constraints": { "required": true, "validations": [ { "regex": "^([0-9a-zA-Z_-]{1,63}\\.){0,33}[0-9a-zA-Z_-]{1,63}$", "message": "Each label must contain between 1 and 63 characters. Each label must only contain letters, numbers, underscores, and dashes." }, { "isValid": "[less(sub(length(concat(if(empty(steps('section_dnsConfiguration').dnszoneGatewayLabel), '', steps('section_dnsConfiguration').dnszoneGatewayLabel),'.',steps('section_dnsConfiguration').dnszoneName)),length(replace(concat(if(empty(steps('section_dnsConfiguration').dnszoneGatewayLabel), '', steps('section_dnsConfiguration').dnszoneGatewayLabel),'.',steps('section_dnsConfiguration').dnszoneName), '.', ''))),34)]", "message": "Subdomain must be between 2 and 34 labels. For example, \"applications.contoso.com\" has 3 labels." } ] }, "visible": "[steps('section_dnsConfiguration').enableDNSConfiguration]" }, { "name": "dnszoneClusterT3ChannelLabel", "type": "Microsoft.Common.TextBox", "label": "Label for Oracle WebLogic cluster T3 channel", "defaultValue": "cluster-t3", "toolTip": "Specify a label to generate subdomain of Oracle WebLogic cluster T3 channel", "constraints": { "required": true, "validations": [ { "regex": "^([0-9a-zA-Z_-]{1,63}\\.){0,33}[0-9a-zA-Z_-]{1,63}$", "message": "Each label must contain between 1 and 63 characters. Each label must only contain letters, numbers, underscores, and dashes." }, { "isValid": "[less(sub(length(concat(steps('section_dnsConfiguration').dnszoneClusterT3ChannelLabel,'.',steps('section_dnsConfiguration').dnszoneName)),length(replace(concat(steps('section_dnsConfiguration').dnszoneClusterT3ChannelLabel,'.',steps('section_dnsConfiguration').dnszoneName), '.', ''))),34)]", "message": "Subdomain must be between 2 and 34 labels. For example, \"application-t3.contoso.com\" has 3 labels." } ] }, "visible": "[and(steps('section_dnsConfiguration').enableDNSConfiguration,basics('basicsOptional').enableClusterT3Tunneling, steps('section_appGateway').lbSVCInfo.enableLBSVC)]" } ] }, { "name": "section_database", "type": "Microsoft.Common.Section", "label": "Database", "subLabel": { "preValidation": "Configure integrations to database", "postValidation": "Done" }, "bladeTitle": "Database", "elements": [ { "name": "aboutDatabase", "type": "Microsoft.Common.TextBlock", "visible": true, "options": { "text": "Selecting 'Yes' here and providing the configuration will cause the offer to configure the WebLogic Server to connect to the desired pre-existing database. The database must be network accessible to the VNET and subnets created by the offer." } }, { "name": "enableDB", "type": "Microsoft.Common.OptionsGroup", "label": "Connect to database?", "defaultValue": "No", "toolTip": "Select 'Yes' and provide required info to configure the connection to a database.", "constraints": { "allowedValues": [ { "label": "Yes", "value": "true" }, { "label": "No", "value": "false" } ], "required": true } }, { "name": "databaseConnectionInfo", "type": "Microsoft.Common.Section", "label": "Connection settings", "elements": [ { "name": "databaseType", "type": "Microsoft.Common.DropDown", "label": "Choose database type", "toolTip": "Choose database type", "defaultValue": "Oracle database", "constraints": { "allowedValues": [ { "label": "Azure database for PostgreSQL (with support for passwordless connection)", "value": "postgresql" }, { "label": "Oracle database", "value": "oracle" }, { "label": "Azure SQL", "value": "sqlserver" }, { "label": "MySQL (with support for passwordless connection)", "value": "mysql" }, { "label": "Other", "value": "otherdb" } ], "required": true }, "visible": true }, { "name": "mysqlJDBCDriverInfo", "type": "Microsoft.Common.InfoBox", "visible": "[and(bool(steps('section_database').enableDB),equals(steps('section_database').databaseConnectionInfo.databaseType, 'mysql'))]", "options": { "icon": "Info", "text": "To support passwordless connection and various functionalities, the offer will upgrade the Oracle WebLogic Server MySQL driver with recent MySQL Connector Java driver." } }, { "name": "jdbcDataSourceName", "type": "Microsoft.Common.TextBox", "label": "JNDI Name", "toolTip": "The JNDI name for the database JDBC connection", "defaultValue": "", "constraints": { "required": true, "regex": "^[a-zA-Z0-9./_-]{1,30}$", "validationMessage": "The value must be 1-30 characters long and must only contain letters, numbers, hyphens (-), underscores (_), periods (.) and slashes (/)." }, "visible": true }, { "name": "dsConnectionURL", "type": "Microsoft.Common.TextBox", "label": "DataSource Connection String", "toolTip": "The JDBC connection string for the database", "defaultValue": "", "constraints": { "required": true, "validations": [ { "regex": "^jdbc:.*$", "message": "A valid JDBC URL must start with 'jdbc:'." }, { "isValid": "[startsWith(steps('section_database').databaseConnectionInfo.dsConnectionURL, concat('jdbc:', steps('section_database').databaseConnectionInfo.databaseType))]", "message": "A valid JDBC URL for the chosen database type must be provided." }, { "isValid": "[if(and(bool(steps('section_database').databaseConnectionInfo.enablePswlessConnection), equals(steps('section_database').databaseConnectionInfo.databaseType, 'mysql')), and(not(contains(steps('section_database').databaseConnectionInfo.dsConnectionURL, 'defaultAuthenticationPlugin')),not(contains(steps('section_database').databaseConnectionInfo.dsConnectionURL, 'authenticationPlugins')), not(contains(steps('section_database').databaseConnectionInfo.dsConnectionURL, 'azure.clientId'))), 'true')]", "message": "The offer will append defaultAuthenticationPlugin, authenticationPlugins with Azure provided plugins, and append azure.clientId with your managed identity client ID automatically, please do not specify them in your connection string." }, { "isValid": "[if(and(bool(steps('section_database').databaseConnectionInfo.enablePswlessConnection), equals(steps('section_database').databaseConnectionInfo.databaseType, 'postgresql')), and(not(contains(steps('section_database').databaseConnectionInfo.dsConnectionURL, 'authenticationPluginClassName')),not(contains(steps('section_database').databaseConnectionInfo.dsConnectionURL, 'azure.clientId'))), 'true')]", "message": "The offer will append authenticationPluginClassName with Azure provided plugins, and append azure.clientId with your managed identity client ID automatically, please do not specify them in your connection string." } ] }, "visible": "[and(bool(steps('section_database').enableDB), not(equals(steps('section_database').databaseConnectionInfo.databaseType, 'otherdb')))]" }, { "name": "dsConnectionURL2", "type": "Microsoft.Common.TextBox", "label": "DataSource Connection String", "toolTip": "The JDBC connection string for the database", "defaultValue": "", "constraints": { "required": true, "regex": "^jdbc:.*$", "validationMessage": "A valid JDBC URL for the chosen database type must be provided" }, "visible": "[and(bool(steps('section_database').enableDB), equals(steps('section_database').databaseConnectionInfo.databaseType, 'otherdb'))]" }, { "name": "dbGlobalTranPro", "type": "Microsoft.Common.DropDown", "label": "Global transactions protocol", "defaultValue": "OnePhaseCommit", "multiLine": true, "toolTip": "Determines the transaction protocol (global transaction processing behavior) for the data source.", "constraints": { "allowedValues": [ { "label": "TwoPhaseCommit", "description": "Standard XA transaction processing. Requires an XA driver.", "value": "TwoPhaseCommit" }, { "label": "LoggingLastResource", "description": "A performance enhancement for one non-XA resource.", "value": "LoggingLastResource" }, { "label": "EmulateTwoPhaseCommit", "description": "Enables one non-XA resource to participate in a global transaction, but has some risk to data.", "value": "EmulateTwoPhaseCommit" }, { "label": "OnePhaseCommit", "description": "One-phase XA transaction processing using a non-XA driver. This is the default setting.", "value": "OnePhaseCommit" }, { "label": "None", "description": "Support for local transactions only.", "value": "None" } ], "required": true }, "visible": true }, { "name": "dbUser", "type": "Microsoft.Common.TextBox", "label": "Database username", "toolTip": "Use only letters and numbers", "defaultValue": "", "constraints": { "required": true, "validations": [ { "regex": "^(?=.{1,128}$)[a-zA-Z](?!.*--)(?!.*@@)(?!.*-@)(?!.*@-)[a-zA-Z0-9-@]*[a-zA-Z0-9]$", "message": "The value must be 1-128 characters long and must only contain letters, numbers, hyphen(-) and the at sign, no hyphen allowed at the beginning and the end of database username." }, { "isValid": "[if(bool(steps('section_database').databaseConnectionInfo.enablePswlessConnection), greater(length(steps('section_database').databaseConnectionInfo.dbIdentity.userAssignedIdentities),0), bool('true'))]", "message": "You must select at least one managed identity that has access to your database." } ] }, "visible": true }, { "name": "enablePswlessConnection", "type": "Microsoft.Common.CheckBox", "label": "Use passwordless datasource connection", "toolTip": "Use passwordless datasource connection.", "visible": "[and(bool(steps('section_database').enableDB),or(equals(steps('section_database').databaseConnectionInfo.databaseType, 'mysql'),equals(steps('section_database').databaseConnectionInfo.databaseType, 'postgresql')))]" }, { "name": "dbPassword", "type": "Microsoft.Common.PasswordBox", "label": { "password": "Database Password", "confirmPassword": "Confirm password" }, "toolTip": "Database Password", "constraints": { "required": true, "regex": "^((?=.*[0-9])(?=.*[a-zA-Z!@#$%^&*])).{6,128}$", "validationMessage": "The password must be between 6 and 128 characters long and have at least one number." }, "options": { "hideConfirmation": false }, "visible": "[and(bool(steps('section_database').enableDB), not(steps('section_database').databaseConnectionInfo.enablePswlessConnection))]" }, { "name": "dbIdentity", "type": "Microsoft.ManagedIdentity.IdentitySelector", "label": "Connect database with Managed Identity", "toolTip": { "userAssignedIdentity": "Select a user assigned identity that has access to your database. For how to create a database user for your managed identity, see https://aka.ms/javaee-db-identity." }, "defaultValue": { "systemAssignedIdentity": "Off" }, "options": { "hideSystemAssignedIdentity": true, "hideUserAssignedIdentity": false }, "visible": "[and(bool(steps('section_database').enableDB), steps('section_database').databaseConnectionInfo.enablePswlessConnection)]" }, { "name": "dbDriverLibraries", "type": "Microsoft.Common.FileUpload", "label": "DataSource driver (.jar)", "toolTip": "The datasource driver jar package for the specified database.", "constraints": { "required": true, "accept": ".jar" }, "options": { "multiple": true, "uploadMode": "url", "openMode": "binary" }, "visible": "[and(bool(steps('section_database').enableDB), equals(steps('section_database').databaseConnectionInfo.databaseType, 'otherdb'))]" }, { "name": "dbDriverInfoBox", "type": "Microsoft.Common.InfoBox", "options": { "icon": "Info", "text": "WebLogic Server provides support for application data access to any database using a JDBC-compliant driver. Select here for more details.", "uri": "https://aka.ms/wls-aks-dbdriver" }, "visible": "[and(bool(steps('section_database').enableDB), equals(steps('section_database').databaseConnectionInfo.databaseType, 'otherdb'))]" }, { "name": "dbDriverName", "type": "Microsoft.Common.TextBox", "label": "DataSource driver name", "toolTip": "The driver name for the database", "placeholder": "com.informix.jdbc.IfxDriver", "constraints": { "required": true, "regex": "^[a-zA-Z_][a-zA-Z0-9_]+(\\.[a-zA-Z_][a-zA-Z0-9_]+){1,50}$", "validationMessage": "A valid driver name for the chosen database type must be provided" }, "visible": "[and(bool(steps('section_database').enableDB), equals(steps('section_database').databaseConnectionInfo.databaseType, 'otherdb'))]" }, { "name": "dbTestTableName", "type": "Microsoft.Common.TextBox", "label": "Test table name", "toolTip": "The name of the database table to use when testing physical database connections. ", "constraints": { "required": true, "regex": "^.*$", "validationMessage": "A test table name for the chosen database type must be provided" }, "visible": "[and(bool(steps('section_database').enableDB), equals(steps('section_database').databaseConnectionInfo.databaseType, 'otherdb'))]" } ], "visible": "[bool(steps('section_database').enableDB)]" } ] } ], "outputs": { "acrName": "[last(split(steps('section_aks').imageInfo.oracleAcrSelector.id, '/'))]", "aksAgentPoolNodeCount": "[steps('section_aks').clusterInfo.aksNodeCount]", "aksClusterName": "[last(split(steps('section_aks').clusterInfo.aksClusterSelector.id, '/'))]", "aksClusterRGName": "[last(take(split(steps('section_aks').clusterInfo.aksClusterSelector.id, '/'), 5))]", "appGatewayCertificateOption": "[steps('section_appGateway').appgwIngress.certificateOption]", "appGatewaySSLBackendRootCertData": "[steps('section_appGateway').appgwIngress.keyVaultBackendSSLCertData]", "appGatewaySSLCertData": "[steps('section_appGateway').appgwIngress.keyVaultSSLCertData]", "appGatewaySSLCertPassword": "[steps('section_appGateway').appgwIngress.appGatewaySSLCertPassword]", "appgwForAdminServer": "[steps('section_appGateway').appgwIngress.appgwForAdminServer]", "appgwForRemoteConsole": "[steps('section_appGateway').appgwIngress.appgwForAdminRemote]", "appgwUsePrivateIP": "[steps('section_appGateway').appgwIngress.appgwUsePrivateIP]", "appPackageUrls": "[steps('section_aks').jeeAppInfo.appPackageUrl]", "appReplicas": "[int(steps('section_aks').jeeAppInfo.appReplicas)]", "createACR": "[bool(steps('section_aks').imageInfo.oracleCreateACR)]", "createAKSCluster": "[bool(steps('section_aks').clusterInfo.createAKSCluster)]", "createDNSZone": "[not(bool(steps('section_dnsConfiguration').bringDNSZone))]", "dbDriverLibrariesUrls": "[steps('section_database').databaseConnectionInfo.dbDriverLibraries]", "dbDriverName": "[steps('section_database').databaseConnectionInfo.dbDriverName]", "dbGlobalTranPro": "[steps('section_database').databaseConnectionInfo.dbGlobalTranPro]", "dbIdentity": "[steps('section_database').databaseConnectionInfo.dbIdentity]", "dbPassword": "[steps('section_database').databaseConnectionInfo.dbPassword]", "dbTestTableName": "[steps('section_database').databaseConnectionInfo.dbTestTableName]", "dbUser": "[steps('section_database').databaseConnectionInfo.dbUser]", "databaseType": "[steps('section_database').databaseConnectionInfo.databaseType]", "dnszoneAdminConsoleLabel": "[steps('section_dnsConfiguration').dnszoneAdminConsoleLabel]", "dnszoneAdminT3ChannelLabel": "[steps('section_dnsConfiguration').dnszoneAdminT3ChannelLabel]", "dnszoneClusterLabel": "[steps('section_dnsConfiguration').dnszoneGatewayLabel]", "dnszoneClusterT3ChannelLabel": "[steps('section_dnsConfiguration').dnszoneClusterT3ChannelLabel]", "dnszoneName": "[steps('section_dnsConfiguration').dnszoneName]", "dnszoneRGName": "[steps('section_dnsConfiguration').dnsZoneResourceGroup]", "dsConnectionURL": "[coalesce(steps('section_database').databaseConnectionInfo.dsConnectionURL, steps('section_database').databaseConnectionInfo.dsConnectionURL2, 'null')]", "enableAppGWIngress": "[steps('section_appGateway').appgwIngress.enableAppGateway]", "enableAzureMonitoring": "[bool(steps('section_aks').clusterInfo.enableAzureMonitoring)]", "enableAzureFileShare": "[bool(steps('section_aks').clusterInfo.enableAzureFileShare)]", "enableCookieBasedAffinity": "[bool(steps('section_appGateway').appgwIngress.enableCookieBasedAffinity)]", "enableCustomSSL": "[bool(steps('section_sslConfiguration').enableCustomSSL)]", "enableDB": "[bool(steps('section_database').enableDB)]", "enableDNSConfiguration": "[bool(steps('section_dnsConfiguration').enableDNSConfiguration)]", "enableAdminT3Tunneling": "[basics('basicsOptional').enableAdminT3Tunneling]", "enableClusterT3Tunneling": "[basics('basicsOptional').enableClusterT3Tunneling]", "enablePswlessConnection": "[bool(steps('section_database').databaseConnectionInfo.enablePswlessConnection)]", "jdbcDataSourceName": "[steps('section_database').databaseConnectionInfo.jdbcDataSourceName]", "isSSOSupportEntitled": "[bool(steps('section_aks').imageInfo.isSSOSupportEntitled)]", "lbSvcValues": "[if(not(empty(first(if(empty(steps('section_appGateway').lbSVCInfo.lbSVC),parse('[{\"colName\":\"\"}]'), steps('section_appGateway').lbSVCInfo.lbSVC)).colName)),steps('section_appGateway').lbSVCInfo.lbSVC, parse('[]'))]", "location": "[location()]", "keyVaultName": "[steps('section_appGateway').appgwIngress.keyVaultName]", "keyVaultResourceGroup": "[steps('section_appGateway').appgwIngress.keyVaultResourceGroup]", "keyVaultSSLBackendRootCertDataSecretName": "[steps('section_appGateway').appgwIngress.keyVaultBackendSSLCertDataSecretName]", "keyVaultSSLCertDataSecretName": "[steps('section_appGateway').appgwIngress.keyVaultSSLCertDataSecretName]", "keyVaultSSLCertPasswordSecretName": "[steps('section_appGateway').appgwIngress.keyVaultSSLCertPasswordSecretName]", "managedServerPrefix": "[basics('basicsOptional').managedServerPrefix]", "newOrExistingVnetForApplicationGateway": "[steps('section_appGateway').appgwIngress.vnetForApplicationGateway.newOrExisting]", "ocrSSOPSW": "[steps('section_aks').imageInfo.ocrSSOPassword]", "ocrSSOUser": "[steps('section_aks').imageInfo.ocrSSOUserName]", "sslConfigurationAccessOption": "[steps('section_sslConfiguration').sslConfigurationAccessOption]", "sslKeyVaultCustomIdentityKeyStoreDataSecretName": "[steps('section_sslConfiguration').keyVaultStoredCustomSSLSettings.keyVaultCustomIdentityKeyStoreDataSecretName]", "sslKeyVaultCustomIdentityKeyStorePassPhraseSecretName": "[steps('section_sslConfiguration').keyVaultStoredCustomSSLSettings.keyVaultCustomIdentityKeyStorePassPhraseSecretName]", "sslKeyVaultCustomIdentityKeyStoreType": "[steps('section_sslConfiguration').keyVaultStoredCustomSSLSettings.keyVaultCustomIdentityKeyStoreType]", "sslKeyVaultCustomTrustKeyStoreDataSecretName": "[steps('section_sslConfiguration').keyVaultStoredCustomSSLSettings.keyVaultCustomTrustKeyStoreDataSecretName]", "sslKeyVaultCustomTrustKeyStorePassPhraseSecretName": "[steps('section_sslConfiguration').keyVaultStoredCustomSSLSettings.keyVaultCustomTrustKeyStorePassPhraseSecretName]", "sslKeyVaultCustomTrustKeyStoreType": "[steps('section_sslConfiguration').keyVaultStoredCustomSSLSettings.keyVaultCustomTrustKeyStoreType]", "sslKeyVaultName": "[steps('section_sslConfiguration').keyVaultStoredCustomSSLSettings.keyVaultName]", "sslKeyVaultPrivateKeyAliasSecretName": "[steps('section_sslConfiguration').keyVaultStoredCustomSSLSettings.keyVaultPrivateKeyAliasSecretName]", "sslKeyVaultPrivateKeyPassPhraseSecretName": "[steps('section_sslConfiguration').keyVaultStoredCustomSSLSettings.keyVaultPrivateKeyPassPhraseSecretName]", "sslKeyVaultResourceGroup": "[steps('section_sslConfiguration').keyVaultStoredCustomSSLSettings.keyVaultResourceGroup]", "sslUploadedCustomIdentityKeyStoreData": "[steps('section_sslConfiguration').uploadedCustomSSLSettings.uploadedCustomIdentityKeyStoreData]", "sslUploadedCustomIdentityKeyStorePassphrase": "[steps('section_sslConfiguration').uploadedCustomSSLSettings.uploadedCustomIdentityKeyStorePassphrase]", "sslUploadedCustomIdentityKeyStoreType": "[steps('section_sslConfiguration').uploadedCustomSSLSettings.uploadedCustomIdentityKeyStoreType]", "sslUploadedCustomTrustKeyStoreData": "[steps('section_sslConfiguration').uploadedCustomSSLSettings.uploadedCustomTrustKeyStoreData]", "sslUploadedCustomTrustKeyStorePassPhrase": "[steps('section_sslConfiguration').uploadedCustomSSLSettings.uploadedCustomTrustKeyStorePassPhrase]", "sslUploadedCustomTrustKeyStoreType": "[steps('section_sslConfiguration').uploadedCustomSSLSettings.uploadedCustomTrustKeyStoreType]", "sslUploadedPrivateKeyAlias": "[steps('section_sslConfiguration').uploadedCustomSSLSettings.uploadedPrivateKeyAlias]", "sslUploadedPrivateKeyPassPhrase": "[steps('section_sslConfiguration').uploadedCustomSSLSettings.uploadedPrivateKeyPassPhrase]", "useInternalLB": "[bool(steps('section_appGateway').lbSVCInfo.enableInternalLB)]", "useOracleImage": "[bool(steps('section_aks').imageInfo.useOracleImage)]", "userProvidedAcr": "[last(split(steps('section_aks').imageInfo.userProvidedAcrSelector.id, '/'))]", "userProvidedImagePath": "[steps('section_aks').imageInfo.userProvidedImagePath]", "validateApplications": "[bool(steps('section_aks').jeeAppInfo.validateApplications)]", "vnetForApplicationGateway": "[steps('section_appGateway').appgwIngress.vnetForApplicationGateway]", "vnetRGNameForApplicationGateway": "[steps('section_appGateway').appgwIngress.vnetForApplicationGateway.resourceGroup]", "vmSize": "[steps('section_aks').clusterInfo.nodeVMSizeSelector]", "wdtRuntimePassword": "[basics('basicsRequired').wdtRuntimePassword]", "wlsClusterSize": "[basics('basicsOptional').wlsClusterSize]", "wlsDomainName": "[basics('basicsOptional').wlsDomainName]", "wlsDomainUID": "[basics('basicsOptional').wlsDomainUID]", "wlsImageTag": "[if(equals(steps('section_aks').imageInfo.oracleImageSelector, 'others'), steps('section_aks').imageInfo.fromOracleImage, steps('section_aks').imageInfo.oracleImageSelector)]", "wlsJavaOption": "[basics('basicsOptional').wlsJavaOption]", "wlsPassword": "[basics('basicsRequired').wlsPassword]", "wlsUserName": "[basics('basicsRequired').wlsUserName]" } } }