typekro 0.1.0 → 0.2.2
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/LICENSE +201 -185
- package/README.md +581 -563
- package/dist/.tsbuildinfo +1 -1
- package/dist/alchemy/deployers.d.ts +1 -1
- package/dist/alchemy/deployers.d.ts.map +1 -1
- package/dist/alchemy/deployers.js +25 -20
- package/dist/alchemy/deployers.js.map +1 -1
- package/dist/alchemy/deployment.d.ts +3 -3
- package/dist/alchemy/deployment.d.ts.map +1 -1
- package/dist/alchemy/deployment.js +2 -2
- package/dist/alchemy/deployment.js.map +1 -1
- package/dist/alchemy/index.d.ts +4 -4
- package/dist/alchemy/index.d.ts.map +1 -1
- package/dist/alchemy/index.js +6 -6
- package/dist/alchemy/index.js.map +1 -1
- package/dist/alchemy/resolver.d.ts +3 -3
- package/dist/alchemy/resolver.d.ts.map +1 -1
- package/dist/alchemy/resolver.js +70 -17
- package/dist/alchemy/resolver.js.map +1 -1
- package/dist/alchemy/resource-registration.d.ts.map +1 -1
- package/dist/alchemy/resource-registration.js +3 -3
- package/dist/alchemy/resource-registration.js.map +1 -1
- package/dist/alchemy/type-inference.d.ts.map +1 -1
- package/dist/alchemy/type-inference.js.map +1 -1
- package/dist/alchemy/types.d.ts +2 -2
- package/dist/alchemy/types.d.ts.map +1 -1
- package/dist/alchemy/utilities.d.ts.map +1 -1
- package/dist/alchemy/utilities.js.map +1 -1
- package/dist/alchemy/wrapper.d.ts.map +1 -1
- package/dist/alchemy/wrapper.js +2 -2
- package/dist/alchemy/wrapper.js.map +1 -1
- package/dist/core/composition/composition.d.ts +1 -85
- package/dist/core/composition/composition.d.ts.map +1 -1
- package/dist/core/composition/composition.js +3 -214
- package/dist/core/composition/composition.js.map +1 -1
- package/dist/core/composition/imperative.d.ts +39 -0
- package/dist/core/composition/imperative.d.ts.map +1 -0
- package/dist/core/composition/imperative.js +219 -0
- package/dist/core/composition/imperative.js.map +1 -0
- package/dist/core/composition/index.d.ts +5 -3
- package/dist/core/composition/index.d.ts.map +1 -1
- package/dist/core/composition/index.js +4 -2
- package/dist/core/composition/index.js.map +1 -1
- package/dist/core/composition/typekro-runtime/index.d.ts +1 -1
- package/dist/core/composition/typekro-runtime/index.d.ts.map +1 -1
- package/dist/core/composition/typekro-runtime/typekro-runtime.d.ts.map +1 -1
- package/dist/core/composition/typekro-runtime/typekro-runtime.js +3 -3
- package/dist/core/composition/typekro-runtime/typekro-runtime.js.map +1 -1
- package/dist/core/composition/types.d.ts +0 -237
- package/dist/core/composition/types.d.ts.map +1 -1
- package/dist/core/composition/types.js +6 -0
- package/dist/core/composition/types.js.map +1 -1
- package/dist/core/constants/brands.d.ts.map +1 -1
- package/dist/core/constants/brands.js +3 -9
- package/dist/core/constants/brands.js.map +1 -1
- package/dist/core/dependencies/resolver.d.ts.map +1 -1
- package/dist/core/dependencies/resolver.js +3 -3
- package/dist/core/dependencies/resolver.js.map +1 -1
- package/dist/core/dependencies/type-guards.d.ts +3 -3
- package/dist/core/dependencies/type-guards.d.ts.map +1 -1
- package/dist/core/dependencies/type-guards.js +3 -3
- package/dist/core/dependencies/type-guards.js.map +1 -1
- package/dist/core/deployment/debug-logger.d.ts +119 -0
- package/dist/core/deployment/debug-logger.d.ts.map +1 -0
- package/dist/core/deployment/debug-logger.js +372 -0
- package/dist/core/deployment/debug-logger.js.map +1 -0
- package/dist/core/deployment/deployment-strategies.d.ts +1 -1
- package/dist/core/deployment/deployment-strategies.d.ts.map +1 -1
- package/dist/core/deployment/deployment-strategies.js +1 -1
- package/dist/core/deployment/deployment-strategies.js.map +1 -1
- package/dist/core/deployment/direct-factory.d.ts +11 -5
- package/dist/core/deployment/direct-factory.d.ts.map +1 -1
- package/dist/core/deployment/direct-factory.js +22 -12
- package/dist/core/deployment/direct-factory.js.map +1 -1
- package/dist/core/deployment/engine.d.ts +9 -6
- package/dist/core/deployment/engine.d.ts.map +1 -1
- package/dist/core/deployment/engine.js +184 -95
- package/dist/core/deployment/engine.js.map +1 -1
- package/dist/core/deployment/event-filter.d.ts +142 -0
- package/dist/core/deployment/event-filter.d.ts.map +1 -0
- package/dist/core/deployment/event-filter.js +420 -0
- package/dist/core/deployment/event-filter.js.map +1 -0
- package/dist/core/deployment/event-monitor.d.ts +197 -0
- package/dist/core/deployment/event-monitor.d.ts.map +1 -0
- package/dist/core/deployment/event-monitor.js +738 -0
- package/dist/core/deployment/event-monitor.js.map +1 -0
- package/dist/core/deployment/event-streamer.d.ts +112 -0
- package/dist/core/deployment/event-streamer.d.ts.map +1 -0
- package/dist/core/deployment/event-streamer.js +348 -0
- package/dist/core/deployment/event-streamer.js.map +1 -0
- package/dist/core/deployment/index.d.ts +5 -5
- package/dist/core/deployment/index.d.ts.map +1 -1
- package/dist/core/deployment/index.js +5 -5
- package/dist/core/deployment/index.js.map +1 -1
- package/dist/core/deployment/kro-factory.d.ts +2 -8
- package/dist/core/deployment/kro-factory.d.ts.map +1 -1
- package/dist/core/deployment/kro-factory.js +63 -109
- package/dist/core/deployment/kro-factory.js.map +1 -1
- package/dist/core/deployment/readiness.d.ts +6 -0
- package/dist/core/deployment/readiness.d.ts.map +1 -1
- package/dist/core/deployment/readiness.js +45 -1
- package/dist/core/deployment/readiness.js.map +1 -1
- package/dist/core/deployment/rollback-manager.d.ts.map +1 -1
- package/dist/core/deployment/rollback-manager.js +3 -3
- package/dist/core/deployment/rollback-manager.js.map +1 -1
- package/dist/core/deployment/shared-utilities.d.ts +1 -1
- package/dist/core/deployment/shared-utilities.d.ts.map +1 -1
- package/dist/core/deployment/shared-utilities.js +2 -0
- package/dist/core/deployment/shared-utilities.js.map +1 -1
- package/dist/core/deployment/status-hydrator.d.ts.map +1 -1
- package/dist/core/deployment/status-hydrator.js +31 -12
- package/dist/core/deployment/status-hydrator.js.map +1 -1
- package/dist/core/deployment/strategies/alchemy-strategy.d.ts +4 -4
- package/dist/core/deployment/strategies/alchemy-strategy.d.ts.map +1 -1
- package/dist/core/deployment/strategies/alchemy-strategy.js +9 -9
- package/dist/core/deployment/strategies/alchemy-strategy.js.map +1 -1
- package/dist/core/deployment/strategies/base-strategy.d.ts +7 -4
- package/dist/core/deployment/strategies/base-strategy.d.ts.map +1 -1
- package/dist/core/deployment/strategies/base-strategy.js +257 -11
- package/dist/core/deployment/strategies/base-strategy.js.map +1 -1
- package/dist/core/deployment/strategies/direct-strategy.d.ts +4 -3
- package/dist/core/deployment/strategies/direct-strategy.d.ts.map +1 -1
- package/dist/core/deployment/strategies/direct-strategy.js +4 -4
- package/dist/core/deployment/strategies/direct-strategy.js.map +1 -1
- package/dist/core/deployment/strategies/index.d.ts +1 -1
- package/dist/core/deployment/strategies/index.d.ts.map +1 -1
- package/dist/core/deployment/strategies/index.js +1 -1
- package/dist/core/deployment/strategies/index.js.map +1 -1
- package/dist/core/deployment/strategies/kro-strategy.d.ts +1 -1
- package/dist/core/deployment/strategies/kro-strategy.d.ts.map +1 -1
- package/dist/core/deployment/strategies/kro-strategy.js +14 -14
- package/dist/core/deployment/strategies/kro-strategy.js.map +1 -1
- package/dist/core/errors.d.ts +136 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +362 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/evaluation/cel-optimizer.d.ts.map +1 -1
- package/dist/core/evaluation/cel-optimizer.js +33 -11
- package/dist/core/evaluation/cel-optimizer.js.map +1 -1
- package/dist/core/factory.d.ts.map +1 -1
- package/dist/core/factory.js.map +1 -1
- package/dist/core/kubernetes/api.d.ts +13 -2
- package/dist/core/kubernetes/api.d.ts.map +1 -1
- package/dist/core/kubernetes/api.js +21 -8
- package/dist/core/kubernetes/api.js.map +1 -1
- package/dist/core/kubernetes/client-provider.d.ts +192 -0
- package/dist/core/kubernetes/client-provider.d.ts.map +1 -1
- package/dist/core/kubernetes/client-provider.js +423 -22
- package/dist/core/kubernetes/client-provider.js.map +1 -1
- package/dist/core/logging/config.d.ts.map +1 -1
- package/dist/core/logging/config.js.map +1 -1
- package/dist/core/logging/index.d.ts +1 -1
- package/dist/core/logging/index.d.ts.map +1 -1
- package/dist/core/logging/index.js +1 -1
- package/dist/core/logging/index.js.map +1 -1
- package/dist/core/logging/logger.d.ts +1 -1
- package/dist/core/logging/logger.d.ts.map +1 -1
- package/dist/core/logging/logger.js.map +1 -1
- package/dist/core/readiness/cluster-state.d.ts.map +1 -1
- package/dist/core/readiness/cluster-state.js +12 -6
- package/dist/core/readiness/cluster-state.js.map +1 -1
- package/dist/core/references/cel-evaluator.js +1 -1
- package/dist/core/references/cel-evaluator.js.map +1 -1
- package/dist/core/references/cel.d.ts.map +1 -1
- package/dist/core/references/cel.js +1 -1
- package/dist/core/references/cel.js.map +1 -1
- package/dist/core/references/external-refs.d.ts +1 -1
- package/dist/core/references/external-refs.js +1 -1
- package/dist/core/references/index.d.ts +4 -4
- package/dist/core/references/index.d.ts.map +1 -1
- package/dist/core/references/index.js +6 -6
- package/dist/core/references/index.js.map +1 -1
- package/dist/core/references/resolver.d.ts +1 -1
- package/dist/core/references/resolver.d.ts.map +1 -1
- package/dist/core/references/resolver.js +69 -44
- package/dist/core/references/resolver.js.map +1 -1
- package/dist/core/references/schema-proxy.d.ts.map +1 -1
- package/dist/core/references/schema-proxy.js +2 -4
- package/dist/core/references/schema-proxy.js.map +1 -1
- package/dist/core/serialization/core.d.ts +1 -1
- package/dist/core/serialization/core.d.ts.map +1 -1
- package/dist/core/serialization/core.js +122 -16
- package/dist/core/serialization/core.js.map +1 -1
- package/dist/core/serialization/schema.js +1 -1
- package/dist/core/serialization/schema.js.map +1 -1
- package/dist/core/serialization/validation.js +1 -1
- package/dist/core/serialization/validation.js.map +1 -1
- package/dist/core/serialization/yaml.js +1 -1
- package/dist/core/serialization/yaml.js.map +1 -1
- package/dist/core/types/common.d.ts.map +1 -1
- package/dist/core/types/deployment.d.ts +116 -3
- package/dist/core/types/deployment.d.ts.map +1 -1
- package/dist/core/types/deployment.js.map +1 -1
- package/dist/core/types/index.d.ts +1 -1
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js.map +1 -1
- package/dist/core/types/kubernetes.d.ts.map +1 -1
- package/dist/core/types/serialization.d.ts +14 -3
- package/dist/core/types/serialization.d.ts.map +1 -1
- package/dist/core/validation/cel-validator.d.ts.map +1 -1
- package/dist/core/validation/cel-validator.js +28 -10
- package/dist/core/validation/cel-validator.js.map +1 -1
- package/dist/core/yaml/index.d.ts +1 -1
- package/dist/core/yaml/index.d.ts.map +1 -1
- package/dist/core/yaml/index.js +1 -1
- package/dist/core/yaml/index.js.map +1 -1
- package/dist/core/yaml/path-resolver.d.ts.map +1 -1
- package/dist/core/yaml/path-resolver.js +6 -6
- package/dist/core/yaml/path-resolver.js.map +1 -1
- package/dist/core.d.ts +10 -10
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +14 -14
- package/dist/core.js.map +1 -1
- package/dist/factories/flux/git-repository.d.ts.map +1 -1
- package/dist/factories/flux/git-repository.js.map +1 -1
- package/dist/factories/flux/index.d.ts +1 -1
- package/dist/factories/flux/index.d.ts.map +1 -1
- package/dist/factories/flux/index.js.map +1 -1
- package/dist/factories/flux/kustomize/index.d.ts +1 -1
- package/dist/factories/flux/kustomize/index.d.ts.map +1 -1
- package/dist/factories/flux/kustomize/index.js.map +1 -1
- package/dist/factories/flux/kustomize/readiness-evaluators.d.ts.map +1 -1
- package/dist/factories/flux/kustomize/readiness-evaluators.js +9 -9
- package/dist/factories/flux/kustomize/readiness-evaluators.js.map +1 -1
- package/dist/factories/flux/kustomize/types.d.ts +1 -1
- package/dist/factories/flux/kustomize/types.d.ts.map +1 -1
- package/dist/factories/helm/helm-release.d.ts +7 -4
- package/dist/factories/helm/helm-release.d.ts.map +1 -1
- package/dist/factories/helm/helm-release.js +7 -4
- package/dist/factories/helm/helm-release.js.map +1 -1
- package/dist/factories/helm/helm-repository.d.ts.map +1 -1
- package/dist/factories/helm/helm-repository.js.map +1 -1
- package/dist/factories/helm/index.d.ts +1 -1
- package/dist/factories/helm/index.d.ts.map +1 -1
- package/dist/factories/helm/index.js +1 -1
- package/dist/factories/helm/index.js.map +1 -1
- package/dist/factories/helm/readiness-evaluators.d.ts.map +1 -1
- package/dist/factories/helm/readiness-evaluators.js +4 -2
- package/dist/factories/helm/readiness-evaluators.js.map +1 -1
- package/dist/factories/index.d.ts +6 -3
- package/dist/factories/index.d.ts.map +1 -1
- package/dist/factories/index.js +10 -6
- package/dist/factories/index.js.map +1 -1
- package/dist/factories/kro/index.d.ts +3 -3
- package/dist/factories/kro/index.d.ts.map +1 -1
- package/dist/factories/kro/index.js +2 -2
- package/dist/factories/kro/index.js.map +1 -1
- package/dist/factories/kro/kro-crd.d.ts.map +1 -1
- package/dist/factories/kro/kro-crd.js +5 -5
- package/dist/factories/kro/kro-crd.js.map +1 -1
- package/dist/factories/kro/kro-custom-resource.d.ts.map +1 -1
- package/dist/factories/kro/kro-custom-resource.js +21 -21
- package/dist/factories/kro/kro-custom-resource.js.map +1 -1
- package/dist/factories/kro/resource-graph-definition.d.ts.map +1 -1
- package/dist/factories/kro/resource-graph-definition.js +7 -7
- package/dist/factories/kro/resource-graph-definition.js.map +1 -1
- package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler-v1.d.ts.map +1 -1
- package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler-v1.js.map +1 -1
- package/dist/factories/kubernetes/autoscaling/horizontal-pod-autoscaler.js +2 -2
- package/dist/factories/kubernetes/certificates/certificate-signing-request.js +2 -2
- package/dist/factories/kubernetes/certificates/certificate-signing-request.js.map +1 -1
- package/dist/factories/kubernetes/config/config-map.js +1 -1
- package/dist/factories/kubernetes/config/config-map.js.map +1 -1
- package/dist/factories/kubernetes/config/secret.js +1 -1
- package/dist/factories/kubernetes/config/secret.js.map +1 -1
- package/dist/factories/kubernetes/core/component-status.js +1 -1
- package/dist/factories/kubernetes/core/component-status.js.map +1 -1
- package/dist/factories/kubernetes/core/node.js +1 -1
- package/dist/factories/kubernetes/core/node.js.map +1 -1
- package/dist/factories/kubernetes/core/pod.js +4 -4
- package/dist/factories/kubernetes/core/pod.js.map +1 -1
- package/dist/factories/kubernetes/extensions/custom-resource-definition.js +2 -2
- package/dist/factories/kubernetes/extensions/custom-resource-definition.js.map +1 -1
- package/dist/factories/kubernetes/index.d.ts +2 -2
- package/dist/factories/kubernetes/index.d.ts.map +1 -1
- package/dist/factories/kubernetes/index.js +8 -8
- package/dist/factories/kubernetes/index.js.map +1 -1
- package/dist/factories/kubernetes/networking/endpoints.d.ts.map +1 -1
- package/dist/factories/kubernetes/networking/endpoints.js +4 -4
- package/dist/factories/kubernetes/networking/endpoints.js.map +1 -1
- package/dist/factories/kubernetes/networking/ingress.js +2 -2
- package/dist/factories/kubernetes/networking/network-policy.js +2 -2
- package/dist/factories/kubernetes/networking/network-policy.js.map +1 -1
- package/dist/factories/kubernetes/networking/service.d.ts.map +1 -1
- package/dist/factories/kubernetes/networking/service.js +8 -7
- package/dist/factories/kubernetes/networking/service.js.map +1 -1
- package/dist/factories/kubernetes/policy/limit-range.js +2 -2
- package/dist/factories/kubernetes/policy/limit-range.js.map +1 -1
- package/dist/factories/kubernetes/policy/pod-disruption-budget.js +5 -5
- package/dist/factories/kubernetes/policy/resource-quota.js +4 -4
- package/dist/factories/kubernetes/rbac/cluster-role-binding.js +2 -2
- package/dist/factories/kubernetes/rbac/cluster-role-binding.js.map +1 -1
- package/dist/factories/kubernetes/rbac/cluster-role.js +2 -2
- package/dist/factories/kubernetes/rbac/cluster-role.js.map +1 -1
- package/dist/factories/kubernetes/rbac/role-binding.js +2 -2
- package/dist/factories/kubernetes/rbac/role-binding.js.map +1 -1
- package/dist/factories/kubernetes/rbac/role.js +2 -2
- package/dist/factories/kubernetes/rbac/role.js.map +1 -1
- package/dist/factories/kubernetes/rbac/service-account.js +2 -2
- package/dist/factories/kubernetes/rbac/service-account.js.map +1 -1
- package/dist/factories/kubernetes/storage/persistent-volume-claim.js +2 -2
- package/dist/factories/kubernetes/storage/persistent-volume.js +4 -4
- package/dist/factories/kubernetes/storage/storage-class.js +2 -2
- package/dist/factories/kubernetes/storage/storage-class.js.map +1 -1
- package/dist/factories/kubernetes/workloads/cron-job.js +5 -5
- package/dist/factories/kubernetes/workloads/daemon-set.js +2 -2
- package/dist/factories/kubernetes/workloads/deployment.d.ts.map +1 -1
- package/dist/factories/kubernetes/workloads/deployment.js +5 -6
- package/dist/factories/kubernetes/workloads/deployment.js.map +1 -1
- package/dist/factories/kubernetes/workloads/job.js +10 -10
- package/dist/factories/kubernetes/workloads/replica-set.js +2 -2
- package/dist/factories/kubernetes/workloads/replication-controller.js +5 -5
- package/dist/factories/kubernetes/workloads/stateful-set.d.ts.map +1 -1
- package/dist/factories/kubernetes/workloads/stateful-set.js +7 -7
- package/dist/factories/kubernetes/workloads/stateful-set.js.map +1 -1
- package/dist/factories/kubernetes/yaml/index.d.ts +1 -1
- package/dist/factories/kubernetes/yaml/index.d.ts.map +1 -1
- package/dist/factories/kubernetes/yaml/index.js +1 -1
- package/dist/factories/kubernetes/yaml/index.js.map +1 -1
- package/dist/factories/kubernetes/yaml/yaml-directory.d.ts +2 -2
- package/dist/factories/kubernetes/yaml/yaml-directory.d.ts.map +1 -1
- package/dist/factories/kubernetes/yaml/yaml-directory.js +106 -101
- package/dist/factories/kubernetes/yaml/yaml-directory.js.map +1 -1
- package/dist/factories/kubernetes/yaml/yaml-file.d.ts +7 -4
- package/dist/factories/kubernetes/yaml/yaml-file.d.ts.map +1 -1
- package/dist/factories/kubernetes/yaml/yaml-file.js +110 -99
- package/dist/factories/kubernetes/yaml/yaml-file.js.map +1 -1
- package/dist/factories/shared.d.ts +49 -0
- package/dist/factories/shared.d.ts.map +1 -1
- package/dist/factories/shared.js +75 -3
- package/dist/factories/shared.js.map +1 -1
- package/dist/factories/simple/autoscaling/horizontal-pod-autoscaler.d.ts +17 -0
- package/dist/factories/simple/autoscaling/horizontal-pod-autoscaler.d.ts.map +1 -0
- package/dist/factories/simple/autoscaling/horizontal-pod-autoscaler.js +46 -0
- package/dist/factories/simple/autoscaling/horizontal-pod-autoscaler.js.map +1 -0
- package/dist/factories/simple/autoscaling/index.d.ts +8 -0
- package/dist/factories/simple/autoscaling/index.d.ts.map +1 -0
- package/dist/factories/simple/autoscaling/index.js +8 -0
- package/dist/factories/simple/autoscaling/index.js.map +1 -0
- package/dist/factories/simple/config/config-map.d.ts +17 -0
- package/dist/factories/simple/config/config-map.d.ts.map +1 -0
- package/dist/factories/simple/config/config-map.js +25 -0
- package/dist/factories/simple/config/config-map.js.map +1 -0
- package/dist/factories/simple/config/index.d.ts +9 -0
- package/dist/factories/simple/config/index.d.ts.map +1 -0
- package/dist/factories/simple/config/index.js +9 -0
- package/dist/factories/simple/config/index.js.map +1 -0
- package/dist/factories/simple/config/secret.d.ts +17 -0
- package/dist/factories/simple/config/secret.d.ts.map +1 -0
- package/dist/factories/simple/config/secret.js +24 -0
- package/dist/factories/simple/config/secret.js.map +1 -0
- package/dist/factories/simple/helm/index.d.ts +16 -0
- package/dist/factories/simple/helm/index.d.ts.map +1 -0
- package/dist/factories/simple/helm/index.js +21 -0
- package/dist/factories/simple/helm/index.js.map +1 -0
- package/dist/factories/simple/index.d.ts +50 -0
- package/dist/factories/simple/index.d.ts.map +1 -0
- package/dist/factories/simple/index.js +58 -0
- package/dist/factories/simple/index.js.map +1 -0
- package/dist/factories/simple/networking/index.d.ts +10 -0
- package/dist/factories/simple/networking/index.d.ts.map +1 -0
- package/dist/factories/simple/networking/index.js +10 -0
- package/dist/factories/simple/networking/index.js.map +1 -0
- package/dist/factories/simple/networking/ingress.d.ts +17 -0
- package/dist/factories/simple/networking/ingress.d.ts.map +1 -0
- package/dist/factories/simple/networking/ingress.js +30 -0
- package/dist/factories/simple/networking/ingress.js.map +1 -0
- package/dist/factories/simple/networking/network-policy.d.ts +17 -0
- package/dist/factories/simple/networking/network-policy.d.ts.map +1 -0
- package/dist/factories/simple/networking/network-policy.js +30 -0
- package/dist/factories/simple/networking/network-policy.js.map +1 -0
- package/dist/factories/simple/networking/service.d.ts +17 -0
- package/dist/factories/simple/networking/service.d.ts.map +1 -0
- package/dist/factories/simple/networking/service.js +27 -0
- package/dist/factories/simple/networking/service.js.map +1 -0
- package/dist/factories/simple/storage/index.d.ts +9 -0
- package/dist/factories/simple/storage/index.d.ts.map +1 -0
- package/dist/factories/simple/storage/index.js +9 -0
- package/dist/factories/simple/storage/index.js.map +1 -0
- package/dist/factories/simple/storage/persistent-volume-claim.d.ts +17 -0
- package/dist/factories/simple/storage/persistent-volume-claim.d.ts.map +1 -0
- package/dist/factories/simple/storage/persistent-volume-claim.js +32 -0
- package/dist/factories/simple/storage/persistent-volume-claim.js.map +1 -0
- package/dist/factories/simple/storage/persistent-volume.d.ts +17 -0
- package/dist/factories/simple/storage/persistent-volume.d.ts.map +1 -0
- package/dist/factories/simple/storage/persistent-volume.js +44 -0
- package/dist/factories/simple/storage/persistent-volume.js.map +1 -0
- package/dist/factories/simple/types.d.ts +165 -0
- package/dist/factories/simple/types.d.ts.map +1 -0
- package/dist/factories/simple/types.js +9 -0
- package/dist/factories/simple/types.js.map +1 -0
- package/dist/factories/simple/workloads/cron-job.d.ts +17 -0
- package/dist/factories/simple/workloads/cron-job.d.ts.map +1 -0
- package/dist/factories/simple/workloads/cron-job.js +43 -0
- package/dist/factories/simple/workloads/cron-job.js.map +1 -0
- package/dist/factories/simple/workloads/daemon-set.d.ts +17 -0
- package/dist/factories/simple/workloads/daemon-set.d.ts.map +1 -0
- package/dist/factories/simple/workloads/daemon-set.js +46 -0
- package/dist/factories/simple/workloads/daemon-set.js.map +1 -0
- package/dist/factories/simple/workloads/deployment.d.ts +17 -0
- package/dist/factories/simple/workloads/deployment.d.ts.map +1 -0
- package/dist/factories/simple/workloads/deployment.js +47 -0
- package/dist/factories/simple/workloads/deployment.js.map +1 -0
- package/dist/factories/simple/workloads/index.d.ts +12 -0
- package/dist/factories/simple/workloads/index.d.ts.map +1 -0
- package/dist/factories/simple/workloads/index.js +12 -0
- package/dist/factories/simple/workloads/index.js.map +1 -0
- package/dist/factories/simple/workloads/job.d.ts +17 -0
- package/dist/factories/simple/workloads/job.d.ts.map +1 -0
- package/dist/factories/simple/workloads/job.js +40 -0
- package/dist/factories/simple/workloads/job.js.map +1 -0
- package/dist/factories/simple/workloads/stateful-set.d.ts +17 -0
- package/dist/factories/simple/workloads/stateful-set.d.ts.map +1 -0
- package/dist/factories/simple/workloads/stateful-set.js +47 -0
- package/dist/factories/simple/workloads/stateful-set.js.map +1 -0
- package/dist/factories/simple/yaml/index.d.ts +13 -0
- package/dist/factories/simple/yaml/index.d.ts.map +1 -0
- package/dist/factories/simple/yaml/index.js +23 -0
- package/dist/factories/simple/yaml/index.js.map +1 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -22
- package/dist/index.js.map +1 -1
- package/dist/utils/helpers.d.ts +1 -1
- package/dist/utils/helpers.d.ts.map +1 -1
- package/dist/utils/helpers.js +53 -7
- package/dist/utils/helpers.js.map +1 -1
- package/dist/utils/index.d.ts +2 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -2
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/type-guards.d.ts +1 -1
- package/dist/utils/type-guards.d.ts.map +1 -1
- package/dist/utils/type-guards.js +3 -9
- package/dist/utils/type-guards.js.map +1 -1
- package/package.json +12 -6
|
@@ -5,14 +5,16 @@
|
|
|
5
5
|
* without requiring the Kro controller, using in-process dependency resolution.
|
|
6
6
|
*/
|
|
7
7
|
import * as k8s from '@kubernetes/client-node';
|
|
8
|
+
import { ensureReadinessEvaluator } from '../../utils/helpers.js';
|
|
8
9
|
import { DependencyResolver } from '../dependencies/index.js';
|
|
9
10
|
import { CircularDependencyError } from '../errors.js';
|
|
10
11
|
import { getComponentLogger } from '../logging/index.js';
|
|
11
|
-
import {
|
|
12
|
+
import { DeploymentMode, ReferenceResolver } from '../references/index.js';
|
|
12
13
|
import { ResourceDeploymentError } from '../types/deployment.js';
|
|
14
|
+
import { createDebugLoggerFromDeploymentOptions } from './debug-logger.js';
|
|
13
15
|
import { ResourceReadinessChecker } from './readiness.js';
|
|
14
16
|
import { StatusHydrator } from './status-hydrator.js';
|
|
15
|
-
import {
|
|
17
|
+
import { createEventMonitor } from './event-monitor.js';
|
|
16
18
|
export class DirectDeploymentEngine {
|
|
17
19
|
kubeClient;
|
|
18
20
|
deploymentMode;
|
|
@@ -21,6 +23,9 @@ export class DirectDeploymentEngine {
|
|
|
21
23
|
k8sApi;
|
|
22
24
|
readinessChecker;
|
|
23
25
|
statusHydrator;
|
|
26
|
+
debugLogger;
|
|
27
|
+
eventMonitor;
|
|
28
|
+
eventFilter;
|
|
24
29
|
deploymentState = new Map();
|
|
25
30
|
readyResources = new Set(); // Track resources that are already ready
|
|
26
31
|
logger = getComponentLogger('deployment-engine');
|
|
@@ -28,17 +33,19 @@ export class DirectDeploymentEngine {
|
|
|
28
33
|
this.kubeClient = kubeClient;
|
|
29
34
|
this.deploymentMode = deploymentMode;
|
|
30
35
|
this.dependencyResolver = new DependencyResolver();
|
|
31
|
-
this.referenceResolver =
|
|
36
|
+
this.referenceResolver =
|
|
37
|
+
referenceResolver || new ReferenceResolver(kubeClient, this.deploymentMode, k8sApi);
|
|
32
38
|
this.k8sApi = k8sApi || kubeClient.makeApiClient(k8s.KubernetesObjectApi);
|
|
33
39
|
this.readinessChecker = new ResourceReadinessChecker(this.k8sApi);
|
|
34
40
|
this.statusHydrator = new StatusHydrator(this.k8sApi);
|
|
41
|
+
// this.eventFilter = createEventFilter();
|
|
35
42
|
// Set up callback to track ready resources
|
|
36
43
|
this.readinessChecker.setOnResourceReady((resource) => {
|
|
37
44
|
const resourceKey = `${resource.kind}/${resource.name}/${resource.namespace}`;
|
|
38
45
|
this.readyResources.add(resourceKey);
|
|
39
46
|
this.logger.debug('Resource marked as ready via generic readiness checker', {
|
|
40
47
|
resourceKey,
|
|
41
|
-
totalReady: this.readyResources.size
|
|
48
|
+
totalReady: this.readyResources.size,
|
|
42
49
|
});
|
|
43
50
|
});
|
|
44
51
|
}
|
|
@@ -55,7 +62,8 @@ export class DirectDeploymentEngine {
|
|
|
55
62
|
async isDeployedResourceReady(deployedResource) {
|
|
56
63
|
try {
|
|
57
64
|
// Check if the deployed resource has a factory-provided readiness evaluator
|
|
58
|
-
const readinessEvaluator = deployedResource.manifest
|
|
65
|
+
const readinessEvaluator = deployedResource.manifest
|
|
66
|
+
.readinessEvaluator;
|
|
59
67
|
if (readinessEvaluator) {
|
|
60
68
|
// Use the factory-provided readiness evaluator
|
|
61
69
|
// Create a resource reference for the API call
|
|
@@ -71,19 +79,25 @@ export class DirectDeploymentEngine {
|
|
|
71
79
|
const liveResource = await this.k8sApi.read(resourceRef);
|
|
72
80
|
// Use the factory-provided readiness evaluator
|
|
73
81
|
const result = readinessEvaluator(liveResource.body);
|
|
82
|
+
let readinessResult;
|
|
74
83
|
if (typeof result === 'boolean') {
|
|
75
|
-
|
|
84
|
+
readinessResult = { ready: result };
|
|
76
85
|
}
|
|
77
86
|
else if (result && typeof result === 'object' && 'ready' in result) {
|
|
78
|
-
|
|
87
|
+
readinessResult = result;
|
|
79
88
|
}
|
|
80
89
|
else {
|
|
81
90
|
this.logger.warn('Readiness evaluator returned unexpected result', {
|
|
82
91
|
resourceId: deployedResource.id,
|
|
83
|
-
result
|
|
92
|
+
result,
|
|
84
93
|
});
|
|
85
|
-
|
|
94
|
+
readinessResult = { ready: false, reason: 'Invalid evaluator result' };
|
|
86
95
|
}
|
|
96
|
+
// Debug logging for readiness evaluation
|
|
97
|
+
if (this.debugLogger) {
|
|
98
|
+
this.debugLogger.logReadinessEvaluation(deployedResource, readinessEvaluator, readinessResult);
|
|
99
|
+
}
|
|
100
|
+
return readinessResult.ready;
|
|
87
101
|
}
|
|
88
102
|
else {
|
|
89
103
|
// Fallback to generic readiness checker
|
|
@@ -105,7 +119,7 @@ export class DirectDeploymentEngine {
|
|
|
105
119
|
resourceId: deployedResource.id,
|
|
106
120
|
kind: deployedResource.kind,
|
|
107
121
|
name: deployedResource.name,
|
|
108
|
-
namespace: deployedResource.namespace
|
|
122
|
+
namespace: deployedResource.namespace,
|
|
109
123
|
});
|
|
110
124
|
return false;
|
|
111
125
|
}
|
|
@@ -124,7 +138,10 @@ export class DirectDeploymentEngine {
|
|
|
124
138
|
const startTime = Date.now();
|
|
125
139
|
const deployedResources = [];
|
|
126
140
|
const errors = [];
|
|
127
|
-
const deploymentLogger = this.logger.child({
|
|
141
|
+
const deploymentLogger = this.logger.child({
|
|
142
|
+
deploymentId,
|
|
143
|
+
resourceCount: graph.resources.length,
|
|
144
|
+
});
|
|
128
145
|
deploymentLogger.info('Starting deployment', { options });
|
|
129
146
|
try {
|
|
130
147
|
this.emitEvent(options, {
|
|
@@ -133,7 +150,9 @@ export class DirectDeploymentEngine {
|
|
|
133
150
|
timestamp: new Date(),
|
|
134
151
|
});
|
|
135
152
|
// 1. Validate no cycles in dependency graph
|
|
136
|
-
deploymentLogger.debug('Validating dependency graph', {
|
|
153
|
+
deploymentLogger.debug('Validating dependency graph', {
|
|
154
|
+
dependencyGraph: graph.dependencyGraph,
|
|
155
|
+
});
|
|
137
156
|
this.dependencyResolver.validateNoCycles(graph.dependencyGraph);
|
|
138
157
|
// 2. Analyze deployment order and identify parallel stages
|
|
139
158
|
deploymentLogger.debug('Analyzing deployment order for parallel execution');
|
|
@@ -141,16 +160,40 @@ export class DirectDeploymentEngine {
|
|
|
141
160
|
deploymentLogger.debug('Deployment plan determined', {
|
|
142
161
|
levels: deploymentPlan.levels.length,
|
|
143
162
|
totalResources: deploymentPlan.totalResources,
|
|
144
|
-
maxParallelism: deploymentPlan.maxParallelism
|
|
163
|
+
maxParallelism: deploymentPlan.maxParallelism,
|
|
145
164
|
});
|
|
146
|
-
// 3.
|
|
165
|
+
// 3. Initialize and start event monitoring if enabled
|
|
166
|
+
if (options.eventMonitoring?.enabled) {
|
|
167
|
+
try {
|
|
168
|
+
this.eventMonitor = createEventMonitor(this.kubeClient, {
|
|
169
|
+
namespace: options.namespace || 'default',
|
|
170
|
+
eventTypes: options.eventMonitoring.eventTypes || ['Warning', 'Error'],
|
|
171
|
+
includeChildResources: options.eventMonitoring.includeChildResources ?? true,
|
|
172
|
+
startTime: new Date(startTime),
|
|
173
|
+
...(options.progressCallback && { progressCallback: options.progressCallback }),
|
|
174
|
+
});
|
|
175
|
+
// Start monitoring immediately to capture all deployment events
|
|
176
|
+
await this.eventMonitor.startMonitoring([]);
|
|
177
|
+
deploymentLogger.debug('Event monitoring started for deployment');
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
deploymentLogger.warn('Failed to initialize event monitoring, continuing without it', error);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// 3.1. Initialize debug logging if enabled
|
|
184
|
+
if (options.debugLogging?.enabled) {
|
|
185
|
+
this.debugLogger = createDebugLoggerFromDeploymentOptions(options);
|
|
186
|
+
this.readinessChecker.setDebugLogger(this.debugLogger);
|
|
187
|
+
deploymentLogger.debug('Debug logging initialized');
|
|
188
|
+
}
|
|
189
|
+
// 4. Create resolution context
|
|
147
190
|
const context = {
|
|
148
191
|
deployedResources,
|
|
149
192
|
kubeClient: this.kubeClient,
|
|
150
193
|
...(options.namespace && { namespace: options.namespace }),
|
|
151
194
|
timeout: options.timeout || 30000,
|
|
152
195
|
};
|
|
153
|
-
//
|
|
196
|
+
// 5. Deploy resources in parallel stages
|
|
154
197
|
for (let levelIndex = 0; levelIndex < deploymentPlan.levels.length; levelIndex++) {
|
|
155
198
|
const currentLevel = deploymentPlan.levels[levelIndex];
|
|
156
199
|
if (!currentLevel) {
|
|
@@ -158,7 +201,7 @@ export class DirectDeploymentEngine {
|
|
|
158
201
|
}
|
|
159
202
|
const levelLogger = deploymentLogger.child({
|
|
160
203
|
level: levelIndex + 1,
|
|
161
|
-
resourceCount: currentLevel.length
|
|
204
|
+
resourceCount: currentLevel.length,
|
|
162
205
|
});
|
|
163
206
|
levelLogger.debug(`Deploying level ${levelIndex + 1} with ${currentLevel.length} resources in parallel`);
|
|
164
207
|
// Track performance metrics for this level
|
|
@@ -179,13 +222,13 @@ export class DirectDeploymentEngine {
|
|
|
179
222
|
phase: 'validation',
|
|
180
223
|
error,
|
|
181
224
|
timestamp: new Date(),
|
|
182
|
-
}
|
|
225
|
+
},
|
|
183
226
|
};
|
|
184
227
|
}
|
|
185
228
|
resourceLogger.debug('Found resource in graph', {
|
|
186
229
|
resourceId: resource.id,
|
|
187
230
|
kind: resource.manifest?.kind,
|
|
188
|
-
name: resource.manifest?.metadata?.name
|
|
231
|
+
name: resource.manifest?.metadata?.name,
|
|
189
232
|
});
|
|
190
233
|
try {
|
|
191
234
|
resourceLogger.debug('Calling deploySingleResource');
|
|
@@ -193,12 +236,31 @@ export class DirectDeploymentEngine {
|
|
|
193
236
|
await this.waitForCRDIfCustomResource(resource.manifest, options, resourceLogger);
|
|
194
237
|
// FIX: Unconditionally ensure the readiness evaluator is attached just before deployment.
|
|
195
238
|
const resourceWithEvaluator = ensureReadinessEvaluator(resource.manifest);
|
|
239
|
+
// Add resource to event monitoring before deployment to capture creation events
|
|
240
|
+
if (this.eventMonitor) {
|
|
241
|
+
const preDeployedResource = {
|
|
242
|
+
id: resourceId,
|
|
243
|
+
kind: resourceWithEvaluator.kind,
|
|
244
|
+
name: resourceWithEvaluator.metadata?.name || 'unknown',
|
|
245
|
+
namespace: resourceWithEvaluator.metadata?.namespace || options.namespace || 'default',
|
|
246
|
+
manifest: resourceWithEvaluator,
|
|
247
|
+
status: 'deployed',
|
|
248
|
+
deployedAt: new Date(),
|
|
249
|
+
};
|
|
250
|
+
try {
|
|
251
|
+
await this.eventMonitor.addResources([preDeployedResource]);
|
|
252
|
+
resourceLogger.debug('Added resource to event monitoring before deployment');
|
|
253
|
+
}
|
|
254
|
+
catch (error) {
|
|
255
|
+
resourceLogger.warn('Failed to add resource to event monitoring, continuing deployment', error);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
196
258
|
const deployedResource = await this.deploySingleResource(resourceWithEvaluator, context, options);
|
|
197
259
|
resourceLogger.debug('Resource deployed successfully');
|
|
198
260
|
return {
|
|
199
261
|
success: true,
|
|
200
262
|
resourceId,
|
|
201
|
-
deployedResource
|
|
263
|
+
deployedResource,
|
|
202
264
|
};
|
|
203
265
|
}
|
|
204
266
|
catch (error) {
|
|
@@ -222,7 +284,7 @@ export class DirectDeploymentEngine {
|
|
|
222
284
|
phase: 'deployment',
|
|
223
285
|
error: error,
|
|
224
286
|
timestamp: new Date(),
|
|
225
|
-
}
|
|
287
|
+
},
|
|
226
288
|
};
|
|
227
289
|
}
|
|
228
290
|
});
|
|
@@ -252,6 +314,7 @@ export class DirectDeploymentEngine {
|
|
|
252
314
|
levelLogger.error('Unexpected promise rejection in parallel deployment', result.reason);
|
|
253
315
|
}
|
|
254
316
|
}
|
|
317
|
+
// Resources are now added to event monitoring before deployment (see individual resource deployment above)
|
|
255
318
|
// Handle rollback if there are failures and rollback is enabled
|
|
256
319
|
if (levelHasFailures && options.rollbackOnFailure) {
|
|
257
320
|
levelLogger.warn('Level deployment failed, initiating rollback');
|
|
@@ -273,27 +336,21 @@ export class DirectDeploymentEngine {
|
|
|
273
336
|
}
|
|
274
337
|
// Calculate level performance metrics
|
|
275
338
|
const levelDuration = Date.now() - levelStartTime;
|
|
276
|
-
const successfulCount = levelResults.filter(r => r.status === 'fulfilled' && r.value.success).length;
|
|
277
|
-
const failedCount = levelResults.filter(r => r.status === 'rejected' || (r.status === 'fulfilled' && !r.value.success)).length;
|
|
278
|
-
|
|
279
|
-
// Use debug level in test environments to reduce noise, info level in production
|
|
280
|
-
const logLevel = isTestEnvironment ? 'debug' : 'info';
|
|
281
|
-
levelLogger[logLevel](`Level ${levelIndex + 1} deployment completed`, {
|
|
339
|
+
const successfulCount = levelResults.filter((r) => r.status === 'fulfilled' && r.value.success).length;
|
|
340
|
+
const failedCount = levelResults.filter((r) => r.status === 'rejected' || (r.status === 'fulfilled' && !r.value.success)).length;
|
|
341
|
+
levelLogger.info(`Level ${levelIndex + 1} deployment completed`, {
|
|
282
342
|
successful: successfulCount,
|
|
283
343
|
failed: failedCount,
|
|
284
344
|
duration: levelDuration,
|
|
285
345
|
parallelism: currentLevel.length,
|
|
286
|
-
averageTimePerResource: Math.round(levelDuration / currentLevel.length)
|
|
346
|
+
averageTimePerResource: Math.round(levelDuration / currentLevel.length),
|
|
287
347
|
});
|
|
288
348
|
}
|
|
289
349
|
const duration = Date.now() - startTime;
|
|
290
350
|
const successfulResources = deployedResources.filter((r) => r.status !== 'failed');
|
|
291
351
|
const status = errors.length === 0 ? 'success' : successfulResources.length > 0 ? 'partial' : 'failed';
|
|
292
352
|
// Log comprehensive performance metrics
|
|
293
|
-
|
|
294
|
-
// Use debug level in test environments to reduce noise, info level in production
|
|
295
|
-
const logLevel = isTestEnvironment ? 'debug' : 'info';
|
|
296
|
-
deploymentLogger[logLevel]('Parallel deployment performance metrics', {
|
|
353
|
+
deploymentLogger.info('Parallel deployment performance metrics', {
|
|
297
354
|
totalDuration: duration,
|
|
298
355
|
totalResources: deploymentPlan.totalResources,
|
|
299
356
|
parallelLevels: deploymentPlan.levels.length,
|
|
@@ -301,14 +358,27 @@ export class DirectDeploymentEngine {
|
|
|
301
358
|
averageTimePerResource: Math.round(duration / deploymentPlan.totalResources),
|
|
302
359
|
successfulResources: successfulResources.length,
|
|
303
360
|
failedResources: errors.length,
|
|
304
|
-
parallelismEfficiency: Math.round((deploymentPlan.totalResources /
|
|
305
|
-
|
|
361
|
+
parallelismEfficiency: Math.round((deploymentPlan.totalResources /
|
|
362
|
+
deploymentPlan.levels.length /
|
|
363
|
+
deploymentPlan.maxParallelism) *
|
|
364
|
+
100),
|
|
365
|
+
status,
|
|
306
366
|
});
|
|
307
367
|
this.emitEvent(options, {
|
|
308
368
|
type: status === 'success' ? 'completed' : 'failed',
|
|
309
369
|
message: `Deployment ${status} in ${duration}ms (${deploymentPlan.levels.length} parallel levels, max ${deploymentPlan.maxParallelism} concurrent)`,
|
|
310
370
|
timestamp: new Date(),
|
|
311
371
|
});
|
|
372
|
+
// Stop event monitoring
|
|
373
|
+
if (this.eventMonitor) {
|
|
374
|
+
try {
|
|
375
|
+
await this.eventMonitor.stopMonitoring();
|
|
376
|
+
deploymentLogger.debug('Event monitoring stopped');
|
|
377
|
+
}
|
|
378
|
+
catch (error) {
|
|
379
|
+
deploymentLogger.warn('Failed to stop event monitoring cleanly', error);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
312
382
|
// Store deployment state for rollback
|
|
313
383
|
this.deploymentState.set(deploymentId, {
|
|
314
384
|
deploymentId,
|
|
@@ -340,6 +410,15 @@ export class DirectDeploymentEngine {
|
|
|
340
410
|
timestamp: new Date(),
|
|
341
411
|
error: error,
|
|
342
412
|
});
|
|
413
|
+
// Stop event monitoring on error
|
|
414
|
+
if (this.eventMonitor) {
|
|
415
|
+
try {
|
|
416
|
+
await this.eventMonitor.stopMonitoring();
|
|
417
|
+
}
|
|
418
|
+
catch (_cleanupError) {
|
|
419
|
+
// Ignore cleanup errors in error path
|
|
420
|
+
}
|
|
421
|
+
}
|
|
343
422
|
// Store deployment state even for failed deployments (for rollback)
|
|
344
423
|
this.deploymentState.set(deploymentId, {
|
|
345
424
|
deploymentId,
|
|
@@ -401,7 +480,7 @@ export class DirectDeploymentEngine {
|
|
|
401
480
|
* Extract dependencies from a closure by analyzing its configuration
|
|
402
481
|
* This is a simplified implementation - in practice, we would need more sophisticated analysis
|
|
403
482
|
*/
|
|
404
|
-
extractClosureDependencies(
|
|
483
|
+
extractClosureDependencies(_closure, _spec) {
|
|
405
484
|
// For now, return empty dependencies since closures typically don't depend on Enhanced<> resources
|
|
406
485
|
// In the future, this could analyze closure arguments for resource references
|
|
407
486
|
return [];
|
|
@@ -414,7 +493,7 @@ export class DirectDeploymentEngine {
|
|
|
414
493
|
const deploymentPlan = this.dependencyResolver.analyzeDeploymentOrder(dependencyGraph);
|
|
415
494
|
for (let levelIndex = 0; levelIndex < deploymentPlan.levels.length; levelIndex++) {
|
|
416
495
|
const level = deploymentPlan.levels[levelIndex];
|
|
417
|
-
if (level
|
|
496
|
+
if (level?.includes(resourceId)) {
|
|
418
497
|
return levelIndex;
|
|
419
498
|
}
|
|
420
499
|
}
|
|
@@ -427,7 +506,7 @@ export class DirectDeploymentEngine {
|
|
|
427
506
|
// Create enhanced levels with both resources and closures
|
|
428
507
|
const enhancedLevels = [];
|
|
429
508
|
// Check if we have any closures at level -1 (pre-resource level)
|
|
430
|
-
const preResourceClosures = closureDependencies.filter(c => c.level === -1);
|
|
509
|
+
const preResourceClosures = closureDependencies.filter((c) => c.level === -1);
|
|
431
510
|
// If we have pre-resource closures, add them as level 0 and shift everything else
|
|
432
511
|
if (preResourceClosures.length > 0) {
|
|
433
512
|
enhancedLevels.push({
|
|
@@ -462,7 +541,7 @@ export class DirectDeploymentEngine {
|
|
|
462
541
|
levels: enhancedLevels,
|
|
463
542
|
totalResources: deploymentPlan.totalResources,
|
|
464
543
|
totalClosures: closureDependencies.length,
|
|
465
|
-
maxParallelism: Math.max(deploymentPlan.maxParallelism, Math.max(...enhancedLevels.map(level => level.closures.length))),
|
|
544
|
+
maxParallelism: Math.max(deploymentPlan.maxParallelism, Math.max(...enhancedLevels.map((level) => level.closures.length))),
|
|
466
545
|
};
|
|
467
546
|
}
|
|
468
547
|
/**
|
|
@@ -476,11 +555,11 @@ export class DirectDeploymentEngine {
|
|
|
476
555
|
const deploymentLogger = this.logger.child({
|
|
477
556
|
deploymentId,
|
|
478
557
|
resourceCount: graph.resources.length,
|
|
479
|
-
closureCount: Object.keys(closures).length
|
|
558
|
+
closureCount: Object.keys(closures).length,
|
|
480
559
|
});
|
|
481
560
|
deploymentLogger.info('Starting deployment with closures', {
|
|
482
561
|
options,
|
|
483
|
-
closures: Object.keys(closures)
|
|
562
|
+
closures: Object.keys(closures),
|
|
484
563
|
});
|
|
485
564
|
try {
|
|
486
565
|
this.emitEvent(options, {
|
|
@@ -489,7 +568,9 @@ export class DirectDeploymentEngine {
|
|
|
489
568
|
timestamp: new Date(),
|
|
490
569
|
});
|
|
491
570
|
// 1. Validate no cycles in dependency graph
|
|
492
|
-
deploymentLogger.debug('Validating dependency graph', {
|
|
571
|
+
deploymentLogger.debug('Validating dependency graph', {
|
|
572
|
+
dependencyGraph: graph.dependencyGraph,
|
|
573
|
+
});
|
|
493
574
|
this.dependencyResolver.validateNoCycles(graph.dependencyGraph);
|
|
494
575
|
// 2. Analyze deployment order and identify parallel stages
|
|
495
576
|
deploymentLogger.debug('Analyzing deployment order for parallel execution');
|
|
@@ -497,7 +578,7 @@ export class DirectDeploymentEngine {
|
|
|
497
578
|
deploymentLogger.debug('Deployment plan determined', {
|
|
498
579
|
levels: deploymentPlan.levels.length,
|
|
499
580
|
totalResources: deploymentPlan.totalResources,
|
|
500
|
-
maxParallelism: deploymentPlan.maxParallelism
|
|
581
|
+
maxParallelism: deploymentPlan.maxParallelism,
|
|
501
582
|
});
|
|
502
583
|
// 3. Analyze closure dependencies and integrate into deployment plan
|
|
503
584
|
const closureDependencies = this.analyzeClosureDependencies(closures, spec, graph.dependencyGraph);
|
|
@@ -506,7 +587,7 @@ export class DirectDeploymentEngine {
|
|
|
506
587
|
levels: enhancedPlan.levels.length,
|
|
507
588
|
totalResources: enhancedPlan.totalResources,
|
|
508
589
|
totalClosures: enhancedPlan.totalClosures,
|
|
509
|
-
maxParallelism: enhancedPlan.maxParallelism
|
|
590
|
+
maxParallelism: enhancedPlan.maxParallelism,
|
|
510
591
|
});
|
|
511
592
|
// 4. Create resolution context
|
|
512
593
|
const context = {
|
|
@@ -524,7 +605,7 @@ export class DirectDeploymentEngine {
|
|
|
524
605
|
const levelLogger = deploymentLogger.child({
|
|
525
606
|
level: levelIndex + 1,
|
|
526
607
|
resourceCount: currentLevel.resources.length,
|
|
527
|
-
closureCount: currentLevel.closures.length
|
|
608
|
+
closureCount: currentLevel.closures.length,
|
|
528
609
|
});
|
|
529
610
|
levelLogger.debug(`Deploying level ${levelIndex + 1} with ${currentLevel.resources.length} resources and ${currentLevel.closures.length} closures in parallel`);
|
|
530
611
|
const levelStartTime = Date.now();
|
|
@@ -562,13 +643,13 @@ export class DirectDeploymentEngine {
|
|
|
562
643
|
phase: 'validation',
|
|
563
644
|
error,
|
|
564
645
|
timestamp: new Date(),
|
|
565
|
-
}
|
|
646
|
+
},
|
|
566
647
|
};
|
|
567
648
|
}
|
|
568
649
|
resourceLogger.debug('Found resource in graph', {
|
|
569
650
|
resourceId: resource.id,
|
|
570
651
|
kind: resource.manifest?.kind,
|
|
571
|
-
name: resource.manifest?.metadata?.name
|
|
652
|
+
name: resource.manifest?.metadata?.name,
|
|
572
653
|
});
|
|
573
654
|
try {
|
|
574
655
|
resourceLogger.debug('Calling deploySingleResource');
|
|
@@ -578,7 +659,7 @@ export class DirectDeploymentEngine {
|
|
|
578
659
|
return {
|
|
579
660
|
success: true,
|
|
580
661
|
resourceId,
|
|
581
|
-
deployedResource
|
|
662
|
+
deployedResource,
|
|
582
663
|
};
|
|
583
664
|
}
|
|
584
665
|
catch (error) {
|
|
@@ -602,7 +683,7 @@ export class DirectDeploymentEngine {
|
|
|
602
683
|
phase: 'deployment',
|
|
603
684
|
error: error,
|
|
604
685
|
timestamp: new Date(),
|
|
605
|
-
}
|
|
686
|
+
},
|
|
606
687
|
};
|
|
607
688
|
}
|
|
608
689
|
});
|
|
@@ -612,12 +693,14 @@ export class DirectDeploymentEngine {
|
|
|
612
693
|
closureLogger.debug('Executing closure at level', { level: levelIndex + 1 });
|
|
613
694
|
try {
|
|
614
695
|
const result = await closureInfo.closure(deploymentContext);
|
|
615
|
-
closureLogger.debug('Closure executed successfully', {
|
|
696
|
+
closureLogger.debug('Closure executed successfully', {
|
|
697
|
+
resultCount: result?.length || 0,
|
|
698
|
+
});
|
|
616
699
|
return {
|
|
617
700
|
success: true,
|
|
618
701
|
type: 'closure',
|
|
619
702
|
name: closureInfo.name,
|
|
620
|
-
result
|
|
703
|
+
result,
|
|
621
704
|
};
|
|
622
705
|
}
|
|
623
706
|
catch (error) {
|
|
@@ -631,7 +714,7 @@ export class DirectDeploymentEngine {
|
|
|
631
714
|
phase: 'deployment',
|
|
632
715
|
error: error,
|
|
633
716
|
timestamp: new Date(),
|
|
634
|
-
}
|
|
717
|
+
},
|
|
635
718
|
};
|
|
636
719
|
}
|
|
637
720
|
});
|
|
@@ -706,23 +789,19 @@ export class DirectDeploymentEngine {
|
|
|
706
789
|
// Calculate level performance metrics
|
|
707
790
|
const levelDuration = Date.now() - levelStartTime;
|
|
708
791
|
const totalOperations = currentLevel.resources.length + currentLevel.closures.length;
|
|
709
|
-
|
|
710
|
-
const logLevel = isTestEnvironment ? 'debug' : 'info';
|
|
711
|
-
levelLogger[logLevel](`Level ${levelIndex + 1} deployment completed`, {
|
|
792
|
+
levelLogger.info(`Level ${levelIndex + 1} deployment completed`, {
|
|
712
793
|
resources: { successful: successfulResources, failed: failedResources },
|
|
713
794
|
closures: { successful: successfulClosures, failed: failedClosures },
|
|
714
795
|
duration: levelDuration,
|
|
715
796
|
parallelism: totalOperations,
|
|
716
|
-
averageTimePerOperation: totalOperations > 0 ? Math.round(levelDuration / totalOperations) : 0
|
|
797
|
+
averageTimePerOperation: totalOperations > 0 ? Math.round(levelDuration / totalOperations) : 0,
|
|
717
798
|
});
|
|
718
799
|
}
|
|
719
800
|
const duration = Date.now() - startTime;
|
|
720
801
|
const successfulResources = deployedResources.filter((r) => r.status !== 'failed');
|
|
721
802
|
const status = errors.length === 0 ? 'success' : successfulResources.length > 0 ? 'partial' : 'failed';
|
|
722
803
|
// Log comprehensive performance metrics
|
|
723
|
-
|
|
724
|
-
const logLevel = isTestEnvironment ? 'debug' : 'info';
|
|
725
|
-
deploymentLogger[logLevel]('Parallel deployment with closures performance metrics', {
|
|
804
|
+
deploymentLogger.info('Parallel deployment with closures performance metrics', {
|
|
726
805
|
totalDuration: duration,
|
|
727
806
|
totalResources: enhancedPlan.totalResources,
|
|
728
807
|
totalClosures: enhancedPlan.totalClosures,
|
|
@@ -731,7 +810,7 @@ export class DirectDeploymentEngine {
|
|
|
731
810
|
averageTimePerResource: enhancedPlan.totalResources > 0 ? Math.round(duration / enhancedPlan.totalResources) : 0,
|
|
732
811
|
successfulResources: successfulResources.length,
|
|
733
812
|
failedResources: errors.length,
|
|
734
|
-
status
|
|
813
|
+
status,
|
|
735
814
|
});
|
|
736
815
|
this.emitEvent(options, {
|
|
737
816
|
type: status === 'success' ? 'completed' : 'failed',
|
|
@@ -804,7 +883,7 @@ export class DirectDeploymentEngine {
|
|
|
804
883
|
const resourceLogger = this.logger.child({
|
|
805
884
|
resourceId,
|
|
806
885
|
kind: resource.kind,
|
|
807
|
-
name: resource.metadata?.name
|
|
886
|
+
name: resource.metadata?.name,
|
|
808
887
|
});
|
|
809
888
|
resourceLogger.debug('Starting single resource deployment');
|
|
810
889
|
this.emitEvent(options, {
|
|
@@ -817,7 +896,7 @@ export class DirectDeploymentEngine {
|
|
|
817
896
|
let resolvedResource;
|
|
818
897
|
try {
|
|
819
898
|
resourceLogger.debug('Resolving resource references', {
|
|
820
|
-
originalMetadata: resource.metadata
|
|
899
|
+
originalMetadata: resource.metadata,
|
|
821
900
|
});
|
|
822
901
|
const resolveTimeout = options.timeout || 30000;
|
|
823
902
|
resolvedResource = (await Promise.race([
|
|
@@ -826,7 +905,7 @@ export class DirectDeploymentEngine {
|
|
|
826
905
|
]));
|
|
827
906
|
resourceLogger.debug('References resolved successfully', {
|
|
828
907
|
resolvedMetadata: resolvedResource.metadata,
|
|
829
|
-
hasReadinessEvaluator: !!resolvedResource.readinessEvaluator
|
|
908
|
+
hasReadinessEvaluator: !!resolvedResource.readinessEvaluator,
|
|
830
909
|
});
|
|
831
910
|
}
|
|
832
911
|
catch (error) {
|
|
@@ -834,11 +913,13 @@ export class DirectDeploymentEngine {
|
|
|
834
913
|
resolvedResource = resource;
|
|
835
914
|
}
|
|
836
915
|
// 2. Apply namespace if specified, but only if resource doesn't already have one
|
|
837
|
-
if (options.namespace &&
|
|
916
|
+
if (options.namespace &&
|
|
917
|
+
resolvedResource.metadata &&
|
|
918
|
+
typeof resolvedResource.metadata.namespace !== 'string') {
|
|
838
919
|
resourceLogger.debug('Applying namespace from deployment options', {
|
|
839
920
|
targetNamespace: options.namespace,
|
|
840
921
|
currentNamespace: resolvedResource.metadata.namespace,
|
|
841
|
-
currentNamespaceType: typeof resolvedResource.metadata.namespace
|
|
922
|
+
currentNamespaceType: typeof resolvedResource.metadata.namespace,
|
|
842
923
|
});
|
|
843
924
|
// Create a completely new metadata object to avoid proxy issues
|
|
844
925
|
const newMetadata = {
|
|
@@ -857,7 +938,7 @@ export class DirectDeploymentEngine {
|
|
|
857
938
|
value: readinessEvaluator,
|
|
858
939
|
enumerable: false,
|
|
859
940
|
configurable: true,
|
|
860
|
-
writable: false
|
|
941
|
+
writable: false,
|
|
861
942
|
});
|
|
862
943
|
}
|
|
863
944
|
resolvedResource = newResolvedResource;
|
|
@@ -923,7 +1004,7 @@ export class DirectDeploymentEngine {
|
|
|
923
1004
|
appliedName: appliedResource.metadata?.name,
|
|
924
1005
|
appliedNamespace: appliedResource.metadata?.namespace,
|
|
925
1006
|
operation: existing ? 'patched' : 'created',
|
|
926
|
-
attempt
|
|
1007
|
+
attempt,
|
|
927
1008
|
});
|
|
928
1009
|
// Success - break out of retry loop
|
|
929
1010
|
break;
|
|
@@ -940,10 +1021,10 @@ export class DirectDeploymentEngine {
|
|
|
940
1021
|
resourceLogger.debug('Retrying resource deployment', {
|
|
941
1022
|
attempt: attempt + 1,
|
|
942
1023
|
maxRetries: retryPolicy.maxRetries,
|
|
943
|
-
delay
|
|
1024
|
+
delay,
|
|
944
1025
|
});
|
|
945
1026
|
// Wait before retrying
|
|
946
|
-
await new Promise(resolve => setTimeout(resolve, delay));
|
|
1027
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
947
1028
|
}
|
|
948
1029
|
}
|
|
949
1030
|
}
|
|
@@ -1018,7 +1099,8 @@ export class DirectDeploymentEngine {
|
|
|
1018
1099
|
this.emitEvent(options, {
|
|
1019
1100
|
type: 'resource-ready',
|
|
1020
1101
|
resourceId: deployedResource.id,
|
|
1021
|
-
message: result.message ||
|
|
1102
|
+
message: result.message ||
|
|
1103
|
+
`${deployedResource.kind}/${deployedResource.name} ready (custom evaluator)`,
|
|
1022
1104
|
timestamp: new Date(),
|
|
1023
1105
|
});
|
|
1024
1106
|
return;
|
|
@@ -1034,7 +1116,7 @@ export class DirectDeploymentEngine {
|
|
|
1034
1116
|
});
|
|
1035
1117
|
}
|
|
1036
1118
|
// Wait before next check
|
|
1037
|
-
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
1119
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
1038
1120
|
}
|
|
1039
1121
|
catch (error) {
|
|
1040
1122
|
// Emit error status event
|
|
@@ -1045,7 +1127,7 @@ export class DirectDeploymentEngine {
|
|
|
1045
1127
|
timestamp: new Date(),
|
|
1046
1128
|
});
|
|
1047
1129
|
// If we can't read the resource, it's not ready yet
|
|
1048
|
-
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
1130
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
1049
1131
|
}
|
|
1050
1132
|
}
|
|
1051
1133
|
// Timeout reached
|
|
@@ -1089,7 +1171,7 @@ export class DirectDeploymentEngine {
|
|
|
1089
1171
|
error: error,
|
|
1090
1172
|
resourceId: resource.id,
|
|
1091
1173
|
kind: resource.kind,
|
|
1092
|
-
name: resource.name
|
|
1174
|
+
name: resource.name,
|
|
1093
1175
|
});
|
|
1094
1176
|
errors.push({
|
|
1095
1177
|
resourceId: resource.id,
|
|
@@ -1134,7 +1216,7 @@ export class DirectDeploymentEngine {
|
|
|
1134
1216
|
const deleteLogger = this.logger.child({
|
|
1135
1217
|
resourceId: resource.id,
|
|
1136
1218
|
kind: resource.kind,
|
|
1137
|
-
name: resource.name
|
|
1219
|
+
name: resource.name,
|
|
1138
1220
|
});
|
|
1139
1221
|
try {
|
|
1140
1222
|
await this.k8sApi.delete({
|
|
@@ -1194,8 +1276,7 @@ export class DirectDeploymentEngine {
|
|
|
1194
1276
|
}
|
|
1195
1277
|
try {
|
|
1196
1278
|
const { rolledBackResources, errors } = await this.rollbackDeployedResources(deploymentRecord.resources, deploymentRecord.options);
|
|
1197
|
-
const status = errors.length === 0 ? 'success' :
|
|
1198
|
-
rolledBackResources.length > 0 ? 'partial' : 'failed';
|
|
1279
|
+
const status = errors.length === 0 ? 'success' : rolledBackResources.length > 0 ? 'partial' : 'failed';
|
|
1199
1280
|
return {
|
|
1200
1281
|
deploymentId,
|
|
1201
1282
|
rolledBackResources,
|
|
@@ -1211,12 +1292,14 @@ export class DirectDeploymentEngine {
|
|
|
1211
1292
|
rolledBackResources: [],
|
|
1212
1293
|
duration: Date.now() - startTime,
|
|
1213
1294
|
status: 'failed',
|
|
1214
|
-
errors: [
|
|
1295
|
+
errors: [
|
|
1296
|
+
{
|
|
1215
1297
|
resourceId: deploymentId,
|
|
1216
1298
|
phase: 'rollback',
|
|
1217
1299
|
error: error,
|
|
1218
1300
|
timestamp: new Date(),
|
|
1219
|
-
}
|
|
1301
|
+
},
|
|
1302
|
+
],
|
|
1220
1303
|
};
|
|
1221
1304
|
}
|
|
1222
1305
|
}
|
|
@@ -1235,8 +1318,11 @@ export class DirectDeploymentEngine {
|
|
|
1235
1318
|
}
|
|
1236
1319
|
const result = {
|
|
1237
1320
|
deploymentId,
|
|
1238
|
-
status: deploymentRecord.status === 'completed'
|
|
1239
|
-
|
|
1321
|
+
status: deploymentRecord.status === 'completed'
|
|
1322
|
+
? 'completed'
|
|
1323
|
+
: deploymentRecord.status === 'failed'
|
|
1324
|
+
? 'failed'
|
|
1325
|
+
: 'running',
|
|
1240
1326
|
startTime: deploymentRecord.startTime,
|
|
1241
1327
|
resources: deploymentRecord.resources,
|
|
1242
1328
|
};
|
|
@@ -1268,27 +1354,20 @@ export class DirectDeploymentEngine {
|
|
|
1268
1354
|
if (!crdName) {
|
|
1269
1355
|
logger.warn('Could not determine CRD name for custom resource', {
|
|
1270
1356
|
kind: resource.kind,
|
|
1271
|
-
apiVersion: resource.apiVersion
|
|
1357
|
+
apiVersion: resource.apiVersion,
|
|
1272
1358
|
});
|
|
1273
1359
|
return;
|
|
1274
1360
|
}
|
|
1275
1361
|
logger.debug('Custom resource detected, waiting for CRD establishment', {
|
|
1276
1362
|
resourceKind: resource.kind,
|
|
1277
|
-
crdName
|
|
1363
|
+
crdName,
|
|
1278
1364
|
});
|
|
1279
1365
|
await this.waitForCRDEstablishment({ metadata: { name: crdName } }, options, logger);
|
|
1280
1366
|
logger.debug('CRD established, proceeding with custom resource deployment', {
|
|
1281
1367
|
resourceKind: resource.kind,
|
|
1282
|
-
crdName
|
|
1368
|
+
crdName,
|
|
1283
1369
|
});
|
|
1284
1370
|
}
|
|
1285
|
-
/**
|
|
1286
|
-
* Check if a resource is a CustomResourceDefinition
|
|
1287
|
-
*/
|
|
1288
|
-
isCRD(resource) {
|
|
1289
|
-
return resource.kind === 'CustomResourceDefinition' &&
|
|
1290
|
-
resource.apiVersion?.includes('apiextensions.k8s.io');
|
|
1291
|
-
}
|
|
1292
1371
|
/**
|
|
1293
1372
|
* Check if a resource is a custom resource (not a built-in Kubernetes resource)
|
|
1294
1373
|
*/
|
|
@@ -1319,7 +1398,7 @@ export class DirectDeploymentEngine {
|
|
|
1319
1398
|
'events.k8s.io/v1',
|
|
1320
1399
|
'flowcontrol.apiserver.k8s.io/v1beta3',
|
|
1321
1400
|
'node.k8s.io/v1',
|
|
1322
|
-
'scheduling.k8s.io/v1'
|
|
1401
|
+
'scheduling.k8s.io/v1',
|
|
1323
1402
|
];
|
|
1324
1403
|
return !builtInApiGroups.includes(resource.apiVersion);
|
|
1325
1404
|
}
|
|
@@ -1346,8 +1425,7 @@ export class DirectDeploymentEngine {
|
|
|
1346
1425
|
// Look for a CRD that matches our group and kind
|
|
1347
1426
|
const matchingCrd = crds.body?.items?.find((crd) => {
|
|
1348
1427
|
const crdSpec = crd.spec;
|
|
1349
|
-
return crdSpec?.group === group &&
|
|
1350
|
-
crdSpec?.names?.kind === resource.kind;
|
|
1428
|
+
return crdSpec?.group === group && crdSpec?.names?.kind === resource.kind;
|
|
1351
1429
|
});
|
|
1352
1430
|
if (matchingCrd) {
|
|
1353
1431
|
return matchingCrd.metadata?.name;
|
|
@@ -1362,6 +1440,17 @@ export class DirectDeploymentEngine {
|
|
|
1362
1440
|
const plural = kind.endsWith('s') ? kind : `${kind}s`;
|
|
1363
1441
|
return `${plural}.${group}`;
|
|
1364
1442
|
}
|
|
1443
|
+
/**
|
|
1444
|
+
* Public method to wait for CRD readiness by name
|
|
1445
|
+
*/
|
|
1446
|
+
async waitForCRDReady(crdName, timeout = 300000) {
|
|
1447
|
+
const logger = this.logger.child({ crdName, timeout });
|
|
1448
|
+
const options = {
|
|
1449
|
+
mode: this.deploymentMode,
|
|
1450
|
+
timeout,
|
|
1451
|
+
};
|
|
1452
|
+
await this.waitForCRDEstablishment({ metadata: { name: crdName } }, options, logger);
|
|
1453
|
+
}
|
|
1365
1454
|
/**
|
|
1366
1455
|
* Wait for a CRD to be established in the cluster
|
|
1367
1456
|
*/
|
|
@@ -1377,7 +1466,7 @@ export class DirectDeploymentEngine {
|
|
|
1377
1466
|
const crdStatus = await this.k8sApi.read({
|
|
1378
1467
|
apiVersion: 'apiextensions.k8s.io/v1',
|
|
1379
1468
|
kind: 'CustomResourceDefinition',
|
|
1380
|
-
metadata: { name: crdName } // CRDs are cluster-scoped, no namespace needed
|
|
1469
|
+
metadata: { name: crdName }, // CRDs are cluster-scoped, no namespace needed
|
|
1381
1470
|
});
|
|
1382
1471
|
const conditions = crdStatus.body?.status?.conditions || [];
|
|
1383
1472
|
const establishedCondition = conditions.find((c) => c.type === 'Established');
|
|
@@ -1387,7 +1476,7 @@ export class DirectDeploymentEngine {
|
|
|
1387
1476
|
}
|
|
1388
1477
|
logger.debug('CRD exists but not yet established, waiting...', {
|
|
1389
1478
|
crdName,
|
|
1390
|
-
establishedStatus: establishedCondition?.status || 'unknown'
|
|
1479
|
+
establishedStatus: establishedCondition?.status || 'unknown',
|
|
1391
1480
|
});
|
|
1392
1481
|
}
|
|
1393
1482
|
catch (error) {
|
|
@@ -1395,11 +1484,11 @@ export class DirectDeploymentEngine {
|
|
|
1395
1484
|
// This is expected in scenarios where closures install CRDs
|
|
1396
1485
|
logger.debug('CRD not found yet, waiting for it to be created...', {
|
|
1397
1486
|
crdName,
|
|
1398
|
-
error: error.message
|
|
1487
|
+
error: error.message,
|
|
1399
1488
|
});
|
|
1400
1489
|
}
|
|
1401
1490
|
// Wait before next poll
|
|
1402
|
-
await new Promise(resolve => setTimeout(resolve, pollInterval));
|
|
1491
|
+
await new Promise((resolve) => setTimeout(resolve, pollInterval));
|
|
1403
1492
|
}
|
|
1404
1493
|
// Timeout reached
|
|
1405
1494
|
throw new Error(`Timeout waiting for CRD ${crdName} to be established after ${timeout}ms`);
|