From 51c68ff9227030d0a928f4da161af68c300758e7 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Wed, 31 Jan 2024 14:54:23 +0800 Subject: [PATCH 01/43] create UI elements. --- .../src/main/arm/createUiDefinition.json | 145 ++++++++++++++++++ 1 file changed, 145 insertions(+) diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index 3173f0213..76d05f662 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -2107,6 +2107,146 @@ "visible": "[bool(steps('section_database').enableDB)]" } ] + }, + { + "name": "section_autoScaling", + "type": "Microsoft.Common.Section", + "label": "Horizontal Autoscaling", + "subLabel": { + "preValidation": "Configure Horizontal Autoscaling", + "postValidation": "Done" + }, + "bladeTitle": "Horizontal Autoscaling", + "elements": [ + { + "name": "aboutAutoscaling", + "type": "Microsoft.Common.TextBlock", + "visible": true, + "options": { + "text": "Selecting 'Yes' here and providing the configuration will cause the offer configure metric to scale the WebLogic cluster." + } + }, + { + "name": "enableAutoscaling", + "type": "Microsoft.Common.OptionsGroup", + "label": "Provision resources for horizontal autoscaling?", + "defaultValue": "No", + "toolTip": "Select 'Yes' and provide required info to configure horizontal autoscaling.", + "constraints": { + "allowedValues": [ + { + "label": "Yes", + "value": "true" + }, + { + "label": "No", + "value": "false" + } + ], + "required": true + } + }, + { + "name": "autoScalingInfo", + "type": "Microsoft.Common.Section", + "label": "Horizontal autoscaling settings", + "elements": [ + { + "name": "metricSource", + "type": "Microsoft.Common.OptionsGroup", + "label": "Select metric source. Autoscaling based on resource metrics from Kubernetes Metrics Server or exporting by WebLogic Monitoring Exporter. ", + "defaultValue": "Kubernetes Metrics Server", + "toolTip": "If you select Kubernetes Metrics Server, this offer configures WebLogic Server to scale based on CPU and memory utilization. If you select WebLogic Monitoring Exporter, this offer configures WebLogic Server to expose metrics using WebLogic Monitoring Exporter, provisions Prometheus to save the metrics and enables KEDA. You can create KEDA scalers based on Java metrics exported by WebLogic Monitoring Exporter.", + "constraints": { + "allowedValues": [ + { + "label": "Kubernetes Metrics Server", + "value": "kms" + }, + { + "label": "WebLogic Monitoring Exporter", + "value": "wme" + } + ], + "required": true + }, + "visible": true + }, + { + "name": "infoKms", + "type": "Microsoft.Common.InfoBox", + "visible": "[equals(steps('section_autoScaling').autoScalingInfo.metricSource, 'kms')]", + "options": { + "icon": "None", + "text": "This option configures and runs HPA to scale a WebLogic cluster, based on the cpu or memory utilization.", + "uri": "https://oracle.github.io/weblogic-kubernetes-operator/managing-domains/domain-lifecycle/scaling/#kubernetes-horizontal-pod-autoscaler-hpa" + } + }, + { + "name": "infoWme", + "type": "Microsoft.Common.InfoBox", + "visible": "[equals(steps('section_autoScaling').autoScalingInfo.metricSource, 'wme')]", + "options": { + "icon": "None", + "text": "This option exports metrics using WebLogic Monitoring Exporter, collects metrics using Azure Managed Prometheus Service and exposes metrics using KEDA. After the provisioning is completed, you have to create KEDA scalers based on your requirements to enable autoscaling.", + "uri": "https://oracle.github.io/weblogic-kubernetes-operator/managing-domains/domain-lifecycle/scaling/#kubernetes-horizontal-pod-autoscaler-hpa" + } + }, + { + "name": "kmsMetrics", + "type": "Microsoft.Common.OptionsGroup", + "label": "Select metric. ", + "defaultValue": "Average CPU Utilization", + "toolTip": "Select metric.", + "constraints": { + "allowedValues": [ + { + "label": "Average CPU Utilization", + "value": "cpu" + }, + { + "label": "Average Memory Utilization", + "value": "memory" + } + ], + "required": true + }, + "visible": "[equals(steps('section_autoScaling').autoScalingInfo.metricSource, 'kms')]" + }, + { + "name": "averageCpuUtilization", + "type": "Microsoft.Common.Slider", + "min": 10, + "max": 100, + "label": "Average CPU Utilization", + "subLabel": "Percent", + "defaultValue": 60, + "showStepMarkers": false, + "toolTip": "Pick Average CPU Utilization in Percent", + "constraints": { + "required": false + }, + "visible": "[equals(steps('section_autoScaling').autoScalingInfo.kmsMetrics, 'cpu')]" + }, + { + "name": "averageMemoryUtilization", + "type": "Microsoft.Common.Slider", + "min": 10, + "max": 100, + "label": "Average Memory Utilization", + "subLabel": "Percent", + "defaultValue": 60, + "showStepMarkers": false, + "toolTip": "Pick Average Memory Utilization in Percent", + "constraints": { + "required": false + }, + "visible": "[equals(steps('section_autoScaling').autoScalingInfo.kmsMetrics, 'memory')]" + } + ], + "visible": "[bool(steps('section_autoScaling').enableAutoscaling)]" + } + ] } ], "outputs": { @@ -2124,6 +2264,8 @@ "appgwUsePrivateIP": "[steps('section_appGateway').appgwIngress.appgwUsePrivateIP]", "appPackageUrls": "[steps('section_aks').jeeAppInfo.appPackageUrl]", "appReplicas": "[int(steps('section_aks').jeeAppInfo.appReplicas)]", + "averageCpuUtilization": "[steps('section_autoScaling').averageCpuUtilization]", + "averageMemoryUtilization": "[steps('section_autoScaling').averageMemoryUtilization]", "createACR": "[bool(steps('section_aks').imageInfo.oracleCreateACR)]", "createAKSCluster": "[bool(steps('section_aks').clusterInfo.createAKSCluster)]", "createDNSZone": "[not(bool(steps('section_dnsConfiguration').bringDNSZone))]", @@ -2143,6 +2285,7 @@ "dnszoneRGName": "[steps('section_dnsConfiguration').dnsZoneResourceGroup]", "dsConnectionURL": "[coalesce(steps('section_database').databaseConnectionInfo.dsConnectionURL, steps('section_database').databaseConnectionInfo.dsConnectionURL2, 'null')]", "enableAppGWIngress": "[equals(steps('section_appGateway').loadBalancingOptions, 'agic')]", + "enableAutoscaling": "[bool(steps('section_autoScaling').enableAutoscaling)]", "enableAzureMonitoring": "[bool(steps('section_aks').aksAdvancedInfo.enableAzureMonitoring)]", "enableAzureFileShare": "[bool(steps('section_aks').aksAdvancedInfo.enableAzureFileShare)]", "enableCookieBasedAffinity": "[not(bool(steps('section_appGateway').appgwIngress.enableCookieBasedAffinity))]", @@ -2161,7 +2304,9 @@ "keyVaultSSLBackendRootCertDataSecretName": "[steps('section_appGateway').appgwIngress.keyVaultBackendSSLCertDataSecretName]", "keyVaultSSLCertDataSecretName": "[steps('section_appGateway').appgwIngress.keyVaultSSLCertDataSecretName]", "keyVaultSSLCertPasswordSecretName": "[steps('section_appGateway').appgwIngress.keyVaultSSLCertPasswordSecretName]", + "kmsMetrics": "[steps('section_autoScaling').kmsMetrics]", "managedServerPrefix": "[basics('basicsOptional').managedServerPrefix]", + "metricSource": "[steps('section_autoScaling').metricSource]", "newOrExistingVnetForApplicationGateway": "[steps('section_appGateway').appgwIngress.vnetForApplicationGateway.newOrExisting]", "ocrSSOPSW": "[steps('section_aks').imageInfo.ocrSSOPassword]", "ocrSSOUser": "[steps('section_aks').imageInfo.ocrSSOUserName]", From 0056988aa99cb59331929640ba3355a3e5f40fcb Mon Sep 17 00:00:00 2001 From: galiacheng Date: Mon, 26 Feb 2024 17:05:48 +0800 Subject: [PATCH 02/43] some scripts --- .../src/main/arm/createUiDefinition.json | 2 +- .../arm/scripts/inline-scripts/enableHpa.sh | 38 ++++++++++ .../src/main/bicep/mainTemplate.bicep | 14 +++- .../_deployment-scripts/_ds_enable_hpa.bicep | 72 +++++++++++++++++++ .../bicep/modules/_enableAutoScaling.bicep | 21 ++++++ 5 files changed, 145 insertions(+), 2 deletions(-) create mode 100644 weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh create mode 100644 weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_hpa.bicep create mode 100644 weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index 76d05f662..b5cf5b80d 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -2178,7 +2178,7 @@ "visible": "[equals(steps('section_autoScaling').autoScalingInfo.metricSource, 'kms')]", "options": { "icon": "None", - "text": "This option configures and runs HPA to scale a WebLogic cluster, based on the cpu or memory utilization.", + "text": "This option configures and runs Kubernetes Horizontal Pod Autoscaler (HPA) to scale a WebLogic cluster, based on the CPU or memory utilization. The HPA autoscales WebLogic Server instances from a minimum of 1 cluster members up to maximum of cluster members, and the scale up or down will occur when the average CPU/memory is consistently over the utilization. Default maximum of cluster members is 5. You can set it from **Basics** -> **Optional Basic Configuration** -> **Maximum dynamic cluster size**.", "uri": "https://oracle.github.io/weblogic-kubernetes-operator/managing-domains/domain-lifecycle/scaling/#kubernetes-horizontal-pod-autoscaler-hpa" } }, diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh new file mode 100644 index 000000000..896d2a00e --- /dev/null +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh @@ -0,0 +1,38 @@ +# Copyright (c) 2021, Oracle Corporation and/or its affiliates. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. + +function scaling_basedon_cpu(){ + kubectl autoscale cluster ${WLS_CLUSTER_NAME} \ + --cpu-percent=50 \ + --min=1 \ + --max=${WLS_CLUSTER_SIZE} \ + -n WLS_NAMESPACE +} + +function scaling_basedon_memory(){ + +} + +function connect_aks(){ + az aks get-credentials \ + --resource-group ${AKS_CLUSTER_RG_NAME} \ + --name ${AKS_CLUSTER_NAME} \ + --overwrite-existing +} + +function validate_scaler(){ + +} + +# Main script +set -Eo pipefail + +install_kubectl + +connect_aks + +if [ "$HPA_SCALE_TYPE" == "cpu" ]; then + scaling_basedon_cpu +elif [ "$HPA_SCALE_TYPE" == "memory" ]; then + scaling_basedon_memory +fi \ No newline at end of file diff --git a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep index 1fc142077..b1d0e8601 100644 --- a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep +++ b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep @@ -126,6 +126,8 @@ param dnszoneRGName string = 'dns-contoso-rg' param dsConnectionURL string = 'jdbc:postgresql://contoso.postgres.database.azure.com:5432/postgres' @description('true to set up Application Gateway ingress.') param enableAppGWIngress bool = false +@description('true to enable Horizontal Autoscaling.') +param enableAutoscaling bool = false @description('In addition to the CPU and memory metrics included in AKS by default, you can enable Container Insights for more comprehensive data on the overall performance and health of your cluster. Billing is based on data ingestion and retention settings.') param enableAzureMonitoring bool = false @description('true to create persistent volume using file share.') @@ -821,6 +823,16 @@ module validateApplciations 'modules/_deployment-scripts/_ds-validate-applicatio ] } +module horizontalAutoscaling 'modules/_enableAutoScaling.bicep' = if (enableAutoscaling) { + name: 'enable-horizontal-autoscaling' + params: { + + } + dependsOn: [ + validateApplciations + ] +} + /* * Query and output WebLogic domain configuration, including: * - domain deployment description @@ -839,7 +851,7 @@ module queryWLSDomainConfig 'modules/_deployment-scripts/_ds-output-domain-confi wlsDomainUID: wlsDomainUID } dependsOn: [ - validateApplciations + enableAutoscaling ] } diff --git a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_hpa.bicep b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_hpa.bicep new file mode 100644 index 000000000..2343d8641 --- /dev/null +++ b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_hpa.bicep @@ -0,0 +1,72 @@ +// Copyright (c) 2022, Oracle Corporation and/or its affiliates. +// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. + +param aksClusterName string +param aksClusterRGName string +param azCliVersion string +@allowed([ + 'cpu' + 'memory' +]) +param hpaScaleType string = 'cpu' +param identity object = {} +param location string +param utcValue string = utcNow() +param utilizationPercentage int +param wlsClusterName string +param wlsClusterSize int +param wlsNamespace string + +// To mitigate arm-ttk error: Unreferenced variable: $fxv#0 +var base64_common = loadFileAsBase64('../../../arm/scripts/common.sh') +var base64_enableHpa = loadFileAsBase64('../../../arm/scripts/inline-scripts/enableHpa.sh') +var base64_utility = loadFileAsBase64('../../../arm/scripts/utility.sh') +var const_deploymentName='ds-enable-hpa' + +resource deploymentScript 'Microsoft.Resources/deploymentScripts@${azure.apiVersionForDeploymentScript}' = { + name: const_deploymentName + location: location + kind: 'AzureCLI' + identity: identity + properties: { + azCliVersion: azCliVersion + scriptContent: format('{0}\r\n\r\n{1}\r\n\r\n{2}',base64ToString(base64_common), base64ToString(base64_utility), base64ToString(base64_enableHpa)) + environmentVariables: [ + { + name: 'AKS_CLUSTER_RG_NAME' + value: aksClusterRGName + } + { + name: 'AKS_CLUSTER_NAME' + value: aksClusterName + } + { + name: 'CURRENT_RG_NAME' + value: resourceGroup().name + } + { + name: 'HPA_SCALE_TYPE' + value: hpaScaleType + } + { + name: 'UTILIZATION_PERSENTAGE' + value: utilizationPercentage + } + { + name: 'WLS_CLUSTER_NAME' + value: wlsClusterName + } + { + name: 'WLS_CLUSTER_SIZE' + value: wlsClusterSize + } + { + name: 'WLS_NAMESPACE' + value: wlsNamespace + } + ] + cleanupPreference: 'OnSuccess' + retentionInterval: 'P1D' + forceUpdateTag: utcValue + } +} diff --git a/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep b/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep new file mode 100644 index 000000000..ba7067338 --- /dev/null +++ b/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep @@ -0,0 +1,21 @@ +/* + Copyright (c) 2021, Oracle and/or its affiliates. +Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. +*/ + +param _artifactsLocation string = deployment().properties.templateLink.uri +@secure() +param _artifactsLocationSasToken string = '' +param _pidEnd string = '' +param _pidStart string = '' +param _pidCPUUtilization string = '' +param _pidMemoryUtilization string = '' +param _pidWme string = '' + + + + + + + + From 54a039f5919de3c7eb358a4c41cff1238374851a Mon Sep 17 00:00:00 2001 From: galiacheng Date: Tue, 27 Feb 2024 13:27:44 +0800 Subject: [PATCH 03/43] script to enable hpa --- .../src/main/arm/createUiDefinition.json | 2 +- .../arm/scripts/inline-scripts/enableHpa.sh | 56 ++++++++++---- .../src/main/bicep/mainTemplate.bicep | 16 +++- .../_deployment-scripts/_ds_enable_hpa.bicep | 5 -- .../bicep/modules/_enableAutoScaling.bicep | 74 +++++++++++++++++-- .../main/bicep/modules/_pids/_pid-dev.bicep | 4 + .../src/main/bicep/modules/_pids/_pid.bicep | 4 + 7 files changed, 134 insertions(+), 27 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index b5cf5b80d..257d2853c 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -2178,7 +2178,7 @@ "visible": "[equals(steps('section_autoScaling').autoScalingInfo.metricSource, 'kms')]", "options": { "icon": "None", - "text": "This option configures and runs Kubernetes Horizontal Pod Autoscaler (HPA) to scale a WebLogic cluster, based on the CPU or memory utilization. The HPA autoscales WebLogic Server instances from a minimum of 1 cluster members up to maximum of cluster members, and the scale up or down will occur when the average CPU/memory is consistently over the utilization. Default maximum of cluster members is 5. You can set it from **Basics** -> **Optional Basic Configuration** -> **Maximum dynamic cluster size**.", + "text": "This option configures and runs Kubernetes Horizontal Pod Autoscaler (HPA) to scale a WebLogic cluster, based on the CPU or memory utilization. The HPA autoscales WebLogic Server instances from a minimum of 1 cluster members up to maximum of cluster members, and the scale up or down will occur when the average CPU/memory is consistently over the utilization. Default maximum of cluster members is 5. You can set it from Basics -> Optional Basic Configuration -> Maximum dynamic cluster size.", "uri": "https://oracle.github.io/weblogic-kubernetes-operator/managing-domains/domain-lifecycle/scaling/#kubernetes-horizontal-pod-autoscaler-hpa" } }, diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh index 896d2a00e..b5e4075c4 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh @@ -1,18 +1,6 @@ -# Copyright (c) 2021, Oracle Corporation and/or its affiliates. +# Copyright (c) 2024, Oracle Corporation and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. -function scaling_basedon_cpu(){ - kubectl autoscale cluster ${WLS_CLUSTER_NAME} \ - --cpu-percent=50 \ - --min=1 \ - --max=${WLS_CLUSTER_SIZE} \ - -n WLS_NAMESPACE -} - -function scaling_basedon_memory(){ - -} - function connect_aks(){ az aks get-credentials \ --resource-group ${AKS_CLUSTER_RG_NAME} \ @@ -20,8 +8,44 @@ function connect_aks(){ --overwrite-existing } -function validate_scaler(){ - +function get_cluster_uid(){ + local clusterUid=$(kubectl get clusters -n ${WLS_NAMESPACE} -o=jsonpath='{.items[].metadata.name}') + utility_validate_status "Obtain cluster UID." + export WLS_CLUSTER_UID=${clusterUid} +} + +function scaling_basedon_cpu(){ + kubectl autoscale cluster ${WLS_CLUSTER_UID} \ + --cpu-percent=${UTILIZATION_PERSENTAGE} \ + --min=1 \ + --max=${WLS_CLUSTER_SIZE} \ + -n ${WLS_NAMESPACE} + utility_validate_status "Enable HPA based on CPU utilization." +} + +function scaling_basedon_memory(){ + cat <scaler-memory.yaml +apiVersion: autoscaling/v2beta1 +kind: HorizontalPodAutoscaler +metadata: + name: ${WLS_CLUSTER_UID} + namespace: ${WLS_NAMESPACE} +spec: + scaleTargetRef: + apiVersion: weblogic.oracle/v9 + kind: cluster + name: ${WLS_CLUSTER_UID} + minReplicas: 1 + maxReplicas: ${WLS_CLUSTER_SIZE} + metrics: + - type: Resource + resource: + name: memory + targetAverageUtilization: ${UTILIZATION_PERSENTAGE} +EOF + + kubectl apply -f scaler-memory.yaml + utility_validate_status "Enable HPA based on memory utilization." } # Main script @@ -31,6 +55,8 @@ install_kubectl connect_aks +get_cluster_uid + if [ "$HPA_SCALE_TYPE" == "cpu" ]; then scaling_basedon_cpu elif [ "$HPA_SCALE_TYPE" == "memory" ]; then diff --git a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep index b1d0e8601..4e3f8f0a8 100644 --- a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep +++ b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep @@ -826,7 +826,21 @@ module validateApplciations 'modules/_deployment-scripts/_ds-validate-applicatio module horizontalAutoscaling 'modules/_enableAutoScaling.bicep' = if (enableAutoscaling) { name: 'enable-horizontal-autoscaling' params: { - + _pidCPUUtilization: pids.outputs.cpuUtilization + _pidEnd: pids.outputs.autoScalingEnd + _pidMemoryUtilization: pids.outputs.memoryUtilization + _pidStart: pids.outputs.autoScalingStart + aksClusterName: aksClusterName + aksClusterRGName: aksClusterRGName + azCliVersion: const_azcliVersion + hpaScaleType: hpaScaleType + identity: obj_uamiForDeploymentScript + location: location + useHpa: useHpa + utilizationPercentage: utilizationPercentage + wlsClusterSize: wlsClusterSize + wlsDomainUID: wlsDomainUID + } dependsOn: [ validateApplciations diff --git a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_hpa.bicep b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_hpa.bicep index 2343d8641..74cdc37a4 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_hpa.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_hpa.bicep @@ -13,7 +13,6 @@ param identity object = {} param location string param utcValue string = utcNow() param utilizationPercentage int -param wlsClusterName string param wlsClusterSize int param wlsNamespace string @@ -52,10 +51,6 @@ resource deploymentScript 'Microsoft.Resources/deploymentScripts@${azure.apiVers name: 'UTILIZATION_PERSENTAGE' value: utilizationPercentage } - { - name: 'WLS_CLUSTER_NAME' - value: wlsClusterName - } { name: 'WLS_CLUSTER_SIZE' value: wlsClusterSize diff --git a/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep b/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep index ba7067338..abd75000e 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep @@ -3,18 +3,82 @@ Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ -param _artifactsLocation string = deployment().properties.templateLink.uri -@secure() -param _artifactsLocationSasToken string = '' -param _pidEnd string = '' -param _pidStart string = '' param _pidCPUUtilization string = '' +param _pidEnd string = '' param _pidMemoryUtilization string = '' +param _pidStart string = '' param _pidWme string = '' +param aksClusterName string +param aksClusterRGName string +param azCliVersion string + +@allowed([ + 'cpu' + 'memory' +]) +param hpaScaleType string = 'cpu' +param identity object = {} +param location string +param useHpa bool +param utilizationPercentage int +param wlsClusterSize int +param wlsDomainUID string + +var const_namespace = '${wlsDomainUID}-ns' + +module pidAutoScalingStart './_pids/_pid.bicep' = { + name: 'pid-auto-scaling-start' + params: { + name: _pidStart + } +} + +module pidCpuUtilization './_pids/_pid.bicep' = if(useHpa && hpaScaleType == 'cpu') { + name: 'pid-auto-scaling-based-on-cpu-utilization' + params: { + name: _pidCPUUtilization + } + dependsOn: [ + pidAutoScalingStart + ] +} + +module pidMemoryUtilization './_pids/_pid.bicep' = if(useHpa && hpaScaleType == 'memory') { + name: 'pid-auto-scaling-based-on-memory-utilization' + params: { + name: _pidMemoryUtilization + } + dependsOn: [ + pidAutoScalingStart + ] +} +module hapDeployment '_deployment-scripts/_ds_enable_hpa.bicep' = if(useHpa) { + name: 'hpa-deployment' + params: { + aksClusterName: aksClusterName + aksClusterRGName: aksClusterRGName + azCliVersion: azCliVersion + hpaScaleType: hpaScaleType + identity: identity + location: location + utilizationPercentage: utilizationPercentage + wlsClusterSize: wlsClusterSize + wlsNamespace: const_namespace + } + dependsOn: [ + pidAutoScalingStart + ] +} +module pidAutoScalingEnd './_pids/_pid.bicep' = { + name: 'pid-auto-scaling-end' + params: { + name: _pidEnd + } +} diff --git a/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid-dev.bicep b/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid-dev.bicep index d40798ab6..c6debafc9 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid-dev.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid-dev.bicep @@ -12,7 +12,10 @@ module pidStart './_empty.bicep' = if (name != 'pid'){ output appgwEnd string = '38647ff6-ea8d-59e5-832d-b036a4d29c73' output appgwStart string = '8ba7beaa-96fd-576a-acd8-28f7a6efa83a' +output autoScalingEnd string = 'test' +output autoScalingStart string = 'test' output customCertForAppgw string = 'b16ba29f-fc8e-5059-8988-f17bef4a9c5c' +output cpuUtilization string = 'test' output dbEnd string = 'ffab0a3f-90cb-585a-a7f9-ec0a62faeec1' output dbStart string = 'e64361eb-fea0-5f15-a313-c76daadbc648' output dnsEnd string = '189306c7-39e2-5844-817d-01e883a4cf1e' @@ -21,6 +24,7 @@ output lbEnd string = 'f76e2847-d5a1-52e7-9e52-fc8560f5d3e4' output lbStart string = 'e2a8c8b2-9b58-52c6-9636-1834ff3976dc' output networkingEnd string = '39d32fcd-1d02-50b6-9455-4b767a8e769e' output networkingStart string = 'ed47756f-2475-56dd-b13a-26027749b6e1' +output memoryUtilization string = 'test' output otherDb string = '551122ff-2fea-53a8-b7f4-6d6dae85af6a' output pswlessDbEnd string = '7e7aaa5b-2251-55b5-8b3d-43d514738cf2' output pswlessDbStart string = '089e9783-6707-54d0-ac8c-9b8d517914c5' diff --git a/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid.bicep b/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid.bicep index 4c901b125..79797c622 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid.bicep @@ -12,7 +12,10 @@ module pidStart './_empty.bicep' = if (name != 'pid'){ output appgwEnd string = '47ea43a0-95cf-52c7-aee8-7ee6106fc1bf' output appgwStart string = '01288010-2672-5831-a66b-7b8b45cace1b' +output autoScalingEnd string = 'test' +output autoScalingStart string = 'test' output customCertForAppgw string = 'b80f52c3-dddd-5286-915e-e4cc64be3093' +output cpuUtilization string = 'test' output dbEnd string = 'd7a9c78e-39d9-5a47-928d-8645ed86dafd' output dbStart string = '0cc86800-37f4-5191-9368-2953394309ec' output dnsEnd string = '754e16bc-4d81-5343-b99b-7532abd6587d' @@ -21,6 +24,7 @@ output lbEnd string = 'ce664543-77bd-515a-832e-107e32f99da9' output lbStart string = '44732bbc-04c4-5df7-a0c6-b9be9ec00ee6' output networkingEnd string = '2798165c-49fa-5701-b608-b80ed3986176' output networkingStart string = '0793308f-de9d-5f0d-92f9-d9fc4b413b8b' +output memoryUtilization string = 'test' output otherDb string = 'fceccc86-531c-5e44-99fd-9f1250f8e409' output pswlessDbEnd string = '972084b9-2b2d-5eb9-aa37-80448a77fbe1' output pswlessDbStart string = '7190b263-7825-5ae3-bc56-7294df936d4a' From 3a15cb6f9622af1186c47b1c4e3aa3264569b264 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Tue, 27 Feb 2024 15:50:56 +0800 Subject: [PATCH 04/43] Error BCP057: The name "hpaScaleType" does not exist in the current context. --- weblogic-azure-aks/src/main/bicep/mainTemplate.bicep | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep index 4e3f8f0a8..d656bb6da 100644 --- a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep +++ b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep @@ -143,6 +143,12 @@ param enableAdminT3Tunneling bool = false param enableClusterT3Tunneling bool = false @description('Enable passwordless datasource connection.') param enablePswlessConnection bool = false +@allowed([ + 'cpu' + 'memory' +]) +param hpaScaleType string = 'cpu' +param hpaTargetAverageUtilizationPercentage int = 60 @description('Is the specified SSO account associated with an active Oracle support contract?') param isSSOSupportEntitled bool = false @description('JNDI Name for JDBC Datasource') @@ -241,6 +247,8 @@ param t3ChannelAdminPort int = 7005 param t3ChannelClusterPort int = 8011 @description('True to use latest supported Kubernetes version.') param useLatestSupportedAksVersion bool = true +@description('True to enable HPA for auto scaling.') +param useHpa bool = true @description('True to set up internal load balancer service.') param useInternalLB bool = false @description('ture to upload Java EE applications and deploy the applications to WebLogic domain.') @@ -837,7 +845,7 @@ module horizontalAutoscaling 'modules/_enableAutoScaling.bicep' = if (enableAuto identity: obj_uamiForDeploymentScript location: location useHpa: useHpa - utilizationPercentage: utilizationPercentage + utilizationPercentage: hpaTargetAverageUtilizationPercentage wlsClusterSize: wlsClusterSize wlsDomainUID: wlsDomainUID From 6f008c06929214ba72a3b89c923278351de30460 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Wed, 28 Feb 2024 16:52:03 +0800 Subject: [PATCH 05/43] enable promethues metrics --- .../arm/scripts/inline-scripts/enableHpa.sh | 14 +++-- .../inline-scripts/enablePrometheusMetrics.sh | 39 ++++++++++++ .../_ds_enable_prometheus _metrics.bicep | 61 +++++++++++++++++++ .../bicep/modules/_enableAutoScaling.bicep | 5 ++ 4 files changed, 114 insertions(+), 5 deletions(-) create mode 100644 weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh create mode 100644 weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus _metrics.bicep diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh index b5e4075c4..e5a6ebdb5 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh @@ -24,16 +24,16 @@ function scaling_basedon_cpu(){ } function scaling_basedon_memory(){ - cat <scaler-memory.yaml -apiVersion: autoscaling/v2beta1 + cat <scaler-memory.yaml +apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: ${WLS_CLUSTER_UID} namespace: ${WLS_NAMESPACE} spec: scaleTargetRef: - apiVersion: weblogic.oracle/v9 - kind: cluster + apiVersion: weblogic.oracle/v1 + kind: Cluster name: ${WLS_CLUSTER_UID} minReplicas: 1 maxReplicas: ${WLS_CLUSTER_SIZE} @@ -41,7 +41,9 @@ spec: - type: Resource resource: name: memory - targetAverageUtilization: ${UTILIZATION_PERSENTAGE} + target: + averageUtilization: ${UTILIZATION_PERSENTAGE} + type: Utilization EOF kubectl apply -f scaler-memory.yaml @@ -57,6 +59,8 @@ connect_aks get_cluster_uid +#TBD check kms state + if [ "$HPA_SCALE_TYPE" == "cpu" ]; then scaling_basedon_cpu elif [ "$HPA_SCALE_TYPE" == "memory" ]; then diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh new file mode 100644 index 000000000..37a22569e --- /dev/null +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh @@ -0,0 +1,39 @@ +# Copyright (c) 2024, Oracle Corporation and/or its affiliates. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. + +function create_monitor_account_workspace(){ + local amaName="ama$(date +%s)" + local ret=$(az monitor account create -n $amaName -g $CURRENT_RG_NAME --query "id" | tr -d "\"") + utility_validate_status "Create Azure Monitor Account $amaName." + + if [ -z "$ret" ]; then + echo_stderr "Failed to create Azure Monitor Account." + fi + + export WORKSPACE_ID=$ret +} + +function enable_promethues_metrics(){ + az extension remove --name aks-preview + az extension add --name k8s-extension + + ### Use existing Azure Monitor workspace + az aks update --enable-azure-monitor-metrics \ + --name ${AKS_CLUSTER_NAME} \ + --resource-group ${AKS_CLUSTER_RG_NAME} \ + --azure-monitor-workspace-resource-id "${WORKSPACE_ID}" + + utility_validate_status "Enable Promethues Metrics." + + #Verify that the DaemonSet was deployed properly on the Linux node pools + #https://learn.microsoft.com/en-us/azure/azure-monitor/containers/kubernetes-monitoring-enable?tabs=cli#managed-prometheus + kubectl get ds ama-metrics-node --namespace=kube-system + #if the deployment fails, $?=1. + utility_validate_status "Validate promethues metrics is enabled." +} + +# https://learn.microsoft.com/en-us/azure/azure-monitor/containers/prometheus-metrics-scrape-configuration +function customize_scraping(){ + +} + diff --git a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus _metrics.bicep b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus _metrics.bicep new file mode 100644 index 000000000..7c648f088 --- /dev/null +++ b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus _metrics.bicep @@ -0,0 +1,61 @@ +// Copyright (c) 2022, Oracle Corporation and/or its affiliates. +// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. + +param aksClusterName string +param aksClusterRGName string +param azCliVersion string +param identity object = {} +param location string +param utcValue string = utcNow() +param wlsClusterSize int +param wlsNamespace string + +// To mitigate arm-ttk error: Unreferenced variable: $fxv#0 +var base64_common = loadFileAsBase64('../../../arm/scripts/common.sh') +var base64_enableHpa = loadFileAsBase64('../../../arm/scripts/inline-scripts/enablePrometheusMetrics.sh') +var base64_utility = loadFileAsBase64('../../../arm/scripts/utility.sh') +var const_deploymentName='ds-enable-promethues-metrics' + +resource deploymentScript 'Microsoft.Resources/deploymentScripts@${azure.apiVersionForDeploymentScript}' = { + name: const_deploymentName + location: location + kind: 'AzureCLI' + identity: identity + properties: { + azCliVersion: azCliVersion + scriptContent: format('{0}\r\n\r\n{1}\r\n\r\n{2}',base64ToString(base64_common), base64ToString(base64_utility), base64ToString(base64_enableHpa)) + environmentVariables: [ + { + name: 'AKS_CLUSTER_RG_NAME' + value: aksClusterRGName + } + { + name: 'AKS_CLUSTER_NAME' + value: aksClusterName + } + { + name: 'CURRENT_RG_NAME' + value: resourceGroup().name + } + { + name: 'HPA_SCALE_TYPE' + value: hpaScaleType + } + { + name: 'UTILIZATION_PERSENTAGE' + value: utilizationPercentage + } + { + name: 'WLS_CLUSTER_SIZE' + value: wlsClusterSize + } + { + name: 'WLS_NAMESPACE' + value: wlsNamespace + } + ] + cleanupPreference: 'OnSuccess' + retentionInterval: 'P1D' + forceUpdateTag: utcValue + } +} diff --git a/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep b/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep index abd75000e..303421541 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep @@ -73,6 +73,11 @@ module hapDeployment '_deployment-scripts/_ds_enable_hpa.bicep' = if(useHpa) { ] } +// deploy promethues +// configure promethues +// enable weblogic exporter +// enable keda + module pidAutoScalingEnd './_pids/_pid.bicep' = { name: 'pid-auto-scaling-end' params: { From 89b8262d4b16cd6cadc33b5b2e6ab02e8b57c05c Mon Sep 17 00:00:00 2001 From: galiacheng Date: Thu, 29 Feb 2024 16:21:32 +0800 Subject: [PATCH 06/43] export java metrics --- .../testWlsAksWithDependencyCreation.yml | 18 +- .../testWlsAksWithoutDependencyCreation.yml | 18 +- .../src/main/arm/createUiDefinition.json | 8 +- .../src/main/arm/scripts/common.sh | 2 + .../src/main/arm/scripts/createLbSvc.sh | 5 +- .../inline-scripts/enablePrometheusMetrics.sh | 251 +++++++++++++++++- .../main/arm/scripts/updateApplications.sh | 10 +- .../src/main/bicep/mainTemplate.bicep | 9 +- ...ep => _ds_enable_prometheus_metrics.bicep} | 42 ++- .../bicep/modules/_enableAutoScaling.bicep | 44 ++- .../resources/weblogic_tooling_family.json | 7 + 11 files changed, 375 insertions(+), 39 deletions(-) rename weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/{_ds_enable_prometheus _metrics.bicep => _ds_enable_prometheus_metrics.bicep} (61%) diff --git a/.github/workflows/testWlsAksWithDependencyCreation.yml b/.github/workflows/testWlsAksWithDependencyCreation.yml index dc12f3b56..6e4058f2f 100644 --- a/.github/workflows/testWlsAksWithDependencyCreation.yml +++ b/.github/workflows/testWlsAksWithDependencyCreation.yml @@ -326,13 +326,14 @@ jobs: az aks get-credentials --resource-group ${{ env.resourceGroupForWlsAks }} --name $aksClusterName - name: Generate&Apply configmap run: | + wlsDomainNS=sample-domain1-ns wlsConfigmapName=sample-domain1-wdt-config-map wlsConfigmapJson=cargo-tracker-db.json modelFilePath=models mkdir ${modelFilePath} echo "create configmap" echo "export exisiting configmap" - kubectl -n sample-domain1-ns get configmap ${wlsConfigmapName} -o json >${wlsConfigmapJson} + kubectl -n ${wlsDomainNS} get configmap ${wlsConfigmapName} -o json >${wlsConfigmapJson} echo "query model keys" keyList=$(cat ${wlsConfigmapJson} | jq '.data | keys[]' | tr -d "\"") @@ -343,24 +344,25 @@ jobs: done # remove current configmap and create a new one - kubectl -n sample-domain1-ns delete configmap ${wlsConfigmapName} + kubectl -n ${wlsDomainNS} delete configmap ${wlsConfigmapName} cp cargotracker/src/test/aks/cargo-tracker-jms.yaml ${modelFilePath}/cargo-tracker-jms.yaml - kubectl -n sample-domain1-ns create configmap ${wlsConfigmapName} \ + kubectl -n ${wlsDomainNS} create configmap ${wlsConfigmapName} \ --from-file=${modelFilePath} - kubectl -n sample-domain1-ns label configmap ${wlsConfigmapName} \ + kubectl -n ${wlsDomainNS} label configmap ${wlsConfigmapName} \ weblogic.domainUID=sample-domain1 - restartVersion=$(kubectl -n sample-domain1-ns get domain sample-domain1 '-o=jsonpath={.spec.restartVersion}') + restartVersion=$(kubectl -n ${wlsDomainNS} get domain sample-domain1 '-o=jsonpath={.spec.restartVersion}') # increase restart version restartVersion=$((restartVersion + 1)) # record timestamp before apply changes timestampBeforePatchingDomain=$(date +%s) - # get the replica number - replicas=$(kubectl -n sample-domain1-ns get domain sample-domain1 -o json | jq '. | .spec.clusters[] | .replicas') + # get the replica number + clusterName=$(kubectl get cluster -n ${wlsDomainNS} -o json | jq -r '.items[0].metadata.name') + replicas=$(kubectl -n ${wlsDomainNS} get cluster ${clusterName} -o json | jq '. | .spec.replicas') echo "append configmap and update restart version" - kubectl -n sample-domain1-ns patch domain sample-domain1 \ + kubectl -n ${wlsDomainNS} patch domain sample-domain1 \ --type=json \ '-p=[{"op": "replace", "path": "/spec/restartVersion", "value": "'${restartVersion}'" }, {"op": "add", "path": "/spec/configuration/model/configMap", "value": "'${wlsConfigmapName}'" }]' echo "timestampBeforePatchingDomain=${timestampBeforePatchingDomain}" >> $GITHUB_ENV diff --git a/.github/workflows/testWlsAksWithoutDependencyCreation.yml b/.github/workflows/testWlsAksWithoutDependencyCreation.yml index e298fceff..97a59df7a 100644 --- a/.github/workflows/testWlsAksWithoutDependencyCreation.yml +++ b/.github/workflows/testWlsAksWithoutDependencyCreation.yml @@ -282,13 +282,14 @@ jobs: az aks get-credentials --resource-group ${{ needs.preflight.outputs.resourceGroupForWlsAks }} --name $aksClusterName - name: Generate&Apply configmap run: | + wlsDomainNS=sample-domain1-ns wlsConfigmapName=sample-domain1-wdt-config-map wlsConfigmapJson=cargo-tracker-db.json modelFilePath=models mkdir ${modelFilePath} echo "create configmap" echo "export exisiting configmap" - kubectl -n sample-domain1-ns get configmap ${wlsConfigmapName} -o json >${wlsConfigmapJson} + kubectl -n ${wlsDomainNS} get configmap ${wlsConfigmapName} -o json >${wlsConfigmapJson} echo "query model keys" keyList=$(cat ${wlsConfigmapJson} | jq '.data | keys[]' | tr -d "\"") @@ -299,24 +300,25 @@ jobs: done # remove current configmap and create a new one - kubectl -n sample-domain1-ns delete configmap ${wlsConfigmapName} + kubectl -n ${wlsDomainNS} delete configmap ${wlsConfigmapName} cp cargotracker/src/test/aks/cargo-tracker-jms.yaml ${modelFilePath}/cargo-tracker-jms.yaml - kubectl -n sample-domain1-ns create configmap ${wlsConfigmapName} \ + kubectl -n ${wlsDomainNS} create configmap ${wlsConfigmapName} \ --from-file=${modelFilePath} - kubectl -n sample-domain1-ns label configmap ${wlsConfigmapName} \ + kubectl -n ${wlsDomainNS} label configmap ${wlsConfigmapName} \ weblogic.domainUID=sample-domain1 - restartVersion=$(kubectl -n sample-domain1-ns get domain sample-domain1 '-o=jsonpath={.spec.restartVersion}') + restartVersion=$(kubectl -n ${wlsDomainNS} get domain sample-domain1 '-o=jsonpath={.spec.restartVersion}') # increase restart version restartVersion=$((restartVersion + 1)) # record timestamp before apply changes timestampBeforePatchingDomain=$(date +%s) - # get the replica number - replicas=$(kubectl -n sample-domain1-ns get domain sample-domain1 -o json | jq '. | .spec.clusters[] | .replicas') + # get the replica number + clusterName=$(kubectl get cluster -n ${wlsDomainNS} -o json | jq -r '.items[0].metadata.name') + replicas=$(kubectl -n ${wlsDomainNS} get cluster ${clusterName} -o json | jq '. | .spec.replicas') echo "append configmap and update restart version" - kubectl -n sample-domain1-ns patch domain sample-domain1 \ + kubectl -n ${wlsDomainNS} patch domain sample-domain1 \ --type=json \ '-p=[{"op": "replace", "path": "/spec/restartVersion", "value": "'${restartVersion}'" }, {"op": "add", "path": "/spec/configuration/model/configMap", "value": "'${wlsConfigmapName}'" }]' echo "timestampBeforePatchingDomain=${timestampBeforePatchingDomain}" >> $GITHUB_ENV diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index 257d2853c..d518a78c4 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -2264,8 +2264,8 @@ "appgwUsePrivateIP": "[steps('section_appGateway').appgwIngress.appgwUsePrivateIP]", "appPackageUrls": "[steps('section_aks').jeeAppInfo.appPackageUrl]", "appReplicas": "[int(steps('section_aks').jeeAppInfo.appReplicas)]", - "averageCpuUtilization": "[steps('section_autoScaling').averageCpuUtilization]", - "averageMemoryUtilization": "[steps('section_autoScaling').averageMemoryUtilization]", + "averageCpuUtilization": "[steps('section_autoScaling').autoScalingInfo.averageCpuUtilization]", + "averageMemoryUtilization": "[steps('section_autoScaling').autoScalingInfo.averageMemoryUtilization]", "createACR": "[bool(steps('section_aks').imageInfo.oracleCreateACR)]", "createAKSCluster": "[bool(steps('section_aks').clusterInfo.createAKSCluster)]", "createDNSZone": "[not(bool(steps('section_dnsConfiguration').bringDNSZone))]", @@ -2304,9 +2304,8 @@ "keyVaultSSLBackendRootCertDataSecretName": "[steps('section_appGateway').appgwIngress.keyVaultBackendSSLCertDataSecretName]", "keyVaultSSLCertDataSecretName": "[steps('section_appGateway').appgwIngress.keyVaultSSLCertDataSecretName]", "keyVaultSSLCertPasswordSecretName": "[steps('section_appGateway').appgwIngress.keyVaultSSLCertPasswordSecretName]", - "kmsMetrics": "[steps('section_autoScaling').kmsMetrics]", + "hpaScaleType": "[steps('section_autoScaling').autoScalingInfo.kmsMetrics]", "managedServerPrefix": "[basics('basicsOptional').managedServerPrefix]", - "metricSource": "[steps('section_autoScaling').metricSource]", "newOrExistingVnetForApplicationGateway": "[steps('section_appGateway').appgwIngress.vnetForApplicationGateway.newOrExisting]", "ocrSSOPSW": "[steps('section_aks').imageInfo.ocrSSOPassword]", "ocrSSOUser": "[steps('section_aks').imageInfo.ocrSSOUserName]", @@ -2329,6 +2328,7 @@ "sslUploadedCustomTrustKeyStoreType": "[steps('section_sslConfiguration').uploadedCustomSSLSettings.uploadedCustomTrustKeyStoreType]", "sslUploadedPrivateKeyAlias": "[steps('section_sslConfiguration').uploadedCustomSSLSettings.uploadedPrivateKeyAlias]", "sslUploadedPrivateKeyPassPhrase": "[steps('section_sslConfiguration').uploadedCustomSSLSettings.uploadedPrivateKeyPassPhrase]", + "useHpa": "[if(equals(steps('section_autoScaling').autoScalingInfo.metricSource, 'kms'), true, false)]", "useInternalLB": "[bool(steps('section_appGateway').lbSVCInfo.enableInternalLB)]", "useOracleImage": "[if(bool(steps('section_aks').aksAdvancedInfo.useAcrImage), false, true)]", "userProvidedAcr": "[last(split(steps('section_aks').aksAdvancedInfo.userProvidedAcrSelector.id, '/'))]", diff --git a/weblogic-azure-aks/src/main/arm/scripts/common.sh b/weblogic-azure-aks/src/main/arm/scripts/common.sh index 99d0a635d..2a5fca89e 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/common.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/common.sh @@ -15,6 +15,8 @@ export checkAcrInterval=30 export checkAcrMaxAttempt=10 export checkAgicInterval=30 export checkAgicMaxAttempt=50 +export checkKedaInteval=30 +export checkKedaMaxAttempt=20 export constAdminT3AddressEnvName="T3_TUNNELING_ADMIN_ADDRESS" export constAdminServerName='admin-server' diff --git a/weblogic-azure-aks/src/main/arm/scripts/createLbSvc.sh b/weblogic-azure-aks/src/main/arm/scripts/createLbSvc.sh index a0f3782e9..0343ac3bb 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/createLbSvc.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/createLbSvc.sh @@ -359,8 +359,9 @@ ${currentDomainConfig} EOF echo ${currentDomainConfig} | kubectl -n ${wlsDomainNS} apply -f - - replicas=$(kubectl -n ${wlsDomainNS} get domain ${WLS_DOMAIN_UID} -o json | - jq '. | .spec.clusters[] | .replicas') + local clusterName=$(kubectl get cluster -n ${wlsDomainNS} -o json | jq -r '.items[0].metadata.name') + local replicas=$(kubectl -n ${wlsDomainNS} get cluster ${clusterName} -o json \ + | jq '. | .spec.replicas') # wait for the restart completed. utility_wait_for_pod_restarted \ diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh index 37a22569e..68bd8b541 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh @@ -1,13 +1,18 @@ # Copyright (c) 2024, Oracle Corporation and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. +function connect_aks(){ + az aks get-credentials -n $AKS_CLUSTER_NAME -g $AKS_CLUSTER_RG_NAME --overwrite-existing +} + function create_monitor_account_workspace(){ local amaName="ama$(date +%s)" local ret=$(az monitor account create -n $amaName -g $CURRENT_RG_NAME --query "id" | tr -d "\"") utility_validate_status "Create Azure Monitor Account $amaName." if [ -z "$ret" ]; then - echo_stderr "Failed to create Azure Monitor Account." + echo_stderr "Failed to create Azure Monitor Account." + exit 1 fi export WORKSPACE_ID=$ret @@ -33,7 +38,249 @@ function enable_promethues_metrics(){ } # https://learn.microsoft.com/en-us/azure/azure-monitor/containers/prometheus-metrics-scrape-configuration -function customize_scraping(){ +function deploy_customize_scraping(){ + #create scrape config file + cat <prometheus-config +global: + scrape_interval: 30s +scrape_configs: +- job_name: '${WLS_DOMAIN_UID}' + kubernetes_sd_configs: + - role: pod + namespaces: + names: [${WLS_NAMESPACE}] + basic_auth: + username: ${WLS_ADMIN_USERNAME} + password: ${WLS_ADMIN_PASSWORD} +EOF + + #validate the scrape config file + local podNamesinKubeSystem=$(kubectl get pods -l rsName=ama-metrics -n=kube-system -o json | jq -r '.items[].metadata.name') + mkdir promconfigvalidator + for podname in ${podNamesinKubeSystem} + do + kubectl cp -n=kube-system "${podname}":/opt/promconfigvalidator ./promconfigvalidator/promconfigvalidator + kubectl cp -n=kube-system "${podname}":/opt/microsoft/otelcollector/collector-config-template.yml ./promconfigvalidator/collector-config-template.yml + chmod 500 ./promconfigvalidator/promconfigvalidator + done + + if [ ! -f "./promconfigvalidator/promconfigvalidator" ]; then + echo_stderr "Failed to download promconfigvalidator tool that is shipped inside the Azure Monitor metrics addon pod(s)." + exit 1 + fi + + ./promconfigvalidator/promconfigvalidator --config "./prometheus-config" --otelTemplate "./promconfigvalidator/collector-config-template.yml" + utility_validate_status "Validate prometheus-config using promconfigvalidator." + + kubectl create configmap ama-metrics-prometheus-config --from-file=prometheus-config -n kube-system + utility_validate_status "Create ama-metrics-prometheus-config in kube-system namespace." +} + +function get_wls_monitoring_exporter_image_url() { + local wlsToolingFamilyJsonFile=weblogic_tooling_family.json + local imageUrl="ghcr.io/oracle/weblogic-monitoring-exporter:2.1.9" + + # download the json file that has well tested monitoring exporter image url from weblogic-azure repo. + curl -m ${curlMaxTime} --retry ${retryMaxAttempt} -fsL "${gitUrl4WLSToolingFamilyJsonFile}" -o ${wlsToolingFamilyJsonFile} + if [ $? -eq 0 ]; then + imageURL=$(cat ${wlsToolingFamilyJsonFile} | jq ".items[] | select(.key==\"WME\") | .imageURL" | tr -d "\"") + echo "well tested monitoring exporter image url: ${imageURL}" + fi + + echo_stdout "Use monitoring exporter image: ${imageURL} " + export WME_IMAGE_URL=${imageUrl} +} + +# https://github.com/oracle/weblogic-monitoring-exporter +function deploy_webLogic_monitoring_exporter(){ + local version=$(kubectl -n ${WLS_NAMESPACE} get domain ${WLS_DOMAIN_UID} -o=jsonpath='{.spec.restartVersion}' | tr -d "\"") + version=$((VERSION+1)) + + cat <patch-file.json +[ + { + "op": "replace", + "path": "/spec/restartVersion", + "value": "${version}" + }, + { + "op": "add", + "path": "/spec/monitoringExporter", + "value": { + "configuration": { + "domainQualifier": true, + "metricsNameSnakeCase": true, + "queries": [ + { + "applicationRuntimes": { + "componentRuntimes": { + "key": "name", + "prefix": "webapp_config_", + "servlets": { + "key": "servletName", + "prefix": "weblogic_servlet_", + "values": "invocationTotalCount" + }, + "type": "WebAppComponentRuntime", + "values": [ + "deploymentState", + "contextRoot", + "sourceInfo", + "openSessionsHighCount" + ] + }, + "key": "name", + "keyName": "app" + }, + "key": "name", + "keyName": "server" + } + ] + }, + "image": "${WME_IMAGE_URL}", + "port": 8080 + } + } +] +EOF + + kubectl apply -f patch-file.json + utility_validate_status "Enable WebLogic Monitoring Exporter." + + local timestampBeforePatchingDomain=$(date +%s) + local clusterName=$(kubectl get cluster -n ${WLS_NAMESPACE} -o json | jq -r '.items[0].metadata.name') + local replicas=$(kubectl -n ${WLS_NAMESPACE} get cluster ${clusterName} -o json \ + | jq '. | .spec.replicas') + + # wait for the restart completed. + utility_wait_for_pod_restarted \ + ${timestampBeforePatchingDomain} \ + ${replicas} \ + ${WLS_DOMAIN_UID} \ + ${checkPodStatusMaxAttemps} \ + ${checkPodStatusInterval} +} + +function wait_for_keda_ready(){ + local ready=false + local attempt=0 + + while [[ "${ready}" == "false" && $attempt -le ${checkKedaMaxAttempt} ]]; do + echo_stdout "Check if KEDA is ready, attempt: ${attempt}." + ready=true + + local podnames=$(kubectl get pods -n ${KEDA_NAMESPACE} -o json | jq -r '.items[].metadata.name') + for podname in ${podnames} + do + kubectl get pod ${podname} -n ${KEDA_NAMESPACE} | grep "Running" + + if [ $? -eq 1 ];then + ready=false + fi + done + + attempt=$((attempt + 1)) + sleep ${checkKedaInteval} + done + + if [ ${attempt} -gt ${checkKedaMaxAttempt} ]; then + echo_stderr "Failed to enable KEDA." + exit 1 + fi + echo "KEDA is running." } +# https://learn.microsoft.com/en-us/azure/azure-monitor/containers/integrate-keda +function enable_keda_addon() { + local oidcEnabled=$(az aks show --resource-group $AKS_CLUSTER_RG_NAME --name $AKS_CLUSTER_NAME --query oidcIssuerProfile.enabled) + local workloadIdentity=$(az aks show --resource-group $AKS_CLUSTER_RG_NAME --name $AKS_CLUSTER_NAME --query securityProfile.workloadIdentity) + + if [[ "${oidcEnabled,,}" == "false" || -z "${workloadIdentity}" ]]; then + az aks update -g $AKS_CLUSTER_RG_NAME -n $AKS_CLUSTER_NAME --enable-workload-identity --enable-oidc-issuer + utility_validate_status "Enable oidc and worload identity in AKS $AKS_CLUSTER_NAME." + fi + + export OIDC_ISSUER_URL=$(az aks show -n $AKS_CLUSTER_NAME -g $AKS_CLUSTER_RG_NAME --query "oidcIssuerProfile.issuerUrl" -otsv) + local uamiName="kedausmi$(date +%s)" + + az identity create \ + --name $uamiName \ + --resource-group $CURRENT_RG_NAME \ + --location $LOCATION \ + --subscription $SUBSCRIPTION + utility_validate_status "Create a user assigned managed identity for keda $uamiName." + + local uamiClientId=$(az identity show --resource-group $CURRENT_RG_NAME --name $uamiName --query 'clientId' -otsv) + local tenantId=$(az identity show --resource-group $CURRENT_RG_NAME --name $uamiName --query 'tenantId' -otsv) + + az role assignment create --assignee $uamiClientId --role "Monitoring Data Reader" --scope ${WORKSPACE_ID} + + kubectl create namespace ${KEDA_NAMESPACE} + + cat <$AZ_SCRIPTS_OUTPUT_PATH +} + +# TBD see if we can query some of the metrics + +# Main script +set -Eo pipefail + +install_kubectl + +install_helm + +connect_aks + +get_wls_monitoring_exporter_image_url + +deploy_webLogic_monitoring_exporter + +create_monitor_account_workspace + +enable_promethues_metrics + +deploy_customize_scraping + +enable_keda_addon + +output \ No newline at end of file diff --git a/weblogic-azure-aks/src/main/arm/scripts/updateApplications.sh b/weblogic-azure-aks/src/main/arm/scripts/updateApplications.sh index 8b9fa6c8c..14aae3b5d 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/updateApplications.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/updateApplications.sh @@ -227,8 +227,9 @@ function apply_new_image() { function wait_for_pod_completed() { # Make sure all of the pods are running. - replicas=$(kubectl -n ${wlsDomainNS} get domain ${WLS_DOMAIN_UID} -o json \ - | jq '. | .spec.clusters[] | .replicas') + local clusterName=$(kubectl get cluster -n ${wlsDomainNS} -o json | jq -r '.items[0].metadata.name') + local replicas=$(kubectl -n ${wlsDomainNS} get cluster ${clusterName} -o json \ + | jq '. | .spec.replicas') utility_wait_for_pod_completed \ ${replicas} \ @@ -240,8 +241,9 @@ function wait_for_pod_completed() { function wait_for_image_update_completed() { # Make sure all of the pods are updated with new image. # Assumption: we have only one cluster currently. - replicas=$(kubectl -n ${wlsDomainNS} get domain ${WLS_DOMAIN_UID} -o json \ - | jq '. | .spec.clusters[] | .replicas') + local clusterName=$(kubectl get cluster -n ${wlsDomainNS} -o json | jq -r '.items[0].metadata.name') + local replicas=$(kubectl -n ${wlsDomainNS} get cluster ${clusterName} -o json \ + | jq '. | .spec.replicas') utility_wait_for_image_update_completed \ "${acrImagePath}" \ diff --git a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep index d656bb6da..563ce00e0 100644 --- a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep +++ b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep @@ -74,6 +74,10 @@ param appgwUsePrivateIP bool = false param appPackageUrls array = [] @description('The number of managed server to start.') param appReplicas int = 2 +@description('Scale up once average cpu utilization is larger then the input number ') +param averageCpuUtilization int = 60 +@description('Scale up once average memory utilization is larger then the input number ') +param averageMemoryUtilization int = 60 @description('true to create a new Azure Container Registry.') param createACR bool = false @description('true to create a new AKS cluster.') @@ -148,7 +152,6 @@ param enablePswlessConnection bool = false 'memory' ]) param hpaScaleType string = 'cpu' -param hpaTargetAverageUtilizationPercentage int = 60 @description('Is the specified SSO account associated with an active Oracle support contract?') param isSSOSupportEntitled bool = false @description('JNDI Name for JDBC Datasource') @@ -845,9 +848,11 @@ module horizontalAutoscaling 'modules/_enableAutoScaling.bicep' = if (enableAuto identity: obj_uamiForDeploymentScript location: location useHpa: useHpa - utilizationPercentage: hpaTargetAverageUtilizationPercentage + utilizationPercentage: hpaScaleType == 'cpu' ? averageCpuUtilization : averageMemoryUtilization wlsClusterSize: wlsClusterSize wlsDomainUID: wlsDomainUID + wlsPassword: wlsPassword + wlsUserName: wlsUserName } dependsOn: [ diff --git a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus _metrics.bicep b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus_metrics.bicep similarity index 61% rename from weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus _metrics.bicep rename to weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus_metrics.bicep index 7c648f088..f51022444 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus _metrics.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus_metrics.bicep @@ -1,20 +1,26 @@ // Copyright (c) 2022, Oracle Corporation and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. -param aksClusterName string +param aksClusterName string param aksClusterRGName string param azCliVersion string param identity object = {} param location string param utcValue string = utcNow() param wlsClusterSize int +param wlsDomainUID string param wlsNamespace string +@secure() +param wlsPassword string +param wlsUserName string // To mitigate arm-ttk error: Unreferenced variable: $fxv#0 var base64_common = loadFileAsBase64('../../../arm/scripts/common.sh') var base64_enableHpa = loadFileAsBase64('../../../arm/scripts/inline-scripts/enablePrometheusMetrics.sh') var base64_utility = loadFileAsBase64('../../../arm/scripts/utility.sh') -var const_deploymentName='ds-enable-promethues-metrics' +var const_deploymentName = 'ds-enable-promethues-metrics' +var const_kedaNamespace= 'keda' +var const_kedaSa= 'keda-operator' resource deploymentScript 'Microsoft.Resources/deploymentScripts@${azure.apiVersionForDeploymentScript}' = { name: const_deploymentName @@ -23,7 +29,7 @@ resource deploymentScript 'Microsoft.Resources/deploymentScripts@${azure.apiVers identity: identity properties: { azCliVersion: azCliVersion - scriptContent: format('{0}\r\n\r\n{1}\r\n\r\n{2}',base64ToString(base64_common), base64ToString(base64_utility), base64ToString(base64_enableHpa)) + scriptContent: format('{0}\r\n\r\n{1}\r\n\r\n{2}', base64ToString(base64_common), base64ToString(base64_utility), base64ToString(base64_enableHpa)) environmentVariables: [ { name: 'AKS_CLUSTER_RG_NAME' @@ -41,6 +47,14 @@ resource deploymentScript 'Microsoft.Resources/deploymentScripts@${azure.apiVers name: 'HPA_SCALE_TYPE' value: hpaScaleType } + { + name: 'KEDA_NAMESPACE' + value: const_kedaNamespace + } + { + name: 'KEDA_SERVICE_ACCOUNT_NAME' + value: const_kedaSa + } { name: 'UTILIZATION_PERSENTAGE' value: utilizationPercentage @@ -49,13 +63,35 @@ resource deploymentScript 'Microsoft.Resources/deploymentScripts@${azure.apiVers name: 'WLS_CLUSTER_SIZE' value: wlsClusterSize } + { + name: 'WLS_ADMIN_PASSWORD' + value: wlsPassword + } + { + name: 'WLS_ADMIN_USERNAME' + value: wlsUserName + } + { + name: 'WLS_DOMAIN_UID' + value: wlsDomainUID + } { name: 'WLS_NAMESPACE' value: wlsNamespace } + { + name: 'LOCATION' + value: location + } + { + name: 'SUBSCRIPTION' + value: subscription().id + } ] cleanupPreference: 'OnSuccess' retentionInterval: 'P1D' forceUpdateTag: utcValue } } + +output kedaScalerServerAddress string = deploymentScript.properties.outputs.kedaScalerServerAddress diff --git a/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep b/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep index 303421541..0b28d04bc 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep @@ -24,6 +24,9 @@ param useHpa bool param utilizationPercentage int param wlsClusterSize int param wlsDomainUID string +@secure() +param wlsPassword string +param wlsUserName string var const_namespace = '${wlsDomainUID}-ns' @@ -44,9 +47,8 @@ module pidCpuUtilization './_pids/_pid.bicep' = if(useHpa && hpaScaleType == 'cp ] } - module pidMemoryUtilization './_pids/_pid.bicep' = if(useHpa && hpaScaleType == 'memory') { - name: 'pid-auto-scaling-based-on-memory-utilization' + name: 'pid-auto-scaling-based-on-java-metrics' params: { name: _pidMemoryUtilization } @@ -55,6 +57,16 @@ module pidMemoryUtilization './_pids/_pid.bicep' = if(useHpa && hpaScaleType == ] } +module pidWme './_pids/_pid.bicep' = if(!useHpa) { + name: 'pid-auto-scaling-based-on-memory-utilization' + params: { + name: _pidWme + } + dependsOn: [ + pidAutoScalingStart + ] +} + module hapDeployment '_deployment-scripts/_ds_enable_hpa.bicep' = if(useHpa) { name: 'hpa-deployment' params: { @@ -73,18 +85,38 @@ module hapDeployment '_deployment-scripts/_ds_enable_hpa.bicep' = if(useHpa) { ] } -// deploy promethues -// configure promethues -// enable weblogic exporter -// enable keda +module azureMonitorIntegrationDeployment '_deployment-scripts/_ds_enable_prometheus_metrics.bicep' = if(!useHpa){ + name: 'azure-monitor-promethues-keda-deployment' + params: { + aksClusterName: aksClusterName + aksClusterRGName: aksClusterRGName + azCliVersion: azCliVersion + identity: identity + location: location + wlsClusterSize: wlsClusterSize + wlsDomainUID: wlsDomainUID + wlsNamespace: const_namespace + wlsPassword: wlsPassword + wlsUserName: wlsUserName + } + dependsOn: [ + pidAutoScalingStart + ] +} module pidAutoScalingEnd './_pids/_pid.bicep' = { name: 'pid-auto-scaling-end' params: { name: _pidEnd } + dependsOn: [ + hapDeployment + azureMonitorIntegrationDeployment + ] } +output kedaScalerServerAddress string = useHpa ? '' : azureMonitorIntegrationDeployment.outputs.kedaScalerServerAddress + diff --git a/weblogic-azure-aks/src/main/resources/weblogic_tooling_family.json b/weblogic-azure-aks/src/main/resources/weblogic_tooling_family.json index e390e7bea..47b00b574 100644 --- a/weblogic-azure-aks/src/main/resources/weblogic_tooling_family.json +++ b/weblogic-azure-aks/src/main/resources/weblogic_tooling_family.json @@ -21,6 +21,13 @@ "version": "1.12.1", "downloadURL": "https://github.com/oracle/weblogic-image-tool/releases/download/release-1.12.1/imagetool.zip", "testedDate": "2024-03-13" + }, + { + "key": "WME", + "description": "Oracle Weblogic Monitoring Exporter", + "version": "2.1.9", + "imageURL": "ghcr.io/oracle/weblogic-monitoring-exporter:2.1.9", + "testedDate": "2024-02-29" } ] } From 83b19b9f858591eb0e01daaf47bc2dd0e75c390a Mon Sep 17 00:00:00 2001 From: galiacheng Date: Thu, 29 Feb 2024 16:38:39 +0800 Subject: [PATCH 07/43] for build failure --- .../_ds_enable_prometheus_metrics.bicep | 8 -------- 1 file changed, 8 deletions(-) diff --git a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus_metrics.bicep b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus_metrics.bicep index f51022444..f81f9c5fa 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus_metrics.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus_metrics.bicep @@ -43,10 +43,6 @@ resource deploymentScript 'Microsoft.Resources/deploymentScripts@${azure.apiVers name: 'CURRENT_RG_NAME' value: resourceGroup().name } - { - name: 'HPA_SCALE_TYPE' - value: hpaScaleType - } { name: 'KEDA_NAMESPACE' value: const_kedaNamespace @@ -55,10 +51,6 @@ resource deploymentScript 'Microsoft.Resources/deploymentScripts@${azure.apiVers name: 'KEDA_SERVICE_ACCOUNT_NAME' value: const_kedaSa } - { - name: 'UTILIZATION_PERSENTAGE' - value: utilizationPercentage - } { name: 'WLS_CLUSTER_SIZE' value: wlsClusterSize From 170195d85e63697740e1b5a220620ee86632b7a6 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Thu, 29 Feb 2024 16:40:41 +0800 Subject: [PATCH 08/43] for build failure --- weblogic-azure-aks/src/main/bicep/mainTemplate.bicep | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep index 563ce00e0..75c463a6d 100644 --- a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep +++ b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep @@ -878,7 +878,7 @@ module queryWLSDomainConfig 'modules/_deployment-scripts/_ds-output-domain-confi wlsDomainUID: wlsDomainUID } dependsOn: [ - enableAutoscaling + horizontalAutoscaling ] } From 25810c6cdf80911b2aed4edf147d67b2e20c9184 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 1 Mar 2024 10:50:59 +0800 Subject: [PATCH 09/43] add pids. --- .../src/main/bicep/modules/_pids/_pid-dev.bicep | 8 ++++---- .../src/main/bicep/modules/_pids/_pid.bicep | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid-dev.bicep b/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid-dev.bicep index c6debafc9..70dc86553 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid-dev.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid-dev.bicep @@ -12,10 +12,10 @@ module pidStart './_empty.bicep' = if (name != 'pid'){ output appgwEnd string = '38647ff6-ea8d-59e5-832d-b036a4d29c73' output appgwStart string = '8ba7beaa-96fd-576a-acd8-28f7a6efa83a' -output autoScalingEnd string = 'test' -output autoScalingStart string = 'test' +output autoScalingEnd string = '074fd64c-184f-4bb9-b878-448cae164601' +output autoScalingStart string = 'f4e5974d-6531-4a34-a733-e7416258fe03' output customCertForAppgw string = 'b16ba29f-fc8e-5059-8988-f17bef4a9c5c' -output cpuUtilization string = 'test' +output cpuUtilization string = '22a34519-24ea-4864-b304-7e47aee4071b' output dbEnd string = 'ffab0a3f-90cb-585a-a7f9-ec0a62faeec1' output dbStart string = 'e64361eb-fea0-5f15-a313-c76daadbc648' output dnsEnd string = '189306c7-39e2-5844-817d-01e883a4cf1e' @@ -24,7 +24,7 @@ output lbEnd string = 'f76e2847-d5a1-52e7-9e52-fc8560f5d3e4' output lbStart string = 'e2a8c8b2-9b58-52c6-9636-1834ff3976dc' output networkingEnd string = '39d32fcd-1d02-50b6-9455-4b767a8e769e' output networkingStart string = 'ed47756f-2475-56dd-b13a-26027749b6e1' -output memoryUtilization string = 'test' +output memoryUtilization string = 'b9b57564-3603-4d27-8e0c-a853ef0d60b9' output otherDb string = '551122ff-2fea-53a8-b7f4-6d6dae85af6a' output pswlessDbEnd string = '7e7aaa5b-2251-55b5-8b3d-43d514738cf2' output pswlessDbStart string = '089e9783-6707-54d0-ac8c-9b8d517914c5' diff --git a/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid.bicep b/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid.bicep index 79797c622..3ed1fb411 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid.bicep @@ -12,10 +12,10 @@ module pidStart './_empty.bicep' = if (name != 'pid'){ output appgwEnd string = '47ea43a0-95cf-52c7-aee8-7ee6106fc1bf' output appgwStart string = '01288010-2672-5831-a66b-7b8b45cace1b' -output autoScalingEnd string = 'test' -output autoScalingStart string = 'test' +output autoScalingEnd string = 'fff261b8-f09f-4c46-b7b7-923c239f1da5' +output autoScalingStart string = '94fd65ac-bb13-475d-aba7-3352288777c2' output customCertForAppgw string = 'b80f52c3-dddd-5286-915e-e4cc64be3093' -output cpuUtilization string = 'test' +output cpuUtilization string = 'deb6b656-aa63-4014-a686-6a01e8f87fec' output dbEnd string = 'd7a9c78e-39d9-5a47-928d-8645ed86dafd' output dbStart string = '0cc86800-37f4-5191-9368-2953394309ec' output dnsEnd string = '754e16bc-4d81-5343-b99b-7532abd6587d' @@ -24,7 +24,7 @@ output lbEnd string = 'ce664543-77bd-515a-832e-107e32f99da9' output lbStart string = '44732bbc-04c4-5df7-a0c6-b9be9ec00ee6' output networkingEnd string = '2798165c-49fa-5701-b608-b80ed3986176' output networkingStart string = '0793308f-de9d-5f0d-92f9-d9fc4b413b8b' -output memoryUtilization string = 'test' +output memoryUtilization string = 'd1c2d027-f030-4a18-8e74-d608dd10c6f3' output otherDb string = 'fceccc86-531c-5e44-99fd-9f1250f8e409' output pswlessDbEnd string = '972084b9-2b2d-5eb9-aa37-80448a77fbe1' output pswlessDbStart string = '7190b263-7825-5ae3-bc56-7294df936d4a' From 0c86264409548170a64726db60f0eeedea3be0e5 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 1 Mar 2024 11:12:12 +0800 Subject: [PATCH 10/43] test 1. --- .../src/main/arm/scripts/inline-scripts/enableHpa.sh | 9 ++++++++- .../scripts/inline-scripts/enablePrometheusMetrics.sh | 6 +++--- weblogic-azure-aks/src/main/bicep/mainTemplate.bicep | 4 ++-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh index e5a6ebdb5..b82a72a1b 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh @@ -50,6 +50,13 @@ EOF utility_validate_status "Enable HPA based on memory utilization." } +function check_kubernetes_metrics_server(){ + # $?=1 if there is no running kms pod. + kubectl get pod -l k8s-app=metrics-server -n kube-system | grep "Running" + # exit if $?=1 + utility_validate_status "There should be at least one pod of kubernetes metrics server running." +} + # Main script set -Eo pipefail @@ -59,7 +66,7 @@ connect_aks get_cluster_uid -#TBD check kms state +check_kubernetes_metrics_server if [ "$HPA_SCALE_TYPE" == "cpu" ]; then scaling_basedon_cpu diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh index 68bd8b541..64878f3fc 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh @@ -93,15 +93,15 @@ function get_wls_monitoring_exporter_image_url() { # https://github.com/oracle/weblogic-monitoring-exporter function deploy_webLogic_monitoring_exporter(){ - local version=$(kubectl -n ${WLS_NAMESPACE} get domain ${WLS_DOMAIN_UID} -o=jsonpath='{.spec.restartVersion}' | tr -d "\"") - version=$((VERSION+1)) + local wlsVersion=$(kubectl -n ${WLS_NAMESPACE} get domain ${WLS_DOMAIN_UID} -o=jsonpath='{.spec.restartVersion}' | tr -d "\"") + wlsVersion=$((wlsVersion+1)) cat <patch-file.json [ { "op": "replace", "path": "/spec/restartVersion", - "value": "${version}" + "value": "${wlsVersion}" }, { "op": "add", diff --git a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep index 75c463a6d..e62ca882f 100644 --- a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep +++ b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep @@ -841,8 +841,8 @@ module horizontalAutoscaling 'modules/_enableAutoScaling.bicep' = if (enableAuto _pidEnd: pids.outputs.autoScalingEnd _pidMemoryUtilization: pids.outputs.memoryUtilization _pidStart: pids.outputs.autoScalingStart - aksClusterName: aksClusterName - aksClusterRGName: aksClusterRGName + aksClusterName: ref_wlsDomainDeployment.outputs.aksClusterRGName + aksClusterRGName: ref_wlsDomainDeployment.outputs.aksClusterRGName azCliVersion: const_azcliVersion hpaScaleType: hpaScaleType identity: obj_uamiForDeploymentScript From e9598eb25d390e3582ef5ead12255392ccd1d800 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 1 Mar 2024 11:33:41 +0800 Subject: [PATCH 11/43] fix failure --- weblogic-azure-aks/src/main/arm/scripts/common.sh | 2 +- .../arm/scripts/inline-scripts/enablePrometheusMetrics.sh | 4 +++- weblogic-azure-aks/src/main/bicep/mainTemplate.bicep | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/scripts/common.sh b/weblogic-azure-aks/src/main/arm/scripts/common.sh index 2a5fca89e..602af7fed 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/common.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/common.sh @@ -43,7 +43,7 @@ export ocrGaImagePath="middleware/weblogic" export ocrCpuImagePath="middleware/weblogic_cpu" export gitUrl4CpuImages="https://raw.githubusercontent.com/oracle/weblogic-azure/main/weblogic-azure-aks/src/main/resources/weblogic_cpu_images.json" export gitUrl4AksWellTestedVersionJsonFile="https://raw.githubusercontent.com/oracle/weblogic-azure/main/weblogic-azure-aks/src/main/resources/aks_well_tested_version.json" -export gitUrl4WLSToolingFamilyJsonFile="https://raw.githubusercontent.com/oracle/weblogic-azure/main/weblogic-azure-aks/src/main/resources/weblogic_tooling_family.json" +export gitUrl4WLSToolingFamilyJsonFile="https://raw.githubusercontent.com/galiacheng/weblogic-azure/autoscalingtest1/weblogic-azure-aks/src/main/resources/weblogic_tooling_family.json" export gitUrl4AzureIdentityExtensionsPomFile="https://raw.githubusercontent.com/oracle/weblogic-azure/main/weblogic-azure-aks/src/main/resources/azure-identity-extensions.xml" export gitUrl4MySQLDriverPomFile="https://raw.githubusercontent.com/oracle/weblogic-azure/main/weblogic-azure-aks/src/main/resources/mysql-connector-java.xml" diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh index 64878f3fc..3dadd715f 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh @@ -144,7 +144,9 @@ function deploy_webLogic_monitoring_exporter(){ ] EOF - kubectl apply -f patch-file.json + kubectl -n ${WLS_NAMESPACE} patch domain ${WLS_DOMAIN_UID} \ + --type=json \ + --patch-file patch-file.json utility_validate_status "Enable WebLogic Monitoring Exporter." local timestampBeforePatchingDomain=$(date +%s) diff --git a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep index e62ca882f..494b49ad5 100644 --- a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep +++ b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep @@ -311,7 +311,7 @@ var _useExistingAppGatewaySSLCertificate = (appGatewayCertificateOption == const var const_appGatewaySSLCertOptionHaveCert = 'haveCert' var const_appGatewaySSLCertOptionHaveKeyVault = 'haveKeyVault' -var const_azcliVersion = '2.41.0' +var const_azcliVersion = '2.57.0' var const_azureSubjectName = format('{0}.{1}.{2}', name_domainLabelforApplicationGateway, location, 'cloudapp.azure.com') var const_hasTags = contains(resourceGroup(), 'tags') // If there is not tag 'wlsKeyVault' and key vault is created for the following usage: From 6b0e459cf3418fcb49c65c0e19b47a4a0f66ca90 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 1 Mar 2024 13:49:41 +0800 Subject: [PATCH 12/43] output kedaServerAddress --- .../inline-scripts/enablePrometheusMetrics.sh | 30 ++++++++++++------- .../_ds_enable_prometheus_metrics.bicep | 7 ++++- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh index 3dadd715f..ebf53053c 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh @@ -2,13 +2,16 @@ # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. function connect_aks(){ - az aks get-credentials -n $AKS_CLUSTER_NAME -g $AKS_CLUSTER_RG_NAME --overwrite-existing + az aks get-credentials \ + -n $AKS_CLUSTER_NAME \ + -g $AKS_CLUSTER_RG_NAME \ + --overwrite-existing \ + --only-show-errors } function create_monitor_account_workspace(){ - local amaName="ama$(date +%s)" - local ret=$(az monitor account create -n $amaName -g $CURRENT_RG_NAME --query "id" | tr -d "\"") - utility_validate_status "Create Azure Monitor Account $amaName." + local ret=$(az monitor account create -n $AMA_NAME -g $CURRENT_RG_NAME --query "id" | tr -d "\"") + utility_validate_status "Create Azure Monitor Account $AMA_NAME." if [ -z "$ret" ]; then echo_stderr "Failed to create Azure Monitor Account." @@ -26,7 +29,8 @@ function enable_promethues_metrics(){ az aks update --enable-azure-monitor-metrics \ --name ${AKS_CLUSTER_NAME} \ --resource-group ${AKS_CLUSTER_RG_NAME} \ - --azure-monitor-workspace-resource-id "${WORKSPACE_ID}" + --azure-monitor-workspace-resource-id "${WORKSPACE_ID}" \ + --only-show-errors utility_validate_status "Enable Promethues Metrics." @@ -195,6 +199,8 @@ function wait_for_keda_ready(){ # https://learn.microsoft.com/en-us/azure/azure-monitor/containers/integrate-keda function enable_keda_addon() { + az extension add -n aks-preview + local oidcEnabled=$(az aks show --resource-group $AKS_CLUSTER_RG_NAME --name $AKS_CLUSTER_NAME --query oidcIssuerProfile.enabled) local workloadIdentity=$(az aks show --resource-group $AKS_CLUSTER_RG_NAME --name $AKS_CLUSTER_NAME --query securityProfile.workloadIdentity) @@ -210,7 +216,8 @@ function enable_keda_addon() { --name $uamiName \ --resource-group $CURRENT_RG_NAME \ --location $LOCATION \ - --subscription $SUBSCRIPTION + --subscription $SUBSCRIPTION \ + --only-show-errors utility_validate_status "Create a user assigned managed identity for keda $uamiName." local uamiClientId=$(az identity show --resource-group $CURRENT_RG_NAME --name $uamiName --query 'clientId' -otsv) @@ -255,11 +262,12 @@ EOF } function output(){ - local result=$(jq -n -c \ - --arg kedaScalerServerAddress $OIDC_ISSUER_URL} \ - '{kedaScalerServerAddress: $kedaScalerServerAddress}') - echo "result is: $result" - echo $result >$AZ_SCRIPTS_OUTPUT_PATH + local kedaServerAddress=$(az monitor account show -n ${AMA_NAME} -g ${CURRENT_RG_NAME} --query 'metrics.prometheusQueryEndpoint' -otsv) + local result=$(jq -n -c \ + --arg kedaScalerServerAddress $kedaServerAddress} \ + '{kedaScalerServerAddress: $kedaScalerServerAddress}') + echo "result is: $result" + echo $result >$AZ_SCRIPTS_OUTPUT_PATH } # TBD see if we can query some of the metrics diff --git a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus_metrics.bicep b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus_metrics.bicep index f81f9c5fa..07633b2ba 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus_metrics.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus_metrics.bicep @@ -21,6 +21,7 @@ var base64_utility = loadFileAsBase64('../../../arm/scripts/utility.sh') var const_deploymentName = 'ds-enable-promethues-metrics' var const_kedaNamespace= 'keda' var const_kedaSa= 'keda-operator' +var name_azureMonitorAccountName = 'ama${uniqueString(utcValue)}' resource deploymentScript 'Microsoft.Resources/deploymentScripts@${azure.apiVersionForDeploymentScript}' = { name: const_deploymentName @@ -39,6 +40,10 @@ resource deploymentScript 'Microsoft.Resources/deploymentScripts@${azure.apiVers name: 'AKS_CLUSTER_NAME' value: aksClusterName } + { + name: 'AMA_NAME' + value: name_azureMonitorAccountName + } { name: 'CURRENT_RG_NAME' value: resourceGroup().name @@ -77,7 +82,7 @@ resource deploymentScript 'Microsoft.Resources/deploymentScripts@${azure.apiVers } { name: 'SUBSCRIPTION' - value: subscription().id + value: split(subscription().id, '/')[2] } ] cleanupPreference: 'OnSuccess' From b67829f1b0e259190d6fc561bd334eccac78028f Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 1 Mar 2024 13:57:53 +0800 Subject: [PATCH 13/43] fix az cli version --- weblogic-azure-aks/src/main/bicep/mainTemplate.bicep | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep index 494b49ad5..55fceda36 100644 --- a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep +++ b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep @@ -311,7 +311,7 @@ var _useExistingAppGatewaySSLCertificate = (appGatewayCertificateOption == const var const_appGatewaySSLCertOptionHaveCert = 'haveCert' var const_appGatewaySSLCertOptionHaveKeyVault = 'haveKeyVault' -var const_azcliVersion = '2.57.0' +var const_azcliVersion = '2.53.0' var const_azureSubjectName = format('{0}.{1}.{2}', name_domainLabelforApplicationGateway, location, 'cloudapp.azure.com') var const_hasTags = contains(resourceGroup(), 'tags') // If there is not tag 'wlsKeyVault' and key vault is created for the following usage: From 27aa60367cbc815cd6bf3d7800edf44c02f2a3de Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 1 Mar 2024 15:13:42 +0800 Subject: [PATCH 14/43] deploy ama from template --- resources/azure-common.properties | 2 + .../inline-scripts/enablePrometheusMetrics.sh | 77 +++++++++++-------- .../_ds_enable_prometheus_metrics.bicep | 15 +++- .../bicep/modules/_enableAutoScaling.bicep | 50 ++++++++++-- 4 files changed, 105 insertions(+), 39 deletions(-) diff --git a/resources/azure-common.properties b/resources/azure-common.properties index bd7ccad38..4ae0e3490 100644 --- a/resources/azure-common.properties +++ b/resources/azure-common.properties @@ -42,6 +42,8 @@ azure.apiVersionForTags=2023-07-01 azure.apiVersionForStorage=2023-01-01 # Microsoft.Storage/storageAccounts/fileServices azure.apiVersionForStorageFileService=2023-01-01 +# Microsoft.Monitor/accounts +azure.apiVersionForMonitorAccount=2023-04-03 # AzureAzCLI version azure.cli.version=2.53.0 diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh index ebf53053c..2f32e2a4a 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh @@ -9,18 +9,6 @@ function connect_aks(){ --only-show-errors } -function create_monitor_account_workspace(){ - local ret=$(az monitor account create -n $AMA_NAME -g $CURRENT_RG_NAME --query "id" | tr -d "\"") - utility_validate_status "Create Azure Monitor Account $AMA_NAME." - - if [ -z "$ret" ]; then - echo_stderr "Failed to create Azure Monitor Account." - exit 1 - fi - - export WORKSPACE_ID=$ret -} - function enable_promethues_metrics(){ az extension remove --name aks-preview az extension add --name k8s-extension @@ -29,7 +17,7 @@ function enable_promethues_metrics(){ az aks update --enable-azure-monitor-metrics \ --name ${AKS_CLUSTER_NAME} \ --resource-group ${AKS_CLUSTER_RG_NAME} \ - --azure-monitor-workspace-resource-id "${WORKSPACE_ID}" \ + --azure-monitor-workspace-resource-id "${AMA_WORKSPACE_ID}" \ --only-show-errors utility_validate_status "Enable Promethues Metrics." @@ -210,20 +198,9 @@ function enable_keda_addon() { fi export OIDC_ISSUER_URL=$(az aks show -n $AKS_CLUSTER_NAME -g $AKS_CLUSTER_RG_NAME --query "oidcIssuerProfile.issuerUrl" -otsv) - local uamiName="kedausmi$(date +%s)" - - az identity create \ - --name $uamiName \ - --resource-group $CURRENT_RG_NAME \ - --location $LOCATION \ - --subscription $SUBSCRIPTION \ - --only-show-errors - utility_validate_status "Create a user assigned managed identity for keda $uamiName." - local uamiClientId=$(az identity show --resource-group $CURRENT_RG_NAME --name $uamiName --query 'clientId' -otsv) - local tenantId=$(az identity show --resource-group $CURRENT_RG_NAME --name $uamiName --query 'tenantId' -otsv) - - az role assignment create --assignee $uamiClientId --role "Monitoring Data Reader" --scope ${WORKSPACE_ID} + export KEDA_UAMI_CLIENT_ID=$(az identity show --resource-group $CURRENT_RG_NAME --name $KEDA_UAMI_NAME --query 'clientId' -otsv) + local tenantId=$(az identity show --resource-group $CURRENT_RG_NAME --name $KEDA_UAMI_NAME --query 'tenantId' -otsv) kubectl create namespace ${KEDA_NAMESPACE} @@ -232,7 +209,7 @@ apiVersion: v1 kind: ServiceAccount metadata: annotations: - azure.workload.identity/client-id: $uamiClientId + azure.workload.identity/client-id: $KEDA_UAMI_CLIENT_ID name: $KEDA_SERVICE_ACCOUNT_NAME namespace: $KEDA_NAMESPACE EOF @@ -254,7 +231,7 @@ EOF --set serviceAccount.create=false \ --set serviceAccount.name=${KEDA_SERVICE_ACCOUNT_NAME} \ --set podIdentity.azureWorkload.enabled=true \ - --set podIdentity.azureWorkload.clientId=$uamiClientId \ + --set podIdentity.azureWorkload.clientId=$KEDA_UAMI_CLIENT_ID \ --set podIdentity.azureWorkload.tenantId=$tenantId #validate @@ -263,9 +240,47 @@ EOF function output(){ local kedaServerAddress=$(az monitor account show -n ${AMA_NAME} -g ${CURRENT_RG_NAME} --query 'metrics.prometheusQueryEndpoint' -otsv) + local clusterName=$(kubectl get cluster -n ${WLS_NAMESPACE} -o json | jq -r '.items[0].metadata.name') + cat <kedascalersample.yaml +apiVersion: keda.sh/v1alpha1 +kind: TriggerAuthentication +metadata: + name: azure-managed-prometheus-trigger-auth + namespace: ${WLS_NAMESPACE} +spec: + podIdentity: + provider: azure-workload + identityId: ${KEDA_UAMI_CLIENT_ID} +--- +apiVersion: keda.sh/v1alpha1 +kind: ScaledObject +metadata: + name: azure-managed-prometheus-scaler + namespace: ${WLS_NAMESPACE} +spec: + scaleTargetRef: + apiVersion: weblogic.oracle/v1 + kind: Cluster + name: ${clusterName} + minReplicaCount: 1 + maxReplicaCount: ${WLS_CLUSTER_SIZE} + triggers: + - type: prometheus + metadata: + serverAddress: ${kedaServerAddress} + metricName: webapp_config_open_sessions_high_count + query: sum(webapp_config_open_sessions_high_count{app=""}) # Note: query must return a vector/scalar single element response + threshold: '10' + activationThreshold: '1' + authenticationRef: + name: azure-managed-prometheus-trigger-auth +EOF + + local base64ofKedaScalerSample=$(cat ./kedascalersample.yaml | base64) local result=$(jq -n -c \ - --arg kedaScalerServerAddress $kedaServerAddress} \ - '{kedaScalerServerAddress: $kedaScalerServerAddress}') + --arg kedaScalerServerAddress "$kedaServerAddress}" \ + --arg base64ofKedaScalerSample "${base64ofKedaScalerSample}" \ + '{kedaScalerServerAddress: $kedaScalerServerAddress, base64ofKedaScalerSample: $base64ofKedaScalerSample}') echo "result is: $result" echo $result >$AZ_SCRIPTS_OUTPUT_PATH } @@ -285,8 +300,6 @@ get_wls_monitoring_exporter_image_url deploy_webLogic_monitoring_exporter -create_monitor_account_workspace - enable_promethues_metrics deploy_customize_scraping diff --git a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus_metrics.bicep b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus_metrics.bicep index 07633b2ba..84e02e84f 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus_metrics.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus_metrics.bicep @@ -3,8 +3,10 @@ param aksClusterName string param aksClusterRGName string +param amaName string param azCliVersion string param identity object = {} +param kedaUamiName string param location string param utcValue string = utcNow() param wlsClusterSize int @@ -13,6 +15,7 @@ param wlsNamespace string @secure() param wlsPassword string param wlsUserName string +param workspaceId string // To mitigate arm-ttk error: Unreferenced variable: $fxv#0 var base64_common = loadFileAsBase64('../../../arm/scripts/common.sh') @@ -21,7 +24,6 @@ var base64_utility = loadFileAsBase64('../../../arm/scripts/utility.sh') var const_deploymentName = 'ds-enable-promethues-metrics' var const_kedaNamespace= 'keda' var const_kedaSa= 'keda-operator' -var name_azureMonitorAccountName = 'ama${uniqueString(utcValue)}' resource deploymentScript 'Microsoft.Resources/deploymentScripts@${azure.apiVersionForDeploymentScript}' = { name: const_deploymentName @@ -42,7 +44,11 @@ resource deploymentScript 'Microsoft.Resources/deploymentScripts@${azure.apiVers } { name: 'AMA_NAME' - value: name_azureMonitorAccountName + value: amaName + } + { + name: 'AMA_WORKSPACE_ID' + value: workspaceId } { name: 'CURRENT_RG_NAME' @@ -52,6 +58,10 @@ resource deploymentScript 'Microsoft.Resources/deploymentScripts@${azure.apiVers name: 'KEDA_NAMESPACE' value: const_kedaNamespace } + { + name: 'KEDA_UAMI_NAME' + value: kedaUamiName + } { name: 'KEDA_SERVICE_ACCOUNT_NAME' value: const_kedaSa @@ -92,3 +102,4 @@ resource deploymentScript 'Microsoft.Resources/deploymentScripts@${azure.apiVers } output kedaScalerServerAddress string = deploymentScript.properties.outputs.kedaScalerServerAddress +output base64ofKedaScalerSample string = deploymentScript.properties.outputs.base64ofKedaScalerSample diff --git a/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep b/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep index 0b28d04bc..91923e0b6 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep @@ -20,6 +20,7 @@ param azCliVersion string param hpaScaleType string = 'cpu' param identity object = {} param location string +param utcValue string = utcNow() param useHpa bool param utilizationPercentage int param wlsClusterSize int @@ -29,6 +30,11 @@ param wlsPassword string param wlsUserName string var const_namespace = '${wlsDomainUID}-ns' +// https://docs.microsoft.com/en-us/azure/role-based-access-control/built-in-roles +var const_roleDefinitionIdOfMonitorDataReader = 'b24988ac-6180-42a0-ab88-20f7382dd24c' +var name_azureMonitorAccountName = 'ama${uniqueString(utcValue)}' +var name_kedaUserDefinedManagedIdentity = 'kedauami${uniqueString(utcValue)}' +var name_kedaMonitorDataReaderRoleAssignmentName = guid('${resourceGroup().id}${name_kedaUserDefinedManagedIdentity}') module pidAutoScalingStart './_pids/_pid.bicep' = { name: 'pid-auto-scaling-start' @@ -85,22 +91,59 @@ module hapDeployment '_deployment-scripts/_ds_enable_hpa.bicep' = if(useHpa) { ] } +resource monitorAccount 'Microsoft.Monitor/accounts@2023-04-03' = if(!useHpa){ + name: name_azureMonitorAccountName + location: location + properties: {} + dependsOn: [ + pidAutoScalingStart + ] +} + +// UAMI for KEDA +resource uamiForKeda 'Microsoft.ManagedIdentity/userAssignedIdentities@${azure.apiVersionForIdentity}' = if(!useHpa){ + name: name_kedaUserDefinedManagedIdentity + location: location + dependsOn: [ + pidAutoScalingStart + ] +} + +// Assign Monitor Data Reader role we need the permission to read data. +resource kedaUamiRoleAssignment 'Microsoft.Authorization/roleAssignments@${azure.apiVersionForRoleAssignment}' = if(!useHpa){ + name: name_kedaMonitorDataReaderRoleAssignmentName + scope: monitorAccount + properties: { + description: 'Assign Monitor Data Reader role role to KEDA Identity ' + principalId: reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', name_kedaUserDefinedManagedIdentity)).principalId + principalType: 'ServicePrincipal' + roleDefinitionId: const_roleDefinitionIdOfMonitorDataReader + } + dependsOn: [ + monitorAccount + uamiForKeda + ] +} + module azureMonitorIntegrationDeployment '_deployment-scripts/_ds_enable_prometheus_metrics.bicep' = if(!useHpa){ name: 'azure-monitor-promethues-keda-deployment' params: { aksClusterName: aksClusterName aksClusterRGName: aksClusterRGName + amaName: name_azureMonitorAccountName azCliVersion: azCliVersion identity: identity + kedaUamiName: name_kedaUserDefinedManagedIdentity location: location wlsClusterSize: wlsClusterSize wlsDomainUID: wlsDomainUID wlsNamespace: const_namespace wlsPassword: wlsPassword wlsUserName: wlsUserName + workspaceId: monitorAccount.id } dependsOn: [ - pidAutoScalingStart + kedaUamiRoleAssignment ] } @@ -116,7 +159,4 @@ module pidAutoScalingEnd './_pids/_pid.bicep' = { } output kedaScalerServerAddress string = useHpa ? '' : azureMonitorIntegrationDeployment.outputs.kedaScalerServerAddress - - - - +output base64ofKedaScalerSample string = useHpa ? '' : azureMonitorIntegrationDeployment.outputs.base64ofKedaScalerSample From aeba87675ffedc12120138a639b6802503a5da14 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 1 Mar 2024 15:39:15 +0800 Subject: [PATCH 15/43] fix aksClusterName --- weblogic-azure-aks/src/main/bicep/mainTemplate.bicep | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep index 55fceda36..0ec8bc4d1 100644 --- a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep +++ b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep @@ -841,7 +841,7 @@ module horizontalAutoscaling 'modules/_enableAutoScaling.bicep' = if (enableAuto _pidEnd: pids.outputs.autoScalingEnd _pidMemoryUtilization: pids.outputs.memoryUtilization _pidStart: pids.outputs.autoScalingStart - aksClusterName: ref_wlsDomainDeployment.outputs.aksClusterRGName + aksClusterName: ref_wlsDomainDeployment.outputs.aksClusterName aksClusterRGName: ref_wlsDomainDeployment.outputs.aksClusterRGName azCliVersion: const_azcliVersion hpaScaleType: hpaScaleType From 5793cd4b157be3444fee5e40b01d587e5867884f Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 1 Mar 2024 17:06:45 +0800 Subject: [PATCH 16/43] add outputs --- .../inline-scripts/enablePrometheusMetrics.sh | 2 +- .../src/main/bicep/mainTemplate.bicep | 2 ++ .../src/main/bicep/modules/_enableAutoScaling.bicep | 13 +++++++++---- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh index 2f32e2a4a..4587430cc 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh @@ -278,7 +278,7 @@ EOF local base64ofKedaScalerSample=$(cat ./kedascalersample.yaml | base64) local result=$(jq -n -c \ - --arg kedaScalerServerAddress "$kedaServerAddress}" \ + --arg kedaScalerServerAddress "$kedaServerAddress" \ --arg base64ofKedaScalerSample "${base64ofKedaScalerSample}" \ '{kedaScalerServerAddress: $kedaScalerServerAddress, base64ofKedaScalerSample: $base64ofKedaScalerSample}') echo "result is: $result" diff --git a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep index 0ec8bc4d1..755819528 100644 --- a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep +++ b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep @@ -896,7 +896,9 @@ output clusterExternalUrl string = const_enableNetworking ? networkingDeployment output clusterExternalSecuredUrl string = const_enableNetworking ? networkingDeployment.outputs.clusterExternalSecuredEndpoint : '' output clusterT3InternalUrl string = ref_wlsDomainDeployment.outputs.clusterT3InternalEndpoint output clusterT3ExternalEndpoint string = enableClusterT3Tunneling && const_enableNetworking ? networkingDeployment.outputs.clusterT3ChannelEndpoint : '' +output kedaScalerServerAddress string = enableAutoscaling ? horizontalAutoscaling.outputs.kedaScalerServerAddress : '' output shellCmdtoConnectAks string = format('az account set --subscription {0}; az aks get-credentials --resource-group {1} --name {2}', split(subscription().id, '/')[2], ref_wlsDomainDeployment.outputs.aksClusterRGName, ref_wlsDomainDeployment.outputs.aksClusterName) +output shellCmdtoOutputKedaScalerSample string = enableAutoscaling ? horizontalAutoscaling.outputs.base64ofKedaScalerSample : '' output shellCmdtoOutputWlsDomainYaml string = queryWLSDomainConfig.outputs.shellCmdtoOutputWlsDomainYaml output shellCmdtoOutputWlsImageModelYaml string = queryWLSDomainConfig.outputs.shellCmdtoOutputWlsImageModelYaml output shellCmdtoOutputWlsImageProperties string = queryWLSDomainConfig.outputs.shellCmdtoOutputWlsImageProperties diff --git a/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep b/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep index 91923e0b6..3ebf81183 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep @@ -54,7 +54,7 @@ module pidCpuUtilization './_pids/_pid.bicep' = if(useHpa && hpaScaleType == 'cp } module pidMemoryUtilization './_pids/_pid.bicep' = if(useHpa && hpaScaleType == 'memory') { - name: 'pid-auto-scaling-based-on-java-metrics' + name: 'pid-auto-scaling-based-on-memory-utilization' params: { name: _pidMemoryUtilization } @@ -64,7 +64,7 @@ module pidMemoryUtilization './_pids/_pid.bicep' = if(useHpa && hpaScaleType == } module pidWme './_pids/_pid.bicep' = if(!useHpa) { - name: 'pid-auto-scaling-based-on-memory-utilization' + name: 'pid-auto-scaling-based-on-java-metrics' params: { name: _pidWme } @@ -109,6 +109,11 @@ resource uamiForKeda 'Microsoft.ManagedIdentity/userAssignedIdentities@${azure.a ] } +// Get role resource id +resource monitorDataReaderResourceDefinition 'Microsoft.Authorization/roleDefinitions@${azure.apiVersionForRoleDefinitions}' existing = if(!useHpa){ + name: const_roleDefinitionIdOfMonitorDataReader +} + // Assign Monitor Data Reader role we need the permission to read data. resource kedaUamiRoleAssignment 'Microsoft.Authorization/roleAssignments@${azure.apiVersionForRoleAssignment}' = if(!useHpa){ name: name_kedaMonitorDataReaderRoleAssignmentName @@ -117,7 +122,7 @@ resource kedaUamiRoleAssignment 'Microsoft.Authorization/roleAssignments@${azure description: 'Assign Monitor Data Reader role role to KEDA Identity ' principalId: reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', name_kedaUserDefinedManagedIdentity)).principalId principalType: 'ServicePrincipal' - roleDefinitionId: const_roleDefinitionIdOfMonitorDataReader + roleDefinitionId: monitorDataReaderResourceDefinition.id } dependsOn: [ monitorAccount @@ -159,4 +164,4 @@ module pidAutoScalingEnd './_pids/_pid.bicep' = { } output kedaScalerServerAddress string = useHpa ? '' : azureMonitorIntegrationDeployment.outputs.kedaScalerServerAddress -output base64ofKedaScalerSample string = useHpa ? '' : azureMonitorIntegrationDeployment.outputs.base64ofKedaScalerSample +output base64ofKedaScalerSample string = useHpa ? '' : format('echo -e {0} | base64 -d > scaler.yaml', azureMonitorIntegrationDeployment.outputs.base64ofKedaScalerSample) From 805af786a231d02937ad0bfe120bfb9fdb376ff1 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 1 Mar 2024 17:14:50 +0800 Subject: [PATCH 17/43] fix uami name --- .../arm/scripts/inline-scripts/enablePrometheusMetrics.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh index 4587430cc..5bc671cd5 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh @@ -198,7 +198,6 @@ function enable_keda_addon() { fi export OIDC_ISSUER_URL=$(az aks show -n $AKS_CLUSTER_NAME -g $AKS_CLUSTER_RG_NAME --query "oidcIssuerProfile.issuerUrl" -otsv) - export KEDA_UAMI_CLIENT_ID=$(az identity show --resource-group $CURRENT_RG_NAME --name $KEDA_UAMI_NAME --query 'clientId' -otsv) local tenantId=$(az identity show --resource-group $CURRENT_RG_NAME --name $KEDA_UAMI_NAME --query 'tenantId' -otsv) @@ -217,11 +216,12 @@ EOF local kedaFederatedName="kedaFederated$(date +%s)" az identity federated-credential create \ --name $kedaFederatedName \ - --identity-name $uamiName \ + --identity-name $KEDA_UAMI_NAME \ --resource-group $CURRENT_RG_NAME \ --issuer $OIDC_ISSUER_URL \ --subject system:serviceaccount:$KEDA_NAMESPACE:$KEDA_SERVICE_ACCOUNT_NAME \ --audience api://AzureADTokenExchange + utility_validate_status "Create keda federated-credential ${kedaFederatedName}." helm repo add kedacore https://kedacore.github.io/charts helm repo update From a6645d68080c5b1e9fc73563acc4bb214c9eba35 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Mon, 4 Mar 2024 11:08:45 +0800 Subject: [PATCH 18/43] add pid for wme --- weblogic-azure-aks/src/main/bicep/mainTemplate.bicep | 1 + weblogic-azure-aks/src/main/bicep/modules/_pids/_pid-dev.bicep | 1 + weblogic-azure-aks/src/main/bicep/modules/_pids/_pid.bicep | 1 + 3 files changed, 3 insertions(+) diff --git a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep index 755819528..803eb2556 100644 --- a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep +++ b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep @@ -841,6 +841,7 @@ module horizontalAutoscaling 'modules/_enableAutoScaling.bicep' = if (enableAuto _pidEnd: pids.outputs.autoScalingEnd _pidMemoryUtilization: pids.outputs.memoryUtilization _pidStart: pids.outputs.autoScalingStart + _pidWme: pids.outputs.enableWlsMonitoringExporter aksClusterName: ref_wlsDomainDeployment.outputs.aksClusterName aksClusterRGName: ref_wlsDomainDeployment.outputs.aksClusterRGName azCliVersion: const_azcliVersion diff --git a/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid-dev.bicep b/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid-dev.bicep index 70dc86553..a4c35705c 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid-dev.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid-dev.bicep @@ -20,6 +20,7 @@ output dbEnd string = 'ffab0a3f-90cb-585a-a7f9-ec0a62faeec1' output dbStart string = 'e64361eb-fea0-5f15-a313-c76daadbc648' output dnsEnd string = '189306c7-39e2-5844-817d-01e883a4cf1e' output dnsStart string = '8ae63711-9fa7-56b4-a4a0-236f3ccef542' +output enableWlsMonitoringExporter string = '960632d4-918a-47c4-a32e-61ab0d4c470a' output lbEnd string = 'f76e2847-d5a1-52e7-9e52-fc8560f5d3e4' output lbStart string = 'e2a8c8b2-9b58-52c6-9636-1834ff3976dc' output networkingEnd string = '39d32fcd-1d02-50b6-9455-4b767a8e769e' diff --git a/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid.bicep b/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid.bicep index 3ed1fb411..32878e3c9 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid.bicep @@ -20,6 +20,7 @@ output dbEnd string = 'd7a9c78e-39d9-5a47-928d-8645ed86dafd' output dbStart string = '0cc86800-37f4-5191-9368-2953394309ec' output dnsEnd string = '754e16bc-4d81-5343-b99b-7532abd6587d' output dnsStart string = '64ae895c-feb3-529e-8435-5d2e49f94e09' +output enableWlsMonitoringExporter string = '5e607302-2e52-42c4-8f02-29db35e3ddf1' output lbEnd string = 'ce664543-77bd-515a-832e-107e32f99da9' output lbStart string = '44732bbc-04c4-5df7-a0c6-b9be9ec00ee6' output networkingEnd string = '2798165c-49fa-5701-b608-b80ed3986176' From 2c0ea5eb62682f71be597a8b95deaaadef290dbe Mon Sep 17 00:00:00 2001 From: galiacheng Date: Mon, 4 Mar 2024 12:29:30 +0800 Subject: [PATCH 19/43] use API version place holder. --- .../src/main/bicep/modules/_enableAutoScaling.bicep | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep b/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep index 3ebf81183..56b9abad5 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep @@ -91,7 +91,7 @@ module hapDeployment '_deployment-scripts/_ds_enable_hpa.bicep' = if(useHpa) { ] } -resource monitorAccount 'Microsoft.Monitor/accounts@2023-04-03' = if(!useHpa){ +resource monitorAccount 'Microsoft.Monitor/accounts@${azure.apiVersionForMonitorAccount}' = if(!useHpa){ name: name_azureMonitorAccountName location: location properties: {} From 35bdf90dbbb5dcbeb61e589bfa2aa33e0402599b Mon Sep 17 00:00:00 2001 From: galiacheng Date: Mon, 4 Mar 2024 13:04:33 +0800 Subject: [PATCH 20/43] az cli 2.53.0 uses gatewayIPConfigurations to get gateway vnet. --- .../src/main/arm/scripts/createAppGatewayIngress.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/scripts/createAppGatewayIngress.sh b/weblogic-azure-aks/src/main/arm/scripts/createAppGatewayIngress.sh index 8e6d78d86..a48b5c889 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/createAppGatewayIngress.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/createAppGatewayIngress.sh @@ -318,8 +318,8 @@ function network_peers_aks_appgw() { local aksNetworkRgName=${aksNetWorkId#*\/resourceGroups\/} local aksNetworkRgName=${aksNetworkRgName%\/providers\/*} - local appGatewaySubnetId=$(az network application-gateway show -g ${CURRENT_RG_NAME} --name ${APPGW_NAME} -o tsv --query "gatewayIpConfigurations[0].subnet.id") - local appGatewayVnetResourceGroup=$(az network application-gateway show -g ${CURRENT_RG_NAME} --name ${APPGW_NAME} -o tsv --query "gatewayIpConfigurations[0].subnet.resourceGroup") + local appGatewaySubnetId=$(az network application-gateway show -g ${CURRENT_RG_NAME} --name ${APPGW_NAME} -o tsv --query "gatewayIPConfigurations[0].subnet.id") + local appGatewayVnetResourceGroup=$(az network application-gateway show -g ${CURRENT_RG_NAME} --name ${APPGW_NAME} -o tsv --query "gatewayIPConfigurations[0].subnet.resourceGroup") local appGatewaySubnetName=$(az resource show --ids ${appGatewaySubnetId} --query "name" -o tsv) local appgwNetworkId=$(echo $appGatewaySubnetId | sed s/"\/subnets\/${appGatewaySubnetName}"//) local appgwVnetName=$(az resource show --ids ${appgwNetworkId} --query "name" -o tsv) From 77880cbb5c086c2a3b8f2359343fd2e211574977 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Mon, 4 Mar 2024 18:16:14 +0800 Subject: [PATCH 21/43] use correct UAMI api version --- .../src/main/bicep/modules/_enableAutoScaling.bicep | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep b/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep index 56b9abad5..510844d65 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep @@ -120,7 +120,7 @@ resource kedaUamiRoleAssignment 'Microsoft.Authorization/roleAssignments@${azure scope: monitorAccount properties: { description: 'Assign Monitor Data Reader role role to KEDA Identity ' - principalId: reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', name_kedaUserDefinedManagedIdentity)).principalId + principalId: reference(uamiForKeda.id, '${azure.apiVersionForIdentity}', 'full').properties.principalId principalType: 'ServicePrincipal' roleDefinitionId: monitorDataReaderResourceDefinition.id } From a42a50ee5682936d475cce360a4f2fcfb66c6519 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Tue, 5 Mar 2024 10:17:07 +0800 Subject: [PATCH 22/43] enable aks auto scaler --- .../src/main/arm/createUiDefinition.json | 23 +++++++++++++++---- .../src/main/bicep/mainTemplate.bicep | 8 ++++++- .../bicep/modules/_azure-resoruces/_aks.bicep | 6 +++-- .../bicep/modules/setupWebLogicCluster.bicep | 7 +++++- 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index d518a78c4..7977622a7 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -311,16 +311,30 @@ "uri": "https://aka.ms/wls-aks-well-tested-version" } } - }, + }, { "name": "aksNodeCount", "type": "Microsoft.Common.Slider", "min": 1, - "max": 1000, - "label": "Node count", + "max": 100, + "label": "Minimum 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.", + "toolTip": "Set the minimum node count for the cluster.", + "constraints": { + "required": true + }, + "visible": "[bool(steps('section_aks').clusterInfo.createAKSCluster)]" + }, + { + "name": "aksNodeMaxCount", + "type": "Microsoft.Common.Slider", + "min": "[int(steps('section_aks').clusterInfo.aksNodeCount)]", + "max": 100, + "label": "Maximum node count", + "defaultValue": 5, + "showStepMarkers": false, + "toolTip": "Set the maximum node count for the cluster.", "constraints": { "required": true }, @@ -2253,6 +2267,7 @@ "acrName": "[last(split(steps('section_aks').imageInfo.oracleAcrSelector.id, '/'))]", "acrResourceGroupName": "[last(take(split(steps('section_aks').imageInfo.oracleAcrSelector.id, '/'),5))]", "aksAgentPoolNodeCount": "[steps('section_aks').clusterInfo.aksNodeCount]", + "aksAgentPoolNodeMaxCount": "[steps('section_aks').clusterInfo.aksNodeMaxCount]", "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]", diff --git a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep index 803eb2556..da683f387 100644 --- a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep +++ b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep @@ -36,8 +36,12 @@ param acrResourceGroupName string = 'acr-contoso-rg' param aksAgentPoolName string = 'agentpool' @maxValue(10000) @minValue(1) -@description('The number of nodes that should be created along with the cluster. You will be able to resize the cluster later.') +@description('Set the minimum node count for the cluster..') param aksAgentPoolNodeCount int = 3 +@maxValue(1000) +@minValue(3) +@description('Set the maximum node count for the cluster.') +param aksAgentPoolNodeMaxCount int = 5 @description('The size of the virtual machines that will form the nodes in the cluster. This cannot be changed after creating the cluster') param vmSize string = 'Standard_DS2_v2' @description('Prefix for cluster name. Only The name can contain only letters, numbers, underscores and hyphens. The name must start with letter or number.') @@ -564,6 +568,7 @@ module wlsDomainDeployment 'modules/setupWebLogicCluster.bicep' = if (!enableCus acrResourceGroupName: preAzureResourceDeployment.outputs.acrResourceGroupName aksAgentPoolName: aksAgentPoolName aksAgentPoolNodeCount: aksAgentPoolNodeCount + aksAgentPoolNodeMaxCount: aksAgentPoolNodeMaxCount vmSize: vmSize aksClusterNamePrefix: aksClusterNamePrefix aksClusterRGName: aksClusterRGName @@ -634,6 +639,7 @@ module wlsDomainWithCustomSSLDeployment 'modules/setupWebLogicCluster.bicep' = i acrResourceGroupName: preAzureResourceDeployment.outputs.acrResourceGroupName aksAgentPoolName: aksAgentPoolName aksAgentPoolNodeCount: aksAgentPoolNodeCount + aksAgentPoolNodeMaxCount: aksAgentPoolNodeMaxCount vmSize: vmSize aksClusterNamePrefix: aksClusterNamePrefix aksClusterRGName: aksClusterRGName diff --git a/weblogic-azure-aks/src/main/bicep/modules/_azure-resoruces/_aks.bicep b/weblogic-azure-aks/src/main/bicep/modules/_azure-resoruces/_aks.bicep index eea154323..eafa250a0 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_azure-resoruces/_aks.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_azure-resoruces/_aks.bicep @@ -15,6 +15,7 @@ param aksAgentPoolName string = 'agentpool' @minValue(1) @description('The number of nodes that should be created along with the cluster. You will be able to resize the cluster later.') param aksAgentPoolNodeCount int = 3 +param aksAgentPoolNodeMaxCount int = 5 @description('The size of the virtual machines that will form the nodes in the cluster. This cannot be changed after creating the cluster') param aksAgentPoolVMSize string = 'Standard_DS2_v2' @description('Prefix for cluster name. Only The name can contain only letters, numbers, underscores and hyphens. The name must start with letter or number.') @@ -26,7 +27,6 @@ param location string param utcValue string = utcNow() var const_aksAgentPoolOSDiskSizeGB = 128 -var const_aksAgentPoolMaxPods = 110 var const_aksAvailabilityZones = [ '1' '2' @@ -70,12 +70,14 @@ resource aksCluster 'Microsoft.ContainerService/managedClusters@${azure.apiVersi agentPoolProfiles: [ { name: aksAgentPoolName + enableAutoScaling: true + minCount: aksAgentPoolNodeCount + maxCount: aksAgentPoolNodeMaxCount count: aksAgentPoolNodeCount vmSize: aksAgentPoolVMSize osDiskSizeGB: const_aksAgentPoolOSDiskSizeGB osDiskType: 'Managed' kubeletDiskType: 'OS' - maxPods: const_aksAgentPoolMaxPods type: 'VirtualMachineScaleSets' availabilityZones: const_aksAvailabilityZones mode: 'System' diff --git a/weblogic-azure-aks/src/main/bicep/modules/setupWebLogicCluster.bicep b/weblogic-azure-aks/src/main/bicep/modules/setupWebLogicCluster.bicep index 5b2cdb284..b20f47fde 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/setupWebLogicCluster.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/setupWebLogicCluster.bicep @@ -35,8 +35,12 @@ param acrResourceGroupName string = '' param aksAgentPoolName string = 'agentpool' @maxValue(10000) @minValue(1) -@description('The number of nodes that should be created along with the cluster. You will be able to resize the cluster later.') +@description('Set the minimum node count for the cluster..') param aksAgentPoolNodeCount int = 3 +@maxValue(1000) +@minValue(3) +@description('Set the maximum node count for the cluster.') +param aksAgentPoolNodeMaxCount int = 5 @description('The size of the virtual machines that will form the nodes in the cluster. This cannot be changed after creating the cluster') param vmSize string = 'Standard_DS2_v2' @description('Prefix for cluster name. Only The name can contain only letters, numbers, underscores and hyphens. The name must start with letter or number.') @@ -158,6 +162,7 @@ module aksClusterDeployment './_azure-resoruces/_aks.bicep' = if (createAKSClust aciWorkspaceSku: aciWorkspaceSku aksAgentPoolName: aksAgentPoolName aksAgentPoolNodeCount: aksAgentPoolNodeCount + aksAgentPoolNodeMaxCount: aksAgentPoolNodeMaxCount aksAgentPoolVMSize: vmSize aksClusterNamePrefix: aksClusterNamePrefix aksVersion: aksVersion From a126b55d917e9a15b54a276cd6dcae69c5c44e23 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Tue, 5 Mar 2024 13:21:11 +0800 Subject: [PATCH 23/43] move script for WME in a seperated file --- .../bicep/modules/_enableAutoScaling.bicep | 63 ++------------- .../bicep/modules/_enablePromethuesKeda.bicep | 80 +++++++++++++++++++ 2 files changed, 88 insertions(+), 55 deletions(-) create mode 100644 weblogic-azure-aks/src/main/bicep/modules/_enablePromethuesKeda.bicep diff --git a/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep b/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep index 510844d65..957c4a9f3 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep @@ -20,7 +20,6 @@ param azCliVersion string param hpaScaleType string = 'cpu' param identity object = {} param location string -param utcValue string = utcNow() param useHpa bool param utilizationPercentage int param wlsClusterSize int @@ -30,11 +29,6 @@ param wlsPassword string param wlsUserName string var const_namespace = '${wlsDomainUID}-ns' -// https://docs.microsoft.com/en-us/azure/role-based-access-control/built-in-roles -var const_roleDefinitionIdOfMonitorDataReader = 'b24988ac-6180-42a0-ab88-20f7382dd24c' -var name_azureMonitorAccountName = 'ama${uniqueString(utcValue)}' -var name_kedaUserDefinedManagedIdentity = 'kedauami${uniqueString(utcValue)}' -var name_kedaMonitorDataReaderRoleAssignmentName = guid('${resourceGroup().id}${name_kedaUserDefinedManagedIdentity}') module pidAutoScalingStart './_pids/_pid.bicep' = { name: 'pid-auto-scaling-start' @@ -91,67 +85,26 @@ module hapDeployment '_deployment-scripts/_ds_enable_hpa.bicep' = if(useHpa) { ] } -resource monitorAccount 'Microsoft.Monitor/accounts@${azure.apiVersionForMonitorAccount}' = if(!useHpa){ - name: name_azureMonitorAccountName - location: location - properties: {} - dependsOn: [ - pidAutoScalingStart - ] -} - -// UAMI for KEDA -resource uamiForKeda 'Microsoft.ManagedIdentity/userAssignedIdentities@${azure.apiVersionForIdentity}' = if(!useHpa){ - name: name_kedaUserDefinedManagedIdentity - location: location - dependsOn: [ - pidAutoScalingStart - ] -} - -// Get role resource id -resource monitorDataReaderResourceDefinition 'Microsoft.Authorization/roleDefinitions@${azure.apiVersionForRoleDefinitions}' existing = if(!useHpa){ - name: const_roleDefinitionIdOfMonitorDataReader -} - -// Assign Monitor Data Reader role we need the permission to read data. -resource kedaUamiRoleAssignment 'Microsoft.Authorization/roleAssignments@${azure.apiVersionForRoleAssignment}' = if(!useHpa){ - name: name_kedaMonitorDataReaderRoleAssignmentName - scope: monitorAccount - properties: { - description: 'Assign Monitor Data Reader role role to KEDA Identity ' - principalId: reference(uamiForKeda.id, '${azure.apiVersionForIdentity}', 'full').properties.principalId - principalType: 'ServicePrincipal' - roleDefinitionId: monitorDataReaderResourceDefinition.id - } - dependsOn: [ - monitorAccount - uamiForKeda - ] -} - -module azureMonitorIntegrationDeployment '_deployment-scripts/_ds_enable_prometheus_metrics.bicep' = if(!useHpa){ - name: 'azure-monitor-promethues-keda-deployment' +module promethuesKedaDeployment '_enablePromethuesKeda.bicep' = if (!useHpa) { + name: 'promethues-keda-weblogic-monitoring-exporter-deployment' params: { aksClusterName: aksClusterName aksClusterRGName: aksClusterRGName - amaName: name_azureMonitorAccountName azCliVersion: azCliVersion identity: identity - kedaUamiName: name_kedaUserDefinedManagedIdentity location: location wlsClusterSize: wlsClusterSize wlsDomainUID: wlsDomainUID - wlsNamespace: const_namespace wlsPassword: wlsPassword wlsUserName: wlsUserName - workspaceId: monitorAccount.id } dependsOn: [ - kedaUamiRoleAssignment + pidAutoScalingStart ] } + + module pidAutoScalingEnd './_pids/_pid.bicep' = { name: 'pid-auto-scaling-end' params: { @@ -159,9 +112,9 @@ module pidAutoScalingEnd './_pids/_pid.bicep' = { } dependsOn: [ hapDeployment - azureMonitorIntegrationDeployment + promethuesKedaDeployment ] } -output kedaScalerServerAddress string = useHpa ? '' : azureMonitorIntegrationDeployment.outputs.kedaScalerServerAddress -output base64ofKedaScalerSample string = useHpa ? '' : format('echo -e {0} | base64 -d > scaler.yaml', azureMonitorIntegrationDeployment.outputs.base64ofKedaScalerSample) +output kedaScalerServerAddress string = useHpa ? '' : promethuesKedaDeployment.outputs.kedaScalerServerAddress +output base64ofKedaScalerSample string = useHpa ? '' : promethuesKedaDeployment.outputs.base64ofKedaScalerSample diff --git a/weblogic-azure-aks/src/main/bicep/modules/_enablePromethuesKeda.bicep b/weblogic-azure-aks/src/main/bicep/modules/_enablePromethuesKeda.bicep new file mode 100644 index 000000000..65a5391cf --- /dev/null +++ b/weblogic-azure-aks/src/main/bicep/modules/_enablePromethuesKeda.bicep @@ -0,0 +1,80 @@ +/* + Copyright (c) 2021, Oracle and/or its affiliates. +Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. +*/ +param aksClusterName string +param aksClusterRGName string +param azCliVersion string +param identity object = {} +param location string +param utcValue string = utcNow() +param wlsClusterSize int +param wlsDomainUID string +@secure() +param wlsPassword string +param wlsUserName string + +var const_namespace = '${wlsDomainUID}-ns' +// https://docs.microsoft.com/en-us/azure/role-based-access-control/built-in-roles +var const_roleDefinitionIdOfMonitorDataReader = 'b24988ac-6180-42a0-ab88-20f7382dd24c' +var name_azureMonitorAccountName = 'ama${uniqueString(utcValue)}' +var name_kedaUserDefinedManagedIdentity = 'kedauami${uniqueString(utcValue)}' +var name_kedaMonitorDataReaderRoleAssignmentName = guid('${resourceGroup().id}${name_kedaUserDefinedManagedIdentity}') + +resource monitorAccount 'Microsoft.Monitor/accounts@${azure.apiVersionForMonitorAccount}' = { + name: name_azureMonitorAccountName + location: location + properties: {} +} + +// UAMI for KEDA +resource uamiForKeda 'Microsoft.ManagedIdentity/userAssignedIdentities@${azure.apiVersionForIdentity}' = { + name: name_kedaUserDefinedManagedIdentity + location: location +} + +// Get role resource id +resource monitorDataReaderResourceDefinition 'Microsoft.Authorization/roleDefinitions@${azure.apiVersionForRoleDefinitions}' existing = { + name: const_roleDefinitionIdOfMonitorDataReader +} + +// Assign Monitor Data Reader role we need the permission to read data. +resource kedaUamiRoleAssignment 'Microsoft.Authorization/roleAssignments@${azure.apiVersionForRoleAssignment}' = { + name: name_kedaMonitorDataReaderRoleAssignmentName + scope: monitorAccount + properties: { + description: 'Assign Monitor Data Reader role role to KEDA Identity ' + principalId: reference(uamiForKeda.id, '${azure.apiVersionForIdentity}', 'full').properties.principalId + principalType: 'ServicePrincipal' + roleDefinitionId: monitorDataReaderResourceDefinition.id + } + dependsOn: [ + monitorAccount + uamiForKeda + ] +} + +module azureMonitorIntegrationDeployment '_deployment-scripts/_ds_enable_prometheus_metrics.bicep' = { + name: 'azure-monitor-promethues-keda-deployment' + params: { + aksClusterName: aksClusterName + aksClusterRGName: aksClusterRGName + amaName: name_azureMonitorAccountName + azCliVersion: azCliVersion + identity: identity + kedaUamiName: name_kedaUserDefinedManagedIdentity + location: location + wlsClusterSize: wlsClusterSize + wlsDomainUID: wlsDomainUID + wlsNamespace: const_namespace + wlsPassword: wlsPassword + wlsUserName: wlsUserName + workspaceId: monitorAccount.id + } + dependsOn: [ + kedaUamiRoleAssignment + ] +} + +output kedaScalerServerAddress string = azureMonitorIntegrationDeployment.outputs.kedaScalerServerAddress +output base64ofKedaScalerSample string = format('echo -e {0} | base64 -d > scaler.yaml', azureMonitorIntegrationDeployment.outputs.base64ofKedaScalerSample) From 7a32fc11098378200887e309c6368c0b676155c9 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Wed, 6 Mar 2024 10:10:23 +0800 Subject: [PATCH 24/43] use aka link --- weblogic-azure-aks/src/main/arm/createUiDefinition.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index 7977622a7..fe4d154ce 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -2203,7 +2203,7 @@ "options": { "icon": "None", "text": "This option exports metrics using WebLogic Monitoring Exporter, collects metrics using Azure Managed Prometheus Service and exposes metrics using KEDA. After the provisioning is completed, you have to create KEDA scalers based on your requirements to enable autoscaling.", - "uri": "https://oracle.github.io/weblogic-kubernetes-operator/managing-domains/domain-lifecycle/scaling/#kubernetes-horizontal-pod-autoscaler-hpa" + "uri": "https://aka.ms/wlsaks-autoscaling" } }, { From 9dd23a195101ef40c78eb98a0c759b8d77ff97fa Mon Sep 17 00:00:00 2001 From: galiacheng Date: Wed, 6 Mar 2024 10:12:06 +0800 Subject: [PATCH 25/43] use aka link for wko hpa doc --- weblogic-azure-aks/src/main/arm/createUiDefinition.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index fe4d154ce..48f0b2d5d 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -2193,7 +2193,7 @@ "options": { "icon": "None", "text": "This option configures and runs Kubernetes Horizontal Pod Autoscaler (HPA) to scale a WebLogic cluster, based on the CPU or memory utilization. The HPA autoscales WebLogic Server instances from a minimum of 1 cluster members up to maximum of cluster members, and the scale up or down will occur when the average CPU/memory is consistently over the utilization. Default maximum of cluster members is 5. You can set it from Basics -> Optional Basic Configuration -> Maximum dynamic cluster size.", - "uri": "https://oracle.github.io/weblogic-kubernetes-operator/managing-domains/domain-lifecycle/scaling/#kubernetes-horizontal-pod-autoscaler-hpa" + "uri": "https://aka.ms/wlsoperator-autoscaling-hpa" } }, { From 8db06e90b4d84db5d58edb11d0061f667b9a3c3c Mon Sep 17 00:00:00 2001 From: galiacheng Date: Wed, 6 Mar 2024 10:43:05 +0800 Subject: [PATCH 26/43] add metrics --- .../inline-scripts/enablePrometheusMetrics.sh | 41 ++++++++++++++++++- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh index 5bc671cd5..34905558d 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh @@ -111,19 +111,56 @@ function deploy_webLogic_monitoring_exporter(){ "servlets": { "key": "servletName", "prefix": "weblogic_servlet_", - "values": "invocationTotalCount" + "values": [ + "invocationTotalCount", + "reloadTotal", + "executionTimeAverage", + "poolMaxCapacity", + "executionTimeTotal", + "reloadTotalCount", + "executionTimeHigh", + "executionTimeLow" + ] }, "type": "WebAppComponentRuntime", "values": [ "deploymentState", "contextRoot", "sourceInfo", - "openSessionsHighCount" + "openSessionsHighCount", + "openSessionsCurrentCount", + "sessionsOpenedTotalCount", + "sessionCookieMaxAgeSecs", + "sessionInvalidationIntervalSecs", + "sessionTimeoutSecs", + "singleThreadedServletPoolSize", + "sessionIDLength", + "servletReloadCheckSecs", + "jSPPageCheckSecs" ] }, + "workManagerRuntimes": { + "prefix": "workmanager_", + "key": "applicationName", + "values": [ + "pendingRequests", + "completedRequests", + "stuckThreadCount"] + }, "key": "name", "keyName": "app" }, + "JVMRuntime": { + "key": "name", + "values": [ + "heapFreeCurrent", + "heapFreePercent", + "heapSizeCurrent", + "heapSizeMax", + "uptime", + "processCpuLoad" + ] + }, "key": "name", "keyName": "server" } From 1c6ff26283508a993892d8b8c7947b06b5e9efc1 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Wed, 6 Mar 2024 13:08:45 +0800 Subject: [PATCH 27/43] fix appgw network peering issue --- .../src/main/arm/scripts/createAppGatewayIngress.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/scripts/createAppGatewayIngress.sh b/weblogic-azure-aks/src/main/arm/scripts/createAppGatewayIngress.sh index a48b5c889..0e98d72b3 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/createAppGatewayIngress.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/createAppGatewayIngress.sh @@ -320,8 +320,7 @@ function network_peers_aks_appgw() { local appGatewaySubnetId=$(az network application-gateway show -g ${CURRENT_RG_NAME} --name ${APPGW_NAME} -o tsv --query "gatewayIPConfigurations[0].subnet.id") local appGatewayVnetResourceGroup=$(az network application-gateway show -g ${CURRENT_RG_NAME} --name ${APPGW_NAME} -o tsv --query "gatewayIPConfigurations[0].subnet.resourceGroup") - local appGatewaySubnetName=$(az resource show --ids ${appGatewaySubnetId} --query "name" -o tsv) - local appgwNetworkId=$(echo $appGatewaySubnetId | sed s/"\/subnets\/${appGatewaySubnetName}"//) + local appgwNetworkId=${appGatewaySubnetId%\/subnets\/*} local appgwVnetName=$(az resource show --ids ${appgwNetworkId} --query "name" -o tsv) local toPeer=true From e3fe241420ea619ab722a19d284293c2c209ea0e Mon Sep 17 00:00:00 2001 From: galiacheng Date: Thu, 7 Mar 2024 13:32:54 +0800 Subject: [PATCH 28/43] remove test parameters --- weblogic-azure-aks/src/main/arm/scripts/common.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/arm/scripts/common.sh b/weblogic-azure-aks/src/main/arm/scripts/common.sh index 602af7fed..2a5fca89e 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/common.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/common.sh @@ -43,7 +43,7 @@ export ocrGaImagePath="middleware/weblogic" export ocrCpuImagePath="middleware/weblogic_cpu" export gitUrl4CpuImages="https://raw.githubusercontent.com/oracle/weblogic-azure/main/weblogic-azure-aks/src/main/resources/weblogic_cpu_images.json" export gitUrl4AksWellTestedVersionJsonFile="https://raw.githubusercontent.com/oracle/weblogic-azure/main/weblogic-azure-aks/src/main/resources/aks_well_tested_version.json" -export gitUrl4WLSToolingFamilyJsonFile="https://raw.githubusercontent.com/galiacheng/weblogic-azure/autoscalingtest1/weblogic-azure-aks/src/main/resources/weblogic_tooling_family.json" +export gitUrl4WLSToolingFamilyJsonFile="https://raw.githubusercontent.com/oracle/weblogic-azure/main/weblogic-azure-aks/src/main/resources/weblogic_tooling_family.json" export gitUrl4AzureIdentityExtensionsPomFile="https://raw.githubusercontent.com/oracle/weblogic-azure/main/weblogic-azure-aks/src/main/resources/azure-identity-extensions.xml" export gitUrl4MySQLDriverPomFile="https://raw.githubusercontent.com/oracle/weblogic-azure/main/weblogic-azure-aks/src/main/resources/mysql-connector-java.xml" From 537caa149c08add52b64c0de64031d8e067cffe9 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Mon, 18 Mar 2024 13:56:43 +0800 Subject: [PATCH 29/43] update copyright --- .../src/main/arm/scripts/createAppGatewayIngress.sh | 2 +- weblogic-azure-aks/src/main/arm/scripts/createLbSvc.sh | 2 +- weblogic-azure-aks/src/main/arm/scripts/updateApplications.sh | 2 +- weblogic-azure-aks/src/main/bicep/mainTemplate.bicep | 2 +- .../src/main/bicep/modules/_azure-resoruces/_aks.bicep | 2 +- .../main/bicep/modules/_deployment-scripts/_ds_enable_hpa.bicep | 2 +- .../_deployment-scripts/_ds_enable_prometheus_metrics.bicep | 2 +- .../src/main/bicep/modules/_enableAutoScaling.bicep | 2 +- .../src/main/bicep/modules/_enablePromethuesKeda.bicep | 2 +- weblogic-azure-aks/src/main/bicep/modules/_pids/_pid-dev.bicep | 2 +- weblogic-azure-aks/src/main/bicep/modules/_pids/_pid.bicep | 2 +- .../src/main/bicep/modules/setupWebLogicCluster.bicep | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/scripts/createAppGatewayIngress.sh b/weblogic-azure-aks/src/main/arm/scripts/createAppGatewayIngress.sh index 0e98d72b3..49916b55d 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/createAppGatewayIngress.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/createAppGatewayIngress.sh @@ -1,4 +1,4 @@ -# Copyright (c) 2021, Oracle Corporation and/or its affiliates. +# Copyright (c) 2021, 2024, Oracle Corporation and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # Description: to create Azure Application Gateway ingress for the following targets. diff --git a/weblogic-azure-aks/src/main/arm/scripts/createLbSvc.sh b/weblogic-azure-aks/src/main/arm/scripts/createLbSvc.sh index 0343ac3bb..b170253ca 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/createLbSvc.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/createLbSvc.sh @@ -1,4 +1,4 @@ -# Copyright (c) 2021, Oracle Corporation and/or its affiliates. +# Copyright (c) 2021, 2024, Oracle Corporation and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # Description: to create Load Balancer Service for the following targets. diff --git a/weblogic-azure-aks/src/main/arm/scripts/updateApplications.sh b/weblogic-azure-aks/src/main/arm/scripts/updateApplications.sh index 14aae3b5d..082b91899 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/updateApplications.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/updateApplications.sh @@ -1,4 +1,4 @@ -# Copyright (c) 2021, Oracle Corporation and/or its affiliates. +# Copyright (c) 2021, 2024, Oracle Corporation and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. echo "Script ${0} starts" diff --git a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep index da683f387..5945c548a 100644 --- a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep +++ b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep @@ -1,5 +1,5 @@ /* -* Copyright (c) 2021, Oracle Corporation and/or its affiliates. +* Copyright (c) 2021, 2024, Oracle Corporation and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. * * Terms: diff --git a/weblogic-azure-aks/src/main/bicep/modules/_azure-resoruces/_aks.bicep b/weblogic-azure-aks/src/main/bicep/modules/_azure-resoruces/_aks.bicep index eafa250a0..e9f7bae03 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_azure-resoruces/_aks.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_azure-resoruces/_aks.bicep @@ -1,4 +1,4 @@ -// Copyright (c) 2021, Oracle Corporation and/or its affiliates. +// Copyright (c) 2021, 2024, Oracle Corporation and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. @description('true to use resource or workspace permissions. false to require workspace permissions.') diff --git a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_hpa.bicep b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_hpa.bicep index 74cdc37a4..214756edc 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_hpa.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_hpa.bicep @@ -1,4 +1,4 @@ -// Copyright (c) 2022, Oracle Corporation and/or its affiliates. +// Copyright (c) 2024, Oracle Corporation and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. param aksClusterName string diff --git a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus_metrics.bicep b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus_metrics.bicep index 84e02e84f..5f9f93892 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus_metrics.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_prometheus_metrics.bicep @@ -1,4 +1,4 @@ -// Copyright (c) 2022, Oracle Corporation and/or its affiliates. +// Copyright (c) 2024, Oracle Corporation and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. param aksClusterName string diff --git a/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep b/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep index 957c4a9f3..dd178a25b 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_enableAutoScaling.bicep @@ -1,5 +1,5 @@ /* - Copyright (c) 2021, Oracle and/or its affiliates. + Copyright (c) 2024, Oracle and/or its affiliates. Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ diff --git a/weblogic-azure-aks/src/main/bicep/modules/_enablePromethuesKeda.bicep b/weblogic-azure-aks/src/main/bicep/modules/_enablePromethuesKeda.bicep index 65a5391cf..12c6b791d 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_enablePromethuesKeda.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_enablePromethuesKeda.bicep @@ -1,5 +1,5 @@ /* - Copyright (c) 2021, Oracle and/or its affiliates. + Copyright (c) 2024, Oracle and/or its affiliates. Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ param aksClusterName string diff --git a/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid-dev.bicep b/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid-dev.bicep index a4c35705c..98c1e07f4 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid-dev.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid-dev.bicep @@ -1,4 +1,4 @@ -// Copyright (c) 2021, Oracle Corporation and/or its affiliates. +// Copyright (c) 2021, 2024, Oracle Corporation and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. // Deployment for pids. diff --git a/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid.bicep b/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid.bicep index 32878e3c9..b86bae86f 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_pids/_pid.bicep @@ -1,4 +1,4 @@ -// Copyright (c) 2021, Oracle Corporation and/or its affiliates. +// Copyright (c) 2021, 2024, Oracle Corporation and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. // Deployment for pids. diff --git a/weblogic-azure-aks/src/main/bicep/modules/setupWebLogicCluster.bicep b/weblogic-azure-aks/src/main/bicep/modules/setupWebLogicCluster.bicep index b20f47fde..959c7d7c2 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/setupWebLogicCluster.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/setupWebLogicCluster.bicep @@ -1,4 +1,4 @@ -// Copyright (c) 2021, Oracle Corporation and/or its affiliates. +// Copyright (c) 2021, 2024, Oracle Corporation and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. /* From 108830572bfcd7b411150a8affa6db610344e43a Mon Sep 17 00:00:00 2001 From: galiacheng Date: Thu, 28 Mar 2024 10:40:52 +0800 Subject: [PATCH 30/43] upload diagram --- .../diagrams/wls-aks-diagram-autoscaling.vsdx | Bin 0 -> 314674 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 weblogic-azure-aks/src/main/resources/diagrams/wls-aks-diagram-autoscaling.vsdx diff --git a/weblogic-azure-aks/src/main/resources/diagrams/wls-aks-diagram-autoscaling.vsdx b/weblogic-azure-aks/src/main/resources/diagrams/wls-aks-diagram-autoscaling.vsdx new file mode 100644 index 0000000000000000000000000000000000000000..34884ea41f636314096242369ecf5e4534f1c590 GIT binary patch literal 314674 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

