typekro 0.44.1 → 0.45.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/kubernetes/bun-api-client.d.ts +0 -10
- package/dist/core/kubernetes/bun-api-client.d.ts.map +1 -1
- package/dist/core/kubernetes/bun-api-client.js +77 -3
- package/dist/core/kubernetes/bun-api-client.js.map +1 -1
- package/dist/core/references/schema-proxy.d.ts +17 -0
- package/dist/core/references/schema-proxy.d.ts.map +1 -1
- package/dist/core/references/schema-proxy.js +53 -3
- package/dist/core/references/schema-proxy.js.map +1 -1
- package/dist/core/serialization/schema.d.ts.map +1 -1
- package/dist/core/serialization/schema.js +52 -20
- package/dist/core/serialization/schema.js.map +1 -1
- package/dist/core/types/serialization.d.ts +5 -2
- package/dist/core/types/serialization.d.ts.map +1 -1
- package/dist/factories/apisix/resources/helm.d.ts +2 -2
- package/dist/factories/apisix/resources/helm.d.ts.map +1 -1
- package/dist/factories/apisix/resources/helm.js +7 -11
- package/dist/factories/apisix/resources/helm.js.map +1 -1
- package/dist/factories/aws-load-balancer-controller/compositions/bootstrap.d.ts +38 -0
- package/dist/factories/aws-load-balancer-controller/compositions/bootstrap.d.ts.map +1 -0
- package/dist/factories/aws-load-balancer-controller/compositions/bootstrap.js +101 -0
- package/dist/factories/aws-load-balancer-controller/compositions/bootstrap.js.map +1 -0
- package/dist/factories/aws-load-balancer-controller/compositions/helm-repository.d.ts +10 -0
- package/dist/factories/aws-load-balancer-controller/compositions/helm-repository.d.ts.map +1 -0
- package/dist/factories/aws-load-balancer-controller/compositions/helm-repository.js +25 -0
- package/dist/factories/aws-load-balancer-controller/compositions/helm-repository.js.map +1 -0
- package/dist/factories/aws-load-balancer-controller/compositions/index.d.ts +3 -0
- package/dist/factories/aws-load-balancer-controller/compositions/index.d.ts.map +1 -0
- package/dist/factories/aws-load-balancer-controller/compositions/index.js +3 -0
- package/dist/factories/aws-load-balancer-controller/compositions/index.js.map +1 -0
- package/dist/factories/aws-load-balancer-controller/constants.d.ts +21 -0
- package/dist/factories/aws-load-balancer-controller/constants.d.ts.map +1 -0
- package/dist/factories/aws-load-balancer-controller/constants.js +29 -0
- package/dist/factories/aws-load-balancer-controller/constants.js.map +1 -0
- package/dist/factories/aws-load-balancer-controller/index.d.ts +17 -0
- package/dist/factories/aws-load-balancer-controller/index.d.ts.map +1 -0
- package/dist/factories/aws-load-balancer-controller/index.js +16 -0
- package/dist/factories/aws-load-balancer-controller/index.js.map +1 -0
- package/dist/factories/aws-load-balancer-controller/resources/elbv2.d.ts +45 -0
- package/dist/factories/aws-load-balancer-controller/resources/elbv2.d.ts.map +1 -0
- package/dist/factories/aws-load-balancer-controller/resources/elbv2.js +148 -0
- package/dist/factories/aws-load-balancer-controller/resources/elbv2.js.map +1 -0
- package/dist/factories/aws-load-balancer-controller/resources/helm.d.ts +36 -0
- package/dist/factories/aws-load-balancer-controller/resources/helm.d.ts.map +1 -0
- package/dist/factories/aws-load-balancer-controller/resources/helm.js +96 -0
- package/dist/factories/aws-load-balancer-controller/resources/helm.js.map +1 -0
- package/dist/factories/aws-load-balancer-controller/resources/index.d.ts +3 -0
- package/dist/factories/aws-load-balancer-controller/resources/index.d.ts.map +1 -0
- package/dist/factories/aws-load-balancer-controller/resources/index.js +3 -0
- package/dist/factories/aws-load-balancer-controller/resources/index.js.map +1 -0
- package/dist/factories/aws-load-balancer-controller/types.d.ts +267 -0
- package/dist/factories/aws-load-balancer-controller/types.d.ts.map +1 -0
- package/dist/factories/aws-load-balancer-controller/types.js +81 -0
- package/dist/factories/aws-load-balancer-controller/types.js.map +1 -0
- package/dist/factories/aws-load-balancer-controller/utils/helm-values-mapper.d.ts +27 -0
- package/dist/factories/aws-load-balancer-controller/utils/helm-values-mapper.d.ts.map +1 -0
- package/dist/factories/aws-load-balancer-controller/utils/helm-values-mapper.js +171 -0
- package/dist/factories/aws-load-balancer-controller/utils/helm-values-mapper.js.map +1 -0
- package/dist/factories/aws-load-balancer-controller/utils/index.d.ts +2 -0
- package/dist/factories/aws-load-balancer-controller/utils/index.d.ts.map +1 -0
- package/dist/factories/aws-load-balancer-controller/utils/index.js +2 -0
- package/dist/factories/aws-load-balancer-controller/utils/index.js.map +1 -0
- package/dist/factories/cert-manager/compositions/cert-manager-bootstrap.d.ts +6 -4
- package/dist/factories/cert-manager/compositions/cert-manager-bootstrap.d.ts.map +1 -1
- package/dist/factories/cert-manager/compositions/cert-manager-bootstrap.js +22 -196
- package/dist/factories/cert-manager/compositions/cert-manager-bootstrap.js.map +1 -1
- package/dist/factories/cert-manager/resources/helm.d.ts.map +1 -1
- package/dist/factories/cert-manager/resources/helm.js +30 -51
- package/dist/factories/cert-manager/resources/helm.js.map +1 -1
- package/dist/factories/cert-manager/types.d.ts +54 -6
- package/dist/factories/cert-manager/types.d.ts.map +1 -1
- package/dist/factories/cert-manager/types.js +45 -12
- package/dist/factories/cert-manager/types.js.map +1 -1
- package/dist/factories/cert-manager/utils/helm-values-mapper.js +203 -76
- package/dist/factories/cert-manager/utils/helm-values-mapper.js.map +1 -1
- package/dist/factories/cilium/resources/helm.d.ts.map +1 -1
- package/dist/factories/cilium/resources/helm.js +23 -0
- package/dist/factories/cilium/resources/helm.js.map +1 -1
- package/dist/factories/cilium/types.d.ts +2 -1
- package/dist/factories/cilium/types.d.ts.map +1 -1
- package/dist/factories/cilium/types.js.map +1 -1
- package/dist/factories/clickhouse/resources/helm.d.ts.map +1 -1
- package/dist/factories/clickhouse/resources/helm.js +2 -1
- package/dist/factories/clickhouse/resources/helm.js.map +1 -1
- package/dist/factories/clickhouse/types.d.ts +2 -1
- package/dist/factories/clickhouse/types.d.ts.map +1 -1
- package/dist/factories/clickhouse/types.js.map +1 -1
- package/dist/factories/clickstack/resources/helm.d.ts.map +1 -1
- package/dist/factories/clickstack/resources/helm.js +3 -2
- package/dist/factories/clickstack/resources/helm.js.map +1 -1
- package/dist/factories/clickstack/types.d.ts +3 -3
- package/dist/factories/clickstack/types.d.ts.map +1 -1
- package/dist/factories/clickstack/types.js.map +1 -1
- package/dist/factories/cnpg/resources/helm.d.ts.map +1 -1
- package/dist/factories/cnpg/resources/helm.js +2 -1
- package/dist/factories/cnpg/resources/helm.js.map +1 -1
- package/dist/factories/cnpg/types.d.ts +2 -1
- package/dist/factories/cnpg/types.d.ts.map +1 -1
- package/dist/factories/cnpg/types.js.map +1 -1
- package/dist/factories/crowdsec/compositions/crowdsec-bootstrap.d.ts +33 -0
- package/dist/factories/crowdsec/compositions/crowdsec-bootstrap.d.ts.map +1 -0
- package/dist/factories/crowdsec/compositions/crowdsec-bootstrap.js +174 -0
- package/dist/factories/crowdsec/compositions/crowdsec-bootstrap.js.map +1 -0
- package/dist/factories/crowdsec/compositions/crowdsec-helm-repository.d.ts +10 -0
- package/dist/factories/crowdsec/compositions/crowdsec-helm-repository.d.ts.map +1 -0
- package/dist/factories/crowdsec/compositions/crowdsec-helm-repository.js +25 -0
- package/dist/factories/crowdsec/compositions/crowdsec-helm-repository.js.map +1 -0
- package/dist/factories/crowdsec/compositions/index.d.ts +3 -0
- package/dist/factories/crowdsec/compositions/index.d.ts.map +1 -0
- package/dist/factories/crowdsec/compositions/index.js +3 -0
- package/dist/factories/crowdsec/compositions/index.js.map +1 -0
- package/dist/factories/crowdsec/constants.d.ts +38 -0
- package/dist/factories/crowdsec/constants.d.ts.map +1 -0
- package/dist/factories/crowdsec/constants.js +42 -0
- package/dist/factories/crowdsec/constants.js.map +1 -0
- package/dist/factories/crowdsec/index.d.ts +12 -0
- package/dist/factories/crowdsec/index.d.ts.map +1 -0
- package/dist/factories/crowdsec/index.js +12 -0
- package/dist/factories/crowdsec/index.js.map +1 -0
- package/dist/factories/crowdsec/resources/helm.d.ts +52 -0
- package/dist/factories/crowdsec/resources/helm.d.ts.map +1 -0
- package/dist/factories/crowdsec/resources/helm.js +78 -0
- package/dist/factories/crowdsec/resources/helm.js.map +1 -0
- package/dist/factories/crowdsec/resources/index.d.ts +2 -0
- package/dist/factories/crowdsec/resources/index.d.ts.map +1 -0
- package/dist/factories/crowdsec/resources/index.js +2 -0
- package/dist/factories/crowdsec/resources/index.js.map +1 -0
- package/dist/factories/crowdsec/types.d.ts +266 -0
- package/dist/factories/crowdsec/types.d.ts.map +1 -0
- package/dist/factories/crowdsec/types.js +43 -0
- package/dist/factories/crowdsec/types.js.map +1 -0
- package/dist/factories/crowdsec/utils/helm-values-mapper.d.ts +40 -0
- package/dist/factories/crowdsec/utils/helm-values-mapper.d.ts.map +1 -0
- package/dist/factories/crowdsec/utils/helm-values-mapper.js +473 -0
- package/dist/factories/crowdsec/utils/helm-values-mapper.js.map +1 -0
- package/dist/factories/crowdsec/utils/index.d.ts +3 -0
- package/dist/factories/crowdsec/utils/index.d.ts.map +1 -0
- package/dist/factories/crowdsec/utils/index.js +3 -0
- package/dist/factories/crowdsec/utils/index.js.map +1 -0
- package/dist/factories/crowdsec/utils/net.js +68 -0
- package/dist/factories/crowdsec/utils/net.js.map +1 -0
- package/dist/factories/crowdsec/utils/traefik-bouncer.d.ts +48 -0
- package/dist/factories/crowdsec/utils/traefik-bouncer.d.ts.map +1 -0
- package/dist/factories/crowdsec/utils/traefik-bouncer.js +302 -0
- package/dist/factories/crowdsec/utils/traefik-bouncer.js.map +1 -0
- package/dist/factories/dagster/resources/helm.d.ts.map +1 -1
- package/dist/factories/dagster/resources/helm.js +2 -0
- package/dist/factories/dagster/resources/helm.js.map +1 -1
- package/dist/factories/dagster/types.d.ts +2 -2
- package/dist/factories/dagster/types.d.ts.map +1 -1
- package/dist/factories/dagster/types.js.map +1 -1
- package/dist/factories/envoy-ai-gateway/resources/helm.d.ts.map +1 -1
- package/dist/factories/envoy-ai-gateway/resources/helm.js +17 -14
- package/dist/factories/envoy-ai-gateway/resources/helm.js.map +1 -1
- package/dist/factories/envoy-ai-gateway/types.d.ts +2 -2
- package/dist/factories/envoy-ai-gateway/types.d.ts.map +1 -1
- package/dist/factories/external-dns/resources/helm.d.ts.map +1 -1
- package/dist/factories/external-dns/resources/helm.js +2 -0
- package/dist/factories/external-dns/resources/helm.js.map +1 -1
- package/dist/factories/external-dns/types.d.ts +2 -1
- package/dist/factories/external-dns/types.d.ts.map +1 -1
- package/dist/factories/external-dns/types.js.map +1 -1
- package/dist/factories/harbor/resources/helm.d.ts.map +1 -1
- package/dist/factories/harbor/resources/helm.js +11 -7
- package/dist/factories/harbor/resources/helm.js.map +1 -1
- package/dist/factories/harbor/types.d.ts +2 -1
- package/dist/factories/harbor/types.d.ts.map +1 -1
- package/dist/factories/harbor/types.js.map +1 -1
- package/dist/factories/hatchet/resources/helm.d.ts.map +1 -1
- package/dist/factories/hatchet/resources/helm.js +13 -10
- package/dist/factories/hatchet/resources/helm.js.map +1 -1
- package/dist/factories/hatchet/types.d.ts +2 -1
- package/dist/factories/hatchet/types.d.ts.map +1 -1
- package/dist/factories/hatchet/types.js.map +1 -1
- package/dist/factories/helm/helm-release.d.ts.map +1 -1
- package/dist/factories/helm/helm-release.js +3 -31
- package/dist/factories/helm/helm-release.js.map +1 -1
- package/dist/factories/helm/index.d.ts +3 -1
- package/dist/factories/helm/index.d.ts.map +1 -1
- package/dist/factories/helm/index.js +1 -0
- package/dist/factories/helm/index.js.map +1 -1
- package/dist/factories/helm/lifecycle.d.ts +32 -0
- package/dist/factories/helm/lifecycle.d.ts.map +1 -0
- package/dist/factories/helm/lifecycle.js +165 -0
- package/dist/factories/helm/lifecycle.js.map +1 -0
- package/dist/factories/helm/types.d.ts +22 -0
- package/dist/factories/helm/types.d.ts.map +1 -1
- package/dist/factories/inngest/resources/helm.d.ts.map +1 -1
- package/dist/factories/inngest/resources/helm.js +2 -0
- package/dist/factories/inngest/resources/helm.js.map +1 -1
- package/dist/factories/inngest/types.d.ts +2 -1
- package/dist/factories/inngest/types.d.ts.map +1 -1
- package/dist/factories/inngest/types.js.map +1 -1
- package/dist/factories/karpenter/compositions/index.d.ts +3 -0
- package/dist/factories/karpenter/compositions/index.d.ts.map +1 -0
- package/dist/factories/karpenter/compositions/index.js +3 -0
- package/dist/factories/karpenter/compositions/index.js.map +1 -0
- package/dist/factories/karpenter/compositions/karpenter-bootstrap.d.ts +34 -0
- package/dist/factories/karpenter/compositions/karpenter-bootstrap.d.ts.map +1 -0
- package/dist/factories/karpenter/compositions/karpenter-bootstrap.js +150 -0
- package/dist/factories/karpenter/compositions/karpenter-bootstrap.js.map +1 -0
- package/dist/factories/karpenter/compositions/karpenter-helm-repository.d.ts +10 -0
- package/dist/factories/karpenter/compositions/karpenter-helm-repository.d.ts.map +1 -0
- package/dist/factories/karpenter/compositions/karpenter-helm-repository.js +25 -0
- package/dist/factories/karpenter/compositions/karpenter-helm-repository.js.map +1 -0
- package/dist/factories/karpenter/constants.d.ts +67 -0
- package/dist/factories/karpenter/constants.d.ts.map +1 -0
- package/dist/factories/karpenter/constants.js +65 -0
- package/dist/factories/karpenter/constants.js.map +1 -0
- package/dist/factories/karpenter/index.d.ts +14 -0
- package/dist/factories/karpenter/index.d.ts.map +1 -0
- package/dist/factories/karpenter/index.js +14 -0
- package/dist/factories/karpenter/index.js.map +1 -0
- package/dist/factories/karpenter/resources/ec2-node-class.d.ts +26 -0
- package/dist/factories/karpenter/resources/ec2-node-class.d.ts.map +1 -0
- package/dist/factories/karpenter/resources/ec2-node-class.js +48 -0
- package/dist/factories/karpenter/resources/ec2-node-class.js.map +1 -0
- package/dist/factories/karpenter/resources/helm.d.ts +48 -0
- package/dist/factories/karpenter/resources/helm.d.ts.map +1 -0
- package/dist/factories/karpenter/resources/helm.js +117 -0
- package/dist/factories/karpenter/resources/helm.js.map +1 -0
- package/dist/factories/karpenter/resources/index.d.ts +5 -0
- package/dist/factories/karpenter/resources/index.d.ts.map +1 -0
- package/dist/factories/karpenter/resources/index.js +5 -0
- package/dist/factories/karpenter/resources/index.js.map +1 -0
- package/dist/factories/karpenter/resources/node-pool.d.ts +32 -0
- package/dist/factories/karpenter/resources/node-pool.d.ts.map +1 -0
- package/dist/factories/karpenter/resources/node-pool.js +80 -0
- package/dist/factories/karpenter/resources/node-pool.js.map +1 -0
- package/dist/factories/karpenter/resources/readiness.d.ts +21 -0
- package/dist/factories/karpenter/resources/readiness.d.ts.map +1 -0
- package/dist/factories/karpenter/resources/readiness.js +60 -0
- package/dist/factories/karpenter/resources/readiness.js.map +1 -0
- package/dist/factories/karpenter/types.d.ts +433 -0
- package/dist/factories/karpenter/types.d.ts.map +1 -0
- package/dist/factories/karpenter/types.js +59 -0
- package/dist/factories/karpenter/types.js.map +1 -0
- package/dist/factories/karpenter/utils/helm-values-mapper.d.ts +24 -0
- package/dist/factories/karpenter/utils/helm-values-mapper.d.ts.map +1 -0
- package/dist/factories/karpenter/utils/helm-values-mapper.js +89 -0
- package/dist/factories/karpenter/utils/helm-values-mapper.js.map +1 -0
- package/dist/factories/karpenter/utils/index.d.ts +3 -0
- package/dist/factories/karpenter/utils/index.d.ts.map +1 -0
- package/dist/factories/karpenter/utils/index.js +3 -0
- package/dist/factories/karpenter/utils/index.js.map +1 -0
- package/dist/factories/karpenter/utils/validation.d.ts +42 -0
- package/dist/factories/karpenter/utils/validation.d.ts.map +1 -0
- package/dist/factories/karpenter/utils/validation.js +441 -0
- package/dist/factories/karpenter/utils/validation.js.map +1 -0
- package/dist/factories/keda/compositions/index.d.ts +3 -0
- package/dist/factories/keda/compositions/index.d.ts.map +1 -0
- package/dist/factories/keda/compositions/index.js +3 -0
- package/dist/factories/keda/compositions/index.js.map +1 -0
- package/dist/factories/keda/compositions/keda-bootstrap.d.ts +30 -0
- package/dist/factories/keda/compositions/keda-bootstrap.d.ts.map +1 -0
- package/dist/factories/keda/compositions/keda-bootstrap.js +102 -0
- package/dist/factories/keda/compositions/keda-bootstrap.js.map +1 -0
- package/dist/factories/keda/compositions/keda-helm-repository.d.ts +10 -0
- package/dist/factories/keda/compositions/keda-helm-repository.d.ts.map +1 -0
- package/dist/factories/keda/compositions/keda-helm-repository.js +25 -0
- package/dist/factories/keda/compositions/keda-helm-repository.js.map +1 -0
- package/dist/factories/keda/constants.d.ts +27 -0
- package/dist/factories/keda/constants.d.ts.map +1 -0
- package/dist/factories/keda/constants.js +27 -0
- package/dist/factories/keda/constants.js.map +1 -0
- package/dist/factories/keda/index.d.ts +14 -0
- package/dist/factories/keda/index.d.ts.map +1 -0
- package/dist/factories/keda/index.js +14 -0
- package/dist/factories/keda/index.js.map +1 -0
- package/dist/factories/keda/resources/helm.d.ts +26 -0
- package/dist/factories/keda/resources/helm.d.ts.map +1 -0
- package/dist/factories/keda/resources/helm.js +84 -0
- package/dist/factories/keda/resources/helm.js.map +1 -0
- package/dist/factories/keda/resources/index.d.ts +7 -0
- package/dist/factories/keda/resources/index.d.ts.map +1 -0
- package/dist/factories/keda/resources/index.js +7 -0
- package/dist/factories/keda/resources/index.js.map +1 -0
- package/dist/factories/keda/resources/readiness.d.ts +28 -0
- package/dist/factories/keda/resources/readiness.d.ts.map +1 -0
- package/dist/factories/keda/resources/readiness.js +70 -0
- package/dist/factories/keda/resources/readiness.js.map +1 -0
- package/dist/factories/keda/resources/scaled-job.d.ts +23 -0
- package/dist/factories/keda/resources/scaled-job.d.ts.map +1 -0
- package/dist/factories/keda/resources/scaled-job.js +43 -0
- package/dist/factories/keda/resources/scaled-job.js.map +1 -0
- package/dist/factories/keda/resources/scaled-object.d.ts +33 -0
- package/dist/factories/keda/resources/scaled-object.d.ts.map +1 -0
- package/dist/factories/keda/resources/scaled-object.js +78 -0
- package/dist/factories/keda/resources/scaled-object.js.map +1 -0
- package/dist/factories/keda/resources/trigger-authentication.d.ts +28 -0
- package/dist/factories/keda/resources/trigger-authentication.d.ts.map +1 -0
- package/dist/factories/keda/resources/trigger-authentication.js +52 -0
- package/dist/factories/keda/resources/trigger-authentication.js.map +1 -0
- package/dist/factories/keda/resources/triggers.d.ts +17 -0
- package/dist/factories/keda/resources/triggers.d.ts.map +1 -0
- package/dist/factories/keda/resources/triggers.js +21 -0
- package/dist/factories/keda/resources/triggers.js.map +1 -0
- package/dist/factories/keda/types.d.ts +580 -0
- package/dist/factories/keda/types.d.ts.map +1 -0
- package/dist/factories/keda/types.js +75 -0
- package/dist/factories/keda/types.js.map +1 -0
- package/dist/factories/keda/utils/helm-values-mapper.d.ts +21 -0
- package/dist/factories/keda/utils/helm-values-mapper.d.ts.map +1 -0
- package/dist/factories/keda/utils/helm-values-mapper.js +130 -0
- package/dist/factories/keda/utils/helm-values-mapper.js.map +1 -0
- package/dist/factories/keda/utils/index.d.ts +3 -0
- package/dist/factories/keda/utils/index.d.ts.map +1 -0
- package/dist/factories/keda/utils/index.js +3 -0
- package/dist/factories/keda/utils/index.js.map +1 -0
- package/dist/factories/keda/utils/validation.d.ts +52 -0
- package/dist/factories/keda/utils/validation.d.ts.map +1 -0
- package/dist/factories/keda/utils/validation.js +482 -0
- package/dist/factories/keda/utils/validation.js.map +1 -0
- package/dist/factories/kubernetes/policy/limit-range.d.ts.map +1 -1
- package/dist/factories/kubernetes/policy/limit-range.js +27 -1
- package/dist/factories/kubernetes/policy/limit-range.js.map +1 -1
- package/dist/factories/nats/resources/helm.d.ts +2 -2
- package/dist/factories/nats/resources/helm.d.ts.map +1 -1
- package/dist/factories/nats/resources/helm.js +2 -1
- package/dist/factories/nats/resources/helm.js.map +1 -1
- package/dist/factories/opensearch/resources/helm.d.ts.map +1 -1
- package/dist/factories/opensearch/resources/helm.js +2 -1
- package/dist/factories/opensearch/resources/helm.js.map +1 -1
- package/dist/factories/opensearch/types.d.ts +2 -1
- package/dist/factories/opensearch/types.d.ts.map +1 -1
- package/dist/factories/opensearch/types.js.map +1 -1
- package/dist/factories/ory/resources/helm.d.ts.map +1 -1
- package/dist/factories/ory/resources/helm.js +2 -0
- package/dist/factories/ory/resources/helm.js.map +1 -1
- package/dist/factories/ory/types.d.ts +2 -2
- package/dist/factories/ory/types.d.ts.map +1 -1
- package/dist/factories/ory/types.js.map +1 -1
- package/dist/factories/pebble/resources/helm.d.ts.map +1 -1
- package/dist/factories/pebble/resources/helm.js +2 -0
- package/dist/factories/pebble/resources/helm.js.map +1 -1
- package/dist/factories/pebble/types.d.ts +2 -1
- package/dist/factories/pebble/types.d.ts.map +1 -1
- package/dist/factories/pebble/types.js.map +1 -1
- package/dist/factories/rook/resources/helm.d.ts.map +1 -1
- package/dist/factories/rook/resources/helm.js +3 -2
- package/dist/factories/rook/resources/helm.js.map +1 -1
- package/dist/factories/rook/types.d.ts +2 -1
- package/dist/factories/rook/types.d.ts.map +1 -1
- package/dist/factories/rook/types.js.map +1 -1
- package/dist/factories/traefik/compositions/traefik-bootstrap.d.ts +43 -36
- package/dist/factories/traefik/compositions/traefik-bootstrap.d.ts.map +1 -1
- package/dist/factories/traefik/compositions/traefik-bootstrap.js +70 -38
- package/dist/factories/traefik/compositions/traefik-bootstrap.js.map +1 -1
- package/dist/factories/traefik/constants.d.ts +6 -0
- package/dist/factories/traefik/constants.d.ts.map +1 -1
- package/dist/factories/traefik/constants.js +6 -0
- package/dist/factories/traefik/constants.js.map +1 -1
- package/dist/factories/traefik/resources/common.d.ts +1 -1
- package/dist/factories/traefik/resources/common.js +1 -1
- package/dist/factories/traefik/resources/helm.d.ts.map +1 -1
- package/dist/factories/traefik/resources/helm.js +14 -9
- package/dist/factories/traefik/resources/helm.js.map +1 -1
- package/dist/factories/traefik/resources/middleware.d.ts +35 -1
- package/dist/factories/traefik/resources/middleware.d.ts.map +1 -1
- package/dist/factories/traefik/resources/middleware.js +71 -0
- package/dist/factories/traefik/resources/middleware.js.map +1 -1
- package/dist/factories/traefik/resources/tls.d.ts +22 -1
- package/dist/factories/traefik/resources/tls.d.ts.map +1 -1
- package/dist/factories/traefik/resources/tls.js +40 -0
- package/dist/factories/traefik/resources/tls.js.map +1 -1
- package/dist/factories/traefik/types.d.ts +176 -9
- package/dist/factories/traefik/types.d.ts.map +1 -1
- package/dist/factories/traefik/types.js +111 -2
- package/dist/factories/traefik/types.js.map +1 -1
- package/dist/factories/traefik/utils/access-log.d.ts +18 -0
- package/dist/factories/traefik/utils/access-log.d.ts.map +1 -0
- package/dist/factories/traefik/utils/access-log.js +98 -0
- package/dist/factories/traefik/utils/access-log.js.map +1 -0
- package/dist/factories/traefik/utils/aws-nlb.d.ts +55 -0
- package/dist/factories/traefik/utils/aws-nlb.d.ts.map +1 -0
- package/dist/factories/traefik/utils/aws-nlb.js +121 -0
- package/dist/factories/traefik/utils/aws-nlb.js.map +1 -0
- package/dist/factories/traefik/utils/helm-values-mapper.d.ts +30 -40
- package/dist/factories/traefik/utils/helm-values-mapper.d.ts.map +1 -1
- package/dist/factories/traefik/utils/helm-values-mapper.js +308 -41
- package/dist/factories/traefik/utils/helm-values-mapper.js.map +1 -1
- package/dist/factories/traefik/utils/index.d.ts +5 -0
- package/dist/factories/traefik/utils/index.d.ts.map +1 -1
- package/dist/factories/traefik/utils/index.js +5 -0
- package/dist/factories/traefik/utils/index.js.map +1 -1
- package/dist/factories/traefik/utils/middleware-validation.d.ts +0 -17
- package/dist/factories/traefik/utils/middleware-validation.d.ts.map +1 -1
- package/dist/factories/traefik/utils/middleware-validation.js +15 -17
- package/dist/factories/traefik/utils/middleware-validation.js.map +1 -1
- package/dist/factories/traefik/utils/plugins.d.ts +38 -0
- package/dist/factories/traefik/utils/plugins.d.ts.map +1 -0
- package/dist/factories/traefik/utils/plugins.js +175 -0
- package/dist/factories/traefik/utils/plugins.js.map +1 -0
- package/dist/factories/traefik/utils/proxy-trust.d.ts +48 -0
- package/dist/factories/traefik/utils/proxy-trust.d.ts.map +1 -0
- package/dist/factories/traefik/utils/proxy-trust.js +514 -0
- package/dist/factories/traefik/utils/proxy-trust.js.map +1 -0
- package/dist/factories/traefik/utils/trusted-range.d.ts +29 -0
- package/dist/factories/traefik/utils/trusted-range.d.ts.map +1 -0
- package/dist/factories/traefik/utils/trusted-range.js +80 -0
- package/dist/factories/traefik/utils/trusted-range.js.map +1 -0
- package/dist/factories/valkey/resources/helm.d.ts.map +1 -1
- package/dist/factories/valkey/resources/helm.js +2 -1
- package/dist/factories/valkey/resources/helm.js.map +1 -1
- package/dist/factories/valkey/types.d.ts +2 -1
- package/dist/factories/valkey/types.d.ts.map +1 -1
- package/dist/factories/valkey/types.js.map +1 -1
- package/dist/factories/vpa/compositions/index.d.ts +3 -0
- package/dist/factories/vpa/compositions/index.d.ts.map +1 -0
- package/dist/factories/vpa/compositions/index.js +3 -0
- package/dist/factories/vpa/compositions/index.js.map +1 -0
- package/dist/factories/vpa/compositions/vpa-bootstrap.d.ts +30 -0
- package/dist/factories/vpa/compositions/vpa-bootstrap.d.ts.map +1 -0
- package/dist/factories/vpa/compositions/vpa-bootstrap.js +104 -0
- package/dist/factories/vpa/compositions/vpa-bootstrap.js.map +1 -0
- package/dist/factories/vpa/compositions/vpa-helm-repository.d.ts +10 -0
- package/dist/factories/vpa/compositions/vpa-helm-repository.d.ts.map +1 -0
- package/dist/factories/vpa/compositions/vpa-helm-repository.js +25 -0
- package/dist/factories/vpa/compositions/vpa-helm-repository.js.map +1 -0
- package/dist/factories/vpa/constants.d.ts +77 -0
- package/dist/factories/vpa/constants.d.ts.map +1 -0
- package/dist/factories/vpa/constants.js +67 -0
- package/dist/factories/vpa/constants.js.map +1 -0
- package/dist/factories/vpa/index.d.ts +14 -0
- package/dist/factories/vpa/index.d.ts.map +1 -0
- package/dist/factories/vpa/index.js +14 -0
- package/dist/factories/vpa/index.js.map +1 -0
- package/dist/factories/vpa/resources/helm.d.ts +28 -0
- package/dist/factories/vpa/resources/helm.d.ts.map +1 -0
- package/dist/factories/vpa/resources/helm.js +88 -0
- package/dist/factories/vpa/resources/helm.js.map +1 -0
- package/dist/factories/vpa/resources/index.d.ts +4 -0
- package/dist/factories/vpa/resources/index.d.ts.map +1 -0
- package/dist/factories/vpa/resources/index.js +4 -0
- package/dist/factories/vpa/resources/index.js.map +1 -0
- package/dist/factories/vpa/resources/readiness.d.ts +24 -0
- package/dist/factories/vpa/resources/readiness.d.ts.map +1 -0
- package/dist/factories/vpa/resources/readiness.js +66 -0
- package/dist/factories/vpa/resources/readiness.js.map +1 -0
- package/dist/factories/vpa/resources/vertical-pod-autoscaler.d.ts +42 -0
- package/dist/factories/vpa/resources/vertical-pod-autoscaler.d.ts.map +1 -0
- package/dist/factories/vpa/resources/vertical-pod-autoscaler.js +93 -0
- package/dist/factories/vpa/resources/vertical-pod-autoscaler.js.map +1 -0
- package/dist/factories/vpa/types.d.ts +312 -0
- package/dist/factories/vpa/types.d.ts.map +1 -0
- package/dist/factories/vpa/types.js +96 -0
- package/dist/factories/vpa/types.js.map +1 -0
- package/dist/factories/vpa/utils/helm-values-mapper.d.ts +18 -0
- package/dist/factories/vpa/utils/helm-values-mapper.d.ts.map +1 -0
- package/dist/factories/vpa/utils/helm-values-mapper.js +121 -0
- package/dist/factories/vpa/utils/helm-values-mapper.js.map +1 -0
- package/dist/factories/vpa/utils/index.d.ts +3 -0
- package/dist/factories/vpa/utils/index.d.ts.map +1 -0
- package/dist/factories/vpa/utils/index.js +3 -0
- package/dist/factories/vpa/utils/index.js.map +1 -0
- package/dist/factories/vpa/utils/validation.d.ts +42 -0
- package/dist/factories/vpa/utils/validation.d.ts.map +1 -0
- package/dist/factories/vpa/utils/validation.js +225 -0
- package/dist/factories/vpa/utils/validation.js.map +1 -0
- package/package.json +21 -1
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// Karpenter Helm values mapping for the `karpenter` chart 1.14.1.
|
|
2
|
+
//
|
|
3
|
+
// Every spec field may be a schema reference in KRO mode, so the mapper only
|
|
4
|
+
// places values into the tree and never branches on them. Defaults go through
|
|
5
|
+
// `Cel.default`, never `??`: a schema proxy is a truthy object.
|
|
6
|
+
import { Cel } from '../../../core/references/cel.js';
|
|
7
|
+
import { isCelExpression, isKubernetesRef } from '../../../utils/type-guards.js';
|
|
8
|
+
import { KARPENTER_DEFAULT_RESOURCES, KARPENTER_DEFAULT_TOLERATIONS, KARPENTER_DEFAULT_TOPOLOGY_SPREAD_CONSTRAINTS, } from '../constants.js';
|
|
9
|
+
function isPlainObject(value) {
|
|
10
|
+
return (typeof value === 'object' &&
|
|
11
|
+
value !== null &&
|
|
12
|
+
!Array.isArray(value) &&
|
|
13
|
+
!isKubernetesRef(value) &&
|
|
14
|
+
!isCelExpression(value));
|
|
15
|
+
}
|
|
16
|
+
// Plain objects merge key by key; lists, primitives and graph values replace.
|
|
17
|
+
function deepMerge(base, override) {
|
|
18
|
+
const merged = { ...base };
|
|
19
|
+
for (const [key, value] of Object.entries(override)) {
|
|
20
|
+
if (key === '__proto__' || key === 'constructor' || key === 'prototype')
|
|
21
|
+
continue;
|
|
22
|
+
if (value === undefined)
|
|
23
|
+
continue;
|
|
24
|
+
const existing = merged[key];
|
|
25
|
+
merged[key] =
|
|
26
|
+
isPlainObject(existing) && isPlainObject(value) ? deepMerge(existing, value) : value;
|
|
27
|
+
}
|
|
28
|
+
return merged;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Map the bootstrap spec onto `karpenter` chart values.
|
|
32
|
+
*
|
|
33
|
+
* Map values (`nodeSelector`, `affinity`, service account annotations) are
|
|
34
|
+
* merged by Helm with the chart defaults; lists (`tolerations`,
|
|
35
|
+
* `topologySpreadConstraints`) replace them, so their fallbacks restate the
|
|
36
|
+
* chart defaults.
|
|
37
|
+
*
|
|
38
|
+
* @param config - The bootstrap spec. Any field may be a schema reference.
|
|
39
|
+
* @param rawValues - Concrete chart values deep-merged over the result.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* mapKarpenterConfigToHelmValues({
|
|
44
|
+
* name: 'karpenter',
|
|
45
|
+
* clusterName: 'my-cluster',
|
|
46
|
+
* interruptionQueue: 'my-cluster',
|
|
47
|
+
* serviceAccount: { annotations: { 'eks.amazonaws.com/role-arn': 'arn:aws:iam::111122223333:role/KarpenterController' } },
|
|
48
|
+
* });
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export function mapKarpenterConfigToHelmValues(config, rawValues = {}) {
|
|
52
|
+
const mapped = {
|
|
53
|
+
// Fixes the Deployment, ServiceAccount and RBAC names to the release name,
|
|
54
|
+
// so an EKS Pod Identity association can name the ServiceAccount.
|
|
55
|
+
fullnameOverride: config.name,
|
|
56
|
+
replicas: Cel.default(config.replicas, 2),
|
|
57
|
+
logLevel: Cel.default(config.logLevel, 'info'),
|
|
58
|
+
dnsPolicy: Cel.default(config.dnsPolicy, 'ClusterFirst'),
|
|
59
|
+
serviceAccount: {
|
|
60
|
+
create: true,
|
|
61
|
+
name: Cel.default(config.serviceAccount?.name, config.name),
|
|
62
|
+
annotations: Cel.default(config.serviceAccount?.annotations, {}),
|
|
63
|
+
},
|
|
64
|
+
podDisruptionBudget: {
|
|
65
|
+
maxUnavailable: Cel.default(config.podDisruptionBudget?.maxUnavailable, 1),
|
|
66
|
+
},
|
|
67
|
+
nodeSelector: Cel.default(config.nodeSelector, {}),
|
|
68
|
+
affinity: Cel.default(config.affinity, {}),
|
|
69
|
+
topologySpreadConstraints: Cel.default(config.topologySpreadConstraints, [
|
|
70
|
+
...KARPENTER_DEFAULT_TOPOLOGY_SPREAD_CONSTRAINTS.map((constraint) => ({ ...constraint })),
|
|
71
|
+
]),
|
|
72
|
+
tolerations: Cel.default(config.tolerations, [
|
|
73
|
+
...KARPENTER_DEFAULT_TOLERATIONS.map((toleration) => ({ ...toleration })),
|
|
74
|
+
]),
|
|
75
|
+
controller: {
|
|
76
|
+
resources: Cel.default(config.resources, {
|
|
77
|
+
requests: { ...KARPENTER_DEFAULT_RESOURCES.requests },
|
|
78
|
+
limits: { ...KARPENTER_DEFAULT_RESOURCES.limits },
|
|
79
|
+
}),
|
|
80
|
+
},
|
|
81
|
+
settings: {
|
|
82
|
+
clusterName: config.clusterName,
|
|
83
|
+
clusterEndpoint: Cel.default(config.clusterEndpoint, ''),
|
|
84
|
+
interruptionQueue: Cel.default(config.interruptionQueue, ''),
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
return deepMerge(mapped, rawValues);
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=helm-values-mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helm-values-mapper.js","sourceRoot":"","sources":["../../../../src/factories/karpenter/utils/helm-values-mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/factories/karpenter/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EACL,KAAK,wBAAwB,EAC7B,wBAAwB,EACxB,gCAAgC,EAChC,oBAAoB,GACrB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/factories/karpenter/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAEL,wBAAwB,EACxB,gCAAgC,EAChC,oBAAoB,GACrB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { EC2NodeClassSpec, KarpenterBootstrapConfig, NodePoolSpec } from '../types.js';
|
|
2
|
+
/** One finding from a Karpenter validator. */
|
|
3
|
+
export interface KarpenterValidationIssue {
|
|
4
|
+
severity: 'error' | 'warning';
|
|
5
|
+
/** Dotted path of the offending field, relative to `spec`. */
|
|
6
|
+
path: string;
|
|
7
|
+
message: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Validate a `NodePool` spec.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const errors = validateNodePoolSpec(spec).filter((issue) => issue.severity === 'error');
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare function validateNodePoolSpec(spec: NodePoolSpec, name?: string): KarpenterValidationIssue[];
|
|
18
|
+
/**
|
|
19
|
+
* Validate an `EC2NodeClass` spec.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* validateEC2NodeClassSpec({ ...spec, metadataOptions: { httpTokens: 'optional' } });
|
|
24
|
+
* // [{ severity: 'warning', path: 'metadataOptions.httpTokens', ... }]
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare function validateEC2NodeClassSpec(spec: EC2NodeClassSpec, name?: string): KarpenterValidationIssue[];
|
|
28
|
+
/**
|
|
29
|
+
* Warnings for a `karpenterBootstrap` spec.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* validateKarpenterBootstrapConfig({ name: 'karpenter', clusterName: 'demo' });
|
|
34
|
+
* // [{ severity: 'warning', path: 'interruptionQueue', ... }]
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function validateKarpenterBootstrapConfig(config: KarpenterBootstrapConfig): KarpenterValidationIssue[];
|
|
38
|
+
/** Log validator warnings, once per real composition run. Used by the factories. */
|
|
39
|
+
export declare function warnKarpenterIssues(source: string, issues: KarpenterValidationIssue[]): void;
|
|
40
|
+
/** Throw on validator errors. Used by the factories. */
|
|
41
|
+
export declare function assertNoKarpenterErrors(kind: string, name: unknown, issues: KarpenterValidationIssue[]): void;
|
|
42
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../src/factories/karpenter/utils/validation.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE5F,8CAA8C;AAC9C,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AA6ID;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,YAAY,EAClB,IAAI,CAAC,EAAE,MAAM,GACZ,wBAAwB,EAAE,CA6J5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,gBAAgB,EACtB,IAAI,CAAC,EAAE,MAAM,GACZ,wBAAwB,EAAE,CAmL5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,wBAAwB,GAC/B,wBAAwB,EAAE,CAmC5B;AAED,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,wBAAwB,EAAE,GAAG,IAAI,CAK5F;AAED,wDAAwD;AACxD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,wBAAwB,EAAE,GACjC,IAAI,CASN"}
|
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
// Checks for common Karpenter configuration mistakes.
|
|
2
|
+
//
|
|
3
|
+
// Errors are things the API server or Karpenter rejects; the factories throw
|
|
4
|
+
// on them. Warnings are legal but usually unintended. Values that are schema
|
|
5
|
+
// references or CEL expressions are only known at reconcile time and are
|
|
6
|
+
// skipped.
|
|
7
|
+
import { getCurrentCompositionContext } from '../../../core/composition/context.js';
|
|
8
|
+
import { TypeKroError } from '../../../core/errors.js';
|
|
9
|
+
import { getComponentLogger } from '../../../core/logging/index.js';
|
|
10
|
+
import { REQUIRED_FIELD_SENTINEL } from '../../../core/serialization/schema.js';
|
|
11
|
+
import { isCelExpression, isKubernetesRef } from '../../../utils/type-guards.js';
|
|
12
|
+
const RESTRICTED_LABELS = ['karpenter.sh/nodepool', 'kubernetes.io/hostname'];
|
|
13
|
+
// Keys in the restricted `karpenter.sh` and `karpenter.k8s.aws` label domains
|
|
14
|
+
// the pinned NodePool CRD still accepts in requirements and template labels.
|
|
15
|
+
const ALLOWED_KARPENTER_SH_LABELS = ['karpenter.sh/capacity-type', 'karpenter.sh/nodepool'];
|
|
16
|
+
const ALLOWED_KARPENTER_AWS_LABELS = [
|
|
17
|
+
'instance-tenancy',
|
|
18
|
+
'capacity-reservation-type',
|
|
19
|
+
'capacity-reservation-id',
|
|
20
|
+
'capacity-reservation-interruptible',
|
|
21
|
+
'ec2nodeclass',
|
|
22
|
+
'instance-encryption-in-transit-supported',
|
|
23
|
+
'instance-category',
|
|
24
|
+
'instance-hypervisor',
|
|
25
|
+
'instance-family',
|
|
26
|
+
'instance-generation',
|
|
27
|
+
'instance-local-nvme',
|
|
28
|
+
'instance-size',
|
|
29
|
+
'instance-cpu',
|
|
30
|
+
'instance-cpu-manufacturer',
|
|
31
|
+
'instance-cpu-sustained-clock-speed-mhz',
|
|
32
|
+
'instance-memory',
|
|
33
|
+
'instance-ebs-bandwidth',
|
|
34
|
+
'instance-network-bandwidth',
|
|
35
|
+
'instance-gpu-name',
|
|
36
|
+
'instance-gpu-manufacturer',
|
|
37
|
+
'instance-gpu-count',
|
|
38
|
+
'instance-gpu-memory',
|
|
39
|
+
'instance-accelerator-name',
|
|
40
|
+
'instance-accelerator-manufacturer',
|
|
41
|
+
'instance-accelerator-count',
|
|
42
|
+
'instance-capability-flex',
|
|
43
|
+
'placement-group-id',
|
|
44
|
+
'placement-group-partition',
|
|
45
|
+
].map((name) => `karpenter.k8s.aws/${name}`);
|
|
46
|
+
// Duration patterns from the pinned NodePool CRD.
|
|
47
|
+
const EXPIRE_AFTER = /^(([0-9]+(s|m|h))+|Never)$/;
|
|
48
|
+
const CONSOLIDATE_AFTER = /^(([0-9]+(s|m|h))+|Never)$/;
|
|
49
|
+
const TERMINATION_GRACE_PERIOD = /^([0-9]+(s|m|h))+$/;
|
|
50
|
+
const BUDGET_DURATION = /^((([0-9]+(h|m))|([0-9]+h[0-9]+m))(0s)?)$/;
|
|
51
|
+
const BUDGET_NODES = /^((100|[0-9]{1,2})%|[0-9]+)$/;
|
|
52
|
+
// EC2NodeClass `spec.tags` keys the CRD reserves for EKS and Karpenter.
|
|
53
|
+
const RESTRICTED_TAGS = [
|
|
54
|
+
'eks:eks-cluster-name',
|
|
55
|
+
'karpenter.sh/nodepool',
|
|
56
|
+
'karpenter.sh/nodeclaim',
|
|
57
|
+
'karpenter.k8s.aws/ec2nodeclass',
|
|
58
|
+
];
|
|
59
|
+
// Karpenter puts NodePool and EC2NodeClass names in label values on every
|
|
60
|
+
// NodeClaim and Node (`karpenter.sh/nodepool`, `karpenter.k8s.aws/ec2nodeclass`).
|
|
61
|
+
const MAX_LABEL_VALUE_NAME = 63;
|
|
62
|
+
// What a schema proxy stringifies to inside a template literal.
|
|
63
|
+
const KUBERNETES_REF_MARKER_PREFIX = '__KUBERNETES_REF_';
|
|
64
|
+
// What the CRD's `int(x) >= 0` accepts: cel-go's int() parses like Go's
|
|
65
|
+
// strconv.ParseInt into an int64, so a sign is allowed ('+5', and '-0', which
|
|
66
|
+
// is 0) and anything above int64 max is refused.
|
|
67
|
+
const SIGNED_INTEGER = /^[+-]?\d+$/;
|
|
68
|
+
const INT64_MAX = 9223372036854775807n;
|
|
69
|
+
function isNonNegativeInteger(value) {
|
|
70
|
+
return SIGNED_INTEGER.test(value) && BigInt(value) >= 0n && BigInt(value) <= INT64_MAX;
|
|
71
|
+
}
|
|
72
|
+
const VALUED_OPERATORS = ['In', 'Gt', 'Lt', 'Gte', 'Lte'];
|
|
73
|
+
// Alias family -> the amiFamily values the CRD accepts alongside it.
|
|
74
|
+
const ALIAS_FAMILIES = {
|
|
75
|
+
al2: 'AL2',
|
|
76
|
+
al2023: 'AL2023',
|
|
77
|
+
bottlerocket: 'Bottlerocket',
|
|
78
|
+
windows2019: 'Windows2019',
|
|
79
|
+
windows2022: 'Windows2022',
|
|
80
|
+
windows2025: 'Windows2025',
|
|
81
|
+
};
|
|
82
|
+
// amiSelectorTerms limits from the pinned EC2NodeClass CRD.
|
|
83
|
+
const MAX_AMI_SELECTOR_TERMS = 30;
|
|
84
|
+
const MAX_AMI_SELECTOR_TAGS = 20;
|
|
85
|
+
const MAX_ALIAS_LENGTH = 30;
|
|
86
|
+
const AMI_TERM_FIELDS = ['alias', 'id', 'ssmParameter', 'name', 'tags', 'owner'];
|
|
87
|
+
// The CRD's `pattern: ami-[0-9a-z]+` (OpenAPI patterns are unanchored).
|
|
88
|
+
const AMI_ID = /ami-[0-9a-z]+/;
|
|
89
|
+
const logger = getComponentLogger('karpenter-validation');
|
|
90
|
+
function isGraphValue(value) {
|
|
91
|
+
return isKubernetesRef(value) || isCelExpression(value);
|
|
92
|
+
}
|
|
93
|
+
/** A concrete array, or undefined when absent or only known at reconcile time. */
|
|
94
|
+
function concreteArray(value) {
|
|
95
|
+
return Array.isArray(value) && !isGraphValue(value) ? value : undefined;
|
|
96
|
+
}
|
|
97
|
+
function isConcreteString(value) {
|
|
98
|
+
return typeof value === 'string' && !isGraphValue(value);
|
|
99
|
+
}
|
|
100
|
+
/** A name a build-time check can judge (not a reference, template over one, or placeholder). */
|
|
101
|
+
function isConcreteName(value) {
|
|
102
|
+
return (isConcreteString(value) &&
|
|
103
|
+
!value.includes(KUBERNETES_REF_MARKER_PREFIX) &&
|
|
104
|
+
!value.includes(REQUIRED_FIELD_SENTINEL));
|
|
105
|
+
}
|
|
106
|
+
/** Why the CRD rejects this requirement or template label key, or undefined. */
|
|
107
|
+
function restrictedLabelReason(key) {
|
|
108
|
+
if (RESTRICTED_LABELS.includes(key))
|
|
109
|
+
return `${key} is reserved.`;
|
|
110
|
+
const domain = /^([^/]+)/.exec(key)?.[1] ?? '';
|
|
111
|
+
if (domain.endsWith('karpenter.sh') && !ALLOWED_KARPENTER_SH_LABELS.includes(key)) {
|
|
112
|
+
return `the label domain "karpenter.sh" is restricted (only karpenter.sh/capacity-type is allowed).`;
|
|
113
|
+
}
|
|
114
|
+
if (domain.endsWith('karpenter.k8s.aws') && !ALLOWED_KARPENTER_AWS_LABELS.includes(key)) {
|
|
115
|
+
return `the label domain "karpenter.k8s.aws" is restricted to Karpenter's well-known labels.`;
|
|
116
|
+
}
|
|
117
|
+
return undefined;
|
|
118
|
+
}
|
|
119
|
+
function checkName(kind, name, error) {
|
|
120
|
+
if (isConcreteName(name) && name.length > MAX_LABEL_VALUE_NAME) {
|
|
121
|
+
error('name', `${kind} name is ${name.length} characters; at most ${MAX_LABEL_VALUE_NAME}, because Karpenter puts it in a label value on every NodeClaim and Node.`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
function checkPattern(path, value, pattern, example, error) {
|
|
125
|
+
if (isConcreteString(value) && !pattern.test(value)) {
|
|
126
|
+
error(path, `"${value}" is not a valid value here, e.g. ${example}.`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
function hasAny(term, keys) {
|
|
130
|
+
return keys.some((key) => term[key] !== undefined);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Validate a `NodePool` spec.
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* ```typescript
|
|
137
|
+
* const errors = validateNodePoolSpec(spec).filter((issue) => issue.severity === 'error');
|
|
138
|
+
* ```
|
|
139
|
+
*/
|
|
140
|
+
export function validateNodePoolSpec(spec, name) {
|
|
141
|
+
const issues = [];
|
|
142
|
+
const error = (path, message) => issues.push({ severity: 'error', path, message });
|
|
143
|
+
const warn = (path, message) => issues.push({ severity: 'warning', path, message });
|
|
144
|
+
checkName('NodePool', name, error);
|
|
145
|
+
if (isGraphValue(spec))
|
|
146
|
+
return issues;
|
|
147
|
+
const template = spec?.template?.spec;
|
|
148
|
+
if (!template?.nodeClassRef) {
|
|
149
|
+
error('template.spec.nodeClassRef', 'A NodePool needs a nodeClassRef naming its EC2NodeClass.');
|
|
150
|
+
}
|
|
151
|
+
else if (isConcreteString(template.nodeClassRef.name) && template.nodeClassRef.name === '') {
|
|
152
|
+
error('template.spec.nodeClassRef.name', 'nodeClassRef.name must not be empty.');
|
|
153
|
+
}
|
|
154
|
+
const requirements = concreteArray(template?.requirements);
|
|
155
|
+
if (requirements?.length === 0) {
|
|
156
|
+
warn('template.spec.requirements', 'No requirements: Karpenter may launch any on-demand amd64 instance type, including very large ones. Constrain at least the capacity type and instance category or family.');
|
|
157
|
+
}
|
|
158
|
+
requirements?.forEach((requirement, index) => {
|
|
159
|
+
const path = `template.spec.requirements[${index}]`;
|
|
160
|
+
const values = concreteArray(requirement.values);
|
|
161
|
+
if (VALUED_OPERATORS.includes(requirement.operator) && requirement.values === undefined) {
|
|
162
|
+
error(`${path}.values`, `Operator '${requirement.operator}' needs values.`);
|
|
163
|
+
}
|
|
164
|
+
if (typeof requirement.minValues === 'number' &&
|
|
165
|
+
(requirement.minValues < 1 || requirement.minValues > 50)) {
|
|
166
|
+
error(`${path}.minValues`, 'minValues must be between 1 and 50.');
|
|
167
|
+
}
|
|
168
|
+
const restricted = isConcreteString(requirement.key)
|
|
169
|
+
? restrictedLabelReason(requirement.key)
|
|
170
|
+
: undefined;
|
|
171
|
+
if (restricted) {
|
|
172
|
+
error(`${path}.key`, `${requirement.key} cannot be a requirement: ${restricted}`);
|
|
173
|
+
}
|
|
174
|
+
if (requirement.operator === 'In' && values?.length === 0) {
|
|
175
|
+
error(`${path}.values`, "Operator 'In' needs at least one value.");
|
|
176
|
+
}
|
|
177
|
+
if (['Gt', 'Lt', 'Gte', 'Lte'].includes(requirement.operator) && values) {
|
|
178
|
+
const [only] = values;
|
|
179
|
+
if (values.length !== 1 || !isConcreteString(only) || !isNonNegativeInteger(only)) {
|
|
180
|
+
error(`${path}.values`, `Operator '${requirement.operator}' needs exactly one non-negative integer value.`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
if (typeof requirement.minValues === 'number' &&
|
|
184
|
+
requirement.operator === 'In' &&
|
|
185
|
+
values &&
|
|
186
|
+
values.length < requirement.minValues) {
|
|
187
|
+
error(`${path}.minValues`, `minValues ${requirement.minValues} exceeds the ${values.length} values listed.`);
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
const labels = spec?.template?.metadata?.labels;
|
|
191
|
+
if (labels !== undefined && !isGraphValue(labels)) {
|
|
192
|
+
for (const key of Object.keys(labels)) {
|
|
193
|
+
const restricted = restrictedLabelReason(key);
|
|
194
|
+
if (restricted) {
|
|
195
|
+
error(`template.metadata.labels.${key}`, `${key} cannot be a template label: ${restricted}`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
checkPattern('template.spec.expireAfter', template?.expireAfter, EXPIRE_AFTER, "'720h' or 'Never'", error);
|
|
200
|
+
checkPattern('template.spec.terminationGracePeriod', template?.terminationGracePeriod, TERMINATION_GRACE_PERIOD, "'48h'", error);
|
|
201
|
+
// Static NodePools (`replicas` set; not typed, alpha) take neither weight nor
|
|
202
|
+
// limits other than `nodes`.
|
|
203
|
+
const replicas = spec?.replicas;
|
|
204
|
+
if (replicas !== undefined) {
|
|
205
|
+
if (spec.weight !== undefined)
|
|
206
|
+
error('weight', 'weight is not supported on static NodePools.');
|
|
207
|
+
const limitKeys = spec.limits !== undefined && !isGraphValue(spec.limits) ? Object.keys(spec.limits) : [];
|
|
208
|
+
if (limitKeys.some((key) => key !== 'nodes')) {
|
|
209
|
+
error('limits', 'Only limits.nodes is supported on static NodePools.');
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
if (replicas === undefined && spec?.limits === undefined) {
|
|
213
|
+
warn('limits', 'No limits: this NodePool can scale without bound. Set limits.cpu and limits.memory.');
|
|
214
|
+
}
|
|
215
|
+
if (spec?.disruption !== undefined &&
|
|
216
|
+
!isGraphValue(spec.disruption) &&
|
|
217
|
+
spec.disruption.consolidateAfter === undefined) {
|
|
218
|
+
error('disruption.consolidateAfter', "consolidateAfter is required when disruption is set (e.g. '0s' or '1m').");
|
|
219
|
+
}
|
|
220
|
+
if (spec?.disruption !== undefined && !isGraphValue(spec.disruption)) {
|
|
221
|
+
checkPattern('disruption.consolidateAfter', spec.disruption.consolidateAfter, CONSOLIDATE_AFTER, "'0s', '1m' or 'Never'", error);
|
|
222
|
+
}
|
|
223
|
+
concreteArray(spec?.disruption?.budgets)?.forEach((budget, index) => {
|
|
224
|
+
if ((budget.schedule === undefined) !== (budget.duration === undefined)) {
|
|
225
|
+
error(`disruption.budgets[${index}]`, 'A budget schedule and duration must be set together.');
|
|
226
|
+
}
|
|
227
|
+
checkPattern(`disruption.budgets[${index}].nodes`, budget.nodes, BUDGET_NODES, "'10%' or '5'", error);
|
|
228
|
+
checkPattern(`disruption.budgets[${index}].duration`, budget.duration, BUDGET_DURATION, "'8h' or '1h30m'", error);
|
|
229
|
+
});
|
|
230
|
+
if (typeof spec?.weight === 'number' && (spec.weight < 1 || spec.weight > 100)) {
|
|
231
|
+
error('weight', 'weight must be between 1 and 100.');
|
|
232
|
+
}
|
|
233
|
+
return issues;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Validate an `EC2NodeClass` spec.
|
|
237
|
+
*
|
|
238
|
+
* @example
|
|
239
|
+
* ```typescript
|
|
240
|
+
* validateEC2NodeClassSpec({ ...spec, metadataOptions: { httpTokens: 'optional' } });
|
|
241
|
+
* // [{ severity: 'warning', path: 'metadataOptions.httpTokens', ... }]
|
|
242
|
+
* ```
|
|
243
|
+
*/
|
|
244
|
+
export function validateEC2NodeClassSpec(spec, name) {
|
|
245
|
+
const issues = [];
|
|
246
|
+
const error = (path, message) => issues.push({ severity: 'error', path, message });
|
|
247
|
+
checkName('EC2NodeClass', name, error);
|
|
248
|
+
if (isGraphValue(spec))
|
|
249
|
+
return issues;
|
|
250
|
+
if ((spec?.role === undefined) === (spec?.instanceProfile === undefined)) {
|
|
251
|
+
error('role', 'Set exactly one of role or instanceProfile.');
|
|
252
|
+
}
|
|
253
|
+
for (const field of ['role', 'instanceProfile']) {
|
|
254
|
+
if (isConcreteString(spec?.[field]) && spec[field] === '') {
|
|
255
|
+
error(field, `${field} must not be empty.`);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
const tags = spec?.tags;
|
|
259
|
+
if (tags !== undefined && !isGraphValue(tags)) {
|
|
260
|
+
for (const key of Object.keys(tags)) {
|
|
261
|
+
if (key === '')
|
|
262
|
+
error('tags', 'Tag keys must not be empty.');
|
|
263
|
+
else if (RESTRICTED_TAGS.includes(key) || key.startsWith('kubernetes.io/cluster')) {
|
|
264
|
+
error(`tags.${key}`, `The tag ${key} is reserved for EKS and Karpenter.`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
// Mirrors the amiSelectorTerms rules of the pinned EC2NodeClass CRD, plus one
|
|
269
|
+
// stricter rule: alias, id and ssmParameter each resolve an AMI on their own,
|
|
270
|
+
// and Karpenter ignores every other field in that term (alias wins over
|
|
271
|
+
// everything; id wins over ssmParameter; ssmParameter wins over name, tags and
|
|
272
|
+
// owner). The CRD leaves ssmParameter out of its exclusion rules, so without
|
|
273
|
+
// this check those fields would be applied and then silently dropped.
|
|
274
|
+
const amiTerms = concreteArray(spec?.amiSelectorTerms);
|
|
275
|
+
if (amiTerms?.length === 0) {
|
|
276
|
+
error('amiSelectorTerms', 'At least one AMI selector term is required, e.g. { alias: "al2023@latest" }.');
|
|
277
|
+
}
|
|
278
|
+
if (amiTerms && amiTerms.length > MAX_AMI_SELECTOR_TERMS) {
|
|
279
|
+
error('amiSelectorTerms', `At most ${MAX_AMI_SELECTOR_TERMS} AMI selector terms are allowed (got ${amiTerms.length}).`);
|
|
280
|
+
}
|
|
281
|
+
if (amiTerms && amiTerms.length > 1 && amiTerms.some((term) => term.alias !== undefined)) {
|
|
282
|
+
error('amiSelectorTerms', 'An alias term must be the only AMI selector term.');
|
|
283
|
+
}
|
|
284
|
+
amiTerms?.forEach((term, index) => {
|
|
285
|
+
const path = `amiSelectorTerms[${index}]`;
|
|
286
|
+
if (!hasAny(term, ['alias', 'id', 'name', 'tags', 'ssmParameter'])) {
|
|
287
|
+
error(path, 'An AMI selector term needs alias, id, name, tags or ssmParameter.');
|
|
288
|
+
}
|
|
289
|
+
// Karpenter resolves the first of these that is set and ignores the rest.
|
|
290
|
+
const winner = ['alias', 'id', 'ssmParameter'].find((field) => term[field] !== undefined);
|
|
291
|
+
const ignored = AMI_TERM_FIELDS.filter((field) => field !== winner && term[field] !== undefined);
|
|
292
|
+
if (winner !== undefined && ignored.length > 0) {
|
|
293
|
+
error(path, `${winner} must be the only field in its AMI selector term; Karpenter would ignore ${ignored.join(', ')}.`);
|
|
294
|
+
}
|
|
295
|
+
if (isConcreteString(term.id) && !AMI_ID.test(term.id)) {
|
|
296
|
+
error(`${path}.id`, `AMI id "${term.id}" must look like ami-0123456789abcdef0.`);
|
|
297
|
+
}
|
|
298
|
+
if (term.tags !== undefined && !isGraphValue(term.tags)) {
|
|
299
|
+
const entries = Object.entries(term.tags);
|
|
300
|
+
if (entries.length > MAX_AMI_SELECTOR_TAGS) {
|
|
301
|
+
error(`${path}.tags`, `At most ${MAX_AMI_SELECTOR_TAGS} tags are allowed in one term.`);
|
|
302
|
+
}
|
|
303
|
+
if (entries.some(([key, value]) => key === '' || (isConcreteString(value) && value === ''))) {
|
|
304
|
+
error(`${path}.tags`, 'Tag keys and values must not be empty.');
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
if (isConcreteString(term.alias) && term.alias.length > MAX_ALIAS_LENGTH) {
|
|
308
|
+
error(`${path}.alias`, `An alias must be at most ${MAX_ALIAS_LENGTH} characters.`);
|
|
309
|
+
}
|
|
310
|
+
if (isConcreteString(term.alias)) {
|
|
311
|
+
const [family = '', version] = term.alias.split('@');
|
|
312
|
+
const amiFamily = ALIAS_FAMILIES[family];
|
|
313
|
+
if (!/^[a-zA-Z0-9]+@.+$/.test(term.alias) || amiFamily === undefined) {
|
|
314
|
+
error(`${path}.alias`, `Alias must be <family>@<version> with family one of ${Object.keys(ALIAS_FAMILIES).join(', ')}.`);
|
|
315
|
+
}
|
|
316
|
+
else if (family.startsWith('windows') && version !== 'latest') {
|
|
317
|
+
error(`${path}.alias`, 'Windows aliases only support @latest.');
|
|
318
|
+
}
|
|
319
|
+
else if (isConcreteString(spec.amiFamily) &&
|
|
320
|
+
spec.amiFamily !== 'Custom' &&
|
|
321
|
+
spec.amiFamily !== amiFamily) {
|
|
322
|
+
error('amiFamily', `amiFamily must be ${amiFamily} or Custom with alias ${term.alias}.`);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
if (amiTerms?.length &&
|
|
327
|
+
!amiTerms.some((term) => term.alias !== undefined) &&
|
|
328
|
+
spec.amiFamily === undefined) {
|
|
329
|
+
error('amiFamily', 'amiFamily is required when amiSelectorTerms do not use an alias.');
|
|
330
|
+
}
|
|
331
|
+
// `precedence`: the provider resolves the first of these that is set and
|
|
332
|
+
// ignores the rest of the term (subnet.go / securitygroup.go getFilterSets).
|
|
333
|
+
const selectors = [
|
|
334
|
+
{
|
|
335
|
+
field: 'subnetSelectorTerms',
|
|
336
|
+
value: spec?.subnetSelectorTerms,
|
|
337
|
+
keys: ['tags', 'id'],
|
|
338
|
+
precedence: ['id'],
|
|
339
|
+
idPattern: /subnet-[0-9a-z]+/,
|
|
340
|
+
example: 'subnet-0123456789abcdef0',
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
field: 'securityGroupSelectorTerms',
|
|
344
|
+
value: spec?.securityGroupSelectorTerms,
|
|
345
|
+
keys: ['tags', 'id', 'name'],
|
|
346
|
+
precedence: ['id', 'name'],
|
|
347
|
+
idPattern: /sg-[0-9a-z]+/,
|
|
348
|
+
example: 'sg-0123456789abcdef0',
|
|
349
|
+
},
|
|
350
|
+
];
|
|
351
|
+
for (const { field, value, keys, precedence, idPattern, example } of selectors) {
|
|
352
|
+
const terms = concreteArray(value);
|
|
353
|
+
if (terms?.length === 0)
|
|
354
|
+
error(field, `At least one ${field} entry is required.`);
|
|
355
|
+
terms?.forEach((term, index) => {
|
|
356
|
+
const path = `${field}[${index}]`;
|
|
357
|
+
if (!hasAny(term, keys))
|
|
358
|
+
error(path, `Each term needs one of: ${keys.join(', ')}.`);
|
|
359
|
+
const winner = precedence.find((key) => term[key] !== undefined);
|
|
360
|
+
const ignored = keys.filter((key) => key !== winner && term[key] !== undefined);
|
|
361
|
+
if (winner !== undefined && ignored.length > 0) {
|
|
362
|
+
error(path, `${winner} must be the only field in its term; Karpenter would ignore ${ignored.join(', ')}.`);
|
|
363
|
+
}
|
|
364
|
+
checkPattern(`${path}.id`, term.id, idPattern, example, error);
|
|
365
|
+
const termTags = term.tags;
|
|
366
|
+
if (termTags !== undefined &&
|
|
367
|
+
!isGraphValue(termTags) &&
|
|
368
|
+
Object.entries(termTags).some(([key, tag]) => key === '' || (isConcreteString(tag) && tag === ''))) {
|
|
369
|
+
error(`${path}.tags`, 'Tag keys and values must not be empty.');
|
|
370
|
+
}
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
if (spec?.metadataOptions?.httpTokens === 'optional') {
|
|
374
|
+
issues.push({
|
|
375
|
+
severity: 'warning',
|
|
376
|
+
path: 'metadataOptions.httpTokens',
|
|
377
|
+
message: 'httpTokens "optional" allows IMDSv1. Use "required" (IMDSv2 only).',
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
const mappings = concreteArray(spec?.blockDeviceMappings);
|
|
381
|
+
mappings?.forEach((mapping, index) => {
|
|
382
|
+
if (mapping.ebs &&
|
|
383
|
+
mapping.ebs.volumeSize === undefined &&
|
|
384
|
+
mapping.ebs.snapshotID === undefined) {
|
|
385
|
+
error(`blockDeviceMappings[${index}].ebs`, 'An EBS mapping needs volumeSize or snapshotID.');
|
|
386
|
+
}
|
|
387
|
+
});
|
|
388
|
+
const rootVolumes = mappings?.filter((mapping) => mapping.rootVolume);
|
|
389
|
+
if (rootVolumes && rootVolumes.length > 1) {
|
|
390
|
+
error('blockDeviceMappings', 'At most one block device mapping may set rootVolume.');
|
|
391
|
+
}
|
|
392
|
+
return issues;
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Warnings for a `karpenterBootstrap` spec.
|
|
396
|
+
*
|
|
397
|
+
* @example
|
|
398
|
+
* ```typescript
|
|
399
|
+
* validateKarpenterBootstrapConfig({ name: 'karpenter', clusterName: 'demo' });
|
|
400
|
+
* // [{ severity: 'warning', path: 'interruptionQueue', ... }]
|
|
401
|
+
* ```
|
|
402
|
+
*/
|
|
403
|
+
export function validateKarpenterBootstrapConfig(config) {
|
|
404
|
+
const issues = [];
|
|
405
|
+
const warn = (path, message) => issues.push({ severity: 'warning', path, message });
|
|
406
|
+
if (config.interruptionQueue === undefined || config.interruptionQueue === '') {
|
|
407
|
+
warn('interruptionQueue', 'No interruption queue: spot interruptions and scheduled maintenance will not drain nodes ahead of time.');
|
|
408
|
+
}
|
|
409
|
+
if (typeof config.replicas === 'number' && config.replicas < 2) {
|
|
410
|
+
warn('replicas', 'A single controller replica stops all provisioning while it restarts.');
|
|
411
|
+
}
|
|
412
|
+
if (config.affinity !== undefined &&
|
|
413
|
+
!isGraphValue(config.affinity) &&
|
|
414
|
+
!JSON.stringify(config.affinity).includes('karpenter.sh/nodepool')) {
|
|
415
|
+
warn('affinity', 'The affinity no longer excludes karpenter.sh/nodepool nodes, so the controller may be scheduled onto a node it manages.');
|
|
416
|
+
}
|
|
417
|
+
if (config.resources !== undefined &&
|
|
418
|
+
!isGraphValue(config.resources) &&
|
|
419
|
+
config.resources.requests === undefined) {
|
|
420
|
+
warn('resources.requests', 'No controller resource requests: a BestEffort controller is starved first and cannot reschedule onto the nodes it launches.');
|
|
421
|
+
}
|
|
422
|
+
return issues;
|
|
423
|
+
}
|
|
424
|
+
/** Log validator warnings, once per real composition run. Used by the factories. */
|
|
425
|
+
export function warnKarpenterIssues(source, issues) {
|
|
426
|
+
if (getCurrentCompositionContext()?.suppressResourceDiagnostics)
|
|
427
|
+
return;
|
|
428
|
+
for (const issue of issues) {
|
|
429
|
+
if (issue.severity === 'warning')
|
|
430
|
+
logger.warn(`${source}: ${issue.path}: ${issue.message}`);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
/** Throw on validator errors. Used by the factories. */
|
|
434
|
+
export function assertNoKarpenterErrors(kind, name, issues) {
|
|
435
|
+
const errors = issues.filter((issue) => issue.severity === 'error');
|
|
436
|
+
if (errors.length === 0)
|
|
437
|
+
return;
|
|
438
|
+
const label = isConcreteString(name) ? ` "${name}"` : '';
|
|
439
|
+
throw new TypeKroError(`Invalid ${kind}${label}: ${errors.map((issue) => `${issue.path}: ${issue.message}`).join('; ')}`, 'KARPENTER_INVALID_SPEC', { kind, issues: errors });
|
|
440
|
+
}
|
|
441
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../src/factories/karpenter/utils/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/factories/keda/compositions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC"}
|