116 lines
6.7 KiB
Smarty
116 lines
6.7 KiB
Smarty
{{- define "tc.v1.common.lib.vpa.validation" -}}
|
|
{{- $objectData := .objectData -}}
|
|
{{- $rootCtx := .rootCtx -}}
|
|
|
|
{{- $updPolicy := $objectData.updatePolicy -}}
|
|
{{- if $updPolicy -}}
|
|
{{- if not (kindIs "map" $updPolicy) -}}
|
|
{{- fail (printf "Vertical Pod Autoscaler - Expected [vpa.%s.updatePolicy] to be a dictionary, but got [%s]" $objectData.vpaName (kindOf $updPolicy)) -}}
|
|
{{- end -}}
|
|
|
|
{{- $validModes := list "Auto" "Off" "Initial" "Recreate" -}}
|
|
{{- if and $updPolicy.updateMode (not (mustHas $updPolicy.updateMode $validModes)) -}}
|
|
{{- fail (printf "Vertical Pod Autoscaler - Value [%s] on [vpa.%s.updatePolicy.updateMode] is not valid. Must be one of [%s]" $updPolicy.updateMode $objectData.vpaName (join ", " $validModes)) -}}
|
|
{{- end -}}
|
|
|
|
{{- if and $updPolicy.minReplicas (le ($updPolicy.minReplicas | int) 0) -}}
|
|
{{- fail (printf "Vertical Pod Autoscaler - Value [%v] on [vpa.%s.updatePolicy.minReplicas] must be greater than 0." $updPolicy.minReplicas $objectData.vpaName) -}}
|
|
{{- end -}}
|
|
|
|
{{- if $updPolicy.evictionRequirements -}}
|
|
{{- if not (kindIs "slice" $updPolicy.evictionRequirements) -}}
|
|
{{- fail (printf "Vertical Pod Autoscaler - Value on [vpa.%s.updatePolicy.evictionRequirements] must be a list, but got [%s]" $objectData.vpaName (kindOf $updPolicy.evictionRequirements)) -}}
|
|
{{- end -}}
|
|
{{- range $idx, $req := $updPolicy.evictionRequirements -}}
|
|
{{- if not (kindIs "map" $req) -}}
|
|
{{- fail (printf "Vertical Pod Autoscaler - Value on [vpa.%s.updatePolicy.evictionRequirements.%d] must be a map, but got [%s]" $objectData.vpaName $idx (kindOf $req)) -}}
|
|
{{- end -}}
|
|
|
|
{{- if not $req.resources -}}
|
|
{{- fail (printf "Vertical Pod Autoscaler - Value on [vpa.%s.updatePolicy.evictionRequirements.%d.resources] is required." $objectData.vpaName $idx) -}}
|
|
{{- end -}}
|
|
|
|
{{- if not (kindIs "slice" $req.resources) -}}
|
|
{{- fail (printf "Vertical Pod Autoscaler - Value on [vpa.%s.updatePolicy.evictionRequirements.%d.resources] must be a list, but got [%s]" $objectData.vpaName $idx (kindOf $req.resources)) -}}
|
|
{{- end -}}
|
|
|
|
{{- $validResources := (list "cpu" "memory") -}}
|
|
{{- range $x, $r := $req.resources -}}
|
|
{{- if not (mustHas $r $validResources) -}}
|
|
{{- fail (printf "Vertical Pod Autoscaler - Value [%s] on [vpa.%s.updatePolicy.evictionRequirements.%d.resources.%d] is not valid. Must be one of [%s]" $r $objectData.vpaName $idx $x (join ", " $validResources)) -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- $validReq := (list "TargetHigherThanRequests" "TargetLowerThanRequests") -}}
|
|
{{- if not (mustHas $req.changeRequirement $validReq) -}}
|
|
{{- fail (printf "Vertical Pod Autoscaler - Value [%s] on [vpa.%s.updatePolicy.evictionRequirements.%d.changeRequirement] is not valid. Must be one of [%s]" $req.changeRequirement $objectData.vpaName $idx (join ", " $validReq)) -}}
|
|
{{- end -}}
|
|
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- $resPolicy := $objectData.resourcePolicy -}}
|
|
{{- if and $resPolicy $resPolicy.containerPolicies -}}
|
|
{{- if not (kindIs "slice" $resPolicy.containerPolicies) -}}
|
|
{{- fail (printf "Vertical Pod Autoscaler - Value on [vpa.%s.resourcePolicy.containerPolicies] must be a list, but got [%s]" $objectData.vpaName (kindOf $resPolicy.containerPolicies)) -}}
|
|
{{- end -}}
|
|
|
|
{{- $validModes := (list "Auto" "Off") -}}
|
|
{{- range $idx, $cPol := $resPolicy.containerPolicies -}}
|
|
{{- if not (kindIs "map" $cPol) -}}
|
|
{{- fail (printf "Vertical Pod Autoscaler - Expected [vpa.%s.resourcePolicy.containerPolicies.%d] to be a dictionary, but got [%s]" $objectData.vpaName $idx (kindOf $cPol)) -}}
|
|
{{- end -}}
|
|
|
|
{{- $validContainers := mustAppend $objectData.containerNames "*" -}}
|
|
{{- if not (mustHas $cPol.containerName $validContainers) -}}
|
|
{{- fail (printf "Vertical Pod Autoscaler - Value [%s] on [vpa.%s.resourcePolicy.containerPolicies.%d.containerName] is not valid. Must be one of [%s]" $cPol.containerName $objectData.vpaName $idx (join ", " $validContainers)) -}}
|
|
{{- end -}}
|
|
|
|
{{- if and $cPol.mode (not (mustHas $cPol.mode $validModes)) -}}
|
|
{{- fail (printf "Vertical Pod Autoscaler - Value [%s] on [vpa.%s.resourcePolicy.containerPolicies.%d.mode] is not valid. Must be one of [%s]" $cPol.mode $objectData.vpaName $idx (join ", " $validModes)) -}}
|
|
{{- end -}}
|
|
|
|
{{- if $cPol.controlledResources -}}
|
|
{{- if not (kindIs "slice" $cPol.controlledResources) -}}
|
|
{{- fail (printf "Vertical Pod Autoscaler - Expected [vpa.%s.resourcePolicy.containerPolicies.%d.controlledResources] to be a list, but got [%s]" $objectData.vpaName $idx (kindOf $cPol.controlledResources)) -}}
|
|
{{- end -}}
|
|
|
|
{{- $validRes := (list "cpu" "memory") -}}
|
|
{{- range $x, $r := $cPol.controlledResources -}}
|
|
{{- if not (mustHas $r $validRes) -}}
|
|
{{- fail (printf "Vertical Pod Autoscaler - Value [%s] on [vpa.%s.resourcePolicy.containerPolicies.%d.controlledResources.%d] is not valid. Must be one of [%s]" $r $objectData.vpaName $idx $x (join ", " $validRes)) -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- if $cPol.controlledValues -}}
|
|
{{- $validVals := (list "RequestsAndLimits" "RequestsOnly") -}}
|
|
{{- if not (mustHas $cPol.controlledValues $validVals) -}}
|
|
{{- fail (printf "Vertical Pod Autoscaler - Value [%s] on [vpa.%s.resourcePolicy.containerPolicies.%d.controlledValues] is not valid. Must be one of [%s]" $cPol.controlledValues $objectData.vpaName $idx (join ", " $validVals)) -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- $data := (include "tc.v1.common.lib.resources.validation.data" .) | fromJson -}}
|
|
{{- $regex := $data.regex -}}
|
|
{{- $errorMsg := $data.errorMsg -}}
|
|
|
|
{{- $items := (list "minAllowed" "maxAllowed") -}}
|
|
{{- range $item := $items -}}
|
|
{{- if not (get $cPol $item) -}}{{- continue -}}{{- end -}}
|
|
|
|
{{- if not (kindIs "map" (get $cPol $item)) -}}
|
|
{{- fail (printf "Vertical Pod Autoscaler - Expected [vpa.%s.resourcePolicy.containerPolicies.%d.%s] to be a dictionary, but got [%s]" $objectData.vpaName $idx $item (kindOf (get $cPol $item))) -}}
|
|
{{- end -}}
|
|
|
|
{{- range $k, $v := (get $cPol $item) -}}
|
|
{{- if not (mustRegexMatch (get $regex $k) (toString $v)) -}}
|
|
{{- fail (printf "Vertical Pod Autoscaler - Expected [vpa.%s.resourcePolicy.containerPolicies.%d.%s.%s] to have one of the following formats [%s], but got [%s]" $objectData.vpaName $idx $item $k (get $errorMsg $k) $v) -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- end -}}
|