Skip to content
Merged
119 changes: 118 additions & 1 deletion charts/azuremonitor-containerinsights/templates/_helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -103,4 +103,121 @@ HOST CA CERTIFICATE MOUNTING SECTION (from AKS chart)
{{- define "should_mount_hostca" -}}
{{- $cloud_environment := (.Values.global.commonGlobals.CloudEnvironment | default "azurepubliccloud" | lower) }}
{{- has $cloud_environment (list "usnat" "ussec" "azurebleucloud") -}}
{{- end }}
{{- end }}
{{/*
=============================================================================
RESOURCE QUANTITY HELPERS (for toggle processing)
=============================================================================
*/}}

{{/*
Compare two resource quantities and return the maximum.
This replicates the Go maxResourceValue function using Kubernetes resource.ParseQuantity logic.
Supports all Kubernetes quantity formats: decimal fractions, binary/decimal units, CPU millicores.
Usage: {{ include "maxResourceValue" (list "1.5Gi" "2196Mi") }}
*/}}
{{- define "maxResourceValue" -}}
{{- $val1 := index . 0 -}}
{{- $val2 := index . 1 -}}

{{/* Parse val1 to bytes/millicores */}}
{{- $val1Parsed := include "parseQuantity" $val1 -}}
{{- $val2Parsed := include "parseQuantity" $val2 -}}

{{/* Compare parsed values */}}
{{- if ge ($val1Parsed | int64) ($val2Parsed | int64) -}}
{{- $val1 -}}
{{- else -}}
{{- $val2 -}}
{{- end -}}
{{- end }}

{{/*
Parse a Kubernetes resource quantity to comparable integer value.
Mimics k8s.io/apimachinery/pkg/api/resource.ParseQuantity behavior.
Returns value in smallest unit (bytes for memory, millicores for CPU).
*/}}
{{- define "parseQuantity" -}}
{{- $quantity := . -}}
{{- $quantity = trim $quantity -}}

{{/* Handle zero/empty */}}
{{- if or (eq $quantity "") (eq $quantity "0") -}}
0
{{- else -}}

{{/* Extract number and suffix using regex */}}
{{- $number := regexFind "^[0-9.]+" $quantity -}}
{{- $suffix := trimPrefix $number $quantity -}}

{{/* Parse the numeric part - handle decimals */}}
{{- $intPart := 0 -}}
{{- $fracPart := 0 -}}
{{- $fracDivisor := 1 -}}

{{- if contains "." $number -}}
{{- $parts := split "." $number -}}
{{- $intPart = index $parts 0 | int -}}
{{- $fracStr := index $parts 1 -}}
{{- $fracPart = $fracStr | int -}}
{{- $fracLen := len $fracStr -}}
{{- if eq $fracLen 1 -}}{{- $fracDivisor = 10 -}}
{{- else if eq $fracLen 2 -}}{{- $fracDivisor = 100 -}}
{{- else if eq $fracLen 3 -}}{{- $fracDivisor = 1000 -}}
{{- else if eq $fracLen 4 -}}{{- $fracDivisor = 10000 -}}
{{- else if eq $fracLen 5 -}}{{- $fracDivisor = 100000 -}}
{{- else -}}{{- $fracDivisor = 1000000 -}}
{{- end -}}
{{- else -}}
{{- $intPart = $number | int -}}
{{- end -}}

{{/* Convert based on suffix - return in base units (bytes for memory, millicores for CPU) */}}
{{- $result := 0 -}}

{{/* Binary suffixes (1024-based) */}}
{{- if eq $suffix "Ki" -}}
{{- $result = add (mul $intPart 1024) (div (mul $fracPart 1024) $fracDivisor) -}}
{{- else if eq $suffix "Mi" -}}
{{- $result = add (mul $intPart 1048576) (div (mul $fracPart 1048576) $fracDivisor) -}}
{{- else if eq $suffix "Gi" -}}
{{- $result = add (mul $intPart 1073741824) (div (mul $fracPart 1073741824) $fracDivisor) -}}
{{- else if eq $suffix "Ti" -}}
{{- $result = add (mul $intPart 1099511627776) (div (mul $fracPart 1099511627776) $fracDivisor) -}}
{{- else if eq $suffix "Pi" -}}
{{- $result = add (mul $intPart 1125899906842624) (div (mul $fracPart 1125899906842624) $fracDivisor) -}}