?Dik2Tpw#5;_9_iQc&W8`H~ zLMtR~wE{r3JKjam=1WU;8tHm0vPBgD2l!a0KFeag4P&krr-VcWk@MDb#4cfgS4fKW znF&P8*@0tBfJ#_in@4_cOU6j;_tA5CoDn4JIc$H@eGcHp9l(v?18!bq1!n*^Qgjl{ zw(c)451!6N{j=ngr)r5K+T0t>jr^CPa=}cZl3mr+Ta%f|g@J%{H-`L^tPAl5Jk8v75Myxv!aLUTW6&AIkw-w_hF9!SQc z)b&%%#L}-F*11oWdp+xYjKP|rM;2p3q7V)R(tHl2+5JAv0FISbdk9bKkociG<}4p$ zjb|7?-nbB#;UY*$nv2(X(!m|!K|V~bgRMjvGo}**+GX*_*a0;E>)n8&op_W2OLN?F z-nYnf$vo%TDMNDkZc3qI6^}xGzohxV4}wbT5)G26*lVT*I@dt$@qrw<1C$rU*hb6< zD$0>icOS%h8!m2t8=mk(y2>0U15Jp9%G9Qrf%0SDb=pO!1vZ`+ev!vVtxAV~9S?am z+A+i)OrQBv%Pguslc&1t1drFR< zf81+hE8=endQe5NiC0An&x3LeG&M4huRk3n!rEh*;nVl*%W@BT7F$LSpf3;UbS)~3 zafhohO!z~MXk$zQOPl$+09GxsRqvh48c+!QSgy=E9C=Z^-ic34lV~xOjwWd1ACN-g zAkgKf**)=!lSaKCDdWlM*sGIIpG}SOW>AGdNzb3S**+aok@8!QyVnU?cU2Vud~pJP z9ERdZpj3iB3bLTJR*OdU<~>iLD}2FT!=T0WPsmQ#4e@TNC+xn9z)~(kONq1#0XTo0 z$=*dP0I=iA{)>*_ou3Re$Q>1>T*S$Z%R*}ONFOANyV5m8WK!f1A5eOH$RelD>I$9E z;|qKs6<`tfXt{XK!bsc9<@Ys3;FPsmjXK=phm78PulZ4Iq29b>@s&dps$+`%kt-NN zyU9f(vY3%q{{p#-=g5sWSqNJ0Xd#P`&cc>`0n>r}mSrbB%>tQE%C14?!Oy%u2+9Sd z%S&Q@%cI&pzgKgB-`KBcDX=nvPW*;M^MK>mKRz_Ezf%#!AHJlJe?JwvBGCiwz&V$`megUSB*Po&6JAvIYRN=@#!7yL0gl% z5Luu!l^y38R^IP_qQ~Ps69hT|aG`baJ1_I=-aXIZ{ChS-fqvi^IQ32|NJmS2l6cUy ze5&l8RgG&JMyP83Z4fCn!zd-XbM`#QkbeNbTzD!{5Xk881aZheJR2)6!un(Xq-}fH zJoz7{mRR=fBe^6?-AP7j233k!SH|=zJ4a$TL&59|A&ewh5%-hs!;GC0R?olGQX&UX z%ZZ4{H>ik038i{?{Cw=aWtPMO(x4tDiV?ON>Sols5xdQvu}gK?4G{Ltv2IbL38b!jLF8mc=$bY_~{VLlf>`2i^IG z1$`_+7NZl$c&nz7o;qO=SKo1JaMLSNnUxGEcPgY!pC%Hh2ud0@m{Q#wMtGvK9*MYIkUt6V|_>GDT@7dw9+JS5=yESDOVM;TNFm5-l&B?P(KI9jUrBV!VGgtfU6M<f5cv!dNkMC(l;BFL?(>}YIVojepig1i_!ID^Xxz2~MpL;Y zOV6zv&XEL>9hs_;@n^pAuJufiRnTYvHzCNclij)w?WvGN5rI}`*8u{LB`|aTm?}gi zPer<}yfRBVYHko@XHmAS&?e3=>$nD;@gd0RQHw^pD=oy>mJ<%joxD5cQ)bd;WX zML5Dh$7!1(8QuEOslAF$WfmD)I7aBp1}y2em#H?P1C2N1--sNzy+iW0^g-@;w(V<< zE7+!>?J_{t={w$e*-zhhv4D!%-}fX2P!n2Obaf3kbHrUn)`s4!etw<(#`el(GBgN1 z8eeT(H}@k__PdJv&b8$BzN&xkjFf##ndEV1PrI?D9g+!EDIKP3ytTpvtmEm#039vE z=>Ftexe@i^DC1O=yyCkjK_<}H4=3R|SyN_3->#IaD*>-h;5pC3P2L-R;=}NATGZET zkqj+~zPx6P1hSyxeWW~v;$Z|zLK1O@c4IqLG}Pm{nF9ERR^&*yIIF6VvyRlo7}CZC zaq-coRjM%s?+P;1H`&pqTVS78Wk*Krz3L09o;JqQ1>Di(OQ8@pKL*9y`^NXLjx6`N z09U!n^w9K6f+fn43e85|Y<f03;GMtmLBj$@DF{;AQ5+cr8kh{l%YEUe&{n9n^K}TGp zWl)wmkG12R@8Ik-PU|yN>ED?wzmE!NGaoi4Kv2KC`A$I4$uQ)e0}-WA=am-A_5yWk8n4MzY2s@!7xZ+x}?h46+>sdfSM3HK`dE_J+p@J-%7feyFsM zGZMUSVf4EIKY$D!2#?MD<@d@^K*pa6W_X-ju0}W!dwjcIUaM3{zY{twspheKIpf*# z_Dm>08dbW+vD@9wnNB{AkguVnI<08eJUT+dgkC{xGJgeXSlMz*^vL}f#v4y@sYh41 zQ;HtN-xwWkF3gk2N2c*&*YxB-O^a7hnE|3@<<;;V%OF8q?`*G@tMJYovcPL`a&@w* zP!H0s`>ylsF$@`cc_WKNiQf2-t4hu5)~Dk`D%Is9;kr@>qv|WJY88(ZZ4=3kaLXe% z#wl5#wG)@ubCXq6A3CT>;7U=p97toIILh!GT&z`5Fo_?&_%H&m_$iTOr3B+q?`P9y z!;Q{G+=9Kp9{NbfoO-P8E?QILa|{H;AMnJQ=~_idI){g~INNkb(PUS)0wImprYAZ# z3lkv&Nz3x4-kz8dOf6u+D?_{Tx;>09f|s}Y4Vs!-r$X-47tSs<&HVdbhsTFIBPSN}A_BlnyctU23Tk3*P2l1loI?M4i!mY~j0_a08tz zhFj^r%SS6+u<)FC$`Yt*Rm&t_0+sa8)uJJ}6m+kwJM=hquAH-+hh#K=OtYLy>B~+) zjc9Rkvh}bHK545{+FP|c*|1>AH~{NxUp?m@Nqs=_djG@CqhslYIL%*WCARBI zfhZ`q1_fMsCf9f*i{utrz(Ma5+w2!(UO`M;yCL9R@9hLe=cd`~<>kxc1ga^j#}(CC z$EFTY-J|`9l!05eUZ!R{sea=`p>_9D!gXMUdnci^Er7= zb2c@xc4O*xlcF=}#g4c1OYzD#a3Fs#>4l5EL$!?RcSFv+BE`p#lolr{M1L`K{-~-T zQ~!<{fO3TUS#^cB^u;IhpFA?^-YX^@-cRcCB?y-f$hzkgRlhtnEHS<6vab5B%^eav z(dnmbvA*2pKFjS-dm@2_g(fZ5L;UotR+)8rHsq@vXE#1MpY8HhF^8gVNXEva!^gqj zFOS<9FJO`-Vu*Rd;nYJ9OXc$YUmyv)e-VO1K+K+WEE$d1cs>#oq3ezAN0W@V@wtNe zqg#$d#p~5~vd=F*+jg=9>`J}IqH@ggmrpzh#F2tI6Kp$E+#n6!8m&2^(Q5>Cts6~1 zRziy~pX|J?8W692hdfcZNwe3+SqWjrkP7WX)(>S5EH?EheV#5Z89MCIs?7GZ<_l55 z1-M&L>-Jy^y4^)h-tKNzNFSDq-<)>8~3b3vUaOMssz_XPWe`zO- zAu#(bSAX2co8{)WdnwIPJ5pZbAP*^_pE%5@xz)LnGeOvrTmjXRcwxU*^U26X^TkD+ z%UE0Ax*z6pl5H|=8#O^K%x9h)WdS@^Zw^>&3HH$Tv;c1J2KyMa!U&N`WZz3_^lE7%I2|r=q{mj zZr?jI`gvI=%zVK!MSsy*WGJ+V!LYwH8swxQYDMa_tGKnplDgI>CuCQt^pHR(qz$rP zC+#E^9?LyUtp`l?-{UP~R+L-KZnfOOKfFO|78NlXZM+Z*bI_pJ_S9om<){$!AmlY9 zk5|v*J`$DuD0N?C|78eUP@QSWL@9YD(Lr&5G;P)9F;uRs6s{o|48OKT$=CwS$)Q7+ z*7nMm87M*yL8r7RqQNvhcq`70Q(u`jJ$buc6toKhK^@X*)tn=b8Go_+Ova^n0sig$ zV=FJ<>G3jru>~@u5Ekzt>lN#i;d17Mk8`zc1;|3y)*doz@p8RImA~Fe5L(uXy(cxx z9{^4Eiqp07`R@C?(PER|}xyK`sbzCzE+*w~0;jZ&BHe1>=L6x{# z1oW3f!eQ9JI*NW&RqGz+yuzF{wl%EzpFb8KJp8;}ZcfCnZvz=NDgV^gM+p zccYqnj~|h=e5-erP@vJixR?WqAo+wZ!GlzE73JBy{UmLts7VNXUd@U%! zB52nC;?f|*SNX>=hChCJ{ps@))s~67v)fz1d1Ls<@{eiYgLb$64fF5PKAQb>R$IY& zV13{XOm$fmG4nTIX^uwTr<3AnUQLrNYibw~n2s!kd(U+dL#6`a0hW+o#n>|1h%%|` zo9qz{<@;}OlZv3Rq9-z_ipt_BuCl6jt_jq;ZbBn@)nzZ&=J@G0YC^bSqkH=ozJy5Q znq-2|$q%{}PbS9XSSH8uR`?wlKMeADYktkrO6>V;JF)n8qNhd(V{Mtas1*b-U`eI% ziK%g7!s;k7(%%nei(SYPXRlx+8|<>iW7^S2#j+S@1ZfU;AS=Z3AGZsu?TS2pZi`z4 z`cjScY>=TY{CW8$*+f}q_JAskV#rm9&=YLO6Qor2O=2tbefHKS-CMEc^VEa&6u)o| zl{k`f?#%P~4(!-8Y@YNEo;NYYSNI&GaYPsKxFmbRVSl$BxCtrNq_{}H{v3lMP8ivj z7>tHuYIKRX@*dX@D0-$KwII40wZcI@-Gn`ynLD#i_nYv%qEnKVSRv726U_bBgE$lT zzD9Q=mhEcFk8->%406d*0DdK`g|kTG<>j;46ZhQ5q&hSH_dsC2-V*$b16t2?XV zA&z7`w#J**MOjNzQN9#L-x8`1Yy(NZj1J5K9QC;^L=jpZTa0%!6qy0)*0s>dSb{zV zz2Zq5lGDOeGO96W&_4blrO8NWiCR|J@NkulK-|v{IinUt;ps4YJ&rh%L4`r|lN~Fc z<%W6&;^(|`tC?#0+ zmEzbl^~*@}yx}zqKeOjT=IX?5Z*aEi5z_NnBf^w$B|RXdBzEYl#jrqSUo$p!?GgpJ ziIfV22NX^BOn@un!L+L6&BPxCcg3$YQU;-a6)By7Ajk9yVt0%3*^LyeL;`_Xps{MrvsUv9JLu z&zNY+v*=&IP2MoOt0#HVgJcIYAP?1kBwMy0l9=cohT=Bgl%1vpCpoOqRUFf4jgTa) zX3WJxzIgCRNzBkon3sktJ2QO3G`#sH1+|w*?A&sb}^F`{+=yv`5^Dgz#meUWOr#of zQ^`o$*-u}b+mWbuYN-B6x!ahWUz2hsAqVrzN7NtakaJ9u5at8({@v46d~>K|<99os zV$uyYpC~6pu(&2G&>=}i3j+6&uHj><($^D<+z94PCuKy!!6c%ivHwaEdG4mtEcqAZ zb%zChUOPx1z*R;8KaJ_s8L#yOz6uN|BT3^md1?88V+(}hlAe^FFZyMRUMggV&%sKS zVv3KKl@uzMPtAeRtxK?FG-4M1{G z60?AtQ$LGf7yb1(!i!OTVQ`-V0|VU>D6V6JrBWscFC3z_LjHW;Op}X%2s+MD;{@c+ zdtkZ0<8~jw*LhZ+8S#rr({AOX@eL#a0F87MQ%y*^H#*7vaC{d$ia>n9fe%QOfA9Bq zMgSbn13dvz&{x}$qPY~J=q`&mD<~+C&lJn7>c>b%^UQ)|di{i}s!_T`>#F!C=g8kD z-xwMMt9RPmP)=cEKdH?>^rpN@s$?s|Ywp>8y)bcuhzDg=Oib=* zZ$=%w9MK}4!dnPpy)i;{Ehrmyl%{f9f17dsZ9b_Gasd+fWvC3fovzC>+~i_6qESj8 zrYQz&8qLeay%IL+ric<9ISOvqEz)|vLRbw0dr2pYiLhrqyc}!uxs8bCVGzYq=Ei5c z^Suac6tRos%o3TVx=1-en@Y7!xO(fAf}LPp{SK>=8=}7>k#rtBMsV38#z0u}B~<8Y zjZ>Q#xb20=xl%0=Vufkj-Abr)0_x|TL&Ut1xUkO^G~FCSw39W1YpXy(`I53W=F0BO zrZ%5OvRkFUohj8x=A6*1^;y8x`i@0@`Y;ju$xabn*UL6m^E)RcS4aXsNjyGgNV0cY zJ~oB7fO$sI=*HCjG8EV34)aIV83zGv@ucznP1%mXs2Hg+s3NpvF5q(}5|LsW zR{2r_YxeCVT)D3Ur!CyB8-ER3@<>P-hm;As<{{pv5MgV_Fm;%8%SFsGl4@vt4oM_+ zK3bB@;oyn}HO{@B)IV!3vj(nEAtx>a$>E^Bd(;Z>_YzNe$G@=(yU7oQ#1&K&vQWFE zs)lK;Lp5lVCF*6noESTeuSfe86Zeu^n+Iq%s((Kkq@O(;rbj~Vd z6E}gpq-C-phLKVK8BtHA#!Z6e7D)rnEPGrI%{l+fT-Y9>y|2Q3DiXPHB37Lg6Qpiu z8LNK2X1##if9mFI61KBzLju9uMpPCQAET@ zrE`kVI`k{aKoXD^)b<)qs?!vw`b#6W?N>?mbr* zUQ@O6b7V>{%;zLNiCALSoI z>EIJBG}F-S;_LioHV(eUZ&lP0k?SL|_>&M0uyR>UobkPKY!Q~K6-qx4jCUNtz|9_p zfyE52;A#x3a0ll#te5kFv%f2xW)8PpoN1EBdNT;V`%Q=JX65V`%yAFj8J4`)_&cao z#>Q-8+0b-AaW-lQ|MwIZ9t&6-d9XHgU~T08X(N6L(pNpfl>dGXCSzDpffEl$E(lpY zvr%OK(q#Pb6`A!{CKkSA8d0erHFBxoo!DO<5S|Ovu$mL|qa#_SSKz0njHCDmZKBk= zJ`9CkstQ^K46hGpv_ELBOStpv{}aJP{<|B?3yQqhKO{on*|hQui&tj+0*t zx1%R-jK+HMmGhW_vMl0o(b4Z5eEVAiYRB~31oCuU4!d;SW$7YIbVb^Ou<_9jr;dv) zLoTTq?v5@>LPm)}2;x`bT^Uz3`99f4Iyaixl9EM&YB72Pm%iW%m*53LOgOd772{-< zSm_D!2<1^|n(XJbwr#u~9*ke;s}_(2(Z!CNN0Y(Uc%l&KPgY&cy;@_?)q!*|y{$ET zL1J$0V&fA1qTbQhTd8fANsUa^T*F5p@77KL&cA8#(j;N=QuA#2zZB#Gv%@KW4F}t(_Hv|C4f3<7 z)}}%idQHE_w1(Rdb(bkWb18yN0UvA%rC?J?2b)6aKT`nn`<=Fey$^7`NbN&Hy-5qhouW)QAOG8d~*P_-9*h8?DG z74%!VeY6kQ@+NHT2sewkqgV;0%EaInFQND^hU4N&8x2MZTjlZP>?&n&`qjYcSIb?^ z|DPJTS+F!+;(h~j2Q`oVTxC2lgt-fp=i(}%BT}cITFv{pL`M_ga1$3U3pRahNHiD9q)L-QAc%j@W>AUuQx-g?AYVIjp%|}< z;|Qv1L9%esYBlc2#%~S-1tnW?lONi#BuN(;m1|KBwd_;y>}&bWH~f}Jv|P)0w;sN zZpxaIuw8NCa;w?&Zq3Tf0D7k#omA-^Hl3y`;CtAOS&Ug9XhOLTw&L+>< z!EIm*2|5k>2M}ML`4CN4$Ey>%!r$LjJ?9r%RZothP%k)3$iswGxSCUp8wgNJ+U&3kEZXUZ2i|FO@6cHtR6z0@nON9v<`mr7 z_~sqrVW2*6zFEQfPTz|7C)=NjiUN(EmPCzt`@~XuM6EJ9_Ubs`MZg{(8svNna=fYk z-?G8NcaN02W7%Lm{ND=+C>wY(LGD0R)W^yA6=1Q!QId9aQeJr`!sDp+H-O8tpW;F_ zCSc}!^F4R}x^@V72{a!6Z_fgKeYc@LiT!YYC;zY-a%dbGI3AS)Wr=$bR?VEQY~5n^eR=Dw2-tYXlA9t04c^MGCL!J3V7ZEk@_mZfwn z_p|9Jns4`zQOu=a&&JG~@hGd9Nj-FL1D_i-mUYnilT{B~_wxe9|13Me)<-BKsa4|l z7EI|grSuMI@XTI`hq!Z_@D!haVPi{T$Lo3E>mx_x)8ESv|T-iWdqqjWfY(0=ZBN2f&FV9ydHyZ zAGMsgM`ZqO{xUO*oce362m+R)%-m|(4H!TSd+AtGu;>vpsckWnhOg_ke(#R2w9(`* z9gWT@VXjXwC)(xSmG@6dz39&$@{i91=9}MESv(c~mccNiwB387G(N6IQy~aRoMSiW z(g1z{+Y6pg7nXt;UB9tK!;O_DxL9fmX})HeQTH8NIUNppmq&FVIRYWX=I^6~csT*o zyeYdQ8?B-$gn>@$Oa;6xOyw(aZr1P$AxKM7D1LM^JSL@ez(k z7CJ2ADbOP;iW!qW2puJz&Un;N7Y@>m9hHq%6jFW_Q4?OBBsG2*$-I9_C^BV(r?e?G z9#hQx_CXvw)DW9@N_rv(9fg2$8)m^gRQ1CLU(TYa&*B?A zjC3LiM=kVYuGaC17em%+GuD$RMv^~czOkl!&375#GzKW?4P-Q`9h53qp8!T3JF(r4I43DR8)tE^Eh?0M+cK}7}&lh)=GJ1oNQJU0&%B)h>%FI zhNBvgFz`UIl_ohyw41D*6j>%V7d*_cO0`!BO3T<~D<;Fow$m4W>yRoAbo|Ie(=6rr z`8wwYI_&2lmttf(YdV}F4l6b2UjSN@2L2JLvVsNhWXJUeW_e7yIpF%D#OX*T0KG)WI;7{Wnb6@>DPP_OI2R3rx2pE00u*0M@Ze zYzL@0YVjZXpOhjCSzWQUIVekPeL~lXaacjLHO}79t{VSU8K8Na*Ze(8uh{z@toFRZ zHh$gh1=2VE-TTv%}ku%&?M1|^-&&=Id4?jK#u+BA-W*DmpFt^P9n^PKf_GXQb$JV$MTWi4d6 zYW~vO_4z^T!6?p9Sn&Pa_Rhb#`+aH zVyB4mR4E@xs20_n=2JiT^mx!v{^5~nH#1B>D^$%B5F zbn^}Ja6F#|@ghFdMdMZifEQC=VcVs88tRzQo;{x!%%^V^DM=N*@Hgl_sM(_sJ~S7o z4-iLx$00ltJnPkHMP`=d%8M~m_HwKcTC|?*5>@#^{r2Hht>oRsn}6yw+c|%_A^BlV zo@}yO)v=e=fizt&gct%vb&450Z&lV-X_E9a3RWZK;o9(4?Q!|&3@o?HMtG|e%g=$y zI2%BBJQ}lFyEeWbr(ek=OjxqQy;PM$1V0zF?m~lO>E!?%NXG4dAl&CX>E&#lAnqLl zryK!lPX|?9*2>Bmvc~Tb5?y72AtVyE0~nf%tY05_>^8-Vy+>EIUcqD-b4Q0}eB$>@ zbUK9i7cvyz{C-=sG+#VF>*A$ac&{%zsZ_6^*z1orj;1!zW#LzdbXqSEr4aq(szTd% zTMNh3Y366T@uKO$ugu+a$Eu`Vqs!p1Vx99j0Q-uuV2Snx&+<82tB8Ytj{Tz4Z29&r z2s^&CiadZ6auC5bvx1#MpW^E=G2|W%p$d7|cb4>{kTxzb=A~01&UOjVxfJBBC(avE zK^uhb#{XDzRP2(n<$_iKklsI94q{J#kfbVT1FU6eO~mAg3zpdp2W59nnhe+sCE^_k zjzi;nlL@Eak;99I7*F5xUKN^57ojRXkf*DRKIs&ifLQBe;9NEF@KS*JjpgYW+-dXK zaW4TOml2iqC6%*wh&j(c#lc!9I!WLdx)Mxe_%4?sLh&WKl3A0&+#oy)VL*xt;T!li z`#l<`2pS|uz(}n|EMOy9_Rvn9(pB;i@2$vQp7OZ{Dc?zg@u>wfPgsR@AUGQIgFJyl zD6Vru=&#Hthgi2hm1}2ncD%TgnrMC0(+ZpEDXJ`G#8hD=2|3zb@G5r6L_Lz3@cV+p zkkjZ9dJEvGkUPfm(@ljy2vek$jmKaP$;zl}&a78!Tk3r6E6AjJQ8-8R}5VM%Ol6y!)vEN++%hAudgn{3i60UEpo{;&R7 zk5%DIz0oIW4<0ojR}4M|yKy>_YM$I7ASqO=`RKiq=eokA7uBZ!y6M{>JcL7@KMHE+ z8ikxePuKgKSYxmntcxMW!W6BvzrV&pDnDU42Z7l)CQ=AacfS`IPh;@H`(ssx{^K;$ znVjdx9m|QwY3zK1v=@ZL^#Hsp=>dc_`s6hQI3MsU+Q5~{yKfukT^_7R)L#q8tcqHB zxegy!;d_bY4o{YXj;06?FR=IcMgqMU^a8!x`QmSTv$w+0{;!*DWXpi7+M_}O9MCo` z(;9omWN7>2EPQ@fOsaK7LV=tmD`NRjD+3?G2oXSzCA|0P;OyGZa$V(oxdaWGl0I{>iv7gVsK z_bCWoBJ-69dLdp=#yIQ9ju^k{XvTC$_cAz zk|P;=PUG^F=KiA@_sC_OElMMwIP8S@%Cv@%^{=@UPW?AH8KffySGnNu{t|diyQb;h zeaK<;TjTWt+BlAPggvSe&Yb5EL%rd#w$Smuww!DCd)eU1lxTYX z4EAyWO8-AEAO0^dhu`%TzfxI{#$FYlp3M1&vQp#>h@;ZUJ&;M|FgV+ZLeJz>!2$33MUGWRZ>!+*uU_LZI2=8+pxS z3Z1#FDNYwYcv`(P=Rbq8;rV_Nz_^rx1&?(h1-p27pRf4$ALdO|R>6DWbX^TGirXr4 zLz|7r3ksMk_WbkT@ut88A?1zGI_ug511IiYfD=X1g^u|Avmiw@XCQ_o9 zzzXt}1|zlI_Dz8otQHr)(_ysAQVoG_=D>xSWMLN@3X~4+TUt4fyhhfVUKjH z@eaXCn{>+a3#26J`xasPBn2y@-1QCr$VI*^+>Ly4-vXn^Fq&TcOz5L7_!LTtHDA_a zG1S1Y-hb4c%Vy*zOt4G$tTr(=aiC7BzT#H8g~5>VPDVE|ty;;s^2e7; zI2!^ax>epHY!Zk*DrUeRE|G)(LIElt@H!TXDTkmc-m%80jG7P>4VRYJbKnja0I3`q zr~9TFi4CYDz-y5**(orlh?phwH9e%ZwL@~UNH8MtdO*tnToKI`!NBSJU&jAg(6UFc zZnY_SzM}|>RmRT;tqA+pO$Uzy$_MoGojF}rzp@{{&O!fS43LHWEW zWS8@3JI6Mm-VCyEvAfUlv$W|mj#K<_8_|-f%1`~9ghyeWQn~Qgk96>AArMZ92W_!% zU0fGC$*s|(gIlx*-JnqZXjPX+ghmgzrWO?uh+8?xEK22$PBW*fLNUJ3Y^ew|^ zl>&GRWQ*_!614}L?4Vi|^&6bn7Uh^T5sH`HN*}!wo)F*`>()|QE-^adeAEWbCeI(@ zz-+}}2GJ+7@Zjgxa!#|}=-oFnQQ_47aUxz)odLmKlUv_}R%yOELKv@T>JbOdgK87_ zvMz&r)LS%gi&(pEL0Q?$_G}|9TD)2D$M65uR3{+p{r$Us_tv{d5V%3!($9JJ?a}ff z&*4?C>@J|^`)|24d5J#7@*d~7(r;{QP%id7(r^0l@`wxVwV1zt@ASous#HK)p4BkV zVL$Nf9!<||!^{$c?B`YLNb%F8Qv1cB?V=vvWqF0Svs>=_&h$h*!@AkW63X>)vKOU6 z>DL5N^%~aHpyOaCk>DHXDgUPFc}_0<8J_=i(^-5?aQe8Ub;Nc0sYt27#=SjPD$c+8 zrSARuZ0KmxnYLL{q-N>(y5&u0!D`!{g?srb{=3MkqtLyPflP z)?M-Pd4#8)Y9V6zn!Cp~7~uFr>;E>@Riym%`(^2R_X2E;$| zC_yw1h2!wd+Y_EkVFB3`USdgo_9o@PHT`RwR9xTmX zuodn=tAUb!iekdFf~(a%x-@hV>~frD_kpkGupA8P_?M((QS;I9WcgVa$#~@6oL-5dYkT+bcc>aS$cKnD z$GEppR*Ui#kCjifUn36a=vh09;&rrbbTyvL+k33i&<~u{2OE z=c14^h=%oOK&mWw+&vw3_*%huG91Y-&L@QBJS%#e!MGI!b*n;&%L-l>#J%UuAo8VHlHziTDy`@!)WabO4w}BI5T!+~`?|SC> zvT8LVqe4a+@P6Az^-S*c-sqqTry%;1A@h2y%u|S8`f@Pmc=m?t`2>Uz{R;w{TXIEo z(0$JMp7U}cZk9CZL_}+O{o!L(;&~p?;DUUtlA6I%yU9Z7hmcf!*G>Ibr!yLj_Na98{AhlsH8NT|97uc z9KqjSsXE+#{f-Xaj`yC2)q(wUE2}Wfo08fdmz5UuG)qVJi5#6P{4uVH9AM%)d%)ee zWxLr#gU(fx<*P`{#%yUJ{ObWK_7ldTa=YmIIkJHc(m~<=j>J(VQMRYXl7gN+L+O5m z24_K5c%J9Z1pS13$w*(J)im>+*YSykr>X5h+}o{?{GT$uYfufPq(rnpfQm*;;hpkM z(YE*%?}<~y=WOGnyJ_a%mv>$=p^h7?UNU;MkK;LqOr9OYD46z5%PAJe@s?Id=HDAP zY^Z*Mq!QCfsG}ULvJRC=jAcHakvki5O5}$sdSi6a;`r?wv{Z`}=O_vAfyby!6rh43 zJ}yrze;LM+`WBs))Y`MiKMxyxz?dv7DG=QxE}O>5?x}0lK02F)gfUjG8^LOciLm!A ziP=;VYGA(BG)@)!tFpFBBNZWGO8M@)7@3CVCPo}{B93fp8YZm{Kn6QAC=>s1Sf-bh zBHrNbbHOl@q_HI5R~}%!8qHd2a%PSFpux%MF|F$D$0mQQR1+@Iu$`|6KB!_IVdUFB zo+DSy+=e7FY!({hfO!ycYV`7WfVrS>4i=1M0xRj-P@h4N#6ax( zZMasv(W?+Opbb_w1&5kBF)nZ^z6lm%G4e!xFrN~^MCWVt68iG?Suk&ZP2@6-*PV9W zp3MSJv%AJc1nrxu$^*@twGsIak0x8s5!zW{U?@e-cYiVf>?e#q>okLWOk?C)&a*+8 zXH2b|u{3^h?QI#6M|{tX{o=D|A*lxWEFdw5#OZ3(uUxOGVUc}<xuZ;zARKKEAyAZe?IW!PSUxCw{O)2YYn09m8H>RMx_spyL?z^NP?et=j*kOk&Z!y4uWrqSIC2H!xyDg z>7eD9Hif6t&T*{K``LbPSCC;rCIqJF%oNn>dNHttp^GG6O5U@qe?*&dp*GI+z##b- z*{0&j&(EKWTv*^v5*P0N)qRwyDLl+mnH@L-_VY&?O?#>{_(JEoc1^i>rll?iDh}>yT*7y^*D6j-k}Y zHVh=8I4)Txe1%9%qy&`Lpc9IS7PAL%EkD;{mwmh^Lq*VOf%}m97ceZ3VwYn_2OnOz|72 zBwr_Kc-ACV?5{o6I*ACJdlVceZ}*e%woh&OPZ=yEGupWrk~3`)!DH0v(c5U9f6ly@Je^JTChK4 z>(ed#_WAzN`_BJ35jw_|GYMzUW{yF|4j=qdx;)<39zaD9A&K<}2pYZ;YR{Zf#@#CJ zOTk6}9a|(YL;QK}ppFO;C7aQNS>iYWn?y1}UkE97G1SuWF43%CCJv+O_mnu5zV$u9 z!l1=)d{uzZc6O~wyrDhIvYvJ|%a8cn_hVbv?y}4zL}Oy5F!Ra`2jmI}JuH2q&%dKN zq!=ZlV7(`b)R@d8qIeI^NOF+n@aUdnd248(ie|)Ppro`xD>Q0@#kU(6AA$X~qqBKd zI#R001q;>B(+4N3r)&a3SGDtIZ7>uHzMlEn1|$;tBtnl1Y*^ks>NjqJFV`dInp8q@ zhS~bL*|pPghP5?+x`ho$x;OR7{NndVZC@Q9ZU&|$sSZX|%Kt>=)JLTwNBKuzzEzM5`FRz4Zv z97oe}(yM89TY(`#4n=ahFyQZIk!2Sp*e6}qV@X#xuOT9aj}hFWI!3bDJ>v$=e8GT9 zc;E|xIQ-i$3>`yJ`lGZkCn&=3mmdm+cp&c|YctkR^lQ%#*K+J9*J{mAXG)TGmf{N4 z_!J2d!HAEw z|AwMlSt_eD(<+DYBLw0Fzogo1af`Sb2Utw9wI%7U%6e1wX6ODp;EpNNiL+;+PbJBZ zwfxdUiSGI+;c#0@^X0Xb4-gT{5-8qa?O!r2FZ&_n0G*=4J*O^kb2iN~=fZh9s^eHr zx2&3iU>cKO5i3$~`@Nq0n{hW2l4MffGYCPgTi`?$(r;uaa5PqmYs(xpo3FoM9g&5q zoNX0KuuvYWt&_bgk48r+lrRK{XrV6kLX{4A%-~^*yx}ui9sG#Cn*t#qKB~Mo>943BUhr{M&~gKj~LG+ORcsiLxy8VvBIV8f}_AH zuZx$*{Zp9=DM|Im)~dVnB=CP2UQKtR$YKJSp*R`tGZ;l(!HAXSykn=IzLrzFpM15p zO&JJ`A{O+Txuizm94h8a)dgU|e7QiUX_;6sGaHI*6MZEHMg)+n%NJRk@LeV`=S39p zwG{31x^y3{#BFPJ|6WzXyDD}4T<+IDXsPj}nBMiNK2V0NmNeVJe^ZBDq(T~-Xb37r z&A2zP8M<_ik}7B>3gy78pQP-(n7otkgBha&$_9#9kPa$Fh&b9;Jp_)*ap+W9W#x^g zi*ncw6dK;_y=~&zus&M!#UZ!VY4ujC4Cacb#%ihz8cPKR`Ai36rz>4 z4N;11GZ{@>#WP!stkN%+AI?5#1teu{n&GRZg4iWSKCG})S*#xj&(*o30tvIjoG_!X3YU<146im!e zW(_CehAnE2d3Ru@byVofE%l?Mc7${m%JWH;_Y8rMy*lFX0msL}ZMu+lr&h z_1dT@)UA?HC3a!H)c>NJPGdEFkv=g;07Qifft=;iCSU0>+Pj8!#j_cCaeIwu{ z3Yys~1j8DGjyd=j9n4WGz^n}e=+jU-kCmOI8x^GaAyV#Z@8ga}iivuP5$J|L{CKy*y6_na)I12}gKUnF{6x)7c3u|!m6$ptu zShQi`B)LYKpRgK;OYz&8I-6kXqJhkiL;R3^Ve9nJT6lFFb_g3Eu9NiMY>a;B21_W2 zVgV&hn?zW+cBLnA3rN^ZKPHN*ri|lHWH<^|ZIp10lo`;7Jh3i6Lf#wonllz#Xc$AE z#dC)y7)uu@a8cH-iO4I7R_HF^R|JfU(8}Hb>y>0bj&!pxj4X&bDR$av0A9aa!3e+% z-fJR6fy#rLfhm47#of@5>i z@nt=?&UmCf>zq?DX3THWss)s0iPFsjf6Qb&cE+-Fbjr$2%UMT>6ga*l8$W$z%{ZT> z$f&(0`{M2Oc=F=SA(Q`>OF5%`ZrlCE)pjXi;hS*Cnx}sAb24xGOjO&@B#Bi1+uMH6 zr{%P&%QK0j)MmyD#;=$yk5ZT0DEeYs!n6xtP zn3B(bj1fnG)jR!gA4U>yI$ET7oDn#gqtSU$Fjj#DjDrcoOm+16vQmRoDztz@|H_hN2<-FIBKL77ukte0FzZcNHeWLn|Gxc;Z&*NR_{*=>pC&=%}VnUaf zyk%dDlb+-sQ>m43v*52MEG5uP@-Y%k5aRdonRlnO@oZ7_!?T5v`V0Z`8Q{;0!DflV z`Sg~$JT+?P6MuVHYN1znwTA)GUNziURnCi~>sjc-~)(4eU2D%X3bUOqAOkXvWU#Txn!h5f01hE-`tAwdQ9ZDl=}# zGE6el#m}fseGPg$(z~BV4xiKeI_a}y@ZwMm-lk2PG;n0{bkiOGj+=a%9vXv)-!!{n zUvaiukgF=aRrlDG)Nd3A=K&jxYf}4B9c&`X#1V6978kwdVS+PkbM`xr5}QuH5Hut) zke!3mu9Ep(GpFoXUxf%JBM#jVG@`#KHxhicoZkoLx;hti72>-gBE^r>%gt1zK?%yH zy-MOXF7El(&+~IzrW9gM`7wg3i`MAJu_+iN2+6|~kTg%}#IeI%1_~t+hV0~v1`AsO zhEMXrKl6yiEKe37!to~^HgBir_Ut`sS4s<(2wg;^1Ts8TKNni?C*=v~p`>S_>) zqq43r+T`=3eIeRdO$AR;$Zm+iDx`dH03;9{dm_FvBX?FaP*h(;g##^PdiD2Zy=DCJ z329hyNT)jZ1+Yc}`>Ib)^b1e6cyQGd%w6=m(ST#|X#ONt?IdwTZs|+$oZ~UQc_BK(#W{OU`pg84J&LN1OUZi6you=kJA6=$K zNFwVxi>-64T7NPfQwV;#B`QM(jV@U~m-5q<(i-dwZ1wp>9Lh!|rWVExSG)Y=#V zsi-1FOto874{*;sP+k^|TF_X;aLX|N_4sCMLT*InDgf2~B74jC@-ykK{RjB-#<7%z za`Z0o0en4z^VwM*(J!*XNPfRY6t;cqpP$aAhF6X)s((p$Vv?sBS8!E_F6Itk4?2bl zj5m~@Rh~r;694BdQOl+8HZUHa-AIFKf|ejp0;47Q#~AwPfD*9GP{0}3Kklj)4z>Zm zn@w_Haz^|{edk561W)6=D?gsfyh4?bXoy?C$>3ONRNQy$NPyI&MiHz2WbIH2vm)yT zXo;LDU7Pk;GosVupr(5V;Y}bvo;OgH{}F!ek6rqKK^02PAN}URTKL9|FCE)+sf>#{ z0cSwuF3h=-YFVMk9O^9wy~KR*!6&tvOytNnl7UQ=E4PNR<|G;OPYWZlHeG{-CWR={ z!)1!R{iD+UIC*};ml`cqs@Bz4Oli-0?aFc-ZP-lQl*>IV9#R701$MziM8>lOw=7E<)#XD> zn+n$KNr$)L_LF)W8~$&&dDX;7fwi2IRbHn;H*MaLq3=_3||BI{z(zY&*2ZgNWq$Bs_eibLl7d(^gT%)C-RrMD3yJ zQctIwK{6h3t&0hw0C$&lIRzp#^zSd`LzqjBn$n1e1Mhj=c9#z8<1O1r_agWw@H|7w zyZgkqb=FV^i(3$KPNmb6Zo&rTEw)7N)DoX)$9}(bqK-*iDXCG?&o*FRHrZfheV`}J zebe`0HpX?hOxLWpX(o!0j@^ZtA>Tub1RntKZ7mj;3egsq3W1bj0nwUaw9~K65%5UK zIdnnhCfvFs56Oge0D(0zj3SH#?N-u_1$1fD`1*D*4gLAinYr`x>V}!>iGNz>YBegI zTVo!P(2R%kd6pSue_GB%%n{AHoL7Cd{2p4*;;NdJ{ihJ0CjRcQ&@(y!4>C?Y7D`ef9egqwtl&ySvXfn_i_@f1Iq%nR%s7IQk0 z&CXDQni?2_J2o* z{QA3+sl^4aXgxAaPKV8$J1F1n+D<5&CodM{llK2ii5{pR|irtKOQ_^s1SuFlWy< zHBKk>KBfrcQCclum@fsQ@PO+c+?o00C9;%V{w*H8DyzpiME=vMX{E4ip~Gv|7f+&! zeY8~3>d%elR~aB!^6fZ^#B)=-a@Rb;Z>LENcF(snwO}TXB1g#879489d zF$X~?PJ%w);PykOL<}XnSM<*DyrG$J?RlH@6e=wiMa>fNV!IJKwQY*OaIJTm zN|Ai1syFrH{`t6kqJ91js2(TD^5ri#Jaj;~+jXaz?9nz{Y==RmolNUvy$?Mv!kny@ z-MKa`&IMK%P^_Hoh(QG){GMP}!l9Pm`4}WJb?S+MD!+#8_SpaEM6 zUndrbN*R@aQ99X`^dcOVORh^yp3`#M{0%|&{FNVKx6)!q8hVz;-ak6!sc#-d)kg%< z2IlPPCi7M}qIs4@^aq&`;PXMf3v4F}>7&`j2X07jfGX70PrCA_fOLc`gDu6Z`Lrh) zfY?X>xjK6y_arubK!eYCQ9gg=&K9I;t?=eF9(kBfG$vz)nv7UvpEaY#r`cVE zl;Ck_d1J>PDOXTuhciTQw9-)s-l3LQLQ(BVAuQb~+@at3$;mGg9nU`2kp-SZqrovm zuo>GgV%9pqM-QOWgca>9;fC+NY;+S#Z;ERkfpn@0m7pzFbd5W$NcS(zx!bc1v%fvy zTO-D;>WC7PLU1Fuv2wcLuS9)8F48c4gEe)(=h6`u6_PfG5Jv5Dz=T6*;<{)<5rX3e zSqvg!e<8}J6o$}bqL-$RR22G+CwzI?Pa?$y*=KQ&afEz@4402cVQ9){Vxlz zrXAklhMVpZKkK3_>R}4I%}G?7Ki$t=rXH&SyU;@MF0)UYYXE{=Beu?2w;b`7$DS-H z!B19nU}GZAr*;U3g4iBG$pX@;R@Nk&wF13Rf@Tcda(|JZpBcSLQ|4|8()+%jQw9vM*&O z|A56Rsck9hK=w-#ejlG!rG($P+N@~hWO*GcVeTgX-6BHn&WpD=dEFq^Snv8Xp>Zka zs;Aph>qZS@#8w{$TOkP_Y9RF>2+fwZ1cn5Vm=LWT=kZ5~zo~D{fEuEeQ^?7)(ypaR zpmOrHZ%%Hf_K35q`Nu5cVl#F}Go}O%$P`l{(1h{@cK-Q>R4d!c`A4ReqsJu8L9Hgj zy9VMKQ0JsEpF%C2#im+0A@e<~Gm19LW?DG~|4q>~;_UVu8UiAH(aNbhqI-@DVM+Pu zWI97}A#%#XlzEG(g zJ+@R%dBQRjXouzWkjh~bU(N%LEtSJ$Ra$-S(6`Rj+;&rCuF0vO+;6E2ZPg#Bxnq^e z;agXva_}}F)U5L_TM^IN>$5_;`@#x)`GI{hMfqz>lX=4X2$|ixo1pdQ^E{JsD7#f*;>q_7+fj`LlpgIVe`AUqH zReN`nrPocR1pZeDWS;(*=^UKAe);57r{f0xp!q?mNQDq9&?|`MLQkY}oX-+~*hQ9Y zu*g_w=I)thjy>(FapNK87O5Oiz`h6V#QdfcAa;aOIq{ghqyUMm@;tK`3aYTXCSmXL`;Ma zMEGEV7I)LT9U_snIE<2!H*bh$9ZOd3>f@Fm8IGO{8KSrz*xI4r?0|e<4CS z6*^ZE3`sDk7a}c-d*rbee=&-`I6k4Acw}-?9i{>JsZEkX`=C9)Ko%lGIpymr{zCl4 z?)?ReK3XpC+rF5*T~xWu#O0&QDM(CTK23SHL>-mb=n6o>0`oN6A0f#8e}L|?lNIY%cZ*z zr5tK+CB2aJV)y9Y9T^7B9ucowMc*AXA#OdT`5A*+?a!6 z>6-G*eF){mWAZ`uvwoX$cQY%=N-H4xNPU>fSQ#i9qzn_pp+1mDj)MRbFVG)WQ6xe+ zg*?lHkA8_z&X+Ef1B?g}<@=I^a;%vKt|kZHtQB@xC%03crNrb6;C4`fhL$g+-&KhJ zvKqyz(h-~7>!FkbilB1+TI)u=^_CngemB!0Jw$H08G(D8q+{70NGXSsUiqE~E2*kfy0&OZFctb(D46Fhukdfxg+qaex{qwrd_HWiwj)!PE^acYi`T zgHB$5{58^z{zMG@nY!aKY1SmzhOFST+2zf&iN3Z4=-=AEOm?61Ln4&Z#na?$37;iS#PfF^odXowPJz`5nRX~;X+(nU4(M_jI|z_P)?kV>MT?Mt^nY=;V6tB zwmXYWg>uyD&gjNMIiP8%%Kht6=OUCteVhp8%x4xC-U}D9^HL3pydBk=LMTW3`7g~h z8{J%>TE!Fe&tYAi)tO8Xd>j0w7J~ zN1;l=UhaF525(AOd_tR~& zVa0r~vd}1EI(0D}xSYy8w7srJET)r;$)04pJisg&Y%L2|@>y%YOfy4lca8Z3%t2!~ zP#b2nD4;YkzQUYZ4o-~|hLmEEs*S~TdP7P@OsB%AQ+qzzu$qYJJRGEIx18D>KxjWuP zccGz%l40hKT}&qd6H1Ay13rtsR*Xs6Wghlu2kN0O-7c0eZ{jp`Q|!*_t8~-VQW)V9 z9lN=;UBtz7SXAU5eEqcBqO~vp8@j=!!-7osAHuqw@|1;9l&WYWP9l@dW-331CR(71oRn@a#L&# zSUb3}5OBcGAajNdbVNc30^$xKl^usDl9Bp0yIm2}Df*Lp4jE&Gq_eAwk3Y>9)62Gz zLHo^jlS*B>_LHsZ%H>-${bTudB4Rr88H5|B=gaE>FgmtxcQNtU38Q0ol-I_xFR^l0 zAJkmKLRIFZPA}HV z=_Kd{jX0;Gz*-uHags!ViKF%e1Ds4sB_<6)j1)jCn8A!FfT$r>K^(z`9s>~+d{7vG zJ{yim@s6l?j2Wp>J7Xyx0|?_c;xP(GAsz#-L&5jpH7wMDdyKQ`;y)c32HHSl`U|)V zlYs9U7|_ITmq!pe9a^W8l9ZIBc3+ZW;cSH^_5zt}98{7zJ~FpD`KTxEh8wS%3B zV9#_f+P&<#ZV_8kun2vtic@;pSdtNyMk+ExrE@wH@9^oeU+l!%M_z z#TWAU>@KX`mJ?t?=UrA=US&~2HYxpW%b=DO&4Dp)vdD^>j^*S6 zfdys)fXY;HY5)nUszx9Rh(aej;i{FpU;wc5br7!9DjQf(Ca2^mNgR5vTc4AZ?zWwi zL)3ISH(5SW1u(9$EO7ZwtFKzW&Qn{#)pY%4#5(0MyrzbzQId(34W z6rHyjlV?qWZIlm0O~=9tQNegIxvhu+oP&Kny}X`1TP)@u+qa}}JMTFByYiFlg<%FP)W12^j+ z?de%ozsA8;YWK(%`q<;I?brKI(=lW6pT!=;*aMIg$7u9L$x09*svekp1$ACl7GeEB zI;GUmsvtGuO+kbz3=J+1L_Gc=Ai~lBK6tU4#mjpWXS=ZVO9K(Ir(GpNf;u0F3o$@7 z=r~e7{$OFw2M!{9H@{d1A_OD-xQ$U@xiPF7fy*BAzO>IpL4*m4pK+X|N$La0K#!u% z0@Me}s`5kuW}YnUoF2%%1(c#9lLS#3_z8xi=z*LC!H?nueQH0@iNcvhO{d;3Wj)4& zbs_9i9ABxXlLo++V-nkd`0~|s_E$#de(tQyI4V5M%Fe#%=ZJm|(3>PptzMcYh{}vf zm}L7p2m^FrLhwzYsz-e`i4{aYr%dPsM3v7Q2#8Abb9gdP6g$0!I2OU?u#j*km>l@` zG}Qg&ZaQ%QLr++S0_|9x=(OUBb0i&1=p@lBgL6+=^m7cx264-q6N8#WS@uJWaz`i^lfsGU=U8~V4K))~sZ*5G z!Te=P?3Wd*FGZ_X3A&INt$jDQ;!HzTTS)7uvl0^K zi++y4x9k|;FLT=lt2*~qr zN#Ktiflh)1{{Q&(`Ptfu3<>-_aL=bELLXP_Bw`bgyVZR! zf+}V+BBj3&`5fv-#b1cO*uB4CA+`)M7ER~j3C8is=a_WViWCME(7#XyV#$7zu-CG5 z7=b79Ig(%;2E&xgj=!|YceXRdVQlI!j!Zr$9harh*hw~Upg=*#V78ow(WSEx`5gLK zB)gF8V)xm_N}3cuz-Wd6m@SSKsD$jBn#bJLNbJfvYM;!*5R5N#OuNAN?yh}tZ1Oqj zn50?>2E%-XDwG0UIPg)_DpF^$k$Mh286imt8X6s>U&1+36zI)UV*+EPeWC=YFfg2F z#4O+Wo~Gx|f6mPXW^67{1&R}N@O6r24`oJYKPZH@LTH-_Bki@dWWHjHW-r}9bo&&i zZ0t<3ZkBAO%BI`RNWETb=_au4{z~u&Ax3qCP@^GUl4>z z5Qb1Jh&WeMY5X=6&(RE5Ost>pflDg&O%TP(;JPUrZ06<<{ed`uwnGd_V)U0$Q|f2_ zF!QH0QHIzj^GDx05zl#YdVG{nBA$a;6}kXvjC{`7R#NO1^_=Rl2rNWkA$tT1 z0dr5P!$d=2L}SR`ZeW3hoV@<+$!S|c(a`s*3X84vV2}bSA387rtfLL8XlarCKwes` z^)hquY}98hz3QW^wC;|`PUQYlv_5Nxx2)v*sU2KBzs)|M?G|*X=cHpY=Ac&N1972K zJQSm1wGu-p>N&)Vj^Hjlh@gOz3g9pB6h*l%5p~o98m8=>74@9S?bLQ!%lZ7wd=5p? zv98@-py)(B#{{9ajMk9T3ILomk(JU)6PvLyVIhE1Jb*2N7`d*7a|mC3ALt&I+5=2O z0eXgO&hfl zfLae3CALBed=~MDWnLL#7wI@g2?bhwm}Fx|QK3D~%F0Kh8HlQ(uR$(b15u@Zh<}na zjG)RIaWw!21?3ph(D?XJNeJad6@)&X+5TWi=|dh66EOev;4y)S=ZJWYi043mBh5iR zO+^UglD1P+MgjvMR>m)NJOa#-P=n#R2V;xpz*=|Y*utTm)dyO|csdqY#B-{;>?+t} z4w~AE;JP0!YpY9iEOaY8i;L&%1fGS7A3q385cpvfqcw&F27{ss$qh||u4mJCljU-{m^C2;4<7xqT*R_gJpc1@miL=j>C%3S zehT(;GCbj0xb6+CA~5!#T+BB#0viV6g3o~BUJ^wZ+Qc}iK~I99xzSkx-&u+xnN=jC zZ>qbyMp92)4tptf0q^!<)DK)VQ{w*apmC_kWmkka^n4xRpv3*%ODJ*w{Nqz65x|hP z8;oU0+<)MrnJGr!MiWCo+^^#(1s#ckoNg3|c1{VJyT7=fhDJQfXEB}q*2>6O;``Q) zzYCYYG~zk-Vo>5a(av#>v6mFW@oDFz>A3C!cnC;~M{%SqZv{1FWj9!~bLe9kp-@Cm zCl2GM`C{ryN!%_10JhR$X7KwaL`)oppp56ID^bSU02~$tF&KRk;Lhm$6f0P{3Ri%m zV}MZrD^&H@`$IUUo)d%tJ1fvoO2=r+5TRIGp z&!LY+9ELcI-8&2x0n?(COfn8}7-*>*%;2RVvW5V|D5R;*o^Y9C?D-_)+v##~eSWt- z#Tc9C6>W?p_QAIbx(tSrDLsbh=ZMF6aw_^c&*#hK{KMPH;!-@up$c^RL7IdHdSEI+ zs7yzm4$@;hyS-iSEyg4&G+y8X#s=V}Q3>=n7*ehD79yY{-a@>^lhcRv7QDH0{oewd zjr}VEI>o41pQiV*3FzSE7_l6sJm}^GMk@nSbAY56M!$3y%F`;r5RIQgX~%FF6`g;^ zgtQ-8IUXHqA2cA;$g=roH3%5wS=Og3xK^Z92>GE~j~ z_?X!yy{ek}&I5?(2vG_fi(qlx@r^}v%8fB!;VLCD`(^hUn|J78Jn3eld(~Y5U11{j zq5{_N1)~W2MNiPqGUe&e2QQ_aqyR5L#!14?V2MW>hh%gl8U!gA3C2_g6mLRHX2O2i zA51atmw?3~NZ`1J{X@n>!F6hv!ZnxNn~n# zKQ=YD%kP5jdv^~F|4y7Qv-Pcp!cIhFn~Gn^^3&BHfuo{!P?OA}xxbW3U4u?n+R^IO zX+x2urzgKmK1`t!rcV}s-2ioRKEL_v1BMmtmz!T@p!T7L6;6e{$ z43G;X(~xB-mUxDLr;5Ln7u3E-Ln(JsyArQwSM=m>CZDH^x6=>5PZ!MrQH#j?*Yx`G zYMFn}v*`(_o6BDq)U{G+@3Ti=KQn&##r$TTpZ6OL4xMv6xaKXqn1A>%o#mIPKhNgT zum1RBdcHh6znXrSzMfr7KV`S3n3sJ2Y1w!*=Y=j(+m3S)|~g} z>HGuw6rXeGmpx;VQQ6gezY-Bvyg}qKF~dQBxT%b^>W8asM4manLHn?`y1^dTuq>PR zeGU6i?)w^6J!+(DG*~*{UoUT_Kb-vQ&DqK1ujTyid~$O=yFB?gU;O#U&HUrnU%gmN zCrg;R-#`Cw@;{U7PuG)^7gy8S<=0>R;|^cGp8argwOrob{qXqlTuZVP|D?FK}UJWil>!ZEWmaYjfK; zmi^vU{U4O+s+BX9$b3I~<4ifW?0Cm^yt0xwpQad@u{DuJtt6+D`Sp81@BxwlMCxHj zG2AmrERg_6;6Bc|7ZBQ%*S?>BdFi!V|9JiT zZ?7(boA4kS&%^P2*1}EW*Z@ozgcShu8Dl_$#ZUdv4*b(`b-2YIHQ;#MiB(z4poYmTmkr_z_Oe!n@DmG;T;Q zd^sG4AH(6z?L6sU(=|(X@*lU|!b`a5b6dvE2hk{^?fzjqzA^B57al}+WKQBP%I~u} z;O>_%;b4AA)=79Wz7D_B=hxVA_rK38uZDT{OEiFKC-0ps!)Y|aO!T6^$OriAU+l!t zS;1nq9P)yhR??}vI{bl&$JFsI+C_V>U+pG6Vihr6-v-lQfTfUhesZ5q0RZIL`$f3JOt3F$}lV}t34K4P+hmsNzGvPgDc_lNUQ_-E_m>1B&7pW$HE3cpXH z=^Wba^N-fY@bhVOGaR(eqVaGZO`+6VUHbi$e19E&3GPSp-+w!ph5^0j&(_;u_6mw8Jz7-Adb>q+?C~_ZpR`+Ksb9{2jG%Q*h|O>`%6}uRWWN=(EENPh zQI5su`om}PkWkvlqSE5eG@_k>dtF4ZwL;n*wj2ryB*5T-NY7oqh zfyPq3L^~;8zdybig;agBgFPAzC-iv>nv;B-7#sHLUN{^6Cp?R;IV~LyXOmIz<23vh zj^cg{Thj`S{_p*8@HKwrAA;#HHo5ddwu^V4|4pVa{=y?)a13u|b`M6u3>KSO+vJzR z0!WRl2Z>1)b!HA>zVUW1Z^Llj(JlR1@}Akz;9B|`?2Zq`pG-)8OZKjP-7_4|*Bwj8 zpKKHPaxgH1+#WlI?Yowi{OPcFGb;uQz)Y6}X9Sw3yQZ#rrtRrkaR{srKp(nn{bMH~ zop46?r|+y+bdg}?l9%`XZ0E3h(LF!Be0RR1KYx+`V!WV(bf3k4_rfnb&!0bMpAF_Y zn+qN9AbvTekrfHkD?!-Rf;VF5-+=W0Z-SK=l|3PGy+s-9% zxTn2)T!kx$UwPT@v9n!h>`gHEdOXD>@rIO58X7rxclvH|Gvs~noB9&}#N!b(#dSay zI+p3uHXNIH^&HvzlscALr+SgZ0Yukh>Sp4J5|@PeEOQG}8BfgsZwPc93i}tdUUi^T z6<88V@k_`j8=h-<^i}6jB+eYwCT+Ru+Ae6B(ap)T$!4a$%MTMutY}H?^p4-`XfNR2Uugxb~km%X;bNX$Zoo>^4hYEGBpLM<*Z zi=|~%N72)3#0xMT(obs;)~4$Z9%)rF=B5Y<2?|a$%USd-!>p`UStQp)pNp}sTpO{v zxS%Z9MyrZK-e}6eRD2j=4+QL`i!fcL35_Ffq&tEWKOX`~?N0~kORyWXmiGE4(f-T# z%4&#+Xl?3B3GN32d|t`w^{5>S!D)FsM}ZM})I%YFBfl3J+i>S(c_Ry#eWyZZia z)QbRmbNR`=)q>>{dztw%VYJjXDoT!XS4-p2`${@Zcqgk}n%&82h$drY#Zh=)K8sah zw`9W3r42-$AmiC6VHX3~t@l@|YY4DSY%qLA|I}F`KdmbNWhRbJAYysdne@|{ObFz) z@rPE2(8YPo3>|?<;?Q`mZn>7}x|UfiHyqB5n1&O z*8w|i=sr6F))UzzkC;-2y2WsZ37x3h%x6XT+ni6NluN~pPF>JK{IFyLnQPeBA~Fud zL9GyNX&dCrl&q@|e~jbt2yEQ`WHJJTAaT;BlpJ{~M)&2u*B_ha(o7mV=Mh;smsY)q zx;448z`S{edCD*;^Vu?7nyCMEacK?P|CzY7Ts>_OmsXV&8KI^_e~Ntu)*EgDGOKf* zs+g+rD8bMIqgI)Kw3%9}jtwSt#6wz(N_+y0kqLJI9%jW#2~il2F{;%_ZN^B{TDnY9 z#z=HsVd&gmSqVrPBT;Kh^-5M>N{X={GU==tW29$^2Qf>OCU>n!840Cup)l7G)5pRY z%XvZR9IuB@Vk~>nr;<@dRR#aZyphCTX{;87+)3h&u;Rk%mu4)_7V<;7H1xGBL9|)X zUf!}+5wR|1!v*Aq@bM~2$N3!C*Axtw9Fo-^LW1)VA1!8ztqtg#9n&y;q~Rn#;1~Ho z-_~_Q_Z-vkeEiMA?5cXtQTne5^bLan^$E~7Oy;wnALt8BN<3qmPMSgP^duT1Z%Bc3 zLRElv5Wr|QvzlY`Qa2-WIV(&;!F4TD0BmTQYZ+H;UxDhbVivq_9TS>isMOE*Rz0SZPIAtlnfEBEQq?u0nRi<9hA<6x~x;YsI^poJUM{v z%Vd$o?@eS;=%!XZu(ET??5Yw`{uN(Wr4aA6WdOUZoEyUH#+r&_|7(dn*Rl)mWW~GL zovevzGFDa`g!koPjwbzIH&G}p5?gF~&3Cfm8>Z3Ff)JZ6t0s zcG;vGV~F4S7*TlaHP;vJXyIK%4QXzk7%alT?ezeBasLAPpdr9-+b@moT;rY@cgZTzFs;xT`&ztvDr7gr3OeCH&328H|X%x*Qy@sw7*^ri} z+SAdnyLMv>&PZ)zzkJcsW}$dhU>=@9FgrFat5GpyLQuel(CFjVY@{ZGAZ{(4G0Gr_ zuPY3l+bauC7CpmKy|VMnVjAK4$c;wolE=(lT&=~(B0fAek8Qp_gCG≶HKeeiefd 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

