typekro 0.8.0 → 0.10.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/.tsbuildinfo +1 -1
- package/dist/alchemy/deployers.d.ts +16 -1
- package/dist/alchemy/deployers.d.ts.map +1 -1
- package/dist/alchemy/deployers.js +131 -18
- package/dist/alchemy/deployers.js.map +1 -1
- package/dist/alchemy/deployment.d.ts +1 -1
- package/dist/alchemy/deployment.d.ts.map +1 -1
- package/dist/alchemy/deployment.js +1 -1
- package/dist/alchemy/deployment.js.map +1 -1
- package/dist/alchemy/kro-delete.d.ts +66 -0
- package/dist/alchemy/kro-delete.d.ts.map +1 -0
- package/dist/alchemy/kro-delete.js +183 -0
- package/dist/alchemy/kro-delete.js.map +1 -0
- package/dist/alchemy/resource-registration.d.ts +16 -0
- package/dist/alchemy/resource-registration.d.ts.map +1 -1
- package/dist/alchemy/resource-registration.js +138 -24
- package/dist/alchemy/resource-registration.js.map +1 -1
- package/dist/alchemy/types.d.ts +8 -4
- package/dist/alchemy/types.d.ts.map +1 -1
- package/dist/aspects.d.ts +3 -0
- package/dist/aspects.d.ts.map +1 -0
- package/dist/aspects.js +2 -0
- package/dist/aspects.js.map +1 -0
- package/dist/compositions/typekro-runtime/typekro-runtime.d.ts +1 -1
- package/dist/compositions/typekro-runtime/typekro-runtime.d.ts.map +1 -1
- package/dist/compositions/typekro-runtime/typekro-runtime.js +27 -9
- package/dist/compositions/typekro-runtime/typekro-runtime.js.map +1 -1
- package/dist/core/aspects/apply.d.ts +30 -0
- package/dist/core/aspects/apply.d.ts.map +1 -0
- package/dist/core/aspects/apply.js +369 -0
- package/dist/core/aspects/apply.js.map +1 -0
- package/dist/core/aspects/dev-aspects.d.ts +14 -0
- package/dist/core/aspects/dev-aspects.d.ts.map +1 -0
- package/dist/core/aspects/dev-aspects.js +70 -0
- package/dist/core/aspects/dev-aspects.js.map +1 -0
- package/dist/core/aspects/index.d.ts +31 -0
- package/dist/core/aspects/index.d.ts.map +1 -0
- package/dist/core/aspects/index.js +30 -0
- package/dist/core/aspects/index.js.map +1 -0
- package/dist/core/aspects/metadata-aspects.d.ts +12 -0
- package/dist/core/aspects/metadata-aspects.d.ts.map +1 -0
- package/dist/core/aspects/metadata-aspects.js +24 -0
- package/dist/core/aspects/metadata-aspects.js.map +1 -0
- package/dist/core/aspects/metadata.d.ts +16 -0
- package/dist/core/aspects/metadata.d.ts.map +1 -0
- package/dist/core/aspects/metadata.js +24 -0
- package/dist/core/aspects/metadata.js.map +1 -0
- package/dist/core/aspects/primitives.d.ts +23 -0
- package/dist/core/aspects/primitives.d.ts.map +1 -0
- package/dist/core/aspects/primitives.js +258 -0
- package/dist/core/aspects/primitives.js.map +1 -0
- package/dist/core/aspects/targets.d.ts +9 -0
- package/dist/core/aspects/targets.d.ts.map +1 -0
- package/dist/core/aspects/targets.js +23 -0
- package/dist/core/aspects/targets.js.map +1 -0
- package/dist/core/aspects/types.d.ts +361 -0
- package/dist/core/aspects/types.d.ts.map +1 -0
- package/dist/core/aspects/types.js +16 -0
- package/dist/core/aspects/types.js.map +1 -0
- package/dist/core/aspects/workload-aspects.d.ts +17 -0
- package/dist/core/aspects/workload-aspects.d.ts.map +1 -0
- package/dist/core/aspects/workload-aspects.js +40 -0
- package/dist/core/aspects/workload-aspects.js.map +1 -0
- package/dist/core/composition/context.d.ts +58 -2
- package/dist/core/composition/context.d.ts.map +1 -1
- package/dist/core/composition/context.js +4 -0
- package/dist/core/composition/context.js.map +1 -1
- package/dist/core/composition/imperative.d.ts +9 -0
- package/dist/core/composition/imperative.d.ts.map +1 -1
- package/dist/core/composition/imperative.js +538 -54
- package/dist/core/composition/imperative.js.map +1 -1
- package/dist/core/composition/nested-status-cel.d.ts +34 -1
- package/dist/core/composition/nested-status-cel.d.ts.map +1 -1
- package/dist/core/composition/nested-status-cel.js +379 -41
- package/dist/core/composition/nested-status-cel.js.map +1 -1
- package/dist/core/composition-debugger.d.ts +1 -1
- package/dist/core/composition-debugger.d.ts.map +1 -1
- package/dist/core/composition-debugger.js.map +1 -1
- package/dist/core/constants/brands.d.ts +1 -1
- package/dist/core/constants/brands.d.ts.map +1 -1
- package/dist/core/constants/brands.js +1 -1
- package/dist/core/constants/brands.js.map +1 -1
- package/dist/core/containers/build.d.ts.map +1 -1
- package/dist/core/containers/build.js +40 -12
- package/dist/core/containers/build.js.map +1 -1
- package/dist/core/dependencies/resolver.d.ts +19 -0
- package/dist/core/dependencies/resolver.d.ts.map +1 -1
- package/dist/core/dependencies/resolver.js +261 -1
- package/dist/core/dependencies/resolver.js.map +1 -1
- package/dist/core/deployment/client-provider-manager.d.ts +9 -3
- package/dist/core/deployment/client-provider-manager.d.ts.map +1 -1
- package/dist/core/deployment/client-provider-manager.js +12 -0
- package/dist/core/deployment/client-provider-manager.js.map +1 -1
- package/dist/core/deployment/crd-manager.d.ts +24 -0
- package/dist/core/deployment/crd-manager.d.ts.map +1 -1
- package/dist/core/deployment/crd-manager.js +79 -1
- package/dist/core/deployment/crd-manager.js.map +1 -1
- package/dist/core/deployment/deployment-state-discovery.d.ts +116 -0
- package/dist/core/deployment/deployment-state-discovery.d.ts.map +1 -0
- package/dist/core/deployment/deployment-state-discovery.js +400 -0
- package/dist/core/deployment/deployment-state-discovery.js.map +1 -0
- package/dist/core/deployment/direct-factory.d.ts +65 -6
- package/dist/core/deployment/direct-factory.d.ts.map +1 -1
- package/dist/core/deployment/direct-factory.js +584 -62
- package/dist/core/deployment/direct-factory.js.map +1 -1
- package/dist/core/deployment/engine.d.ts +64 -3
- package/dist/core/deployment/engine.d.ts.map +1 -1
- package/dist/core/deployment/engine.js +194 -27
- package/dist/core/deployment/engine.js.map +1 -1
- package/dist/core/deployment/event-filter.js +1 -1
- package/dist/core/deployment/event-filter.js.map +1 -1
- package/dist/core/deployment/event-monitor.d.ts +11 -0
- package/dist/core/deployment/event-monitor.d.ts.map +1 -1
- package/dist/core/deployment/event-monitor.js +14 -0
- package/dist/core/deployment/event-monitor.js.map +1 -1
- package/dist/core/deployment/handle-tracing.d.ts +14 -0
- package/dist/core/deployment/handle-tracing.d.ts.map +1 -0
- package/dist/core/deployment/handle-tracing.js +38 -0
- package/dist/core/deployment/handle-tracing.js.map +1 -0
- package/dist/core/deployment/kro-factory.d.ts +115 -3
- package/dist/core/deployment/kro-factory.d.ts.map +1 -1
- package/dist/core/deployment/kro-factory.js +922 -278
- package/dist/core/deployment/kro-factory.js.map +1 -1
- package/dist/core/deployment/kro-readiness.d.ts.map +1 -1
- package/dist/core/deployment/kro-readiness.js +21 -12
- package/dist/core/deployment/kro-readiness.js.map +1 -1
- package/dist/core/deployment/nested-composition-status.d.ts +1 -1
- package/dist/core/deployment/nested-composition-status.d.ts.map +1 -1
- package/dist/core/deployment/nested-composition-status.js +96 -53
- package/dist/core/deployment/nested-composition-status.js.map +1 -1
- package/dist/core/deployment/resource-applier.d.ts +15 -2
- package/dist/core/deployment/resource-applier.d.ts.map +1 -1
- package/dist/core/deployment/resource-applier.js +75 -25
- package/dist/core/deployment/resource-applier.js.map +1 -1
- package/dist/core/deployment/resource-tagging.d.ts +220 -0
- package/dist/core/deployment/resource-tagging.d.ts.map +1 -0
- package/dist/core/deployment/resource-tagging.js +292 -0
- package/dist/core/deployment/resource-tagging.js.map +1 -0
- package/dist/core/deployment/rollback-manager.d.ts +25 -4
- package/dist/core/deployment/rollback-manager.d.ts.map +1 -1
- package/dist/core/deployment/rollback-manager.js +70 -57
- package/dist/core/deployment/rollback-manager.js.map +1 -1
- package/dist/core/deployment/shared-utilities.d.ts +6 -0
- package/dist/core/deployment/shared-utilities.d.ts.map +1 -1
- package/dist/core/deployment/shared-utilities.js +32 -2
- package/dist/core/deployment/shared-utilities.js.map +1 -1
- package/dist/core/deployment/singleton-owner-drift.d.ts +16 -0
- package/dist/core/deployment/singleton-owner-drift.d.ts.map +1 -0
- package/dist/core/deployment/singleton-owner-drift.js +54 -0
- package/dist/core/deployment/singleton-owner-drift.js.map +1 -0
- package/dist/core/deployment/strategies/alchemy-strategy.d.ts +3 -1
- package/dist/core/deployment/strategies/alchemy-strategy.d.ts.map +1 -1
- package/dist/core/deployment/strategies/alchemy-strategy.js +121 -18
- package/dist/core/deployment/strategies/alchemy-strategy.js.map +1 -1
- package/dist/core/deployment/strategies/base-strategy.d.ts +9 -3
- package/dist/core/deployment/strategies/base-strategy.d.ts.map +1 -1
- package/dist/core/deployment/strategies/base-strategy.js +32 -4
- package/dist/core/deployment/strategies/base-strategy.js.map +1 -1
- package/dist/core/deployment/strategies/direct-strategy.d.ts +12 -4
- package/dist/core/deployment/strategies/direct-strategy.d.ts.map +1 -1
- package/dist/core/deployment/strategies/direct-strategy.js +112 -8
- package/dist/core/deployment/strategies/direct-strategy.js.map +1 -1
- package/dist/core/errors.d.ts +2 -2
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js.map +1 -1
- package/dist/core/expressions/analysis/cache.d.ts +2 -2
- package/dist/core/expressions/analysis/cache.d.ts.map +1 -1
- package/dist/core/expressions/analysis/cache.js +4 -0
- package/dist/core/expressions/analysis/cache.js.map +1 -1
- package/dist/core/expressions/analysis/fn-toString-self-test.d.ts.map +1 -1
- package/dist/core/expressions/analysis/fn-toString-self-test.js +0 -1
- package/dist/core/expressions/analysis/fn-toString-self-test.js.map +1 -1
- package/dist/core/expressions/analysis/shared-types.d.ts +2 -2
- package/dist/core/expressions/analysis/shared-types.d.ts.map +1 -1
- package/dist/core/expressions/analysis/source-map.d.ts.map +1 -1
- package/dist/core/expressions/analysis/source-map.js +1 -0
- package/dist/core/expressions/analysis/source-map.js.map +1 -1
- package/dist/core/expressions/analysis/types.d.ts +7 -7
- package/dist/core/expressions/analysis/types.d.ts.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer-helpers.d.ts +29 -1
- package/dist/core/expressions/composition/composition-analyzer-helpers.d.ts.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer-helpers.js +348 -17
- package/dist/core/expressions/composition/composition-analyzer-helpers.js.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer-ternary.d.ts +2 -2
- package/dist/core/expressions/composition/composition-analyzer-ternary.d.ts.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer-ternary.js +221 -10
- package/dist/core/expressions/composition/composition-analyzer-ternary.js.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer-traversal.d.ts.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer-traversal.js +67 -2
- package/dist/core/expressions/composition/composition-analyzer-traversal.js.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer-types.d.ts +52 -0
- package/dist/core/expressions/composition/composition-analyzer-types.d.ts.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer.d.ts.map +1 -1
- package/dist/core/expressions/composition/composition-analyzer.js +150 -6
- package/dist/core/expressions/composition/composition-analyzer.js.map +1 -1
- package/dist/core/expressions/composition/expression-analyzer.d.ts.map +1 -1
- package/dist/core/expressions/composition/expression-analyzer.js +21 -4
- package/dist/core/expressions/composition/expression-analyzer.js.map +1 -1
- package/dist/core/expressions/composition/imperative-analyzer.d.ts +1 -1
- package/dist/core/expressions/composition/imperative-analyzer.d.ts.map +1 -1
- package/dist/core/expressions/composition/imperative-analyzer.js +31 -7
- package/dist/core/expressions/composition/imperative-analyzer.js.map +1 -1
- package/dist/core/expressions/composition/scope-manager.d.ts +2 -2
- package/dist/core/expressions/composition/scope-manager.d.ts.map +1 -1
- package/dist/core/expressions/composition/scope-manager.js.map +1 -1
- package/dist/core/expressions/conditional/conditional-expression-processor.d.ts +3 -3
- package/dist/core/expressions/conditional/conditional-expression-processor.d.ts.map +1 -1
- package/dist/core/expressions/conditional/conditional-expression-processor.js.map +1 -1
- package/dist/core/expressions/conditional/conditional-integration.d.ts.map +1 -1
- package/dist/core/expressions/conditional/conditional-integration.js.map +1 -1
- package/dist/core/expressions/context/context-aware-generator.d.ts +5 -5
- package/dist/core/expressions/context/context-aware-generator.d.ts.map +1 -1
- package/dist/core/expressions/context/context-aware-generator.js.map +1 -1
- package/dist/core/expressions/context/context-detector.d.ts +3 -3
- package/dist/core/expressions/context/context-detector.d.ts.map +1 -1
- package/dist/core/expressions/context/context-detector.js.map +1 -1
- package/dist/core/expressions/context/context-validator.d.ts +6 -6
- package/dist/core/expressions/context/context-validator.d.ts.map +1 -1
- package/dist/core/expressions/context/context-validator.js +2 -2
- package/dist/core/expressions/context/context-validator.js.map +1 -1
- package/dist/core/expressions/factory/cel-conversion-engine.d.ts +4 -4
- package/dist/core/expressions/factory/cel-conversion-engine.d.ts.map +1 -1
- package/dist/core/expressions/factory/cel-conversion-engine.js.map +1 -1
- package/dist/core/expressions/factory/dependency-tracker.d.ts +2 -2
- package/dist/core/expressions/factory/dependency-tracker.d.ts.map +1 -1
- package/dist/core/expressions/factory/dependency-tracker.js +21 -5
- package/dist/core/expressions/factory/dependency-tracker.js.map +1 -1
- package/dist/core/expressions/factory/factory-integration.d.ts +2 -4
- package/dist/core/expressions/factory/factory-integration.d.ts.map +1 -1
- package/dist/core/expressions/factory/factory-integration.js +0 -6
- package/dist/core/expressions/factory/factory-integration.js.map +1 -1
- package/dist/core/expressions/factory/factory-pattern-handler.d.ts +3 -3
- package/dist/core/expressions/factory/factory-pattern-handler.d.ts.map +1 -1
- package/dist/core/expressions/factory/factory-pattern-handler.js +1 -0
- package/dist/core/expressions/factory/factory-pattern-handler.js.map +1 -1
- package/dist/core/expressions/factory/migration-helpers.js.map +1 -1
- package/dist/core/expressions/factory/resource-analyzer.d.ts +4 -4
- package/dist/core/expressions/factory/resource-analyzer.d.ts.map +1 -1
- package/dist/core/expressions/factory/resource-analyzer.js.map +1 -1
- package/dist/core/expressions/factory/resource-type-validator.d.ts +5 -5
- package/dist/core/expressions/factory/resource-type-validator.d.ts.map +1 -1
- package/dist/core/expressions/factory/resource-type-validator.js.map +1 -1
- package/dist/core/expressions/factory/status-builder-analyzer.d.ts +6 -7
- package/dist/core/expressions/factory/status-builder-analyzer.d.ts.map +1 -1
- package/dist/core/expressions/factory/status-builder-analyzer.js +0 -3
- package/dist/core/expressions/factory/status-builder-analyzer.js.map +1 -1
- package/dist/core/expressions/factory/status-builder-types.d.ts +1 -1
- package/dist/core/expressions/factory/status-builder-types.d.ts.map +1 -1
- package/dist/core/expressions/factory/status-cel-generation.d.ts +1 -1
- package/dist/core/expressions/factory/status-cel-generation.d.ts.map +1 -1
- package/dist/core/expressions/factory/status-cel-generation.js +1 -1
- package/dist/core/expressions/factory/status-cel-generation.js.map +1 -1
- package/dist/core/expressions/factory/status-field-analysis.d.ts +3 -3
- package/dist/core/expressions/factory/status-field-analysis.d.ts.map +1 -1
- package/dist/core/expressions/factory/status-field-analysis.js.map +1 -1
- package/dist/core/expressions/magic-proxy/magic-assignable-analyzer.d.ts +5 -5
- package/dist/core/expressions/magic-proxy/magic-assignable-analyzer.d.ts.map +1 -1
- package/dist/core/expressions/magic-proxy/magic-assignable-analyzer.js +1 -1
- package/dist/core/expressions/magic-proxy/magic-assignable-analyzer.js.map +1 -1
- package/dist/core/expressions/magic-proxy/magic-proxy-analyzer.d.ts +10 -10
- package/dist/core/expressions/magic-proxy/magic-proxy-analyzer.d.ts.map +1 -1
- package/dist/core/expressions/magic-proxy/magic-proxy-analyzer.js +5 -1
- package/dist/core/expressions/magic-proxy/magic-proxy-analyzer.js.map +1 -1
- package/dist/core/expressions/magic-proxy/magic-proxy-ast.d.ts +2 -2
- package/dist/core/expressions/magic-proxy/magic-proxy-ast.d.ts.map +1 -1
- package/dist/core/expressions/magic-proxy/magic-proxy-ast.js.map +1 -1
- package/dist/core/expressions/magic-proxy/magic-proxy-detector.d.ts +5 -5
- package/dist/core/expressions/magic-proxy/magic-proxy-detector.d.ts.map +1 -1
- package/dist/core/expressions/magic-proxy/magic-proxy-detector.js.map +1 -1
- package/dist/core/expressions/magic-proxy/magic-proxy-types.d.ts +2 -2
- package/dist/core/expressions/magic-proxy/magic-proxy-types.d.ts.map +1 -1
- package/dist/core/expressions/magic-proxy/optionality-handler.d.ts +1 -2
- package/dist/core/expressions/magic-proxy/optionality-handler.d.ts.map +1 -1
- package/dist/core/expressions/magic-proxy/optionality-handler.js +2 -15
- package/dist/core/expressions/magic-proxy/optionality-handler.js.map +1 -1
- package/dist/core/expressions/validation/compile-time-checker.d.ts +1 -1
- package/dist/core/expressions/validation/compile-time-checker.d.ts.map +1 -1
- package/dist/core/expressions/validation/compile-time-checker.js.map +1 -1
- package/dist/core/expressions/validation/compile-time-types.d.ts +2 -2
- package/dist/core/expressions/validation/compile-time-types.d.ts.map +1 -1
- package/dist/core/expressions/validation/kubernetes-field-types.d.ts +4 -4
- package/dist/core/expressions/validation/kubernetes-field-types.d.ts.map +1 -1
- package/dist/core/expressions/validation/kubernetes-field-types.js.map +1 -1
- package/dist/core/expressions/validation/resource-field-utils.d.ts +10 -10
- package/dist/core/expressions/validation/resource-field-utils.d.ts.map +1 -1
- package/dist/core/expressions/validation/resource-field-utils.js.map +1 -1
- package/dist/core/expressions/validation/resource-validation.d.ts +3 -3
- package/dist/core/expressions/validation/resource-validation.d.ts.map +1 -1
- package/dist/core/expressions/validation/resource-validation.js.map +1 -1
- package/dist/core/expressions/validation/type-inference-types.d.ts +2 -2
- package/dist/core/expressions/validation/type-inference-types.d.ts.map +1 -1
- package/dist/core/expressions/validation/type-safety.d.ts +2 -2
- package/dist/core/expressions/validation/type-safety.d.ts.map +1 -1
- package/dist/core/expressions/validation/type-safety.js +1 -0
- package/dist/core/expressions/validation/type-safety.js.map +1 -1
- package/dist/core/kubernetes/bun-api-client.js.map +1 -1
- package/dist/core/kubernetes/bun-http-library.d.ts.map +1 -1
- package/dist/core/kubernetes/bun-http-library.js +29 -3
- package/dist/core/kubernetes/bun-http-library.js.map +1 -1
- package/dist/core/kubernetes/client-provider.d.ts +12 -0
- package/dist/core/kubernetes/client-provider.d.ts.map +1 -1
- package/dist/core/kubernetes/client-provider.js +35 -0
- package/dist/core/kubernetes/client-provider.js.map +1 -1
- package/dist/core/metadata/resource-metadata.d.ts +49 -1
- package/dist/core/metadata/resource-metadata.d.ts.map +1 -1
- package/dist/core/metadata/resource-metadata.js.map +1 -1
- package/dist/core/proxy/create-resource.d.ts +15 -0
- package/dist/core/proxy/create-resource.d.ts.map +1 -1
- package/dist/core/proxy/create-resource.js +79 -2
- package/dist/core/proxy/create-resource.js.map +1 -1
- package/dist/core/readiness/registry.js +2 -2
- package/dist/core/readiness/registry.js.map +1 -1
- package/dist/core/references/cel-evaluator.d.ts +1 -4
- package/dist/core/references/cel-evaluator.d.ts.map +1 -1
- package/dist/core/references/cel-evaluator.js +3 -7
- package/dist/core/references/cel-evaluator.js.map +1 -1
- package/dist/core/references/cel.d.ts +22 -0
- package/dist/core/references/cel.d.ts.map +1 -1
- package/dist/core/references/cel.js +106 -8
- package/dist/core/references/cel.js.map +1 -1
- package/dist/core/references/external-refs.d.ts.map +1 -1
- package/dist/core/references/external-refs.js +3 -0
- package/dist/core/references/external-refs.js.map +1 -1
- package/dist/core/references/resolver.d.ts.map +1 -1
- package/dist/core/references/resolver.js +28 -17
- package/dist/core/references/resolver.js.map +1 -1
- package/dist/core/references/schema-proxy.d.ts +18 -10
- package/dist/core/references/schema-proxy.d.ts.map +1 -1
- package/dist/core/references/schema-proxy.js +174 -23
- package/dist/core/references/schema-proxy.js.map +1 -1
- package/dist/core/runtime-patches/crd-schema-fix.d.ts.map +1 -1
- package/dist/core/runtime-patches/crd-schema-fix.js +4 -1
- package/dist/core/runtime-patches/crd-schema-fix.js.map +1 -1
- package/dist/core/serialization/cel-optimizer.d.ts.map +1 -1
- package/dist/core/serialization/cel-optimizer.js +2 -0
- package/dist/core/serialization/cel-optimizer.js.map +1 -1
- package/dist/core/serialization/cel-references.d.ts +75 -1
- package/dist/core/serialization/cel-references.d.ts.map +1 -1
- package/dist/core/serialization/cel-references.js +692 -156
- package/dist/core/serialization/cel-references.js.map +1 -1
- package/dist/core/serialization/core.d.ts +8 -8
- package/dist/core/serialization/core.d.ts.map +1 -1
- package/dist/core/serialization/core.js +672 -90
- package/dist/core/serialization/core.js.map +1 -1
- package/dist/core/serialization/kro-post-processing.d.ts +1 -1
- package/dist/core/serialization/kro-post-processing.d.ts.map +1 -1
- package/dist/core/serialization/kro-post-processing.js +69 -22
- package/dist/core/serialization/kro-post-processing.js.map +1 -1
- package/dist/core/serialization/schema.d.ts +1 -0
- package/dist/core/serialization/schema.d.ts.map +1 -1
- package/dist/core/serialization/schema.js +378 -50
- package/dist/core/serialization/schema.js.map +1 -1
- package/dist/core/serialization/status-analysis-pipeline.d.ts +1 -1
- package/dist/core/serialization/status-analysis-pipeline.d.ts.map +1 -1
- package/dist/core/serialization/status-analysis-pipeline.js.map +1 -1
- package/dist/core/serialization/yaml.d.ts +3 -2
- package/dist/core/serialization/yaml.d.ts.map +1 -1
- package/dist/core/serialization/yaml.js +385 -55
- package/dist/core/serialization/yaml.js.map +1 -1
- package/dist/core/singleton/singleton.d.ts +16 -0
- package/dist/core/singleton/singleton.d.ts.map +1 -0
- package/dist/core/singleton/singleton.js +135 -0
- package/dist/core/singleton/singleton.js.map +1 -0
- package/dist/core/types/common.d.ts +2 -2
- package/dist/core/types/common.d.ts.map +1 -1
- package/dist/core/types/composable.d.ts +1 -1
- package/dist/core/types/composable.d.ts.map +1 -1
- package/dist/core/types/deployment.d.ts +129 -9
- package/dist/core/types/deployment.d.ts.map +1 -1
- package/dist/core/types/deployment.js +1 -1
- package/dist/core/types/deployment.js.map +1 -1
- package/dist/core/types/kubernetes.d.ts +25 -17
- package/dist/core/types/kubernetes.d.ts.map +1 -1
- package/dist/core/types/references.d.ts +1 -1
- package/dist/core/types/references.d.ts.map +1 -1
- package/dist/core/types/references.js.map +1 -1
- package/dist/core/types/resource-graph.d.ts +2 -1
- package/dist/core/types/resource-graph.d.ts.map +1 -1
- package/dist/core/types/schema.d.ts +1 -1
- package/dist/core/types/schema.d.ts.map +1 -1
- package/dist/core/types/serialization.d.ts +24 -6
- package/dist/core/types/serialization.d.ts.map +1 -1
- package/dist/core/validation/cel-validator.d.ts +15 -2
- package/dist/core/validation/cel-validator.d.ts.map +1 -1
- package/dist/core/validation/cel-validator.js +144 -63
- package/dist/core/validation/cel-validator.js.map +1 -1
- package/dist/factories/apisix/compositions/apisix-bootstrap.d.ts +2 -41
- package/dist/factories/apisix/compositions/apisix-bootstrap.d.ts.map +1 -1
- package/dist/factories/apisix/compositions/apisix-bootstrap.js +262 -217
- package/dist/factories/apisix/compositions/apisix-bootstrap.js.map +1 -1
- package/dist/factories/apisix/index.d.ts +2 -2
- package/dist/factories/apisix/index.js +2 -2
- 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.map +1 -1
- package/dist/factories/apisix/types.d.ts +21 -11
- package/dist/factories/apisix/types.d.ts.map +1 -1
- package/dist/factories/apisix/types.js +106 -4
- package/dist/factories/apisix/types.js.map +1 -1
- package/dist/factories/apisix/utils/admin-credentials.d.ts +5 -3
- package/dist/factories/apisix/utils/admin-credentials.d.ts.map +1 -1
- package/dist/factories/apisix/utils/admin-credentials.js +14 -10
- package/dist/factories/apisix/utils/admin-credentials.js.map +1 -1
- package/dist/factories/apisix/utils/helm-values-mapper.d.ts.map +1 -1
- package/dist/factories/apisix/utils/helm-values-mapper.js +4 -2
- package/dist/factories/apisix/utils/helm-values-mapper.js.map +1 -1
- package/dist/factories/cert-manager/resources/challenges.js.map +1 -1
- package/dist/factories/cert-manager/types.d.ts +3 -3
- package/dist/factories/cert-manager/types.d.ts.map +1 -1
- package/dist/factories/cilium/compositions/cilium-bootstrap.d.ts +4 -4
- package/dist/factories/cilium/types.d.ts +3 -3
- package/dist/factories/cilium/types.d.ts.map +1 -1
- package/dist/factories/cnpg/compositions/cnpg-bootstrap.d.ts +1 -0
- package/dist/factories/cnpg/compositions/cnpg-bootstrap.d.ts.map +1 -1
- package/dist/factories/cnpg/compositions/cnpg-bootstrap.js +48 -0
- package/dist/factories/cnpg/compositions/cnpg-bootstrap.js.map +1 -1
- package/dist/factories/cnpg/resources/cluster.js +1 -1
- package/dist/factories/cnpg/resources/cluster.js.map +1 -1
- package/dist/factories/cnpg/resources/helm.d.ts.map +1 -1
- package/dist/factories/cnpg/resources/helm.js +1 -0
- package/dist/factories/cnpg/resources/helm.js.map +1 -1
- package/dist/factories/cnpg/resources/pooler.js +1 -1
- package/dist/factories/cnpg/resources/pooler.js.map +1 -1
- package/dist/factories/cnpg/types.d.ts +9 -8
- package/dist/factories/cnpg/types.d.ts.map +1 -1
- package/dist/factories/cnpg/types.js +11 -0
- package/dist/factories/cnpg/types.js.map +1 -1
- package/dist/factories/external-dns/compositions/external-dns-bootstrap.d.ts.map +1 -1
- package/dist/factories/external-dns/compositions/external-dns-bootstrap.js +153 -41
- package/dist/factories/external-dns/compositions/external-dns-bootstrap.js.map +1 -1
- package/dist/factories/external-dns/resources/dns-endpoint.js +1 -1
- package/dist/factories/external-dns/resources/dns-endpoint.js.map +1 -1
- package/dist/factories/external-dns/resources/helm.d.ts +1 -1
- package/dist/factories/external-dns/resources/helm.d.ts.map +1 -1
- package/dist/factories/external-dns/resources/helm.js +17 -10
- package/dist/factories/external-dns/resources/helm.js.map +1 -1
- package/dist/factories/external-dns/types.d.ts +5 -2
- package/dist/factories/external-dns/types.d.ts.map +1 -1
- package/dist/factories/external-dns/types.js.map +1 -1
- package/dist/factories/flux/git-repository.d.ts.map +1 -1
- package/dist/factories/flux/git-repository.js +1 -1
- package/dist/factories/flux/git-repository.js.map +1 -1
- package/dist/factories/flux/kustomize/kustomization.d.ts +2 -2
- package/dist/factories/flux/kustomize/kustomization.d.ts.map +1 -1
- package/dist/factories/flux/kustomize/readiness-evaluators.d.ts +1 -1
- package/dist/factories/flux/kustomize/readiness-evaluators.d.ts.map +1 -1
- package/dist/factories/flux/kustomize/readiness-evaluators.js +1 -1
- package/dist/factories/flux/kustomize/readiness-evaluators.js.map +1 -1
- package/dist/factories/helm/helm-release.d.ts +3 -2
- package/dist/factories/helm/helm-release.d.ts.map +1 -1
- package/dist/factories/helm/helm-release.js +1 -0
- package/dist/factories/helm/helm-release.js.map +1 -1
- package/dist/factories/helm/helm-repository.d.ts +1 -1
- package/dist/factories/helm/helm-repository.d.ts.map +1 -1
- package/dist/factories/helm/helm-repository.js +6 -4
- package/dist/factories/helm/helm-repository.js.map +1 -1
- package/dist/factories/helm/readiness-evaluators.d.ts +6 -6
- package/dist/factories/helm/readiness-evaluators.d.ts.map +1 -1
- package/dist/factories/helm/readiness-evaluators.js +15 -9
- package/dist/factories/helm/readiness-evaluators.js.map +1 -1
- package/dist/factories/helm/types.d.ts +5 -1
- package/dist/factories/helm/types.d.ts.map +1 -1
- package/dist/factories/inngest/compositions/inngest-bootstrap.d.ts +1 -0
- package/dist/factories/inngest/compositions/inngest-bootstrap.d.ts.map +1 -1
- package/dist/factories/inngest/compositions/inngest-bootstrap.js +4 -3
- package/dist/factories/inngest/compositions/inngest-bootstrap.js.map +1 -1
- package/dist/factories/inngest/resources/helm.js +1 -1
- package/dist/factories/inngest/resources/helm.js.map +1 -1
- package/dist/factories/inngest/types.d.ts +5 -4
- package/dist/factories/inngest/types.d.ts.map +1 -1
- package/dist/factories/inngest/types.js +2 -0
- package/dist/factories/inngest/types.js.map +1 -1
- package/dist/factories/kro/kro-custom-resource.js +1 -1
- package/dist/factories/kro/kro-custom-resource.js.map +1 -1
- package/dist/factories/kubernetes/config/config-map.d.ts +2 -2
- package/dist/factories/kubernetes/config/config-map.d.ts.map +1 -1
- package/dist/factories/kubernetes/config/secret.d.ts +2 -2
- package/dist/factories/kubernetes/config/secret.d.ts.map +1 -1
- package/dist/factories/kubernetes/networking/service.js +1 -1
- package/dist/factories/kubernetes/networking/service.js.map +1 -1
- package/dist/factories/kubernetes/yaml/yaml-directory.d.ts.map +1 -1
- package/dist/factories/kubernetes/yaml/yaml-directory.js +9 -0
- package/dist/factories/kubernetes/yaml/yaml-directory.js.map +1 -1
- package/dist/factories/kubernetes/yaml/yaml-file.d.ts.map +1 -1
- package/dist/factories/kubernetes/yaml/yaml-file.js +9 -0
- package/dist/factories/kubernetes/yaml/yaml-file.js.map +1 -1
- package/dist/factories/pebble/resources/helm.js.map +1 -1
- package/dist/factories/pebble/types.d.ts +2 -2
- package/dist/factories/searxng/compositions/searxng-bootstrap.d.ts +3 -2
- package/dist/factories/searxng/compositions/searxng-bootstrap.d.ts.map +1 -1
- package/dist/factories/searxng/compositions/searxng-bootstrap.js +205 -167
- package/dist/factories/searxng/compositions/searxng-bootstrap.js.map +1 -1
- package/dist/factories/searxng/resources/searxng.d.ts +1 -1
- package/dist/factories/searxng/resources/searxng.js +1 -1
- package/dist/factories/searxng/types.d.ts +5 -4
- package/dist/factories/searxng/types.d.ts.map +1 -1
- package/dist/factories/searxng/types.js +8 -7
- package/dist/factories/searxng/types.js.map +1 -1
- package/dist/factories/searxng/utils/settings-builder.d.ts +4 -3
- package/dist/factories/searxng/utils/settings-builder.d.ts.map +1 -1
- package/dist/factories/searxng/utils/settings-builder.js +4 -3
- package/dist/factories/searxng/utils/settings-builder.js.map +1 -1
- package/dist/factories/simple/config/config-map.d.ts +2 -2
- package/dist/factories/simple/config/config-map.d.ts.map +1 -1
- package/dist/factories/simple/config/secret.d.ts +2 -2
- package/dist/factories/simple/config/secret.d.ts.map +1 -1
- package/dist/factories/simple/helm/index.d.ts +1 -1
- package/dist/factories/simple/helm/index.d.ts.map +1 -1
- package/dist/factories/simple/helm/index.js.map +1 -1
- package/dist/factories/simple/index.d.ts +3 -3
- package/dist/factories/simple/index.d.ts.map +1 -1
- package/dist/factories/simple/storage/persistent-volume.js.map +1 -1
- package/dist/factories/simple/types.d.ts +11 -1
- package/dist/factories/simple/types.d.ts.map +1 -1
- package/dist/factories/simple/workloads/deployment.d.ts +4 -1
- package/dist/factories/simple/workloads/deployment.d.ts.map +1 -1
- package/dist/factories/simple/workloads/deployment.js +9 -2
- package/dist/factories/simple/workloads/deployment.js.map +1 -1
- package/dist/factories/simple/workloads/stateful-set.d.ts +4 -1
- package/dist/factories/simple/workloads/stateful-set.d.ts.map +1 -1
- package/dist/factories/simple/workloads/stateful-set.js +6 -2
- package/dist/factories/simple/workloads/stateful-set.js.map +1 -1
- package/dist/factories/valkey/compositions/valkey-bootstrap.d.ts +1 -0
- package/dist/factories/valkey/compositions/valkey-bootstrap.d.ts.map +1 -1
- package/dist/factories/valkey/compositions/valkey-bootstrap.js +116 -0
- package/dist/factories/valkey/compositions/valkey-bootstrap.js.map +1 -1
- package/dist/factories/valkey/resources/valkey.js +1 -1
- package/dist/factories/valkey/resources/valkey.js.map +1 -1
- package/dist/factories/valkey/types.d.ts +6 -5
- package/dist/factories/valkey/types.d.ts.map +1 -1
- package/dist/factories/valkey/types.js +10 -0
- package/dist/factories/valkey/types.js.map +1 -1
- package/dist/factories/webapp/compositions/web-app-with-processing.d.ts +90 -6
- package/dist/factories/webapp/compositions/web-app-with-processing.d.ts.map +1 -1
- package/dist/factories/webapp/compositions/web-app-with-processing.js +180 -20
- package/dist/factories/webapp/compositions/web-app-with-processing.js.map +1 -1
- package/dist/factories/webapp/index.d.ts +3 -4
- package/dist/factories/webapp/index.d.ts.map +1 -1
- package/dist/factories/webapp/index.js +3 -4
- package/dist/factories/webapp/index.js.map +1 -1
- package/dist/factories/webapp/types.d.ts +60 -2
- package/dist/factories/webapp/types.d.ts.map +1 -1
- package/dist/factories/webapp/types.js +80 -3
- package/dist/factories/webapp/types.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/shared/brands.d.ts +18 -8
- package/dist/shared/brands.d.ts.map +1 -1
- package/dist/shared/brands.js +19 -9
- package/dist/shared/brands.js.map +1 -1
- package/dist/utils/cel-escape.d.ts +12 -0
- package/dist/utils/cel-escape.d.ts.map +1 -0
- package/dist/utils/cel-escape.js +19 -0
- package/dist/utils/cel-escape.js.map +1 -0
- package/package.json +7 -2
|
@@ -190,15 +190,17 @@ export class CRDManager {
|
|
|
190
190
|
metadata: { name: crdName },
|
|
191
191
|
}), abortSignal);
|
|
192
192
|
const crdItem = crdStatus;
|
|
193
|
+
const deletionTimestamp = crdItem?.metadata?.deletionTimestamp;
|
|
193
194
|
const conditions = crdItem?.status?.conditions || [];
|
|
194
195
|
const establishedCondition = conditions.find((c) => c.type === 'Established');
|
|
195
|
-
if (establishedCondition?.status === 'True') {
|
|
196
|
+
if (establishedCondition?.status === 'True' && !deletionTimestamp) {
|
|
196
197
|
logger.debug('CRD exists and is established', { crdName });
|
|
197
198
|
return;
|
|
198
199
|
}
|
|
199
200
|
logger.debug('CRD exists but not yet established, waiting...', {
|
|
200
201
|
crdName,
|
|
201
202
|
establishedStatus: establishedCondition?.status || 'unknown',
|
|
203
|
+
deleting: deletionTimestamp !== undefined,
|
|
202
204
|
});
|
|
203
205
|
}
|
|
204
206
|
catch (error) {
|
|
@@ -223,5 +225,81 @@ export class CRDManager {
|
|
|
223
225
|
}
|
|
224
226
|
throw new DeploymentTimeoutError(`Timeout waiting for CRD ${crdName} to be established after ${timeout}ms`, 'CustomResourceDefinition', crdName || 'unknown', timeout, 'crd-establishment');
|
|
225
227
|
}
|
|
228
|
+
/**
|
|
229
|
+
* Wait for a CRD to be created and established, discovered by (group, kind)
|
|
230
|
+
* rather than a pre-computed name.
|
|
231
|
+
*
|
|
232
|
+
* This is the correct path for KRO RGDs because KRO's server-side
|
|
233
|
+
* pluralization may not match any client-side heuristic. For example,
|
|
234
|
+
* already-plural kind names don't get an extra "s" suffix — only
|
|
235
|
+
* the CRD's `spec.names.plural` is authoritative.
|
|
236
|
+
*
|
|
237
|
+
* The method polls the full CRD list looking for one whose
|
|
238
|
+
* `spec.group` and `spec.names.kind` match, then delegates to
|
|
239
|
+
* {@link waitForCRDEstablishment} with the discovered name.
|
|
240
|
+
*
|
|
241
|
+
* @param kind - The resource kind (e.g., "WebAppWithProcessing")
|
|
242
|
+
* @param group - The CRD group (e.g., "kro.run")
|
|
243
|
+
* @param deploymentMode - The deployment mode for logging
|
|
244
|
+
* @param timeout - Max milliseconds to wait for the CRD to exist AND be established
|
|
245
|
+
* @param abortSignal - Optional abort signal for cancellation
|
|
246
|
+
* @throws {DeploymentTimeoutError} if the CRD is never discovered or never becomes Established within the timeout
|
|
247
|
+
*/
|
|
248
|
+
async waitForCRDByKindAndGroup(kind, group, deploymentMode, timeout = DEFAULT_CRD_READY_TIMEOUT, abortSignal) {
|
|
249
|
+
const logger = this.logger.child({ kind, group, timeout });
|
|
250
|
+
const startTime = Date.now();
|
|
251
|
+
const pollInterval = DEFAULT_POLL_INTERVAL;
|
|
252
|
+
logger.debug('Discovering CRD by kind and group');
|
|
253
|
+
// Phase 1: discover the CRD's actual name by listing CRDs and matching
|
|
254
|
+
// on (group, kind). KRO creates the CRD asynchronously after the RGD
|
|
255
|
+
// is accepted, so we poll.
|
|
256
|
+
let crdName;
|
|
257
|
+
let plural;
|
|
258
|
+
while (Date.now() - startTime < timeout) {
|
|
259
|
+
if (abortSignal?.aborted) {
|
|
260
|
+
throw new DOMException('Operation aborted', 'AbortError');
|
|
261
|
+
}
|
|
262
|
+
try {
|
|
263
|
+
const crds = await this.withAbortSignal(this.k8sApi.list('apiextensions.k8s.io/v1', 'CustomResourceDefinition'), abortSignal);
|
|
264
|
+
const crdList = crds;
|
|
265
|
+
const match = crdList?.items?.find((crd) => {
|
|
266
|
+
const spec = crd.spec;
|
|
267
|
+
return spec?.group === group && spec?.names?.kind === kind && !crd.metadata?.deletionTimestamp;
|
|
268
|
+
});
|
|
269
|
+
if (match?.metadata?.name && match.spec?.names?.plural) {
|
|
270
|
+
crdName = match.metadata.name;
|
|
271
|
+
plural = match.spec.names.plural;
|
|
272
|
+
logger.debug('CRD discovered', { crdName, plural });
|
|
273
|
+
break;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
catch (error) {
|
|
277
|
+
if (error instanceof DOMException &&
|
|
278
|
+
(error.name === 'AbortError' || error.name === 'TimeoutError')) {
|
|
279
|
+
throw error;
|
|
280
|
+
}
|
|
281
|
+
logger.debug('CRD list failed, retrying...', {
|
|
282
|
+
error: ensureError(error).message,
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
try {
|
|
286
|
+
await this.abortableDelay(pollInterval, abortSignal);
|
|
287
|
+
}
|
|
288
|
+
catch (error) {
|
|
289
|
+
if (error instanceof DOMException &&
|
|
290
|
+
(error.name === 'AbortError' || error.name === 'TimeoutError')) {
|
|
291
|
+
throw error;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
if (!crdName || !plural) {
|
|
296
|
+
throw new DeploymentTimeoutError(`Timeout discovering CRD for kind "${kind}" in group "${group}" after ${timeout}ms`, 'CustomResourceDefinition', `${kind}.${group}`, timeout, 'crd-discovery');
|
|
297
|
+
}
|
|
298
|
+
// Phase 2: wait for the discovered CRD to become Established. Pass
|
|
299
|
+
// along the remaining timeout budget so total wait is bounded.
|
|
300
|
+
const remaining = Math.max(timeout - (Date.now() - startTime), pollInterval);
|
|
301
|
+
await this.waitForCRDReady(crdName, deploymentMode, remaining, abortSignal);
|
|
302
|
+
return { crdName, plural };
|
|
303
|
+
}
|
|
226
304
|
}
|
|
227
305
|
//# sourceMappingURL=crd-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crd-manager.js","sourceRoot":"","sources":["../../../src/core/deployment/crd-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AASzD;;GAEG;AACH,MAAM,mBAAmB,GAAG;IAC1B,IAAI,EAAE,iBAAiB;IACvB,SAAS;IACT,oBAAoB;IACpB,sBAAsB;IACtB,WAAW;IACX,8BAA8B;IAC9B,mBAAmB;IACnB,yBAAyB,EAAE,kBAAkB;IAC7C,iCAAiC;IACjC,2BAA2B;IAC3B,0BAA0B;IAC1B,yBAAyB;IACzB,gBAAgB;IAChB,gBAAgB;IAChB,UAAU;IACV,wBAAwB;IACxB,wBAAwB;IACxB,qBAAqB;IACrB,kBAAkB;IAClB,sCAAsC;IACtC,gBAAgB;IAChB,sBAAsB;CACvB,CAAC;AAEF,MAAM,OAAO,UAAU;IAKX;IACA;IACA;IACA;IAPF,oBAAoB,GAAyB,IAAI,CAAC;IAClD,MAAM,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAEnD,YACU,MAA+B,EAC/B,UAA0B,EAC1B,cAAmE,EACnE,eAA+E;QAH/E,WAAM,GAAN,MAAM,CAAyB;QAC/B,eAAU,GAAV,UAAU,CAAgB;QAC1B,mBAAc,GAAd,cAAc,CAAqD;QACnE,oBAAe,GAAf,eAAe,CAAgE;IACtF,CAAC;IAEJ;;OAEG;IACH,gBAAgB,CAAC,QAA4B;QAC3C,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC3C,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAC,QAA4B;QACtD,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,0EAA0E;QAC1E,MAAM,eAAe,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEnE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,qCAAqC;QACpD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,0BAA0B,CAAC,CAAC;YAE3F,MAAM,OAAO,GAAG,IAA+C,CAAC;YAChE,MAAM,WAAW,GAAG,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,GAAiC,EAAE,EAAE;gBAC7E,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;gBACzB,OAAO,OAAO,EAAE,KAAK,KAAK,KAAK,IAAI,OAAO,EAAE,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC;YAC5E,CAAC,CAAC,CAAC;YAEH,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,WAAW,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC;YAC5C,CAAC;QACH,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+DAA+D,EAAE;gBAChF,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;aACrB,CAAC,CAAC;QACL,CAAC;QAED,gEAAgE;QAChE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC;QACtD,OAAO,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,QAA4B,EAAE,OAA0B;QAC5E,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACxD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,EAAE,QAAQ,KAAK,KAAK,CAAC;QAC3D,OAAO,cAAc,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,qBAAqB,CACzB,OAA0B,EAC1B,MAA6C;QAE7C,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,oBAAoB,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,oBAAoB,GAAG,CAAC,KAAK,IAAI,EAAE;YACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,QAAQ,IAAI,MAAM,CAAC;YACrD,MAAM,CAAC,QAAQ,CAAC,CAAC,0DAA0D,CAAC,CAAC;YAE7E,IAAI,CAAC;gBACH,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAC;gBAClF,MAAM,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC3C,MAAM,CAAC,QAAQ,CAAC,CAAC,gCAAgC,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;gBACjC,MAAM,CAAC,IAAI,CACT,iFAAiF,EACjF;oBACE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,OAAO;oBACjC,UAAU,EAAE,uEAAuE;iBACpF,CACF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QAEL,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,0BAA0B,CAC9B,QAA4B,EAC5B,OAA0B,EAC1B,MAA6C,EAC7C,WAAyB;QAEzB,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC;YACzB,MAAM,IAAI,YAAY,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,kDAAkD,EAAE;gBAC9D,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,UAAU,EAAE,QAAQ,CAAC,UAAU;aAChC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,yDAAyD,EAAE;YACtE,YAAY,EAAE,QAAQ,CAAC,IAAI;YAC3B,OAAO;SACR,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,uBAAuB,CAChC,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAC/B,OAAO,EACP,MAAM,EACN,WAAW,CACZ,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC,6DAA6D,EAAE;YAC1E,YAAY,EAAE,QAAQ,CAAC,IAAI;YAC3B,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CACnB,OAAe,EACf,cAAsB,EACtB,UAAkB,yBAAyB,EAC3C,WAAyB;QAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACvD,MAAM,OAAO,GAAsB;YACjC,IAAI,EAAE,cAAuD;YAC7D,OAAO;SACR,CAAC;QAEF,MAAM,IAAI,CAAC,uBAAuB,CAChC,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAC/B,OAAO,EACP,MAAM,EACN,WAAW,CACZ,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,uBAAuB,CAC3B,GAAqC,EACrC,OAA0B,EAC1B,MAA6C,EAC7C,WAAyB;QAEzB,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;QACnC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,0BAA0B,CAAC;QAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,YAAY,GAAG,qBAAqB,CAAC;QAE3C,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAElF,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,OAAO,EAAE,CAAC;YACxC,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC;gBACzB,MAAM,IAAI,YAAY,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;YAC5D,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;oBACf,UAAU,EAAE,yBAAyB;oBACrC,IAAI,EAAE,0BAA0B;oBAChC,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;iBACM,CAAC,EACpC,WAAW,CACZ,CAAC;gBAEF,MAAM,OAAO,GAAG,SAAoD,CAAC;gBACrE,MAAM,UAAU,GAAG,OAAO,EAAE,MAAM,EAAE,UAAU,IAAI,EAAE,CAAC;gBACrD,MAAM,oBAAoB,GAAG,UAAU,CAAC,IAAI,CAC1C,CAAC,CAAsB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CACrD,CAAC;gBAEF,IAAI,oBAAoB,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"crd-manager.js","sourceRoot":"","sources":["../../../src/core/deployment/crd-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deployment State Discovery
|
|
3
|
+
*
|
|
4
|
+
* Reconstructs a DeploymentStateRecord for a factory+instance by querying
|
|
5
|
+
* the cluster for resources labeled with typekro ownership metadata.
|
|
6
|
+
*
|
|
7
|
+
* This module implements the "cluster IS the state" model: there is no
|
|
8
|
+
* separate state backend (ConfigMap, database, etc). Every typekro-managed
|
|
9
|
+
* resource is tagged at deploy time with labels and annotations via
|
|
10
|
+
* {@link applyTypekroTags}, and at delete time we walk the cluster to
|
|
11
|
+
* find those resources and rebuild the graph from their annotations.
|
|
12
|
+
*
|
|
13
|
+
* ## Discovery strategy
|
|
14
|
+
*
|
|
15
|
+
* To cover every GVK a typekro composition might have touched, we:
|
|
16
|
+
*
|
|
17
|
+
* 1. Issue label-filtered list calls against a hardcoded set of
|
|
18
|
+
* built-in GVKs (Deployments, Services, Namespaces, etc.).
|
|
19
|
+
* 2. List all CRDs on the cluster, extract their (group, version, kind,
|
|
20
|
+
* scope) tuples, and issue label-filtered list calls against each.
|
|
21
|
+
* 3. Merge the results.
|
|
22
|
+
*
|
|
23
|
+
* Each list is scoped by a label selector, so even on large clusters the
|
|
24
|
+
* response from a GVK with no matching resources is a near-empty payload.
|
|
25
|
+
* The main cost is the number of list calls, which is bounded by
|
|
26
|
+
* (built-in GVKs) + (CRDs on cluster) — typically 30-150 requests total
|
|
27
|
+
* for a fresh discovery. Requests are issued with bounded parallelism.
|
|
28
|
+
*
|
|
29
|
+
* ## Why not use /apis discovery?
|
|
30
|
+
*
|
|
31
|
+
* The Kubernetes discovery API (`/apis`, `/api/v1`) gives a complete
|
|
32
|
+
* list of API resources, but client-node 1.x doesn't expose a typed
|
|
33
|
+
* helper for walking it, and we'd need to issue one request per group-
|
|
34
|
+
* version anyway to get the `resources[]` list for each. Listing CRDs
|
|
35
|
+
* directly is simpler and covers every custom kind; the hardcoded
|
|
36
|
+
* built-in list covers the rest.
|
|
37
|
+
*
|
|
38
|
+
* ## Graph reconstruction
|
|
39
|
+
*
|
|
40
|
+
* Each discovered resource carries a `typekro.io/depends-on` annotation
|
|
41
|
+
* containing a JSON array of composition-local ids it depends on. We
|
|
42
|
+
* walk the discovered resources twice: first pass adds every id as a
|
|
43
|
+
* graph node, second pass adds edges. Dangling edges (pointing to a
|
|
44
|
+
* resource that no longer exists on the cluster) are silently dropped
|
|
45
|
+
* — that's the expected state after a partial delete.
|
|
46
|
+
*/
|
|
47
|
+
import type * as k8s from '@kubernetes/client-node';
|
|
48
|
+
import type { DeploymentStateRecord } from '../types/deployment.js';
|
|
49
|
+
/**
|
|
50
|
+
* GVK tuple used for per-kind list calls.
|
|
51
|
+
*
|
|
52
|
+
* `namespaced` is currently unused — all list calls use a cluster-wide
|
|
53
|
+
* scan (namespace=undefined) because typekro compositions can span
|
|
54
|
+
* multiple namespaces. The field is retained for a planned optimization
|
|
55
|
+
* where namespace-scoped listing could reduce API server load on large
|
|
56
|
+
* clusters by only querying namespaces the factory has touched.
|
|
57
|
+
*/
|
|
58
|
+
export interface GvkTarget {
|
|
59
|
+
apiVersion: string;
|
|
60
|
+
kind: string;
|
|
61
|
+
namespaced: boolean;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Built-in Kubernetes GVKs that typekro compositions commonly deploy.
|
|
65
|
+
* Kept intentionally narrow: adding entries here costs one list call
|
|
66
|
+
* per delete, so we only include kinds that are actually used by typekro
|
|
67
|
+
* factories.
|
|
68
|
+
*
|
|
69
|
+
* If a user deploys a built-in kind not on this list (e.g., a
|
|
70
|
+
* NetworkPolicy) and then deletes across processes, the resource will
|
|
71
|
+
* be missed by discovery. The fix is to add it here. A broader
|
|
72
|
+
* solution (full /apis walk) would be a follow-up optimization.
|
|
73
|
+
*
|
|
74
|
+
* With the `knownGvks` hint from the factory (see
|
|
75
|
+
* `discoverDeployedResourcesByInstance`), this list is only used as a
|
|
76
|
+
* fallback when the composition's resource templates are unavailable.
|
|
77
|
+
*
|
|
78
|
+
* Last audited: 2026-04-06.
|
|
79
|
+
*/
|
|
80
|
+
export declare const BUILT_IN_GVKS: readonly GvkTarget[];
|
|
81
|
+
/**
|
|
82
|
+
* Enumerate every GVK typekro might need to query on this cluster:
|
|
83
|
+
* hardcoded built-ins + every active CRD version.
|
|
84
|
+
*
|
|
85
|
+
* CRD listing failures (RBAC, transient errors) are logged and the
|
|
86
|
+
* built-in list is returned alone so discovery can still make progress.
|
|
87
|
+
*/
|
|
88
|
+
export declare function discoverClusterGvks(k8sApi: k8s.KubernetesObjectApi): Promise<GvkTarget[]>;
|
|
89
|
+
/**
|
|
90
|
+
* Discover the full set of resources belonging to a factory+instance and
|
|
91
|
+
* rebuild a {@link DeploymentStateRecord} ready to feed into
|
|
92
|
+
* {@link DirectDeploymentEngine.rollbackRecord}.
|
|
93
|
+
*
|
|
94
|
+
* Returns `undefined` if no resources match — legitimate state when the
|
|
95
|
+
* instance has already been cleaned up, was never deployed, or was
|
|
96
|
+
* deployed by a typekro version that did not tag resources.
|
|
97
|
+
*
|
|
98
|
+
* Resources are queried cluster-wide (namespace undefined) because
|
|
99
|
+
* typekro compositions can span multiple namespaces (e.g., a webapp
|
|
100
|
+
* composition may deploy operator resources in `cnpg-system` and
|
|
101
|
+
* application resources in `default`). The label selector makes this
|
|
102
|
+
* cheap even on large clusters.
|
|
103
|
+
*/
|
|
104
|
+
export declare function discoverDeployedResourcesByInstance(k8sApi: k8s.KubernetesObjectApi, opts: {
|
|
105
|
+
factoryName: string;
|
|
106
|
+
instanceName: string;
|
|
107
|
+
/**
|
|
108
|
+
* GVK hint from the factory's resource templates. When provided,
|
|
109
|
+
* only these kinds are queried — dropping a typical delete from
|
|
110
|
+
* 100+ list calls to 5-10. Falls back to full cluster GVK
|
|
111
|
+
* enumeration when omitted (e.g., bare engine calls without a
|
|
112
|
+
* composition in hand).
|
|
113
|
+
*/
|
|
114
|
+
knownGvks?: GvkTarget[];
|
|
115
|
+
}): Promise<DeploymentStateRecord | undefined>;
|
|
116
|
+
//# sourceMappingURL=deployment-state-discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-state-discovery.d.ts","sourceRoot":"","sources":["../../../src/core/deployment/deployment-state-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAIpD,OAAO,KAAK,EAAoB,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAatF;;;;;;;;GAQG;AACH,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,SAAS,EA6B7C,CAAC;AAEF;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,GAAG,CAAC,mBAAmB,GAC9B,OAAO,CAAC,SAAS,EAAE,CAAC,CAqBtB;AA4BD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,mCAAmC,CACvD,MAAM,EAAE,GAAG,CAAC,mBAAmB,EAC/B,IAAI,EAAE;IACJ,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC;CACzB,GACA,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAmG5C"}
|
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deployment State Discovery
|
|
3
|
+
*
|
|
4
|
+
* Reconstructs a DeploymentStateRecord for a factory+instance by querying
|
|
5
|
+
* the cluster for resources labeled with typekro ownership metadata.
|
|
6
|
+
*
|
|
7
|
+
* This module implements the "cluster IS the state" model: there is no
|
|
8
|
+
* separate state backend (ConfigMap, database, etc). Every typekro-managed
|
|
9
|
+
* resource is tagged at deploy time with labels and annotations via
|
|
10
|
+
* {@link applyTypekroTags}, and at delete time we walk the cluster to
|
|
11
|
+
* find those resources and rebuild the graph from their annotations.
|
|
12
|
+
*
|
|
13
|
+
* ## Discovery strategy
|
|
14
|
+
*
|
|
15
|
+
* To cover every GVK a typekro composition might have touched, we:
|
|
16
|
+
*
|
|
17
|
+
* 1. Issue label-filtered list calls against a hardcoded set of
|
|
18
|
+
* built-in GVKs (Deployments, Services, Namespaces, etc.).
|
|
19
|
+
* 2. List all CRDs on the cluster, extract their (group, version, kind,
|
|
20
|
+
* scope) tuples, and issue label-filtered list calls against each.
|
|
21
|
+
* 3. Merge the results.
|
|
22
|
+
*
|
|
23
|
+
* Each list is scoped by a label selector, so even on large clusters the
|
|
24
|
+
* response from a GVK with no matching resources is a near-empty payload.
|
|
25
|
+
* The main cost is the number of list calls, which is bounded by
|
|
26
|
+
* (built-in GVKs) + (CRDs on cluster) — typically 30-150 requests total
|
|
27
|
+
* for a fresh discovery. Requests are issued with bounded parallelism.
|
|
28
|
+
*
|
|
29
|
+
* ## Why not use /apis discovery?
|
|
30
|
+
*
|
|
31
|
+
* The Kubernetes discovery API (`/apis`, `/api/v1`) gives a complete
|
|
32
|
+
* list of API resources, but client-node 1.x doesn't expose a typed
|
|
33
|
+
* helper for walking it, and we'd need to issue one request per group-
|
|
34
|
+
* version anyway to get the `resources[]` list for each. Listing CRDs
|
|
35
|
+
* directly is simpler and covers every custom kind; the hardcoded
|
|
36
|
+
* built-in list covers the rest.
|
|
37
|
+
*
|
|
38
|
+
* ## Graph reconstruction
|
|
39
|
+
*
|
|
40
|
+
* Each discovered resource carries a `typekro.io/depends-on` annotation
|
|
41
|
+
* containing a JSON array of composition-local ids it depends on. We
|
|
42
|
+
* walk the discovered resources twice: first pass adds every id as a
|
|
43
|
+
* graph node, second pass adds edges. Dangling edges (pointing to a
|
|
44
|
+
* resource that no longer exists on the cluster) are silently dropped
|
|
45
|
+
* — that's the expected state after a partial delete.
|
|
46
|
+
*/
|
|
47
|
+
import { DependencyGraph } from '../dependencies/graph.js';
|
|
48
|
+
import { getComponentLogger } from '../logging/index.js';
|
|
49
|
+
import { setMetadataField } from '../metadata/index.js';
|
|
50
|
+
import { buildFactoryInstanceSelector, extractTypekroTags, } from './resource-tagging.js';
|
|
51
|
+
const logger = getComponentLogger('deployment-state-discovery');
|
|
52
|
+
/**
|
|
53
|
+
* Built-in Kubernetes GVKs that typekro compositions commonly deploy.
|
|
54
|
+
* Kept intentionally narrow: adding entries here costs one list call
|
|
55
|
+
* per delete, so we only include kinds that are actually used by typekro
|
|
56
|
+
* factories.
|
|
57
|
+
*
|
|
58
|
+
* If a user deploys a built-in kind not on this list (e.g., a
|
|
59
|
+
* NetworkPolicy) and then deletes across processes, the resource will
|
|
60
|
+
* be missed by discovery. The fix is to add it here. A broader
|
|
61
|
+
* solution (full /apis walk) would be a follow-up optimization.
|
|
62
|
+
*
|
|
63
|
+
* With the `knownGvks` hint from the factory (see
|
|
64
|
+
* `discoverDeployedResourcesByInstance`), this list is only used as a
|
|
65
|
+
* fallback when the composition's resource templates are unavailable.
|
|
66
|
+
*
|
|
67
|
+
* Last audited: 2026-04-06.
|
|
68
|
+
*/
|
|
69
|
+
export const BUILT_IN_GVKS = [
|
|
70
|
+
// Core API (v1)
|
|
71
|
+
{ apiVersion: 'v1', kind: 'Namespace', namespaced: false },
|
|
72
|
+
{ apiVersion: 'v1', kind: 'ConfigMap', namespaced: true },
|
|
73
|
+
{ apiVersion: 'v1', kind: 'Secret', namespaced: true },
|
|
74
|
+
{ apiVersion: 'v1', kind: 'Service', namespaced: true },
|
|
75
|
+
{ apiVersion: 'v1', kind: 'ServiceAccount', namespaced: true },
|
|
76
|
+
{ apiVersion: 'v1', kind: 'PersistentVolumeClaim', namespaced: true },
|
|
77
|
+
{ apiVersion: 'v1', kind: 'PersistentVolume', namespaced: false },
|
|
78
|
+
// Apps
|
|
79
|
+
{ apiVersion: 'apps/v1', kind: 'Deployment', namespaced: true },
|
|
80
|
+
{ apiVersion: 'apps/v1', kind: 'StatefulSet', namespaced: true },
|
|
81
|
+
{ apiVersion: 'apps/v1', kind: 'DaemonSet', namespaced: true },
|
|
82
|
+
{ apiVersion: 'apps/v1', kind: 'ReplicaSet', namespaced: true },
|
|
83
|
+
// Batch
|
|
84
|
+
{ apiVersion: 'batch/v1', kind: 'Job', namespaced: true },
|
|
85
|
+
{ apiVersion: 'batch/v1', kind: 'CronJob', namespaced: true },
|
|
86
|
+
// Networking
|
|
87
|
+
{ apiVersion: 'networking.k8s.io/v1', kind: 'Ingress', namespaced: true },
|
|
88
|
+
{ apiVersion: 'networking.k8s.io/v1', kind: 'NetworkPolicy', namespaced: true },
|
|
89
|
+
// RBAC
|
|
90
|
+
{ apiVersion: 'rbac.authorization.k8s.io/v1', kind: 'Role', namespaced: true },
|
|
91
|
+
{ apiVersion: 'rbac.authorization.k8s.io/v1', kind: 'RoleBinding', namespaced: true },
|
|
92
|
+
{ apiVersion: 'rbac.authorization.k8s.io/v1', kind: 'ClusterRole', namespaced: false },
|
|
93
|
+
{ apiVersion: 'rbac.authorization.k8s.io/v1', kind: 'ClusterRoleBinding', namespaced: false },
|
|
94
|
+
// Autoscaling
|
|
95
|
+
{ apiVersion: 'autoscaling/v2', kind: 'HorizontalPodAutoscaler', namespaced: true },
|
|
96
|
+
// Policy
|
|
97
|
+
{ apiVersion: 'policy/v1', kind: 'PodDisruptionBudget', namespaced: true },
|
|
98
|
+
];
|
|
99
|
+
/**
|
|
100
|
+
* Enumerate every GVK typekro might need to query on this cluster:
|
|
101
|
+
* hardcoded built-ins + every active CRD version.
|
|
102
|
+
*
|
|
103
|
+
* CRD listing failures (RBAC, transient errors) are logged and the
|
|
104
|
+
* built-in list is returned alone so discovery can still make progress.
|
|
105
|
+
*/
|
|
106
|
+
export async function discoverClusterGvks(k8sApi) {
|
|
107
|
+
const targets = [...BUILT_IN_GVKS];
|
|
108
|
+
try {
|
|
109
|
+
const crdList = (await k8sApi.list('apiextensions.k8s.io/v1', 'CustomResourceDefinition'));
|
|
110
|
+
for (const crd of crdList.items ?? []) {
|
|
111
|
+
const crdTargets = gvkTargetsFromCrd(crd);
|
|
112
|
+
targets.push(...crdTargets);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
logger.warn('Failed to list CRDs during discovery — proceeding with built-in GVKs only', { error: err instanceof Error ? err.message : String(err) });
|
|
117
|
+
}
|
|
118
|
+
return targets;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Extract GVK targets from a single CRD. A CRD may have multiple served
|
|
122
|
+
* versions; we include each served version as its own target because
|
|
123
|
+
* older resources may still exist at a non-storage version.
|
|
124
|
+
*/
|
|
125
|
+
function gvkTargetsFromCrd(crd) {
|
|
126
|
+
const group = crd.spec?.group;
|
|
127
|
+
const kind = crd.spec?.names?.kind;
|
|
128
|
+
// CRD spec.scope is "Namespaced" | "Cluster". The typed interface in
|
|
129
|
+
// typekro has [key: string]: unknown on spec, so cast to read it.
|
|
130
|
+
const scope = crd.spec?.scope;
|
|
131
|
+
if (!group || !kind)
|
|
132
|
+
return [];
|
|
133
|
+
const versions = crd.spec?.versions ?? [];
|
|
134
|
+
const namespaced = scope !== 'Cluster';
|
|
135
|
+
const targets = [];
|
|
136
|
+
for (const v of versions) {
|
|
137
|
+
if (!v.served || !v.name)
|
|
138
|
+
continue;
|
|
139
|
+
targets.push({
|
|
140
|
+
apiVersion: `${group}/${v.name}`,
|
|
141
|
+
kind,
|
|
142
|
+
namespaced,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
return targets;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Discover the full set of resources belonging to a factory+instance and
|
|
149
|
+
* rebuild a {@link DeploymentStateRecord} ready to feed into
|
|
150
|
+
* {@link DirectDeploymentEngine.rollbackRecord}.
|
|
151
|
+
*
|
|
152
|
+
* Returns `undefined` if no resources match — legitimate state when the
|
|
153
|
+
* instance has already been cleaned up, was never deployed, or was
|
|
154
|
+
* deployed by a typekro version that did not tag resources.
|
|
155
|
+
*
|
|
156
|
+
* Resources are queried cluster-wide (namespace undefined) because
|
|
157
|
+
* typekro compositions can span multiple namespaces (e.g., a webapp
|
|
158
|
+
* composition may deploy operator resources in `cnpg-system` and
|
|
159
|
+
* application resources in `default`). The label selector makes this
|
|
160
|
+
* cheap even on large clusters.
|
|
161
|
+
*/
|
|
162
|
+
export async function discoverDeployedResourcesByInstance(k8sApi, opts) {
|
|
163
|
+
const labelSelector = buildFactoryInstanceSelector(opts);
|
|
164
|
+
const discoveredGvks = await discoverClusterGvks(k8sApi);
|
|
165
|
+
const gvkTargets = opts.knownGvks?.length
|
|
166
|
+
? mergeGvkTargets([...opts.knownGvks, ...discoveredGvks])
|
|
167
|
+
: discoveredGvks;
|
|
168
|
+
const usingHint = !!opts.knownGvks?.length;
|
|
169
|
+
logger.debug('Discovering deployed resources by label', {
|
|
170
|
+
factoryName: opts.factoryName,
|
|
171
|
+
instanceName: opts.instanceName,
|
|
172
|
+
gvkCount: gvkTargets.length,
|
|
173
|
+
source: usingHint ? 'knownGvks hint' : 'full cluster enumeration',
|
|
174
|
+
labelSelector,
|
|
175
|
+
});
|
|
176
|
+
// Issue list calls with bounded parallelism. Unbounded parallelism
|
|
177
|
+
// can flood the API server on large clusters; 8 concurrent lists is
|
|
178
|
+
// a reasonable default.
|
|
179
|
+
const discoveryStart = Date.now();
|
|
180
|
+
const matches = await listWithConcurrency(gvkTargets, 8, async (target) => {
|
|
181
|
+
try {
|
|
182
|
+
const result = await k8sApi.list(target.apiVersion, target.kind, undefined, // namespace — cluster-wide scan
|
|
183
|
+
undefined, // pretty
|
|
184
|
+
undefined, // exact (deprecated)
|
|
185
|
+
undefined, // export (deprecated)
|
|
186
|
+
undefined, // fieldSelector
|
|
187
|
+
labelSelector);
|
|
188
|
+
// K8s list responses often omit apiVersion/kind on individual
|
|
189
|
+
// items — they're inferred from the list's metadata. Stamp
|
|
190
|
+
// each item with the target's GVK so downstream code (dedup,
|
|
191
|
+
// rollback) has the correct kind for API calls.
|
|
192
|
+
const items = result.items ?? [];
|
|
193
|
+
for (const item of items) {
|
|
194
|
+
if (!item.apiVersion)
|
|
195
|
+
item.apiVersion = target.apiVersion;
|
|
196
|
+
if (!item.kind)
|
|
197
|
+
item.kind = target.kind;
|
|
198
|
+
if (!target.namespaced) {
|
|
199
|
+
setMetadataField(item, 'scope', 'cluster');
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return items;
|
|
203
|
+
}
|
|
204
|
+
catch (err) {
|
|
205
|
+
// 404 on a GVK means the API server doesn't recognise that
|
|
206
|
+
// kind — expected for CRDs that were uninstalled mid-discovery.
|
|
207
|
+
// Log at debug so the noise doesn't drown out real errors.
|
|
208
|
+
logger.debug('List failed for GVK during discovery', {
|
|
209
|
+
apiVersion: target.apiVersion,
|
|
210
|
+
kind: target.kind,
|
|
211
|
+
error: err instanceof Error ? err.message : String(err),
|
|
212
|
+
});
|
|
213
|
+
return [];
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
const discoveryDuration = Date.now() - discoveryStart;
|
|
217
|
+
logger.info('Discovery list calls completed', {
|
|
218
|
+
factoryName: opts.factoryName,
|
|
219
|
+
instanceName: opts.instanceName,
|
|
220
|
+
gvkCount: gvkTargets.length,
|
|
221
|
+
source: usingHint ? 'knownGvks' : 'full-cluster',
|
|
222
|
+
durationMs: discoveryDuration,
|
|
223
|
+
});
|
|
224
|
+
// Flatten, deduplicate by (kind, namespace, name), and post-filter
|
|
225
|
+
// by raw annotation values. The label selector uses sanitized values
|
|
226
|
+
// which can collide (e.g., "my@factory" and "my#factory" both
|
|
227
|
+
// sanitize to "my-factory"). The raw factory/instance name stored in
|
|
228
|
+
// annotations is the authoritative match — reject resources whose
|
|
229
|
+
// annotation doesn't match the requested factory+instance.
|
|
230
|
+
const seen = new Set();
|
|
231
|
+
const uniqueResources = [];
|
|
232
|
+
for (const item of matches.flat()) {
|
|
233
|
+
const key = `${item.apiVersion}/${item.kind}/${item.metadata?.namespace ?? ''}/${item.metadata?.name ?? ''}`;
|
|
234
|
+
if (seen.has(key))
|
|
235
|
+
continue;
|
|
236
|
+
seen.add(key);
|
|
237
|
+
// Post-filter: verify raw annotation matches requested identity
|
|
238
|
+
const tags = extractTypekroTags(item);
|
|
239
|
+
if (tags.factoryName && tags.factoryName !== opts.factoryName)
|
|
240
|
+
continue;
|
|
241
|
+
if (tags.instanceName && tags.instanceName !== opts.instanceName)
|
|
242
|
+
continue;
|
|
243
|
+
uniqueResources.push(item);
|
|
244
|
+
}
|
|
245
|
+
if (uniqueResources.length === 0) {
|
|
246
|
+
logger.debug('No resources found for instance', {
|
|
247
|
+
factoryName: opts.factoryName,
|
|
248
|
+
instanceName: opts.instanceName,
|
|
249
|
+
});
|
|
250
|
+
return undefined;
|
|
251
|
+
}
|
|
252
|
+
return buildRecordFromResources(uniqueResources, opts);
|
|
253
|
+
}
|
|
254
|
+
function mergeGvkTargets(targets) {
|
|
255
|
+
const merged = new Map();
|
|
256
|
+
for (const target of targets) {
|
|
257
|
+
const key = `${target.apiVersion}/${target.kind}`;
|
|
258
|
+
const existing = merged.get(key);
|
|
259
|
+
if (!existing) {
|
|
260
|
+
merged.set(key, target);
|
|
261
|
+
continue;
|
|
262
|
+
}
|
|
263
|
+
if (existing.namespaced && !target.namespaced) {
|
|
264
|
+
merged.set(key, target);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return Array.from(merged.values());
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Convert a set of discovered live resources into a DeploymentStateRecord.
|
|
271
|
+
* Each resource's ownership metadata is pulled from its labels and
|
|
272
|
+
* annotations, and the dependency graph is reconstructed from the
|
|
273
|
+
* per-resource `depends-on` annotations.
|
|
274
|
+
*/
|
|
275
|
+
function buildRecordFromResources(resources, opts) {
|
|
276
|
+
const deployedResources = [];
|
|
277
|
+
const idToResource = new Map();
|
|
278
|
+
const dependenciesById = new Map();
|
|
279
|
+
// First pass: extract tags and build DeployedResource records
|
|
280
|
+
let deploymentId;
|
|
281
|
+
let earliestStart;
|
|
282
|
+
let factoryNamespace;
|
|
283
|
+
for (const resource of resources) {
|
|
284
|
+
const tags = extractTypekroTags(resource);
|
|
285
|
+
const id = tags.resourceId;
|
|
286
|
+
if (!id) {
|
|
287
|
+
// A resource with no resource-id annotation can't participate in
|
|
288
|
+
// graph reconstruction — it must have been tagged by a partial
|
|
289
|
+
// upgrade or external mutator. Skip rather than crash.
|
|
290
|
+
logger.debug('Skipping discovered resource with no resource-id annotation', {
|
|
291
|
+
kind: resource.kind,
|
|
292
|
+
name: resource.metadata?.name,
|
|
293
|
+
});
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
if (!deploymentId && tags.deploymentId)
|
|
297
|
+
deploymentId = tags.deploymentId;
|
|
298
|
+
if (!factoryNamespace && tags.factoryNamespace) {
|
|
299
|
+
factoryNamespace = tags.factoryNamespace;
|
|
300
|
+
}
|
|
301
|
+
const deployedAt = toDate(resource.metadata?.creationTimestamp);
|
|
302
|
+
if (deployedAt && (!earliestStart || deployedAt < earliestStart)) {
|
|
303
|
+
earliestStart = deployedAt;
|
|
304
|
+
}
|
|
305
|
+
const deployed = {
|
|
306
|
+
id,
|
|
307
|
+
kind: resource.kind ?? 'Unknown',
|
|
308
|
+
name: resource.metadata?.name ?? 'unknown',
|
|
309
|
+
namespace: resource.metadata?.namespace ?? '',
|
|
310
|
+
manifest: resource,
|
|
311
|
+
status: 'deployed',
|
|
312
|
+
deployedAt: deployedAt ?? new Date(),
|
|
313
|
+
};
|
|
314
|
+
deployedResources.push(deployed);
|
|
315
|
+
idToResource.set(id, deployed);
|
|
316
|
+
if (tags.dependencies.length > 0) {
|
|
317
|
+
dependenciesById.set(id, tags.dependencies);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
// Second pass: rebuild the dependency graph
|
|
321
|
+
const dependencyGraph = new DependencyGraph();
|
|
322
|
+
for (const [id, deployed] of idToResource.entries()) {
|
|
323
|
+
// biome-ignore lint/suspicious/noExplicitAny: minimal plain manifest, not an Enhanced proxy
|
|
324
|
+
dependencyGraph.addNode(id, deployed.manifest);
|
|
325
|
+
}
|
|
326
|
+
for (const [from, deps] of dependenciesById.entries()) {
|
|
327
|
+
for (const to of deps) {
|
|
328
|
+
// Skip dangling edges — the dependency may have been deleted
|
|
329
|
+
// manually, or was never tagged (e.g., lifecycle: shared in an
|
|
330
|
+
// older typekro version that we now find via annotations only).
|
|
331
|
+
if (!idToResource.has(to))
|
|
332
|
+
continue;
|
|
333
|
+
try {
|
|
334
|
+
dependencyGraph.addEdge(from, to);
|
|
335
|
+
}
|
|
336
|
+
catch (err) {
|
|
337
|
+
logger.debug('Failed to add edge during discovery — skipping', {
|
|
338
|
+
from,
|
|
339
|
+
to,
|
|
340
|
+
error: err instanceof Error ? err.message : String(err),
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
return {
|
|
346
|
+
deploymentId: deploymentId ?? `discovered-${Date.now()}`,
|
|
347
|
+
resources: deployedResources,
|
|
348
|
+
dependencyGraph,
|
|
349
|
+
startTime: earliestStart ?? new Date(),
|
|
350
|
+
status: 'completed',
|
|
351
|
+
options: {
|
|
352
|
+
mode: 'direct',
|
|
353
|
+
...(factoryNamespace && { namespace: factoryNamespace }),
|
|
354
|
+
factoryName: opts.factoryName,
|
|
355
|
+
instanceName: opts.instanceName,
|
|
356
|
+
},
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Safely convert a Kubernetes `creationTimestamp` to a Date.
|
|
361
|
+
* The client-node deserializer returns a `Date` object, but defensive
|
|
362
|
+
* callers may receive strings from raw JSON or test mocks.
|
|
363
|
+
*/
|
|
364
|
+
function toDate(value) {
|
|
365
|
+
if (value instanceof Date)
|
|
366
|
+
return Number.isNaN(value.getTime()) ? undefined : value;
|
|
367
|
+
if (typeof value === 'string' || typeof value === 'number') {
|
|
368
|
+
const d = new Date(value);
|
|
369
|
+
return Number.isNaN(d.getTime()) ? undefined : d;
|
|
370
|
+
}
|
|
371
|
+
return undefined;
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Run an async function over an array with bounded parallelism. Used to
|
|
375
|
+
* cap the number of simultaneous API requests during discovery.
|
|
376
|
+
*/
|
|
377
|
+
async function listWithConcurrency(items, concurrency, fn) {
|
|
378
|
+
const results = new Array(items.length);
|
|
379
|
+
let next = 0;
|
|
380
|
+
const workers = [];
|
|
381
|
+
const worker = async () => {
|
|
382
|
+
while (true) {
|
|
383
|
+
// Safe: JS is single-threaded — workers only yield at the `await`
|
|
384
|
+
// below, so `next++` can't be interleaved between workers.
|
|
385
|
+
const idx = next++;
|
|
386
|
+
if (idx >= items.length)
|
|
387
|
+
return;
|
|
388
|
+
const item = items[idx];
|
|
389
|
+
if (item === undefined)
|
|
390
|
+
return;
|
|
391
|
+
results[idx] = await fn(item);
|
|
392
|
+
}
|
|
393
|
+
};
|
|
394
|
+
for (let i = 0; i < Math.min(concurrency, items.length); i++) {
|
|
395
|
+
workers.push(worker());
|
|
396
|
+
}
|
|
397
|
+
await Promise.all(workers);
|
|
398
|
+
return results;
|
|
399
|
+
}
|
|
400
|
+
//# sourceMappingURL=deployment-state-discovery.js.map
|