{{/* Decimal suffixes (1000-based) */}}
{{- else if eq $suffix "k" -}}
{{- $result = add (mul $intPart 1000) (div (mul $fracPart 1000) $fracDivisor) -}}
{{- else if eq $suffix "M" -}}
{{- $result = add (mul $intPart 1000000) (div (mul $fracPart 1000000) $fracDivisor) -}}
{{- else if eq $suffix "G" -}}
{{- $result = add (mul $intPart 1000000000) (div (mul $fracPart 1000000000) $fracDivisor) -}}
{{- else if eq $suffix "T" -}}
{{- $result = add (mul $intPart 1000000000000) (div (mul $fracPart 1000000000000) $fracDivisor) -}}
{{- else if eq $suffix "P" -}}
{{- $result = add (mul $intPart 1000000000000000) (div (mul $fracPart 1000000000000000) $fracDivisor) -}}

{{/* CPU millicores */}}
{{- else if eq $suffix "m" -}}
{{- $result = add (mul $intPart 1) (div $fracPart $fracDivisor) -}}

{{/* No suffix - treat as base unit */}}
{{- else if eq $suffix "" -}}
{{- if contains "." $number -}}
{{/* Decimal number without suffix - assume CPU cores, convert to millicores */}}
{{- $result = add (mul $intPart 1000) (div (mul $fracPart 1000) $fracDivisor) -}}
Comment thread
wanlonghenry marked this conversation as resolved.
{{- else -}}
{{/* Integer without suffix - could be bytes or cores */}}
{{- $result = $intPart -}}
{{- end -}}

{{/* Unknown suffix - treat as base unit */}}
{{- else -}}
{{- $result = $intPart -}}
{{- end -}}

