mirror of
https://github.com/outbackdingo/cozystack.git
synced 2026-01-27 18:18:41 +00:00
[cozy-lib] Fix malformed ResourceQuota rendering for LoadBalancer services (#1642)
This patch adds special handling for raw Kubernetes ResourceQuota fields, such as `services.loadbalancers`, preventing them from being wrapped as `limits.*` or `requests.*` keys by the flatten helper. This ensures that LoadBalancer quotas render correctly in tenant specifications. ```release-note [cozy-lib] Correctly render services.loadbalancers in ResourceQuota without limits.* or requests.* prefixes. ``` <!-- Thank you for making a contribution! Here are some tips for you: - Start the PR title with the [label] of Cozystack component: - For system components: [platform], [system], [linstor], [cilium], [kube-ovn], [dashboard], [cluster-api], etc. - For managed apps: [apps], [tenant], [kubernetes], [postgres], [virtual-machine] etc. - For development and maintenance: [tests], [ci], [docs], [maintenance]. - If it's a work in progress, consider creating this PR as a draft. - Don't hesistate to ask for opinion and review in the community chats, even if it's still a draft. - Add the label `backport` if it's a bugfix that needs to be backported to a previous version. --> ## What this PR does ### Release note <!-- Write a release note: - Explain what has changed internally and for users. - Start with the same [label] as in the PR title - Follow the guidelines at https://github.com/kubernetes/community/blob/master/contributors/guide/release-notes.md. --> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Refactor** * Resource flattening now handles compute and quota keys separately: compute values are sanitized/flattened, quota-like inputs are emitted directly as plain YAML. * **Documentation** * Added in-template comments and clarified examples for resource processing behavior. * **New Features** * CI now runs unit tests; new test targets and test harnesses added along with a test chart and test cases for quota handling. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
@@ -174,15 +174,68 @@
|
||||
{{- end }}
|
||||
|
||||
{{- define "cozy-lib.resources.flatten" -}}
|
||||
{{- /*
|
||||
This helper either outputs raw ResourceQuota fields (e.g., services.loadbalancers)
|
||||
as-is, or flattens sanitized resource maps into limits.* / requests.* keys.
|
||||
|
||||
If ALL keys in the input are recognized quota keys (pods, services.*, etc.),
|
||||
the input is output directly as YAML. Otherwise, the input is treated as a
|
||||
resource map and processed through sanitize + flatten.
|
||||
|
||||
Do not mix quota keys and resource keys in a single call.
|
||||
*/ -}}
|
||||
{{- $input := index . 0 -}}
|
||||
{{- $ctx := index . 1 -}}
|
||||
|
||||
{{- $rawQuotaKeys := list
|
||||
"pods"
|
||||
"services"
|
||||
"services.loadbalancers"
|
||||
"services.nodeports"
|
||||
"services.clusterip"
|
||||
"configmaps"
|
||||
"secrets"
|
||||
"persistentvolumeclaims"
|
||||
"replicationcontrollers"
|
||||
"resourcequotas"
|
||||
-}}
|
||||
|
||||
{{- $computeKeys := list
|
||||
"cpu"
|
||||
"memory"
|
||||
"ephemeral-storage"
|
||||
-}}
|
||||
|
||||
{{- $out := dict -}}
|
||||
{{- $res := include "cozy-lib.resources.sanitize" . | fromYaml -}}
|
||||
{{- $computeResources := dict -}}
|
||||
{{- $quotaResources := dict -}}
|
||||
|
||||
{{- range $k, $v := $input }}
|
||||
{{- if or (has $k $computeKeys) (hasPrefix "limits." $k) (hasPrefix "requests." $k) }}
|
||||
{{- $_ := set $computeResources $k $v }}
|
||||
{{- else if has $k $rawQuotaKeys }}
|
||||
{{- $_ := set $quotaResources $k $v }}
|
||||
{{- else }}
|
||||
{{- $_ := set $computeResources $k $v }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{- if $computeResources }}
|
||||
{{- $res := include "cozy-lib.resources.sanitize" (list $computeResources (index . 1)) | fromYaml -}}
|
||||
{{- range $section, $values := $res }}
|
||||
{{- range $k, $v := $values }}
|
||||
{{- $key := printf "%s.%s" $section $k }}
|
||||
{{- if ne $key "limits.storage" }}
|
||||
{{- $_ := set $out $key $v }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- range $k, $v := $values }}
|
||||
{{- $key := printf "%s.%s" $section $k }}
|
||||
{{- if ne $key "limits.storage" }}
|
||||
{{- $_ := set $out $key $v }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{- range $k, $v := $quotaResources }}
|
||||
{{- $_ := set $out $k $v }}
|
||||
{{- end }}
|
||||
|
||||
{{- $out | toYaml }}
|
||||
|
||||
{{- end }}
|
||||
|
||||
Reference in New Issue
Block a user