aWt@mV9%aDFp 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%0DS(jh;f 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 literal 0 HcmV?d00001 From ba6aa02f404067c71a48a201f31fd0599a2d4e14 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Thu, 28 Mar 2024 14:08:02 +0800 Subject: [PATCH 31/43] enhance ui content --- weblogic-azure-aks/src/main/arm/createUiDefinition.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index 48f0b2d5d..92f022d60 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -2170,7 +2170,7 @@ "type": "Microsoft.Common.OptionsGroup", "label": "Select metric source. Autoscaling based on resource metrics from Kubernetes Metrics Server or exporting by WebLogic Monitoring Exporter. ", "defaultValue": "Kubernetes Metrics Server", - "toolTip": "If you select Kubernetes Metrics Server, this offer configures WebLogic Server to scale based on CPU and memory utilization. If you select WebLogic Monitoring Exporter, this offer configures WebLogic Server to expose metrics using WebLogic Monitoring Exporter, provisions Prometheus to save the metrics and enables KEDA. You can create KEDA scalers based on Java metrics exported by WebLogic Monitoring Exporter.", + "toolTip": "If you select Kubernetes Metrics Server, this offer configures WebLogic Server to scale based on CPU or memory utilization. If you select WebLogic Monitoring Exporter, this offer configures WebLogic Monitoring Exporter to scrape WebLogic Server metrics and feed them to Azure Monitor Managed Service for Prometheus; integrates KEDA with your AKS cluster to monitor Azure Monitor workspace and feed data to AKS. You can create KEDA scaler based on Java metrics from Azure Monitor workspace", "constraints": { "allowedValues": [ { @@ -2192,7 +2192,7 @@ "visible": "[equals(steps('section_autoScaling').autoScalingInfo.metricSource, 'kms')]", "options": { "icon": "None", - "text": "This option configures and runs Kubernetes Horizontal Pod Autoscaler (HPA) to scale a WebLogic cluster, based on the CPU or memory utilization. The HPA autoscales WebLogic Server instances from a minimum of 1 cluster members up to maximum of cluster members, and the scale up or down will occur when the average CPU/memory is consistently over the utilization. Default maximum of cluster members is 5. You can set it from Basics -> Optional Basic Configuration -> Maximum dynamic cluster size.", + "text": "This option configures and runs Kubernetes Horizontal Pod Autoscaler (HPA) to scale a WebLogic cluster, based on the CPU or memory utilization. The HPA autoscales WebLogic Server instances from a minimum of 1 cluster members up to maximum of cluster members, and the scale up or down action occur when the average CPU/memory is consistently over the utilization. Default maximum of cluster members is 5. You can set it from Basics -> Optional Basic Configuration -> Maximum dynamic cluster size.", "uri": "https://aka.ms/wlsoperator-autoscaling-hpa" } }, @@ -2202,7 +2202,7 @@ "visible": "[equals(steps('section_autoScaling').autoScalingInfo.metricSource, 'wme')]", "options": { "icon": "None", - "text": "This option exports metrics using WebLogic Monitoring Exporter, collects metrics using Azure Managed Prometheus Service and exposes metrics using KEDA. After the provisioning is completed, you have to create KEDA scalers based on your requirements to enable autoscaling.", + "text": "This option allows you to create KEDA scaler based on Prometheus Metrics by:

  • Configureing WebLogic Monitoring Exporter to scrape WebLogic Server metrics and feed them to Azure Monitor Managed Service for Prometheus
  • Integrates KEDA with your AKS cluster to monitor Azure Monitor managed service for Prometheus and feed that data to AKS.


  • The offer provisions the following deployments:
  • Install WebLogic Monitoring Exporter to scrape WebLogic Server metrics.
  • Install AKS Prometheus metrics addon.
  • Feed WebLogic Server metrics to Azure Monitor Managed Service for Prometheus.
  • Integrate KEDA with AKS cluster.


  • After the provisioning is completed, you can create KEDA scalers from the output sample:
  • Go to the resource group that the offer provisioned.
  • In the Settings section, select Deployments.
  • Select the oldest deployment, whose name starts with oracle.20210620-wls-on-aks
  • The shellCmdtoOutputKedaScalerSample value is the base64 string of a scaler sample. Copy the value and run it in your terminal
  • ", "uri": "https://aka.ms/wlsaks-autoscaling" } }, From 6ec982d173d0d7efec7f86f27f416fe9b5e99aca Mon Sep 17 00:00:00 2001 From: galiacheng Date: Thu, 28 Mar 2024 14:10:14 +0800 Subject: [PATCH 32/43] update ui text. --- weblogic-azure-aks/src/main/arm/createUiDefinition.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index 92f022d60..f0c7495ef 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -2202,7 +2202,7 @@ "visible": "[equals(steps('section_autoScaling').autoScalingInfo.metricSource, 'wme')]", "options": { "icon": "None", - "text": "This option allows you to create KEDA scaler based on Prometheus Metrics by:
  • Configureing WebLogic Monitoring Exporter to scrape WebLogic Server metrics and feed them to Azure Monitor Managed Service for Prometheus
  • Integrates KEDA with your AKS cluster to monitor Azure Monitor managed service for Prometheus and feed that data to AKS.


  • The offer provisions the following deployments:
  • Install WebLogic Monitoring Exporter to scrape WebLogic Server metrics.
  • Install AKS Prometheus metrics addon.
  • Feed WebLogic Server metrics to Azure Monitor Managed Service for Prometheus.
  • Integrate KEDA with AKS cluster.


  • After the provisioning is completed, you can create KEDA scalers from the output sample:
  • Go to the resource group that the offer provisioned.
  • In the Settings section, select Deployments.
  • Select the oldest deployment, whose name starts with oracle.20210620-wls-on-aks
  • The shellCmdtoOutputKedaScalerSample value is the base64 string of a scaler sample. Copy the value and run it in your terminal
  • ", + "text": "This option allows you to create KEDA scaler based on Prometheus Metrics by:
  • Configureing WebLogic Monitoring Exporter to scrape WebLogic Server metrics and feed them to Azure Monitor Managed Service for Prometheus
  • Integrates KEDA with your AKS cluster to monitor Azure Monitor managed service for Prometheus and feed that data to AKS.


  • The offer provisions the following deployments:
  • Install WebLogic Monitoring Exporter to scrape WebLogic Server metrics.
  • Install AKS Prometheus metrics addon.
  • Feed WebLogic Server metrics to Azure Monitor Managed Service for Prometheus.
  • Integrate KEDA with AKS cluster.


  • After the provisioning is completed, you can create KEDA scalers from the output sample:
  • Go to the resource group that the offer provisioned.
  • In the Settings section, select Deployments.
  • Select the oldest deployment, whose name starts with oracle.20210620-wls-on-aks.
  • The shellCmdtoOutputKedaScalerSample value is the base64 string of a scaler sample. Copy the value and run it in your terminal.
  • ", "uri": "https://aka.ms/wlsaks-autoscaling" } }, From 4765c292aad8929e3beafa8aa95a4cc716c71390 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Thu, 28 Mar 2024 14:37:04 +0800 Subject: [PATCH 33/43] call out default cpu/mem request in ui --- weblogic-azure-aks/src/main/arm/createUiDefinition.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index f0c7495ef..0b43d75bf 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -2192,7 +2192,7 @@ "visible": "[equals(steps('section_autoScaling').autoScalingInfo.metricSource, 'kms')]", "options": { "icon": "None", - "text": "This option configures and runs Kubernetes Horizontal Pod Autoscaler (HPA) to scale a WebLogic cluster, based on the CPU or memory utilization. The HPA autoscales WebLogic Server instances from a minimum of 1 cluster members up to maximum of cluster members, and the scale up or down action occur when the average CPU/memory is consistently over the utilization. Default maximum of cluster members is 5. You can set it from Basics -> Optional Basic Configuration -> Maximum dynamic cluster size.", + "text": "This option configures and runs Kubernetes Horizontal Pod Autoscaler (HPA) to scale a WebLogic cluster, based on the CPU or memory utilization. The HPA autoscales WebLogic Server instances from a minimum of 1 cluster members up to maximum of cluster members, and the scale up or down action occur when the average CPU/memory is consistently over the utilization.
  • Default maximum of cluster member is 5. You can set it from Basics -> Optional Basic Configuration -> Maximum dynamic cluster size.
  • Default CPU request is 200m.
  • Default memory request is 1.5Gi.
  • ", "uri": "https://aka.ms/wlsoperator-autoscaling-hpa" } }, From 124d3d8bfebacf6dc8ca847686d47564cf0480c0 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Thu, 28 Mar 2024 16:21:56 +0800 Subject: [PATCH 34/43] fix dd-2012351 --- weblogic-azure-aks/src/main/bicep/mainTemplate.bicep | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep index 5945c548a..f70b988c0 100644 --- a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep +++ b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep @@ -315,7 +315,7 @@ var _useExistingAppGatewaySSLCertificate = (appGatewayCertificateOption == const var const_appGatewaySSLCertOptionHaveCert = 'haveCert' var const_appGatewaySSLCertOptionHaveKeyVault = 'haveKeyVault' -var const_azcliVersion = '2.53.0' +var const_azcliVersion = '2.54.0' var const_azureSubjectName = format('{0}.{1}.{2}', name_domainLabelforApplicationGateway, location, 'cloudapp.azure.com') var const_hasTags = contains(resourceGroup(), 'tags') // If there is not tag 'wlsKeyVault' and key vault is created for the following usage: From 7715ec026ad9316d402d8da3a56ea4ca0c053726 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Mon, 1 Apr 2024 12:49:15 +0800 Subject: [PATCH 35/43] work around "module 'azure.core.pipeline.policies' has no attribute 'SensitiveHeaderCleanupPolicy'" --- .../arm/scripts/inline-scripts/enablePrometheusMetrics.sh | 5 ++++- weblogic-azure-aks/src/main/bicep/mainTemplate.bicep | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh index 34905558d..81ca446ca 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh @@ -224,12 +224,15 @@ function wait_for_keda_ready(){ # https://learn.microsoft.com/en-us/azure/azure-monitor/containers/integrate-keda function enable_keda_addon() { - az extension add -n aks-preview + az extension remove --name k8s-extension + az extension add --name aks-preview local oidcEnabled=$(az aks show --resource-group $AKS_CLUSTER_RG_NAME --name $AKS_CLUSTER_NAME --query oidcIssuerProfile.enabled) local workloadIdentity=$(az aks show --resource-group $AKS_CLUSTER_RG_NAME --name $AKS_CLUSTER_NAME --query securityProfile.workloadIdentity) if [[ "${oidcEnabled,,}" == "false" || -z "${workloadIdentity}" ]]; then + # mitigate https://github.com/Azure/azure-cli/issues/28649 + pip install --upgrade azure-core az aks update -g $AKS_CLUSTER_RG_NAME -n $AKS_CLUSTER_NAME --enable-workload-identity --enable-oidc-issuer utility_validate_status "Enable oidc and worload identity in AKS $AKS_CLUSTER_NAME." fi diff --git a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep index f70b988c0..5945c548a 100644 --- a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep +++ b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep @@ -315,7 +315,7 @@ var _useExistingAppGatewaySSLCertificate = (appGatewayCertificateOption == const var const_appGatewaySSLCertOptionHaveCert = 'haveCert' var const_appGatewaySSLCertOptionHaveKeyVault = 'haveKeyVault' -var const_azcliVersion = '2.54.0' +var const_azcliVersion = '2.53.0' var const_azureSubjectName = format('{0}.{1}.{2}', name_domainLabelforApplicationGateway, location, 'cloudapp.azure.com') var const_hasTags = contains(resourceGroup(), 'tags') // If there is not tag 'wlsKeyVault' and key vault is created for the following usage: From f155d67bc4aaaf2cbbe1c0d5d123fd1438071f7e Mon Sep 17 00:00:00 2001 From: Galia Cheng Date: Mon, 22 Apr 2024 10:15:20 +0800 Subject: [PATCH 36/43] Add files via upload --- .../diagrams/wls-aks-diagram-autoscaling.vsdx | Bin 314674 -> 319923 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/weblogic-azure-aks/src/main/resources/diagrams/wls-aks-diagram-autoscaling.vsdx b/weblogic-azure-aks/src/main/resources/diagrams/wls-aks-diagram-autoscaling.vsdx index 34884ea41f636314096242369ecf5e4534f1c590..39ab6c68e03095998621c5ea8138aed971e2e3ba 100644 GIT binary patch delta 64442 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 Date: Sat, 4 May 2024 15:07:03 -0400 Subject: [PATCH 37/43] On branch wls-autoscaling-0131 Point to corresponding guidance on how to use KEDA scaler. modified: weblogic-azure-aks/src/main/arm/createUiDefinition.json Signed-off-by: Ed Burns --- weblogic-azure-aks/src/main/arm/createUiDefinition.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index 0b43d75bf..3986aa8e7 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -2202,7 +2202,7 @@ "visible": "[equals(steps('section_autoScaling').autoScalingInfo.metricSource, 'wme')]", "options": { "icon": "None", - "text": "This option allows you to create KEDA scaler based on Prometheus Metrics by:
  • Configureing WebLogic Monitoring Exporter to scrape WebLogic Server metrics and feed them to Azure Monitor Managed Service for Prometheus
  • Integrates KEDA with your AKS cluster to monitor Azure Monitor managed service for Prometheus and feed that data to AKS.


  • The offer provisions the following deployments:
  • Install AKS Prometheus metrics addon.
  • Feed WebLogic Server metrics to Azure Monitor Managed Service for Prometheus.
  • Integrate KEDA with AKS cluster.


  • After the provisioning is completed, you can create KEDA scalers from the output sample:
  • Go to the resource group that the offer provisioned.
  • In the Settings section, select Deployments.
  • Select the oldest deployment, whose name starts with oracle.20210620-wls-on-aks.
  • The shellCmdtoOutputKedaScalerSample value is the base64 string of a scaler sample. Copy the value and run it in your terminal.
  • ", + "text": "This option allows you to create KEDA scaler based on Prometheus Metrics by:
  • Configureing WebLogic Monitoring Exporter to scrape WebLogic Server metrics and feed them to Azure Monitor Managed Service for Prometheus
  • Integrates KEDA with your AKS cluster to monitor Azure Monitor managed service for Prometheus and feed that data to AKS.


  • The offer provisions the following deployments:
  • Install WebLogic Monitoring Exporter to scrape WebLogic Server metrics.
  • Install AKS Prometheus metrics addon.
  • Feed WebLogic Server metrics to Azure Monitor Managed Service for Prometheus.
  • Integrate KEDA with AKS cluster.


  • After the provisioning is completed, you can create KEDA scalers from the output sample:
  • Go to the resource group that the offer provisioned.
  • In the Settings section, select Deployments.
  • Select the oldest deployment, whose name starts with oracle.20210620-wls-on-aks.
  • The shellCmdtoOutputKedaScalerSample value is the base64 string of a scaler sample. Copy the value and run it in your terminal.
  • For guidance on how to complete the configuration, see Tutorial: Migrate Oracle WebLogic Server to AKS with KEDA scaler based on Prometheus Metrics
  • ", "uri": "https://aka.ms/wlsaks-autoscaling" } }, From 402ff7938e495a6aecc9138c171d8bfc0dd4761e Mon Sep 17 00:00:00 2001 From: Galia Cheng Date: Mon, 6 May 2024 08:46:59 +0800 Subject: [PATCH 38/43] Fix typo in createUiDefinition.json --- weblogic-azure-aks/src/main/arm/createUiDefinition.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index 3986aa8e7..5bcc58172 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -2202,7 +2202,7 @@ "visible": "[equals(steps('section_autoScaling').autoScalingInfo.metricSource, 'wme')]", "options": { "icon": "None", - "text": "This option allows you to create KEDA scaler based on Prometheus Metrics by:
  • Configureing WebLogic Monitoring Exporter to scrape WebLogic Server metrics and feed them to Azure Monitor Managed Service for Prometheus
  • Integrates KEDA with your AKS cluster to monitor Azure Monitor managed service for Prometheus and feed that data to AKS.


  • The offer provisions the following deployments:
  • Install WebLogic Monitoring Exporter to scrape WebLogic Server metrics.
  • Install AKS Prometheus metrics addon.
  • Feed WebLogic Server metrics to Azure Monitor Managed Service for Prometheus.
  • Integrate KEDA with AKS cluster.


  • After the provisioning is completed, you can create KEDA scalers from the output sample:
  • Go to the resource group that the offer provisioned.
  • In the Settings section, select Deployments.
  • Select the oldest deployment, whose name starts with oracle.20210620-wls-on-aks.
  • The shellCmdtoOutputKedaScalerSample value is the base64 string of a scaler sample. Copy the value and run it in your terminal.
  • For guidance on how to complete the configuration, see Tutorial: Migrate Oracle WebLogic Server to AKS with KEDA scaler based on Prometheus Metrics
  • ", + "text": "This option allows you to create KEDA scaler based on Prometheus Metrics by:
  • Configuring WebLogic Monitoring Exporter to scrape WebLogic Server metrics and feed them to Azure Monitor Managed Service for Prometheus
  • Integrates KEDA with your AKS cluster to monitor Azure Monitor managed service for Prometheus and feed that data to AKS.


  • The offer provisions the following deployments:
  • Install WebLogic Monitoring Exporter to scrape WebLogic Server metrics.
  • Install AKS Prometheus metrics addon.
  • Feed WebLogic Server metrics to Azure Monitor Managed Service for Prometheus.
  • Integrate KEDA with AKS cluster.


  • After the provisioning is completed, you can create KEDA scalers from the output sample:
  • Go to the resource group that the offer provisioned.
  • In the Settings section, select Deployments.
  • Select the oldest deployment, whose name starts with oracle.20210620-wls-on-aks.
  • The shellCmdtoOutputKedaScalerSample value is the base64 string of a scaler sample. Copy the value and run it in your terminal.
  • For guidance on how to complete the configuration, see Tutorial: Migrate Oracle WebLogic Server to AKS with KEDA scaler based on Prometheus Metrics
  • ", "uri": "https://aka.ms/wlsaks-autoscaling" } }, From 08993f2aa71ecd758f371d040ce818eb372b17c9 Mon Sep 17 00:00:00 2001 From: Galia Cheng Date: Wed, 8 May 2024 14:17:41 +0800 Subject: [PATCH 39/43] fix KEDA installation and Prometheus basic_auth. (#2) * validate KEdA pod count. * Update enablePrometheusMetrics.sh * test * fix keda install * use specified keda version * remove debug cmd * clean up * fix function that gets keda version. * clean up * use password file in basic_auth * fix kubectl apply -f - --- .../src/main/arm/scripts/common.sh | 1 + .../inline-scripts/enablePrometheusMetrics.sh | 84 ++++++++++++++++--- 2 files changed, 74 insertions(+), 11 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/scripts/common.sh b/weblogic-azure-aks/src/main/arm/scripts/common.sh index 2a5fca89e..ea31dc0c0 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/common.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/common.sh @@ -43,6 +43,7 @@ export ocrGaImagePath="middleware/weblogic" export ocrCpuImagePath="middleware/weblogic_cpu" export gitUrl4CpuImages="https://raw.githubusercontent.com/oracle/weblogic-azure/main/weblogic-azure-aks/src/main/resources/weblogic_cpu_images.json" export gitUrl4AksWellTestedVersionJsonFile="https://raw.githubusercontent.com/oracle/weblogic-azure/main/weblogic-azure-aks/src/main/resources/aks_well_tested_version.json" +export gitUrl4AksToolingWellTestedVersionJsonFile="https://raw.githubusercontent.com/galiacheng/weblogic-azure/haiche-wls-autoscaling/weblogic-azure-aks/src/main/resources/aks_tooling_well_tested_versions.json" export gitUrl4WLSToolingFamilyJsonFile="https://raw.githubusercontent.com/oracle/weblogic-azure/main/weblogic-azure-aks/src/main/resources/weblogic_tooling_family.json" export gitUrl4AzureIdentityExtensionsPomFile="https://raw.githubusercontent.com/oracle/weblogic-azure/main/weblogic-azure-aks/src/main/resources/azure-identity-extensions.xml" export gitUrl4MySQLDriverPomFile="https://raw.githubusercontent.com/oracle/weblogic-azure/main/weblogic-azure-aks/src/main/resources/mysql-connector-java.xml" diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh index 81ca446ca..022afe460 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh @@ -10,7 +10,7 @@ function connect_aks(){ } function enable_promethues_metrics(){ - az extension remove --name aks-preview + # See https://learn.microsoft.com/en-us/azure/azure-monitor/containers/kubernetes-monitoring-enable?tabs=cli#enable-prometheus-and-grafana az extension add --name k8s-extension ### Use existing Azure Monitor workspace @@ -22,6 +22,9 @@ function enable_promethues_metrics(){ utility_validate_status "Enable Promethues Metrics." + az extension add --name aks-preview + az extension remove --name k8s-extension + #Verify that the DaemonSet was deployed properly on the Linux node pools #https://learn.microsoft.com/en-us/azure/azure-monitor/containers/kubernetes-monitoring-enable?tabs=cli#managed-prometheus kubectl get ds ama-metrics-node --namespace=kube-system @@ -31,6 +34,19 @@ function enable_promethues_metrics(){ # https://learn.microsoft.com/en-us/azure/azure-monitor/containers/prometheus-metrics-scrape-configuration function deploy_customize_scraping(){ + # https://learn.microsoft.com/en-us/azure/azure-monitor/containers/prometheus-metrics-scrape-configuration?tabs=CRDConfig%2CCRDScrapeConfig#basic-authentication + local wlsPswBase64=$(echo -n "${WLS_ADMIN_PASSWORD}" | base64) + cat <prometheus-config global: @@ -43,7 +59,7 @@ scrape_configs: names: [${WLS_NAMESPACE}] basic_auth: username: ${WLS_ADMIN_USERNAME} - password: ${WLS_ADMIN_PASSWORD} + password_file: /etc/prometheus/certs/password1 EOF #validate the scrape config file @@ -76,7 +92,7 @@ function get_wls_monitoring_exporter_image_url() { curl -m ${curlMaxTime} --retry ${retryMaxAttempt} -fsL "${gitUrl4WLSToolingFamilyJsonFile}" -o ${wlsToolingFamilyJsonFile} if [ $? -eq 0 ]; then imageURL=$(cat ${wlsToolingFamilyJsonFile} | jq ".items[] | select(.key==\"WME\") | .imageURL" | tr -d "\"") - echo "well tested monitoring exporter image url: ${imageURL}" + echo_stdout "well tested monitoring exporter image url: ${imageURL}" fi echo_stdout "Use monitoring exporter image: ${imageURL} " @@ -200,6 +216,11 @@ function wait_for_keda_ready(){ echo_stdout "Check if KEDA is ready, attempt: ${attempt}." ready=true + local podCount=$(kubectl get pods -n ${KEDA_NAMESPACE} -o json | jq -r '.items | length') + if [ $podCount -lt 3 ];then + ready=false + fi + local podnames=$(kubectl get pods -n ${KEDA_NAMESPACE} -o json | jq -r '.items[].metadata.name') for podname in ${podnames} do @@ -219,14 +240,49 @@ function wait_for_keda_ready(){ exit 1 fi - echo "KEDA is running." + echo_stderr "KEDA is running." +} + +function get_keda_latest_version() { + local kedaVersion + kedaVersion=$(helm search repo kedacore/keda --versions | awk '/^kedacore\/keda/ {print $2; exit}') + export KEDA_VERSION="${kedaVersion}" + echo_stderr "Use latest KEDA. KEDA version: ${KEDA_VERSION}" +} + + +function get_keda_version() { + local versionJsonFileName="aks_tooling_well_tested_version.json" + local kedaWellTestedVersion + + # Download the version JSON file + curl -L "${gitUrl4AksToolingWellTestedVersionJsonFile}" --retry "${retryMaxAttempt}" -o "${versionJsonFileName}" + + # Extract KEDA version from JSON + kedaWellTestedVersion=$(jq -r '.items[] | select(.key == "keda") | .version' "${versionJsonFileName}") + + # Check if version is available + if [ $? -ne 0 ]; then + get_keda_latest_version + return 0 + fi + + # Print KEDA well-tested version + echo_stderr "KEDA well-tested version: ${kedaWellTestedVersion}" + + # Search for KEDA version in Helm repo + if ! helm search repo kedacore/keda --versions | grep -q "${kedaWellTestedVersion}"; then + get_keda_latest_version + return 0 + fi + + # Export KEDA version + export KEDA_VERSION="${kedaWellTestedVersion}" + echo_stderr "KEDA version: ${KEDA_VERSION}" } # https://learn.microsoft.com/en-us/azure/azure-monitor/containers/integrate-keda function enable_keda_addon() { - az extension remove --name k8s-extension - az extension add --name aks-preview - local oidcEnabled=$(az aks show --resource-group $AKS_CLUSTER_RG_NAME --name $AKS_CLUSTER_NAME --query oidcIssuerProfile.enabled) local workloadIdentity=$(az aks show --resource-group $AKS_CLUSTER_RG_NAME --name $AKS_CLUSTER_NAME --query securityProfile.workloadIdentity) @@ -266,13 +322,19 @@ EOF helm repo add kedacore https://kedacore.github.io/charts helm repo update + get_keda_version + helm install keda kedacore/keda \ --namespace ${KEDA_NAMESPACE} \ - --set serviceAccount.create=false \ - --set serviceAccount.name=${KEDA_SERVICE_ACCOUNT_NAME} \ + --set serviceAccount.operator.create=false \ + --set serviceAccount.operator.name=${KEDA_SERVICE_ACCOUNT_NAME} \ --set podIdentity.azureWorkload.enabled=true \ --set podIdentity.azureWorkload.clientId=$KEDA_UAMI_CLIENT_ID \ - --set podIdentity.azureWorkload.tenantId=$tenantId + --set podIdentity.azureWorkload.tenantId=$tenantId \ + --set app.kubernetes.io/managed-by=Helm \ + --set meta.helm.sh/release-name=keda \ + --set meta.helm.sh/release-namespace=${KEDA_NAMESPACE} \ + --version ${KEDA_VERSION} #validate wait_for_keda_ready @@ -346,4 +408,4 @@ deploy_customize_scraping enable_keda_addon -output \ No newline at end of file +output From 0bdb7b497cca9cfec147d8b221425a5e984abbfe Mon Sep 17 00:00:00 2001 From: galiacheng Date: Wed, 8 May 2024 14:24:03 +0800 Subject: [PATCH 40/43] remove testing info --- weblogic-azure-aks/src/main/arm/scripts/common.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/arm/scripts/common.sh b/weblogic-azure-aks/src/main/arm/scripts/common.sh index ea31dc0c0..23d5ebf24 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/common.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/common.sh @@ -43,7 +43,7 @@ export ocrGaImagePath="middleware/weblogic" export ocrCpuImagePath="middleware/weblogic_cpu" export gitUrl4CpuImages="https://raw.githubusercontent.com/oracle/weblogic-azure/main/weblogic-azure-aks/src/main/resources/weblogic_cpu_images.json" export gitUrl4AksWellTestedVersionJsonFile="https://raw.githubusercontent.com/oracle/weblogic-azure/main/weblogic-azure-aks/src/main/resources/aks_well_tested_version.json" -export gitUrl4AksToolingWellTestedVersionJsonFile="https://raw.githubusercontent.com/galiacheng/weblogic-azure/haiche-wls-autoscaling/weblogic-azure-aks/src/main/resources/aks_tooling_well_tested_versions.json" +export gitUrl4AksToolingWellTestedVersionJsonFile="https://raw.githubusercontent.com/oracle/weblogic-azure/main/weblogic-azure-aks/src/main/resources/aks_tooling_well_tested_versions.json" export gitUrl4WLSToolingFamilyJsonFile="https://raw.githubusercontent.com/oracle/weblogic-azure/main/weblogic-azure-aks/src/main/resources/weblogic_tooling_family.json" export gitUrl4AzureIdentityExtensionsPomFile="https://raw.githubusercontent.com/oracle/weblogic-azure/main/weblogic-azure-aks/src/main/resources/azure-identity-extensions.xml" export gitUrl4MySQLDriverPomFile="https://raw.githubusercontent.com/oracle/weblogic-azure/main/weblogic-azure-aks/src/main/resources/mysql-connector-java.xml" From a1173f6a3ed68b16f861a6ce837cffd8a41ac164 Mon Sep 17 00:00:00 2001 From: Ed Burns Date: Thu, 9 May 2024 16:06:38 -0400 Subject: [PATCH 41/43] On branch wls-autoscaling-0131 Improve wording. modified: weblogic-azure-aks/src/main/arm/createUiDefinition.json Signed-off-by: Ed Burns --- .../src/main/arm/createUiDefinition.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index 5bcc58172..d42618ec9 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -2125,7 +2125,7 @@ { "name": "section_autoScaling", "type": "Microsoft.Common.Section", - "label": "Horizontal Autoscaling", + "label": "Autoscaling", "subLabel": { "preValidation": "Configure Horizontal Autoscaling", "postValidation": "Done" @@ -2168,17 +2168,17 @@ { "name": "metricSource", "type": "Microsoft.Common.OptionsGroup", - "label": "Select metric source. Autoscaling based on resource metrics from Kubernetes Metrics Server or exporting by WebLogic Monitoring Exporter. ", - "defaultValue": "Kubernetes Metrics Server", + "label": "Select autoscaling option. ", + "defaultValue": "Kubernetes Metrics Server (simple autoscaling)", "toolTip": "If you select Kubernetes Metrics Server, this offer configures WebLogic Server to scale based on CPU or memory utilization. If you select WebLogic Monitoring Exporter, this offer configures WebLogic Monitoring Exporter to scrape WebLogic Server metrics and feed them to Azure Monitor Managed Service for Prometheus; integrates KEDA with your AKS cluster to monitor Azure Monitor workspace and feed data to AKS. You can create KEDA scaler based on Java metrics from Azure Monitor workspace", "constraints": { "allowedValues": [ { - "label": "Kubernetes Metrics Server", + "label": "Kubernetes Metrics Server (simple autoscaling)", "value": "kms" }, { - "label": "WebLogic Monitoring Exporter", + "label": "WebLogic Monitoring Exporter (advanced autoscaling)", "value": "wme" } ], @@ -2202,8 +2202,8 @@ "visible": "[equals(steps('section_autoScaling').autoScalingInfo.metricSource, 'wme')]", "options": { "icon": "None", - "text": "This option allows you to create KEDA scaler based on Prometheus Metrics by:
  • Configuring WebLogic Monitoring Exporter to scrape WebLogic Server metrics and feed them to Azure Monitor Managed Service for Prometheus
  • Integrates KEDA with your AKS cluster to monitor Azure Monitor managed service for Prometheus and feed that data to AKS.


  • The offer provisions the following deployments:
  • Install WebLogic Monitoring Exporter to scrape WebLogic Server metrics.
  • Install AKS Prometheus metrics addon.
  • Feed WebLogic Server metrics to Azure Monitor Managed Service for Prometheus.
  • Integrate KEDA with AKS cluster.


  • After the provisioning is completed, you can create KEDA scalers from the output sample:
  • Go to the resource group that the offer provisioned.
  • In the Settings section, select Deployments.
  • Select the oldest deployment, whose name starts with oracle.20210620-wls-on-aks.
  • The shellCmdtoOutputKedaScalerSample value is the base64 string of a scaler sample. Copy the value and run it in your terminal.
  • For guidance on how to complete the configuration, see Tutorial: Migrate Oracle WebLogic Server to AKS with KEDA scaler based on Prometheus Metrics
  • ", - "uri": "https://aka.ms/wlsaks-autoscaling" + "text": "This option installs all the software necessary to allow you to create Java metric aware KEDA scaling rules.
    The offer provisions the following deployments. Right-click and select Open Link in New Tab to follow links:After the provisioning is completed, you can create KEDA scaling rules. A sample rule is provided in the deployment outputs. The following steps show how to see the sample rule.
    • View the resource group for this deployment in the Azure portal.
    • In the Settings section, select Deployments.
    • Select the oldest deployment. The name of the deployment looks similar to oracle.20210620-wls-on-aks.
    • Select Outputs.
    • The shellCmdtoOutputKedaScalerSample value is the base64 string of a scaler sample. Copy the value and run it in your terminal.
    • For guidance on how to complete the configuration, see Tutorial: Migrate Oracle WebLogic Server to AKS with KEDA scaler based on Prometheus Metrics
    ", + "uri": "https://aka.ms/wls-aks-keda-scaler" } }, { From d05bba8f18daaa24dc4d92c9e0cab19d12d24276 Mon Sep 17 00:00:00 2001 From: Ed Burns Date: Thu, 9 May 2024 16:40:32 -0400 Subject: [PATCH 42/43] On branch wls-autoscaling-0131 Changes supplemental to comment below. modified: pom.xml - Increment version modified: weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh modified: weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_hpa.bicep - Correct typo. modified: weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh - I'm worried about the idempotency. Guard against that by ensuring these extension add/removes don't cause a failure. modified: weblogic-azure-aks/src/main/arm/scripts/updateApplications.sh - Best practice. See https://dev.azure.com/edburns-msft/Open%20Standard%20Enterprise%20Java%20(Java%20EE)%20on%20Azure/_wiki/wikis/Open-Standard-Enterprise-Java-(Java-EE)-on-Azure.wiki/2/Team-FAQ?anchor=shell-script-best-practices . modified: weblogic-azure-aks/src/main/bicep/mainTemplate.bicep - Correct typo. modified: weblogic-azure-aks/src/main/resources/weblogic_tooling_family.json - Add note to maintainer. Comment: https://github.com/oracle/weblogic-azure/pull/297/files#r1595939825 Signed-off-by: Ed Burns --- pom.xml | 2 +- .../src/main/arm/scripts/inline-scripts/enableHpa.sh | 6 +++--- .../arm/scripts/inline-scripts/enablePrometheusMetrics.sh | 6 +++--- .../src/main/arm/scripts/updateApplications.sh | 3 +++ weblogic-azure-aks/src/main/bicep/mainTemplate.bicep | 2 +- .../bicep/modules/_deployment-scripts/_ds_enable_hpa.bicep | 2 +- .../src/main/resources/weblogic_tooling_family.json | 2 +- 7 files changed, 13 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index 7f8650a27..88a8a147e 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ - 1.0.74 + 1.0.75 1.0.27 1.0.50 diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh index b82a72a1b..68ae36f60 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh @@ -16,7 +16,7 @@ function get_cluster_uid(){ function scaling_basedon_cpu(){ kubectl autoscale cluster ${WLS_CLUSTER_UID} \ - --cpu-percent=${UTILIZATION_PERSENTAGE} \ + --cpu-percent=${UTILIZATION_PERCENTAGE} \ --min=1 \ --max=${WLS_CLUSTER_SIZE} \ -n ${WLS_NAMESPACE} @@ -42,7 +42,7 @@ spec: resource: name: memory target: - averageUtilization: ${UTILIZATION_PERSENTAGE} + averageUtilization: ${UTILIZATION_PERCENTAGE} type: Utilization EOF @@ -72,4 +72,4 @@ if [ "$HPA_SCALE_TYPE" == "cpu" ]; then scaling_basedon_cpu elif [ "$HPA_SCALE_TYPE" == "memory" ]; then scaling_basedon_memory -fi \ No newline at end of file +fi diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh index 022afe460..fc1867fee 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh @@ -11,7 +11,7 @@ function connect_aks(){ function enable_promethues_metrics(){ # See https://learn.microsoft.com/en-us/azure/azure-monitor/containers/kubernetes-monitoring-enable?tabs=cli#enable-prometheus-and-grafana - az extension add --name k8s-extension + az extension add --name k8s-extension && true ### Use existing Azure Monitor workspace az aks update --enable-azure-monitor-metrics \ @@ -22,8 +22,8 @@ function enable_promethues_metrics(){ utility_validate_status "Enable Promethues Metrics." - az extension add --name aks-preview - az extension remove --name k8s-extension + az extension add --name aks-preview && true + az extension remove --name k8s-extension && true #Verify that the DaemonSet was deployed properly on the Linux node pools #https://learn.microsoft.com/en-us/azure/azure-monitor/containers/kubernetes-monitoring-enable?tabs=cli#managed-prometheus diff --git a/weblogic-azure-aks/src/main/arm/scripts/updateApplications.sh b/weblogic-azure-aks/src/main/arm/scripts/updateApplications.sh index 082b91899..32e9f6fd3 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/updateApplications.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/updateApplications.sh @@ -284,6 +284,9 @@ export ENABLE_CUSTOM_SSL=${constFalse} export WLS_CLUSTER_SIZE=5 export URL_3RD_DATASOURCE=$(echo "[]" | base64) +# Main script +set -Eo pipefail + validate_input install_kubectl diff --git a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep index 5945c548a..e7752ed01 100644 --- a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep +++ b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep @@ -36,7 +36,7 @@ param acrResourceGroupName string = 'acr-contoso-rg' param aksAgentPoolName string = 'agentpool' @maxValue(10000) @minValue(1) -@description('Set the minimum node count for the cluster..') +@description('Set the minimum node count for the cluster.') param aksAgentPoolNodeCount int = 3 @maxValue(1000) @minValue(3) diff --git a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_hpa.bicep b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_hpa.bicep index 214756edc..0b2c9c233 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_hpa.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds_enable_hpa.bicep @@ -48,7 +48,7 @@ resource deploymentScript 'Microsoft.Resources/deploymentScripts@${azure.apiVers value: hpaScaleType } { - name: 'UTILIZATION_PERSENTAGE' + name: 'UTILIZATION_PERCENTAGE' value: utilizationPercentage } { diff --git a/weblogic-azure-aks/src/main/resources/weblogic_tooling_family.json b/weblogic-azure-aks/src/main/resources/weblogic_tooling_family.json index 47b00b574..7d9d38323 100644 --- a/weblogic-azure-aks/src/main/resources/weblogic_tooling_family.json +++ b/weblogic-azure-aks/src/main/resources/weblogic_tooling_family.json @@ -24,7 +24,7 @@ }, { "key": "WME", - "description": "Oracle Weblogic Monitoring Exporter", + "description": "Oracle Weblogic Monitoring Exporter. IMPORTANT note to maintener: This value is hard coded in enablePrometheusMetrics.sh. Please update it there also.", "version": "2.1.9", "imageURL": "ghcr.io/oracle/weblogic-monitoring-exporter:2.1.9", "testedDate": "2024-02-29" From 005fb8da1570495c8b78aefded2712e27636b711 Mon Sep 17 00:00:00 2001 From: Galia Cheng Date: Fri, 10 May 2024 12:06:46 +0800 Subject: [PATCH 43/43] create connect_aks as common function. (#3) --- .../src/main/arm/scripts/inline-scripts/enableHpa.sh | 9 +-------- .../inline-scripts/enablePrometheusMetrics.sh | 10 ++-------- .../inline-scripts/queryDomainConfigurations.sh | 7 ++----- .../main/arm/scripts/inline-scripts/validateAgic.sh | 7 ++----- .../src/main/arm/scripts/queryStorageAccount.sh | 12 ++---------- .../src/main/arm/scripts/setupDBConnections.sh | 12 ++---------- .../src/main/arm/scripts/setupNetworking.sh | 9 ++------- .../src/main/arm/scripts/setupWLSDomain.sh | 7 +------ .../src/main/arm/scripts/updateApplications.sh | 10 +--------- weblogic-azure-aks/src/main/arm/scripts/utility.sh | 12 +++++++++++- .../src/main/arm/scripts/validateApplications.sh | 12 ++---------- .../_ds-output-domain-configurations.bicep | 6 ++++-- .../_ds-query-storage-account.bicep | 6 ++++-- 13 files changed, 36 insertions(+), 83 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh index 68ae36f60..36524bae5 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enableHpa.sh @@ -1,13 +1,6 @@ # Copyright (c) 2024, Oracle Corporation and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. -function connect_aks(){ - az aks get-credentials \ - --resource-group ${AKS_CLUSTER_RG_NAME} \ - --name ${AKS_CLUSTER_NAME} \ - --overwrite-existing -} - function get_cluster_uid(){ local clusterUid=$(kubectl get clusters -n ${WLS_NAMESPACE} -o=jsonpath='{.items[].metadata.name}') utility_validate_status "Obtain cluster UID." @@ -62,7 +55,7 @@ set -Eo pipefail install_kubectl -connect_aks +connect_aks $AKS_CLUSTER_NAME $AKS_CLUSTER_RG_NAME get_cluster_uid diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh index fc1867fee..874ff613f 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/enablePrometheusMetrics.sh @@ -1,13 +1,7 @@ # Copyright (c) 2024, Oracle Corporation and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. -function connect_aks(){ - az aks get-credentials \ - -n $AKS_CLUSTER_NAME \ - -g $AKS_CLUSTER_RG_NAME \ - --overwrite-existing \ - --only-show-errors -} +#!/bin/bash function enable_promethues_metrics(){ # See https://learn.microsoft.com/en-us/azure/azure-monitor/containers/kubernetes-monitoring-enable?tabs=cli#enable-prometheus-and-grafana @@ -396,7 +390,7 @@ install_kubectl install_helm -connect_aks +connect_aks $AKS_CLUSTER_NAME $AKS_CLUSTER_RG_NAME get_wls_monitoring_exporter_image_url diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/queryDomainConfigurations.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/queryDomainConfigurations.sh index bd6e0186d..85121f908 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/queryDomainConfigurations.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/queryDomainConfigurations.sh @@ -1,4 +1,4 @@ -# Copyright (c) 2021, Oracle Corporation and/or its affiliates. +# Copyright (c) 2021, 2024 Oracle Corporation and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # This script runs on Azure Container Instance with Alpine Linux that Azure Deployment script creates. # @@ -15,10 +15,7 @@ echo "install kubectl" az aks install-cli echo "Connect AKS" -az aks get-credentials \ - --resource-group ${AKS_CLUSTER_RESOURCEGROUP_NAME} \ - --name ${AKS_CLUSTER_NAME} \ - --overwrite-existing +connect_aks $AKS_CLUSTER_NAME $AKS_CLUSTER_RESOURCEGROUP_NAME wlsDomainNS="${WLS_DOMAIN_UID}-ns" diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateAgic.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateAgic.sh index df1e81f06..a7756cf14 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateAgic.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateAgic.sh @@ -2,11 +2,6 @@ # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. function wait_for_azure_ingress_ready() { - az aks get-credentials \ - --resource-group ${AKS_CLUSTER_RG_NAME} \ - --name ${AKS_CLUSTER_NAME} \ - --overwrite-existing - local ready=false local attempt=0 @@ -36,4 +31,6 @@ set -Eo pipefail install_kubectl +connect_aks $AKS_CLUSTER_NAME $AKS_CLUSTER_RG_NAME + wait_for_azure_ingress_ready diff --git a/weblogic-azure-aks/src/main/arm/scripts/queryStorageAccount.sh b/weblogic-azure-aks/src/main/arm/scripts/queryStorageAccount.sh index c7467679f..fb2a38c12 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/queryStorageAccount.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/queryStorageAccount.sh @@ -1,4 +1,4 @@ -# Copyright (c) 2021, Oracle Corporation and/or its affiliates. +# Copyright (c) 2021, 2024 Oracle Corporation and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # Inputs: # AKS_CLUSTER_RESOURCEGROUP_NAME @@ -8,14 +8,6 @@ echo "Script ${0} starts" export currentStorageAccount="null" -# Connect to AKS cluster -function connect_aks_cluster() { - az aks get-credentials \ - --resource-group ${AKS_CLUSTER_RESOURCEGROUP_NAME} \ - --name ${AKS_CLUSTER_NAME} \ - --overwrite-existing -} - function query_storage_account() { echo "install kubectl" az aks install-cli @@ -42,7 +34,7 @@ function output_result() { echo $result >$AZ_SCRIPTS_OUTPUT_PATH } -connect_aks_cluster +connect_aks $AKS_CLUSTER_NAME $AKS_CLUSTER_RESOURCEGROUP_NAME query_storage_account diff --git a/weblogic-azure-aks/src/main/arm/scripts/setupDBConnections.sh b/weblogic-azure-aks/src/main/arm/scripts/setupDBConnections.sh index a8dac6e0b..8d208b341 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/setupDBConnections.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/setupDBConnections.sh @@ -1,4 +1,4 @@ -# Copyright (c) 2021, Oracle Corporation and/or its affiliates. +# Copyright (c) 2021, 2024 Oracle Corporation and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. echo "Script ${0} starts" @@ -80,14 +80,6 @@ function validate_input() { fi } -# Connect to AKS cluster -function connect_aks_cluster() { - az aks get-credentials \ - --resource-group ${AKS_RESOURCE_GROUP_NAME} \ - --name ${AKS_NAME} \ - --overwrite-existing -} - function create_datasource_model_configmap_and_secret() { echo "get data source secret name" jndiLabel=${JDBC_DATASOURCE_NAME//\//\_} @@ -289,7 +281,7 @@ export wlsDomainNS="${WLS_DOMAIN_UID}-ns" validate_input -connect_aks_cluster +connect_aks $AKS_NAME $AKS_RESOURCE_GROUP_NAME install_kubectl diff --git a/weblogic-azure-aks/src/main/arm/scripts/setupNetworking.sh b/weblogic-azure-aks/src/main/arm/scripts/setupNetworking.sh index 52d3fa539..084524d72 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/setupNetworking.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/setupNetworking.sh @@ -1,4 +1,4 @@ -# Copyright (c) 2021, Oracle Corporation and/or its affiliates. +# Copyright (c) 2021, 2024 Oracle Corporation and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. echo "Script ${0} starts" @@ -114,11 +114,6 @@ function validate_input() { fi } -# Connect to AKS cluster -function connect_aks_cluster() { - az aks get-credentials --resource-group ${AKS_CLUSTER_RG_NAME} --name ${AKS_CLUSTER_NAME} --overwrite-existing -} - function create_svc_lb() { # No lb svc inputs if [[ "${LB_SVC_VALUES}" != "[]" ]]; then @@ -147,7 +142,7 @@ validate_input install_utilities -connect_aks_cluster +connect_aks $AKS_CLUSTER_NAME $AKS_CLUSTER_RG_NAME create_svc_lb diff --git a/weblogic-azure-aks/src/main/arm/scripts/setupWLSDomain.sh b/weblogic-azure-aks/src/main/arm/scripts/setupWLSDomain.sh index f10b84f38..fbdcab296 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/setupWLSDomain.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/setupWLSDomain.sh @@ -285,11 +285,6 @@ function install_utilities() { validate_status ${ret} } -# Connect to AKS cluster -function connect_aks_cluster() { - az aks get-credentials --resource-group ${AKS_CLUSTER_RESOURCEGROUP_NAME} --name ${AKS_CLUSTER_NAME} --overwrite-existing -} - # remove the operator if it is not running. function uninstall_operator() { echo "remove operator" @@ -772,7 +767,7 @@ query_acr_credentials build_docker_image -connect_aks_cluster +connect_aks $AKS_CLUSTER_NAME $AKS_CLUSTER_RESOURCEGROUP_NAME install_wls_operator diff --git a/weblogic-azure-aks/src/main/arm/scripts/updateApplications.sh b/weblogic-azure-aks/src/main/arm/scripts/updateApplications.sh index 32e9f6fd3..9a6bf25a4 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/updateApplications.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/updateApplications.sh @@ -98,14 +98,6 @@ function validate_input() { fi } -# Connect to AKS cluster -function connect_aks_cluster() { - az aks get-credentials \ - --resource-group ${AKS_CLUSTER_RESOURCEGROUP_NAME} \ - --name ${AKS_CLUSTER_NAME} \ - --overwrite-existing -} - function query_wls_cluster_info(){ WLS_CLUSTER_SIZE=$(kubectl -n ${wlsDomainNS} get domain ${WLS_DOMAIN_UID} -o json \ | jq '. | .status.clusters[] | select(.clusterName == "'${constClusterName}'") | .maximumReplicas') @@ -291,7 +283,7 @@ validate_input install_kubectl -connect_aks_cluster +connect_aks $AKS_CLUSTER_NAME $AKS_CLUSTER_RESOURCEGROUP_NAME query_wls_cluster_info diff --git a/weblogic-azure-aks/src/main/arm/scripts/utility.sh b/weblogic-azure-aks/src/main/arm/scripts/utility.sh index d2f8c0655..878267bcf 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/utility.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/utility.sh @@ -1,4 +1,4 @@ -# Copyright (c) 2021, Oracle Corporation and/or its affiliates. +# Copyright (c) 2021, 2024 Oracle Corporation and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # This script runs on Azure Container Instance with Alpine Linux that Azure Deployment script creates. @@ -27,6 +27,16 @@ function utility_validate_status() { fi } +function connect_aks(){ + az aks get-credentials \ + -n $1 \ + -g $2 \ + --overwrite-existing \ + --only-show-errors + + utility_validate_status "Finished connecting to AKS cluster." +} + # JAVA_HOME=/usr/lib/jvm/java-11-openjdk function install_jdk() { local ready=false diff --git a/weblogic-azure-aks/src/main/arm/scripts/validateApplications.sh b/weblogic-azure-aks/src/main/arm/scripts/validateApplications.sh index b24db54af..a9850775a 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/validateApplications.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/validateApplications.sh @@ -1,15 +1,7 @@ -# Copyright (c) 2021, Oracle Corporation and/or its affiliates. +# Copyright (c) 2021, 2024 Oracle Corporation and/or its affiliates. # Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. # This script runs on Azure Container Instance with Alpine Linux that Azure Deployment script creates. -# Connect to AKS cluster -function connect_aks_cluster() { - az aks get-credentials \ - --resource-group ${AKS_RESOURCE_GROUP_NAME} \ - --name ${AKS_NAME} \ - --overwrite-existing -} - function validate_app() { # make sure all the application are active, if not, fail the deployment. local wlsDomainNS="${WLS_DOMAIN_UID}-ns" @@ -32,6 +24,6 @@ source ${scriptDir}/utility.sh install_kubectl -connect_aks_cluster +connect_aks $AKS_NAME $AKS_RESOURCE_GROUP_NAME validate_app \ No newline at end of file diff --git a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds-output-domain-configurations.bicep b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds-output-domain-configurations.bicep index 515c5de86..5ede45003 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds-output-domain-configurations.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds-output-domain-configurations.bicep @@ -1,4 +1,4 @@ -// Copyright (c) 2021, Oracle Corporation and/or its affiliates. +// Copyright (c) 2021, 2024 Oracle Corporation and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. param aksClusterRGName string = '' @@ -11,7 +11,9 @@ param wlsClusterName string = 'cluster-1' param wlsDomainUID string = 'sample-domain1' // To mitigate arm-ttk error: Unreferenced variable: $fxv#0 +var base64_common = loadFileAsBase64('../../../arm/scripts/common.sh') var base64_queryDomainConfigurations = loadFileAsBase64('../../../arm/scripts/inline-scripts/queryDomainConfigurations.sh') +var base64_utility = loadFileAsBase64('../../../arm/scripts/utility.sh') resource deploymentScript 'Microsoft.Resources/deploymentScripts@${azure.apiVersionForDeploymentScript}' = { name: 'ds-query-wls-configurations' @@ -38,7 +40,7 @@ resource deploymentScript 'Microsoft.Resources/deploymentScripts@${azure.apiVers value: wlsDomainUID } ] - scriptContent: base64ToString(base64_queryDomainConfigurations) + scriptContent: format('{0}\r\n\r\n{1}\r\n\r\n{2}',base64ToString(base64_common), base64ToString(base64_utility), base64ToString(base64_queryDomainConfigurations)) cleanupPreference: 'OnSuccess' retentionInterval: 'P1D' forceUpdateTag: utcValue diff --git a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds-query-storage-account.bicep b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds-query-storage-account.bicep index 7dceb6622..88ca9ed37 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds-query-storage-account.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds-query-storage-account.bicep @@ -1,4 +1,4 @@ -// Copyright (c) 2021, Oracle Corporation and/or its affiliates. +// Copyright (c) 2021, 2024 Oracle Corporation and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. param aksClusterName string = '' @@ -10,7 +10,9 @@ param location string param utcValue string = utcNow() // To mitigate arm-ttk error: Unreferenced variable: $fxv#0 +var base64_common = loadFileAsBase64('../../../arm/scripts/common.sh') var base64_queryStorageAccount = loadFileAsBase64('../../../arm/scripts/queryStorageAccount.sh') +var base64_utility = loadFileAsBase64('../../../arm/scripts/utility.sh') var const_deploymentName = 'ds-query-storage-account' resource deploymentScript 'Microsoft.Resources/deploymentScripts@${azure.apiVersionForDeploymentScript}' = { @@ -30,7 +32,7 @@ resource deploymentScript 'Microsoft.Resources/deploymentScripts@${azure.apiVers value: aksClusterRGName } ] - scriptContent: base64ToString(base64_queryStorageAccount) + scriptContent: format('{0}\r\n\r\n{1}\r\n\r\n{2}',base64ToString(base64_common), base64ToString(base64_utility), base64ToString(base64_queryStorageAccount)) cleanupPreference: 'OnSuccess' retentionInterval: 'P1D' forceUpdateTag: utcValue
  • Install WebLogic Monitoring Exporter to scrape WebLogic Server metrics.