{{- $result -}}
{{- end -}}
{{- end }}
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,22 @@
{{- end -}}
{{/* Outer condition: AKS always renders, Arc renders with valid credentials */}}
{{- if or (not $isArcExtension) (and $isArcExtension (and (ne .Values.amalogs.secret.key "<your_workspace_key>") (ne .Values.amalogs.secret.wsid "<your_workspace_id>") (or (ne .Values.amalogs.env.clusterName "<your_cluster_name>") (ne .Values.amalogs.env.clusterId "<your_cluster_id>") (ne .Values.Azure.Cluster.ResourceId "<your_cluster_id>")))) }}
{{/* AKS DaemonSet Sizing - only for AKS */}}
{{/* DaemonSet Sizing: AKS uses t-shirt sizing loop, Arc generates a single DaemonSet */}}
{{- $useDaemonSetSizing := false -}}
{{- $singleSize := dict -}}
{{- $sizes := list (dict) -}}
{{- $prevmaxCPU := 0 -}}
{{- if not $isArcExtension }}
{{- $useDaemonSetSizing := and .Values.global.commonGlobals.isAutomaticSKU .Values.OmsAgent.enableDaemonSetSizing -}}
{{- $singleSize := dict "containers" (dict "addon-token-adapter" (dict "cpuLimit" "100m" "memoryLimit" "100Mi" "cpuRequest" "20m" "memoryRequest" "50Mi") "ama-logs" (dict "cpuLimit" .Values.OmsAgent.omsAgentDsCPULimitLinux "memoryLimit" .Values.OmsAgent.omsAgentDsMemoryLimitLinux "cpuRequest" "75m" "memoryRequest" "325Mi") "ama-logs-prometheus" (dict "cpuLimit" .Values.OmsAgent.omsAgentPrometheusSidecarCPULimit "memoryLimit" .Values.OmsAgent.omsAgentPrometheusSidecarMemoryLimit "cpuRequest" "75m" "memoryRequest" "225Mi")) -}}
{{- $sizes := list ($singleSize) -}}
{{/* - if $useDaemonSetSizing - */}}
{{/* - $singleSize = .Values.OmsAgent.daemonSetSizingValues.singleSize - */}}
{{/* - $sizes = list ($singleSize) - */}}
{{/* - $sizes = prepend .Values.OmsAgent.daemonSetSizingValues.tShirtSizes $singleSize - */}}
{{/* - end - */}}
{{- $useDaemonSetSizing = and (eq .Values.Azure.Cluster.Kind "automatic") .Values.OmsAgent.enableDaemonSetSizing -}}
{{- $singleSize = .Values.OmsAgent.daemonSetSizingValues.singleSize -}}
{{- $sizes = list $singleSize -}}
{{- if $useDaemonSetSizing -}}
{{- $sizes = prepend .Values.OmsAgent.daemonSetSizingValues.tShirtSizes $singleSize -}}
{{- else -}}
{{- $sizes = list $singleSize -}}
{{- end -}}
{{- end }}
{{/* Generate DaemonSets */}}
{{- $prevmaxCPU := 0 -}}
{{- range $index, $size := $sizes -}}
{{- if gt $index 0 }}
---
Expand All @@ -35,7 +39,7 @@
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: ama-logs
name: ama-logs{{- if gt $index 0 }}-{{ $size.name }}{{- end }}
Comment thread
wanlonghenry marked this conversation as resolved.
namespace: kube-system
labels:
{{- if $isArcExtension }}
Expand All @@ -48,11 +52,9 @@ metadata:
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: Reconcile
{{- end }}
{{/*
{{- if and $useDaemonSetSizing $size.name }}
kubernetes.azure.com/ds-tshirt-size: {{ $size.name }}
{{- end }}
*/}}
{{- end }}
component: ama-logs-agent
tier: node
Expand All @@ -70,11 +72,9 @@ spec:
{{- else }}
component: ama-logs-agent
tier: node
{{/*
{{- if and $useDaemonSetSizing $size.name }}
kubernetes.azure.com/ds-tshirt-size: {{ $size.name }}
{{- end }}
*/}}
{{- end }}
template:
metadata:
Expand All @@ -85,11 +85,9 @@ spec:
component: ama-logs-agent
tier: node
kubernetes.azure.com/managedby: aks
{{/*
{{- if and $useDaemonSetSizing $size.name }}
kubernetes.azure.com/ds-tshirt-size: {{ $size.name }}
{{- end }}
*/}}
{{- end }}
annotations:
{{- if $isArcExtension }}
Expand Down Expand Up @@ -245,8 +243,8 @@ spec:
resources:
limits:
{{- $containerResources := index $size.containers "ama-logs" }}
cpu: {{ $containerResources.cpuLimit }}
memory: {{ $containerResources.memoryLimit }}
cpu: {{ include "maxResourceValue" (list $.Values.OmsAgent.omsAgentDsCPULimitLinux $containerResources.cpuLimit) }}
memory: {{ include "maxResourceValue" (list $.Values.OmsAgent.omsAgentDsMemoryLimitLinux $containerResources.memoryLimit) }}
requests:
{{- $containerResources := index $size.containers "ama-logs" }}
cpu: {{ $containerResources.cpuRequest }}
Expand Down Expand Up @@ -658,8 +656,8 @@ spec:
resources:
limits:
{{- $containerResources := index $size.containers "ama-logs-prometheus" }}
cpu: {{ $containerResources.cpuLimit }}
memory: {{ $containerResources.memoryLimit }}
cpu: {{ include "maxResourceValue" (list $.Values.OmsAgent.omsAgentPrometheusSidecarCPULimit $containerResources.cpuLimit) }}
Comment thread
wanlonghenry marked this conversation as resolved.
memory: {{ include "maxResourceValue" (list $.Values.OmsAgent.omsAgentPrometheusSidecarMemoryLimit $containerResources.memoryLimit) }}
requests:
{{- $containerResources := index $size.containers "ama-logs-prometheus" }}
cpu: {{ $containerResources.cpuRequest }}
Expand Down Expand Up @@ -787,7 +785,7 @@ spec:
{{- end }}
{{- end }}
{{- else }}
{{- $useDaemonSetSizing := and $.Values.global.commonGlobals.isAutomaticSKU $.Values.OmsAgent.enableDaemonSetSizing -}}
{{- $useDaemonSetSizing := and (eq $.Values.Azure.Cluster.Kind "automatic") $.Values.OmsAgent.enableDaemonSetSizing }}
{{- $singleSize := dict "name" "" }}
affinity:
nodeAffinity:
Expand Down Expand Up @@ -940,4 +938,3 @@ spec:
{{- end }}
{{- end }}
{{- end }}
{{- end }}
Loading