kustodian 1.0.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/LICENSE +21 -0
- package/README.md +346 -0
- package/dist/cli/bin.d.ts +3 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +67 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/command.d.ts +57 -0
- package/dist/cli/command.d.ts.map +1 -0
- package/dist/cli/command.js +26 -0
- package/dist/cli/command.js.map +1 -0
- package/dist/cli/commands/apply.d.ts +8 -0
- package/dist/cli/commands/apply.d.ts.map +1 -0
- package/dist/cli/commands/apply.js +802 -0
- package/dist/cli/commands/apply.js.map +1 -0
- package/dist/cli/commands/init.d.ts +5 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +403 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/sources.d.ts +5 -0
- package/dist/cli/commands/sources.d.ts.map +1 -0
- package/dist/cli/commands/sources.js +377 -0
- package/dist/cli/commands/sources.js.map +1 -0
- package/dist/cli/commands/update.d.ts +5 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +314 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +5 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +126 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/container.d.ts +48 -0
- package/dist/cli/container.d.ts.map +1 -0
- package/dist/cli/container.js +49 -0
- package/dist/cli/container.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +9 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/middleware.d.ts +118 -0
- package/dist/cli/middleware.d.ts.map +1 -0
- package/dist/cli/middleware.js +280 -0
- package/dist/cli/middleware.js.map +1 -0
- package/dist/cli/runner.d.ts +34 -0
- package/dist/cli/runner.d.ts.map +1 -0
- package/dist/cli/runner.js +156 -0
- package/dist/cli/runner.js.map +1 -0
- package/dist/cli/utils/defaults.d.ts +23 -0
- package/dist/cli/utils/defaults.d.ts.map +1 -0
- package/dist/cli/utils/defaults.js +43 -0
- package/dist/cli/utils/defaults.js.map +1 -0
- package/dist/core/error.d.ts +117 -0
- package/dist/core/error.d.ts.map +1 -0
- package/dist/core/error.js +210 -0
- package/dist/core/error.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/logger.d.ts +31 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +78 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/path.d.ts +57 -0
- package/dist/core/path.d.ts.map +1 -0
- package/dist/core/path.js +154 -0
- package/dist/core/path.js.map +1 -0
- package/dist/core/result.d.ts +80 -0
- package/dist/core/result.d.ts.map +1 -0
- package/dist/core/result.js +150 -0
- package/dist/core/result.js.map +1 -0
- package/dist/core/types.d.ts +80 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +5 -0
- package/dist/core/types.js.map +1 -0
- package/dist/generator/external-substitutions.d.ts +21 -0
- package/dist/generator/external-substitutions.d.ts.map +1 -0
- package/dist/generator/external-substitutions.js +49 -0
- package/dist/generator/external-substitutions.js.map +1 -0
- package/dist/generator/flux.d.ts +61 -0
- package/dist/generator/flux.d.ts.map +1 -0
- package/dist/generator/flux.js +294 -0
- package/dist/generator/flux.js.map +1 -0
- package/dist/generator/generator.d.ts +77 -0
- package/dist/generator/generator.d.ts.map +1 -0
- package/dist/generator/generator.js +183 -0
- package/dist/generator/generator.js.map +1 -0
- package/dist/generator/index.d.ts +9 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +9 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/generator/kustomization-resolution.d.ts +40 -0
- package/dist/generator/kustomization-resolution.d.ts.map +1 -0
- package/dist/generator/kustomization-resolution.js +59 -0
- package/dist/generator/kustomization-resolution.js.map +1 -0
- package/dist/generator/namespace.d.ts +74 -0
- package/dist/generator/namespace.d.ts.map +1 -0
- package/dist/generator/namespace.js +109 -0
- package/dist/generator/namespace.js.map +1 -0
- package/dist/generator/output.d.ts +56 -0
- package/dist/generator/output.d.ts.map +1 -0
- package/dist/generator/output.js +171 -0
- package/dist/generator/output.js.map +1 -0
- package/dist/generator/preservation.d.ts +45 -0
- package/dist/generator/preservation.d.ts.map +1 -0
- package/dist/generator/preservation.js +71 -0
- package/dist/generator/preservation.js.map +1 -0
- package/dist/generator/substitution.d.ts +79 -0
- package/dist/generator/substitution.d.ts.map +1 -0
- package/dist/generator/substitution.js +210 -0
- package/dist/generator/substitution.js.map +1 -0
- package/dist/generator/types.d.ts +162 -0
- package/dist/generator/types.d.ts.map +1 -0
- package/dist/generator/types.js +2 -0
- package/dist/generator/types.js.map +1 -0
- package/dist/generator/validation/cycle-detection.d.ts +25 -0
- package/dist/generator/validation/cycle-detection.d.ts.map +1 -0
- package/dist/generator/validation/cycle-detection.js +101 -0
- package/dist/generator/validation/cycle-detection.js.map +1 -0
- package/dist/generator/validation/enablement.d.ts +24 -0
- package/dist/generator/validation/enablement.d.ts.map +1 -0
- package/dist/generator/validation/enablement.js +69 -0
- package/dist/generator/validation/enablement.js.map +1 -0
- package/dist/generator/validation/graph.d.ts +29 -0
- package/dist/generator/validation/graph.d.ts.map +1 -0
- package/dist/generator/validation/graph.js +106 -0
- package/dist/generator/validation/graph.js.map +1 -0
- package/dist/generator/validation/index.d.ts +38 -0
- package/dist/generator/validation/index.d.ts.map +1 -0
- package/dist/generator/validation/index.js +64 -0
- package/dist/generator/validation/index.js.map +1 -0
- package/dist/generator/validation/reference.d.ts +45 -0
- package/dist/generator/validation/reference.d.ts.map +1 -0
- package/dist/generator/validation/reference.js +143 -0
- package/dist/generator/validation/reference.js.map +1 -0
- package/dist/generator/validation/requirements.d.ts +25 -0
- package/dist/generator/validation/requirements.d.ts.map +1 -0
- package/dist/generator/validation/requirements.js +64 -0
- package/dist/generator/validation/requirements.js.map +1 -0
- package/dist/generator/validation/types.d.ts +116 -0
- package/dist/generator/validation/types.d.ts.map +1 -0
- package/dist/generator/validation/types.js +13 -0
- package/dist/generator/validation/types.js.map +1 -0
- package/dist/k8s/exec.d.ts +20 -0
- package/dist/k8s/exec.d.ts.map +1 -0
- package/dist/k8s/exec.js +47 -0
- package/dist/k8s/exec.js.map +1 -0
- package/dist/k8s/flux.d.ts +57 -0
- package/dist/k8s/flux.d.ts.map +1 -0
- package/dist/k8s/flux.js +202 -0
- package/dist/k8s/flux.js.map +1 -0
- package/dist/k8s/index.d.ts +6 -0
- package/dist/k8s/index.d.ts.map +1 -0
- package/dist/k8s/index.js +6 -0
- package/dist/k8s/index.js.map +1 -0
- package/dist/k8s/kubeconfig.d.ts +45 -0
- package/dist/k8s/kubeconfig.d.ts.map +1 -0
- package/dist/k8s/kubeconfig.js +152 -0
- package/dist/k8s/kubeconfig.js.map +1 -0
- package/dist/k8s/kubectl.d.ts +68 -0
- package/dist/k8s/kubectl.d.ts.map +1 -0
- package/dist/k8s/kubectl.js +187 -0
- package/dist/k8s/kubectl.js.map +1 -0
- package/dist/k8s/types.d.ts +65 -0
- package/dist/k8s/types.d.ts.map +1 -0
- package/dist/k8s/types.js +2 -0
- package/dist/k8s/types.js.map +1 -0
- package/dist/loader/file.d.ts +39 -0
- package/dist/loader/file.d.ts.map +1 -0
- package/dist/loader/file.js +121 -0
- package/dist/loader/file.js.map +1 -0
- package/dist/loader/index.d.ts +5 -0
- package/dist/loader/index.d.ts.map +1 -0
- package/dist/loader/index.js +5 -0
- package/dist/loader/index.js.map +1 -0
- package/dist/loader/profile.d.ts +23 -0
- package/dist/loader/profile.d.ts.map +1 -0
- package/dist/loader/profile.js +84 -0
- package/dist/loader/profile.js.map +1 -0
- package/dist/loader/project.d.ts +76 -0
- package/dist/loader/project.d.ts.map +1 -0
- package/dist/loader/project.js +279 -0
- package/dist/loader/project.js.map +1 -0
- package/dist/loader/yaml.d.ts +15 -0
- package/dist/loader/yaml.d.ts.map +1 -0
- package/dist/loader/yaml.js +44 -0
- package/dist/loader/yaml.js.map +1 -0
- package/dist/nodes/index.d.ts +5 -0
- package/dist/nodes/index.d.ts.map +1 -0
- package/dist/nodes/index.js +5 -0
- package/dist/nodes/index.js.map +1 -0
- package/dist/nodes/kubectl-labeler.d.ts +7 -0
- package/dist/nodes/kubectl-labeler.d.ts.map +1 -0
- package/dist/nodes/kubectl-labeler.js +89 -0
- package/dist/nodes/kubectl-labeler.js.map +1 -0
- package/dist/nodes/labeler.d.ts +74 -0
- package/dist/nodes/labeler.d.ts.map +1 -0
- package/dist/nodes/labeler.js +118 -0
- package/dist/nodes/labeler.js.map +1 -0
- package/dist/nodes/profile.d.ts +58 -0
- package/dist/nodes/profile.d.ts.map +1 -0
- package/dist/nodes/profile.js +128 -0
- package/dist/nodes/profile.js.map +1 -0
- package/dist/nodes/types.d.ts +84 -0
- package/dist/nodes/types.d.ts.map +1 -0
- package/dist/nodes/types.js +77 -0
- package/dist/nodes/types.js.map +1 -0
- package/dist/plugins/generators.d.ts +49 -0
- package/dist/plugins/generators.d.ts.map +1 -0
- package/dist/plugins/generators.js +7 -0
- package/dist/plugins/generators.js.map +1 -0
- package/dist/plugins/hooks.d.ts +120 -0
- package/dist/plugins/hooks.d.ts.map +1 -0
- package/dist/plugins/hooks.js +41 -0
- package/dist/plugins/hooks.js.map +1 -0
- package/dist/plugins/index.d.ts +8 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +15 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/loader.d.ts +40 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +236 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/object-types.d.ts +71 -0
- package/dist/plugins/object-types.d.ts.map +1 -0
- package/dist/plugins/object-types.js +65 -0
- package/dist/plugins/object-types.js.map +1 -0
- package/dist/plugins/registry.d.ts +87 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +158 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/substitution-providers.d.ts +48 -0
- package/dist/plugins/substitution-providers.d.ts.map +1 -0
- package/dist/plugins/substitution-providers.js +2 -0
- package/dist/plugins/substitution-providers.js.map +1 -0
- package/dist/plugins/types.d.ts +288 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +25 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/registry/auth.d.ts +14 -0
- package/dist/registry/auth.d.ts.map +1 -0
- package/dist/registry/auth.js +40 -0
- package/dist/registry/auth.js.map +1 -0
- package/dist/registry/client.d.ts +24 -0
- package/dist/registry/client.d.ts.map +1 -0
- package/dist/registry/client.js +85 -0
- package/dist/registry/client.js.map +1 -0
- package/dist/registry/dockerhub.d.ts +6 -0
- package/dist/registry/dockerhub.d.ts.map +1 -0
- package/dist/registry/dockerhub.js +91 -0
- package/dist/registry/dockerhub.js.map +1 -0
- package/dist/registry/ghcr.d.ts +6 -0
- package/dist/registry/ghcr.d.ts.map +1 -0
- package/dist/registry/ghcr.js +95 -0
- package/dist/registry/ghcr.js.map +1 -0
- package/dist/registry/helm.d.ts +11 -0
- package/dist/registry/helm.d.ts.map +1 -0
- package/dist/registry/helm.js +124 -0
- package/dist/registry/helm.js.map +1 -0
- package/dist/registry/index.d.ts +8 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +12 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/types.d.ts +55 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +2 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/registry/version.d.ts +22 -0
- package/dist/registry/version.d.ts.map +1 -0
- package/dist/registry/version.js +62 -0
- package/dist/registry/version.js.map +1 -0
- package/dist/schema/cluster.d.ts +2890 -0
- package/dist/schema/cluster.d.ts.map +1 -0
- package/dist/schema/cluster.js +231 -0
- package/dist/schema/cluster.js.map +1 -0
- package/dist/schema/common.d.ts +1059 -0
- package/dist/schema/common.d.ts.map +1 -0
- package/dist/schema/common.js +340 -0
- package/dist/schema/common.js.map +1 -0
- package/dist/schema/index.d.ts +8 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +8 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/node-list.d.ts +361 -0
- package/dist/schema/node-list.d.ts.map +1 -0
- package/dist/schema/node-list.js +104 -0
- package/dist/schema/node-list.js.map +1 -0
- package/dist/schema/profile.d.ts +166 -0
- package/dist/schema/profile.d.ts.map +1 -0
- package/dist/schema/profile.js +61 -0
- package/dist/schema/profile.js.map +1 -0
- package/dist/schema/project.d.ts +168 -0
- package/dist/schema/project.d.ts.map +1 -0
- package/dist/schema/project.js +40 -0
- package/dist/schema/project.js.map +1 -0
- package/dist/schema/sources.d.ts +338 -0
- package/dist/schema/sources.d.ts.map +1 -0
- package/dist/schema/sources.js +111 -0
- package/dist/schema/sources.js.map +1 -0
- package/dist/schema/template.d.ts +2711 -0
- package/dist/schema/template.d.ts.map +1 -0
- package/dist/schema/template.js +97 -0
- package/dist/schema/template.js.map +1 -0
- package/dist/sources/cache/index.d.ts +9 -0
- package/dist/sources/cache/index.d.ts.map +1 -0
- package/dist/sources/cache/index.js +278 -0
- package/dist/sources/cache/index.js.map +1 -0
- package/dist/sources/cache/metadata.d.ts +36 -0
- package/dist/sources/cache/metadata.d.ts.map +1 -0
- package/dist/sources/cache/metadata.js +21 -0
- package/dist/sources/cache/metadata.js.map +1 -0
- package/dist/sources/cache/ttl.d.ts +20 -0
- package/dist/sources/cache/ttl.d.ts.map +1 -0
- package/dist/sources/cache/ttl.js +53 -0
- package/dist/sources/cache/ttl.js.map +1 -0
- package/dist/sources/fetchers/git.d.ts +6 -0
- package/dist/sources/fetchers/git.d.ts.map +1 -0
- package/dist/sources/fetchers/git.js +165 -0
- package/dist/sources/fetchers/git.js.map +1 -0
- package/dist/sources/fetchers/http.d.ts +6 -0
- package/dist/sources/fetchers/http.d.ts.map +1 -0
- package/dist/sources/fetchers/http.js +159 -0
- package/dist/sources/fetchers/http.js.map +1 -0
- package/dist/sources/fetchers/index.d.ts +11 -0
- package/dist/sources/fetchers/index.d.ts.map +1 -0
- package/dist/sources/fetchers/index.js +24 -0
- package/dist/sources/fetchers/index.js.map +1 -0
- package/dist/sources/fetchers/oci.d.ts +6 -0
- package/dist/sources/fetchers/oci.d.ts.map +1 -0
- package/dist/sources/fetchers/oci.js +156 -0
- package/dist/sources/fetchers/oci.js.map +1 -0
- package/dist/sources/fetchers/types.d.ts +25 -0
- package/dist/sources/fetchers/types.d.ts.map +1 -0
- package/dist/sources/fetchers/types.js +2 -0
- package/dist/sources/fetchers/types.js.map +1 -0
- package/dist/sources/index.d.ts +6 -0
- package/dist/sources/index.d.ts.map +1 -0
- package/dist/sources/index.js +10 -0
- package/dist/sources/index.js.map +1 -0
- package/dist/sources/loader.d.ts +34 -0
- package/dist/sources/loader.d.ts.map +1 -0
- package/dist/sources/loader.js +89 -0
- package/dist/sources/loader.js.map +1 -0
- package/dist/sources/resolver.d.ts +17 -0
- package/dist/sources/resolver.d.ts.map +1 -0
- package/dist/sources/resolver.js +125 -0
- package/dist/sources/resolver.js.map +1 -0
- package/dist/sources/types.d.ts +151 -0
- package/dist/sources/types.d.ts.map +1 -0
- package/dist/sources/types.js +2 -0
- package/dist/sources/types.js.map +1 -0
- package/package.json +101 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
import { generate_preservation_patches, get_preserved_resource_types } from './preservation.js';
|
|
2
|
+
import { collect_all_substitution_values } from './substitution.js';
|
|
3
|
+
import { is_parse_error, parse_dependency_ref } from './validation/reference.js';
|
|
4
|
+
import { is_raw_dependency_ref } from './validation/types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Default interval for Flux reconciliation.
|
|
7
|
+
*/
|
|
8
|
+
export const DEFAULT_INTERVAL = '10m';
|
|
9
|
+
/**
|
|
10
|
+
* Default timeout for Flux reconciliation.
|
|
11
|
+
*/
|
|
12
|
+
export const DEFAULT_TIMEOUT = '5m';
|
|
13
|
+
/**
|
|
14
|
+
* Generates a Flux Kustomization name from template and kustomization.
|
|
15
|
+
*/
|
|
16
|
+
export function generate_flux_name(template_name, kustomization_name) {
|
|
17
|
+
return `${template_name}-${kustomization_name}`;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Generates the path for a Flux Kustomization.
|
|
21
|
+
* @param template_name - The template name (used if template_source_path not provided)
|
|
22
|
+
* @param kustomization_path - The kustomization's relative path
|
|
23
|
+
* @param base_path - Base path prefix (default: './templates')
|
|
24
|
+
* @param template_source_path - Optional actual source path relative to templates dir
|
|
25
|
+
*/
|
|
26
|
+
export function generate_flux_path(template_name, kustomization_path, base_path = './templates', template_source_path) {
|
|
27
|
+
// Normalize the path
|
|
28
|
+
const normalized = kustomization_path.replace(/^\.\//, '');
|
|
29
|
+
// Use actual source path if provided, otherwise fall back to template name
|
|
30
|
+
const template_dir = template_source_path ?? template_name;
|
|
31
|
+
return `${base_path}/${template_dir}/${normalized}`;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Generates the dependency references for a Flux Kustomization.
|
|
35
|
+
*
|
|
36
|
+
* Supports three formats:
|
|
37
|
+
* - Within-template: `database` → uses current template name
|
|
38
|
+
* - Cross-template: `secrets/doppler` → uses explicit template name
|
|
39
|
+
* - Raw external: `{ raw: { name: 'legacy-infrastructure', namespace: 'gitops-system' } }`
|
|
40
|
+
*/
|
|
41
|
+
export function generate_depends_on(template_name, depends_on) {
|
|
42
|
+
if (!depends_on || depends_on.length === 0) {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
return depends_on.map((dep) => {
|
|
46
|
+
const parsed = parse_dependency_ref(dep);
|
|
47
|
+
if (is_parse_error(parsed)) {
|
|
48
|
+
// Invalid references are caught during validation, fall back to current behavior
|
|
49
|
+
// This should only happen with string refs
|
|
50
|
+
if (typeof dep === 'string') {
|
|
51
|
+
return { name: generate_flux_name(template_name, dep) };
|
|
52
|
+
}
|
|
53
|
+
// If somehow we have an invalid object ref, use a placeholder
|
|
54
|
+
return { name: 'invalid-reference' };
|
|
55
|
+
}
|
|
56
|
+
// Handle raw dependencies - pass through name and namespace directly
|
|
57
|
+
if (is_raw_dependency_ref(parsed)) {
|
|
58
|
+
return {
|
|
59
|
+
name: parsed.name,
|
|
60
|
+
namespace: parsed.namespace,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// Handle string-based dependencies (within-template and cross-template)
|
|
64
|
+
const effective_template = parsed.template ?? template_name;
|
|
65
|
+
return { name: generate_flux_name(effective_template, parsed.kustomization) };
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Generates health checks for a Flux Kustomization.
|
|
70
|
+
*/
|
|
71
|
+
export function generate_health_checks(kustomization, namespace) {
|
|
72
|
+
if (!kustomization.health_checks || kustomization.health_checks.length === 0) {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
return kustomization.health_checks.map((check) => ({
|
|
76
|
+
apiVersion: check.api_version ?? 'apps/v1',
|
|
77
|
+
kind: check.kind,
|
|
78
|
+
name: check.name,
|
|
79
|
+
namespace: check.namespace ?? namespace,
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Generates custom health checks with CEL expressions for a Flux Kustomization.
|
|
84
|
+
*/
|
|
85
|
+
export function generate_custom_health_checks(kustomization, namespace) {
|
|
86
|
+
if (!kustomization.health_check_exprs || kustomization.health_check_exprs.length === 0) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
return kustomization.health_check_exprs.map((check) => {
|
|
90
|
+
const healthCheck = {
|
|
91
|
+
apiVersion: check.api_version,
|
|
92
|
+
kind: check.kind,
|
|
93
|
+
namespace: check.namespace ?? namespace,
|
|
94
|
+
};
|
|
95
|
+
if (check.current !== undefined) {
|
|
96
|
+
healthCheck.current = check.current;
|
|
97
|
+
}
|
|
98
|
+
if (check.failed !== undefined) {
|
|
99
|
+
healthCheck.failed = check.failed;
|
|
100
|
+
}
|
|
101
|
+
return healthCheck;
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Generates a Flux OCIRepository resource.
|
|
106
|
+
*/
|
|
107
|
+
export function generate_flux_oci_repository(cluster, oci_config, repository_name, flux_namespace, interval = DEFAULT_INTERVAL) {
|
|
108
|
+
const url = `oci://${oci_config.registry}/${oci_config.repository}`;
|
|
109
|
+
const ref = {};
|
|
110
|
+
switch (oci_config.tag_strategy) {
|
|
111
|
+
case 'cluster':
|
|
112
|
+
ref.tag = cluster.metadata.name;
|
|
113
|
+
break;
|
|
114
|
+
case 'manual':
|
|
115
|
+
ref.tag = oci_config.tag || 'latest';
|
|
116
|
+
break;
|
|
117
|
+
default:
|
|
118
|
+
ref.tag = 'latest'; // CI will update this
|
|
119
|
+
}
|
|
120
|
+
const spec = {
|
|
121
|
+
interval,
|
|
122
|
+
url,
|
|
123
|
+
ref,
|
|
124
|
+
provider: oci_config.provider || 'generic',
|
|
125
|
+
};
|
|
126
|
+
if (oci_config.secret_ref) {
|
|
127
|
+
spec.secretRef = { name: oci_config.secret_ref };
|
|
128
|
+
}
|
|
129
|
+
if (oci_config.insecure) {
|
|
130
|
+
spec.insecure = true;
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
apiVersion: 'source.toolkit.fluxcd.io/v1',
|
|
134
|
+
kind: 'OCIRepository',
|
|
135
|
+
metadata: {
|
|
136
|
+
name: repository_name,
|
|
137
|
+
namespace: flux_namespace,
|
|
138
|
+
},
|
|
139
|
+
spec,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Generates a Flux Kustomization resource.
|
|
144
|
+
*/
|
|
145
|
+
export function generate_flux_kustomization(resolved, source_repository_name = 'flux-system', source_kind = 'GitRepository', preservation, template_source_path, interval = DEFAULT_INTERVAL, timeout = DEFAULT_TIMEOUT) {
|
|
146
|
+
const { template, kustomization, values, namespace } = resolved;
|
|
147
|
+
const name = generate_flux_name(template.metadata.name, kustomization.name);
|
|
148
|
+
const path = generate_flux_path(template.metadata.name, kustomization.path, './templates', template_source_path);
|
|
149
|
+
const spec = {
|
|
150
|
+
interval,
|
|
151
|
+
targetNamespace: namespace,
|
|
152
|
+
path,
|
|
153
|
+
prune: kustomization.prune ?? true,
|
|
154
|
+
wait: kustomization.wait ?? true,
|
|
155
|
+
sourceRef: {
|
|
156
|
+
kind: source_kind,
|
|
157
|
+
name: source_repository_name,
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
// Add preservation patches if preservation is configured
|
|
161
|
+
if (preservation) {
|
|
162
|
+
const preserved_types = get_preserved_resource_types(preservation);
|
|
163
|
+
if (preserved_types.length > 0) {
|
|
164
|
+
const patches = generate_preservation_patches(preserved_types);
|
|
165
|
+
spec.patches = patches;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Add timeout if specified
|
|
169
|
+
if (kustomization.timeout) {
|
|
170
|
+
spec.timeout = kustomization.timeout;
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
spec.timeout = timeout;
|
|
174
|
+
}
|
|
175
|
+
// Add retry interval if specified
|
|
176
|
+
if (kustomization.retry_interval) {
|
|
177
|
+
spec.retryInterval = kustomization.retry_interval;
|
|
178
|
+
}
|
|
179
|
+
// Add dependencies
|
|
180
|
+
const depends_on = generate_depends_on(template.metadata.name, kustomization.depends_on);
|
|
181
|
+
if (depends_on) {
|
|
182
|
+
spec.dependsOn = depends_on;
|
|
183
|
+
}
|
|
184
|
+
// Add substitutions if there are values
|
|
185
|
+
if (Object.keys(values).length > 0) {
|
|
186
|
+
spec.postBuild = {
|
|
187
|
+
substitute: values,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
// Add health checks
|
|
191
|
+
const health_checks = generate_health_checks(kustomization, namespace);
|
|
192
|
+
if (health_checks) {
|
|
193
|
+
spec.healthChecks = health_checks;
|
|
194
|
+
}
|
|
195
|
+
// Add custom health checks with CEL expressions
|
|
196
|
+
const custom_health_checks = generate_custom_health_checks(kustomization, namespace);
|
|
197
|
+
if (custom_health_checks) {
|
|
198
|
+
spec.customHealthChecks = custom_health_checks;
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
apiVersion: 'kustomize.toolkit.fluxcd.io/v1',
|
|
202
|
+
kind: 'Kustomization',
|
|
203
|
+
metadata: {
|
|
204
|
+
name,
|
|
205
|
+
namespace: 'flux-system',
|
|
206
|
+
},
|
|
207
|
+
spec,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Resolves a kustomization with values from the cluster config.
|
|
212
|
+
* Includes both template-level versions and kustomization-level substitutions.
|
|
213
|
+
*/
|
|
214
|
+
export function resolve_kustomization(template, kustomization, cluster_values = {}) {
|
|
215
|
+
// Collect values from template versions and kustomization substitutions
|
|
216
|
+
const values = collect_all_substitution_values(template, kustomization, cluster_values);
|
|
217
|
+
// Determine namespace
|
|
218
|
+
const namespace = kustomization.namespace?.default ?? 'default';
|
|
219
|
+
// Add namespace to substitution values so ${namespace} works in templates
|
|
220
|
+
values['namespace'] = namespace;
|
|
221
|
+
return {
|
|
222
|
+
template,
|
|
223
|
+
kustomization,
|
|
224
|
+
values,
|
|
225
|
+
namespace,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Gets effective settings for a controller by merging global and controller-specific settings.
|
|
230
|
+
*/
|
|
231
|
+
function get_effective_controller_settings(flux_config, controller_key) {
|
|
232
|
+
const controllers = flux_config.controllers;
|
|
233
|
+
if (!controllers) {
|
|
234
|
+
return {};
|
|
235
|
+
}
|
|
236
|
+
const global_concurrent = controllers.concurrent;
|
|
237
|
+
const global_requeue = controllers.requeue_dependency;
|
|
238
|
+
const controller_settings = controllers[controller_key];
|
|
239
|
+
return {
|
|
240
|
+
concurrent: controller_settings?.concurrent ?? global_concurrent,
|
|
241
|
+
requeue_dependency: controller_settings?.requeue_dependency ?? global_requeue,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Builds JSON patch operations for a controller based on its settings.
|
|
246
|
+
*/
|
|
247
|
+
function build_controller_patch_ops(settings) {
|
|
248
|
+
const ops = [];
|
|
249
|
+
if (settings.concurrent !== undefined) {
|
|
250
|
+
ops.push({
|
|
251
|
+
op: 'add',
|
|
252
|
+
path: '/spec/template/spec/containers/0/args/-',
|
|
253
|
+
value: `--concurrent=${settings.concurrent}`,
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
if (settings.requeue_dependency !== undefined) {
|
|
257
|
+
ops.push({
|
|
258
|
+
op: 'add',
|
|
259
|
+
path: '/spec/template/spec/containers/0/args/-',
|
|
260
|
+
value: `--requeue-dependency=${settings.requeue_dependency}`,
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
return ops;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Generates Kustomize patches for Flux controllers based on cluster configuration.
|
|
267
|
+
* These patches are applied to the gotk-components during Flux bootstrap/install.
|
|
268
|
+
*/
|
|
269
|
+
export function generate_flux_controller_patches(flux_config) {
|
|
270
|
+
if (!flux_config.controllers) {
|
|
271
|
+
return undefined;
|
|
272
|
+
}
|
|
273
|
+
const controller_mapping = [
|
|
274
|
+
{ key: 'kustomize_controller', name: 'kustomize-controller' },
|
|
275
|
+
{ key: 'helm_controller', name: 'helm-controller' },
|
|
276
|
+
{ key: 'source_controller', name: 'source-controller' },
|
|
277
|
+
];
|
|
278
|
+
const patches = [];
|
|
279
|
+
for (const { key, name } of controller_mapping) {
|
|
280
|
+
const settings = get_effective_controller_settings(flux_config, key);
|
|
281
|
+
const ops = build_controller_patch_ops(settings);
|
|
282
|
+
if (ops.length > 0) {
|
|
283
|
+
patches.push({
|
|
284
|
+
patch: JSON.stringify(ops),
|
|
285
|
+
target: {
|
|
286
|
+
kind: 'Deployment',
|
|
287
|
+
name,
|
|
288
|
+
},
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return patches.length > 0 ? patches : undefined;
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=flux.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flux.js","sourceRoot":"","sources":["../../src/generator/flux.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { KustodianErrorType } from '../core/index.js';
|
|
2
|
+
import { type ResultType } from '../core/index.js';
|
|
3
|
+
import type { GeneratedResourceType, LegacyPluginRegistryType, PluginRegistryType } from '../plugins/index.js';
|
|
4
|
+
import type { ClusterType, TemplateType } from '../schema/index.js';
|
|
5
|
+
import { DEFAULT_INTERVAL, DEFAULT_TIMEOUT, generate_depends_on, generate_flux_kustomization, generate_flux_name, generate_health_checks, resolve_kustomization } from './flux.js';
|
|
6
|
+
import { generate_namespace_resources } from './namespace.js';
|
|
7
|
+
import { serialize_resource, serialize_resources } from './output.js';
|
|
8
|
+
import type { FluxKustomizationType, GenerateOptionsType, GenerationResultType, ResolvedKustomizationType, ResolvedTemplateType } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Options for the Generator.
|
|
11
|
+
*/
|
|
12
|
+
export interface GeneratorOptionsType {
|
|
13
|
+
flux_namespace?: string;
|
|
14
|
+
git_repository_name?: string;
|
|
15
|
+
base_path?: string;
|
|
16
|
+
/** Map of template names to their source paths (relative to project root) */
|
|
17
|
+
template_paths?: Map<string, string>;
|
|
18
|
+
/** Reconciliation interval for Flux resources */
|
|
19
|
+
flux_reconciliation_interval?: string;
|
|
20
|
+
/** Timeout for Flux reconciliation */
|
|
21
|
+
flux_reconciliation_timeout?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Generator hook phases.
|
|
25
|
+
*/
|
|
26
|
+
export type GeneratorHookPhaseType = 'before_generate' | 'after_resolve_template' | 'after_generate_kustomization' | 'after_generate';
|
|
27
|
+
/**
|
|
28
|
+
* Hook handler function type.
|
|
29
|
+
*/
|
|
30
|
+
export type GeneratorHookHandlerType = (phase: GeneratorHookPhaseType, context: GeneratorHookContextType) => void | Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Context passed to generator hooks.
|
|
33
|
+
*/
|
|
34
|
+
export interface GeneratorHookContextType {
|
|
35
|
+
cluster: ClusterType;
|
|
36
|
+
templates?: ResolvedTemplateType[];
|
|
37
|
+
kustomization?: ResolvedKustomizationType;
|
|
38
|
+
flux_kustomization?: FluxKustomizationType;
|
|
39
|
+
result?: GenerationResultType;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Generator class for processing templates into Flux resources.
|
|
43
|
+
*/
|
|
44
|
+
export interface GeneratorType {
|
|
45
|
+
/**
|
|
46
|
+
* Registers a hook handler.
|
|
47
|
+
*/
|
|
48
|
+
on_hook(handler: GeneratorHookHandlerType): void;
|
|
49
|
+
/**
|
|
50
|
+
* Resolves templates for a cluster.
|
|
51
|
+
*/
|
|
52
|
+
resolve_templates(cluster: ClusterType, templates: TemplateType[]): ResolvedTemplateType[];
|
|
53
|
+
/**
|
|
54
|
+
* Generates Flux resources for a cluster.
|
|
55
|
+
*/
|
|
56
|
+
generate(cluster: ClusterType, templates: TemplateType[], options?: GenerateOptionsType): Promise<ResultType<GenerationResultType, KustodianErrorType>>;
|
|
57
|
+
/**
|
|
58
|
+
* Generates resources from plugins.
|
|
59
|
+
*/
|
|
60
|
+
generate_plugin_resources(cluster: ClusterType, templates: ResolvedTemplateType[]): ResultType<GeneratedResourceType[], KustodianErrorType>;
|
|
61
|
+
/**
|
|
62
|
+
* Writes generation result to disk.
|
|
63
|
+
*/
|
|
64
|
+
write(result: GenerationResultType): Promise<ResultType<string[], KustodianErrorType>>;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Creates a new Generator instance.
|
|
68
|
+
*
|
|
69
|
+
* @param options - Generator configuration options
|
|
70
|
+
* @param legacy_registry - Legacy plugin registry (deprecated, for backward compatibility)
|
|
71
|
+
* @param registry - New plugin registry with substitution provider support
|
|
72
|
+
*/
|
|
73
|
+
export declare function create_generator(options?: GeneratorOptionsType, legacy_registry?: LegacyPluginRegistryType, registry?: PluginRegistryType): GeneratorType;
|
|
74
|
+
export { serialize_resource, serialize_resources };
|
|
75
|
+
export { generate_namespace_resources };
|
|
76
|
+
export { DEFAULT_INTERVAL, DEFAULT_TIMEOUT, generate_depends_on, generate_flux_kustomization, generate_flux_name, generate_health_checks, resolve_kustomization, };
|
|
77
|
+
//# sourceMappingURL=generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/generator/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { is_success, success } from '../core/index.js';
|
|
2
|
+
import { DEFAULT_INTERVAL, DEFAULT_TIMEOUT, generate_depends_on, generate_flux_controller_patches, generate_flux_kustomization, generate_flux_name, generate_flux_oci_repository, generate_health_checks, resolve_kustomization, } from './flux.js';
|
|
3
|
+
import { get_template_config, resolve_kustomization_state } from './kustomization-resolution.js';
|
|
4
|
+
import { generate_namespace_resources } from './namespace.js';
|
|
5
|
+
import { serialize_resource, serialize_resources, write_generation_result } from './output.js';
|
|
6
|
+
import { resolve_external_substitutions } from './substitution.js';
|
|
7
|
+
import { validate_dependencies } from './validation/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Creates a new Generator instance.
|
|
10
|
+
*
|
|
11
|
+
* @param options - Generator configuration options
|
|
12
|
+
* @param legacy_registry - Legacy plugin registry (deprecated, for backward compatibility)
|
|
13
|
+
* @param registry - New plugin registry with substitution provider support
|
|
14
|
+
*/
|
|
15
|
+
export function create_generator(options = {}, legacy_registry, registry) {
|
|
16
|
+
const flux_namespace = options.flux_namespace ?? 'flux-system';
|
|
17
|
+
const git_repository_name = options.git_repository_name ?? 'flux-system';
|
|
18
|
+
// base_path is available for future template path customization
|
|
19
|
+
const _base_path = options.base_path ?? './templates';
|
|
20
|
+
void _base_path; // Suppress unused variable warning
|
|
21
|
+
const template_paths = options.template_paths;
|
|
22
|
+
const flux_reconciliation_interval = options.flux_reconciliation_interval ?? '10m';
|
|
23
|
+
const flux_reconciliation_timeout = options.flux_reconciliation_timeout ?? '5m';
|
|
24
|
+
const hooks = [];
|
|
25
|
+
async function run_hooks(phase, context) {
|
|
26
|
+
for (const handler of hooks) {
|
|
27
|
+
await handler(phase, context);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function get_template_values(cluster, template_name) {
|
|
31
|
+
const template_config = cluster.spec.templates?.find((t) => t.name === template_name);
|
|
32
|
+
return template_config?.values ?? {};
|
|
33
|
+
}
|
|
34
|
+
function is_template_enabled(cluster, template_name) {
|
|
35
|
+
// Templates are only enabled if explicitly listed in cluster.yaml
|
|
36
|
+
// Templates not listed are NOT deployed (opt-in model)
|
|
37
|
+
const template_config = cluster.spec.templates?.find((t) => t.name === template_name);
|
|
38
|
+
return template_config !== undefined;
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
on_hook(handler) {
|
|
42
|
+
hooks.push(handler);
|
|
43
|
+
},
|
|
44
|
+
resolve_templates(cluster, templates) {
|
|
45
|
+
return templates.map((template) => {
|
|
46
|
+
const values = get_template_values(cluster, template.metadata.name);
|
|
47
|
+
const enabled = is_template_enabled(cluster, template.metadata.name);
|
|
48
|
+
return {
|
|
49
|
+
template,
|
|
50
|
+
values,
|
|
51
|
+
enabled,
|
|
52
|
+
};
|
|
53
|
+
});
|
|
54
|
+
},
|
|
55
|
+
async generate(cluster, templates, generate_options = {}) {
|
|
56
|
+
const output_dir = generate_options.output_dir ?? './output';
|
|
57
|
+
const skip_validation = generate_options.skip_validation ?? false;
|
|
58
|
+
// Validate dependency graph before generation (unless skipped)
|
|
59
|
+
if (!skip_validation) {
|
|
60
|
+
const validation_result = validate_dependencies(cluster, templates);
|
|
61
|
+
if (!validation_result.success) {
|
|
62
|
+
return validation_result;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Detect source kind and repository name
|
|
66
|
+
const source_kind = cluster.spec.oci ? 'OCIRepository' : 'GitRepository';
|
|
67
|
+
const source_repository_name = git_repository_name;
|
|
68
|
+
// Run before_generate hook
|
|
69
|
+
await run_hooks('before_generate', { cluster });
|
|
70
|
+
// Resolve templates
|
|
71
|
+
const resolved_templates = this.resolve_templates(cluster, templates);
|
|
72
|
+
// Run after_resolve_template hook for each
|
|
73
|
+
for (const resolved of resolved_templates) {
|
|
74
|
+
await run_hooks('after_resolve_template', {
|
|
75
|
+
cluster,
|
|
76
|
+
templates: [resolved],
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
// Resolve external substitutions via plugins (if registry provided)
|
|
80
|
+
const external_values = {};
|
|
81
|
+
if (registry) {
|
|
82
|
+
const external_result = await resolve_external_substitutions(resolved_templates, cluster, registry);
|
|
83
|
+
if (!is_success(external_result)) {
|
|
84
|
+
return external_result;
|
|
85
|
+
}
|
|
86
|
+
Object.assign(external_values, external_result.value);
|
|
87
|
+
}
|
|
88
|
+
// Generate kustomizations
|
|
89
|
+
const generated_kustomizations = [];
|
|
90
|
+
for (const resolved of resolved_templates) {
|
|
91
|
+
if (!resolved.enabled) {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
// Get template configuration from cluster for kustomization overrides
|
|
95
|
+
const template_config = get_template_config(cluster, resolved.template.metadata.name);
|
|
96
|
+
for (const kustomization of resolved.template.spec.kustomizations) {
|
|
97
|
+
// Resolve kustomization state (preservation policy)
|
|
98
|
+
const kustomization_state = resolve_kustomization_state(kustomization, template_config, kustomization.name);
|
|
99
|
+
// Merge external (plugin-provided) values with template values
|
|
100
|
+
// External values have lower precedence than template-specific values
|
|
101
|
+
const merged_values = {
|
|
102
|
+
...external_values,
|
|
103
|
+
...resolved.values,
|
|
104
|
+
};
|
|
105
|
+
const resolved_kustomization = resolve_kustomization(resolved.template, kustomization, merged_values);
|
|
106
|
+
// Generate Flux resource with configurable namespace
|
|
107
|
+
// Look up the template source path if available
|
|
108
|
+
const template_source_path = template_paths?.get(resolved.template.metadata.name);
|
|
109
|
+
const flux_kustomization = generate_flux_kustomization(resolved_kustomization, source_repository_name, source_kind, kustomization_state.preservation, template_source_path, flux_reconciliation_interval, flux_reconciliation_timeout);
|
|
110
|
+
// Override namespace to configured value
|
|
111
|
+
flux_kustomization.metadata.namespace = flux_namespace;
|
|
112
|
+
// Run after_generate_kustomization hook
|
|
113
|
+
await run_hooks('after_generate_kustomization', {
|
|
114
|
+
cluster,
|
|
115
|
+
kustomization: resolved_kustomization,
|
|
116
|
+
flux_kustomization,
|
|
117
|
+
});
|
|
118
|
+
generated_kustomizations.push({
|
|
119
|
+
name: flux_kustomization.metadata.name,
|
|
120
|
+
template: resolved.template.metadata.name,
|
|
121
|
+
path: flux_kustomization.spec.path,
|
|
122
|
+
flux_kustomization,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const result = {
|
|
127
|
+
cluster: cluster.metadata.name,
|
|
128
|
+
output_dir,
|
|
129
|
+
kustomizations: generated_kustomizations,
|
|
130
|
+
};
|
|
131
|
+
// Generate OCIRepository if using OCI mode
|
|
132
|
+
if (cluster.spec.oci) {
|
|
133
|
+
result.oci_repository = generate_flux_oci_repository(cluster, cluster.spec.oci, source_repository_name, flux_namespace, flux_reconciliation_interval);
|
|
134
|
+
}
|
|
135
|
+
// Generate controller patches if flux config is present
|
|
136
|
+
if (cluster.spec.flux) {
|
|
137
|
+
const patches = generate_flux_controller_patches(cluster.spec.flux);
|
|
138
|
+
if (patches) {
|
|
139
|
+
result.controller_patches = patches;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Run after_generate hook
|
|
143
|
+
await run_hooks('after_generate', {
|
|
144
|
+
cluster,
|
|
145
|
+
templates: resolved_templates,
|
|
146
|
+
result,
|
|
147
|
+
});
|
|
148
|
+
return success(result);
|
|
149
|
+
},
|
|
150
|
+
generate_plugin_resources(cluster, templates) {
|
|
151
|
+
if (!legacy_registry) {
|
|
152
|
+
return success([]);
|
|
153
|
+
}
|
|
154
|
+
const all_resources = [];
|
|
155
|
+
// Generate resources from legacy plugins
|
|
156
|
+
for (const generator of legacy_registry.get_resource_generators()) {
|
|
157
|
+
for (const resolved of templates) {
|
|
158
|
+
if (!resolved.enabled) {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
const ctx = {
|
|
162
|
+
cluster,
|
|
163
|
+
template: resolved.template,
|
|
164
|
+
};
|
|
165
|
+
const result = generator.generate(ctx);
|
|
166
|
+
if (!result.success) {
|
|
167
|
+
return result;
|
|
168
|
+
}
|
|
169
|
+
all_resources.push(...result.value);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return success(all_resources);
|
|
173
|
+
},
|
|
174
|
+
async write(result) {
|
|
175
|
+
return write_generation_result(result);
|
|
176
|
+
},
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
// Re-export commonly used utilities
|
|
180
|
+
export { serialize_resource, serialize_resources };
|
|
181
|
+
export { generate_namespace_resources };
|
|
182
|
+
export { DEFAULT_INTERVAL, DEFAULT_TIMEOUT, generate_depends_on, generate_flux_kustomization, generate_flux_name, generate_health_checks, resolve_kustomization, };
|
|
183
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/generator/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './external-substitutions.js';
|
|
2
|
+
export * from './flux.js';
|
|
3
|
+
export * from './generator.js';
|
|
4
|
+
export * from './namespace.js';
|
|
5
|
+
export * from './output.js';
|
|
6
|
+
export * from './substitution.js';
|
|
7
|
+
export * from './types.js';
|
|
8
|
+
export * from './validation/index.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './external-substitutions.js';
|
|
2
|
+
export * from './flux.js';
|
|
3
|
+
export * from './generator.js';
|
|
4
|
+
export * from './namespace.js';
|
|
5
|
+
export * from './output.js';
|
|
6
|
+
export * from './substitution.js';
|
|
7
|
+
export * from './types.js';
|
|
8
|
+
export * from './validation/index.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { ClusterType, KustomizationType, PreservationPolicyType, TemplateConfigType } from '../schema/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Resolved kustomization state (preservation only).
|
|
4
|
+
* Enablement is now determined at the template level - templates listed in cluster.yaml are deployed.
|
|
5
|
+
*/
|
|
6
|
+
export interface ResolvedKustomizationStateType {
|
|
7
|
+
preservation: PreservationPolicyType;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Resolves kustomization preservation policy from template defaults and cluster overrides.
|
|
11
|
+
*
|
|
12
|
+
* Resolution order (last wins):
|
|
13
|
+
* 1. Template kustomization preservation policy (defaults to 'stateful')
|
|
14
|
+
* 2. Cluster kustomization override preservation (if specified)
|
|
15
|
+
*
|
|
16
|
+
* @param kustomization - Template kustomization definition
|
|
17
|
+
* @param template_config - Cluster template configuration (may be undefined)
|
|
18
|
+
* @param kustomization_name - Name of the kustomization to resolve
|
|
19
|
+
* @returns Resolved preservation policy
|
|
20
|
+
*/
|
|
21
|
+
export declare function resolve_kustomization_preservation(kustomization: KustomizationType, template_config: TemplateConfigType | undefined, kustomization_name: string): PreservationPolicyType;
|
|
22
|
+
/**
|
|
23
|
+
* Resolves complete kustomization state (preservation only).
|
|
24
|
+
* Template enablement is now determined by whether the template is listed in cluster.yaml.
|
|
25
|
+
*
|
|
26
|
+
* @param kustomization - Template kustomization definition
|
|
27
|
+
* @param template_config - Cluster template configuration (may be undefined)
|
|
28
|
+
* @param kustomization_name - Name of the kustomization to resolve
|
|
29
|
+
* @returns Resolved kustomization state
|
|
30
|
+
*/
|
|
31
|
+
export declare function resolve_kustomization_state(kustomization: KustomizationType, template_config: TemplateConfigType | undefined, kustomization_name: string): ResolvedKustomizationStateType;
|
|
32
|
+
/**
|
|
33
|
+
* Gets template configuration for a specific template from cluster spec.
|
|
34
|
+
*
|
|
35
|
+
* @param cluster - Cluster configuration
|
|
36
|
+
* @param template_name - Name of the template to find
|
|
37
|
+
* @returns Template configuration or undefined if not found
|
|
38
|
+
*/
|
|
39
|
+
export declare function get_template_config(cluster: ClusterType, template_name: string): TemplateConfigType | undefined;
|
|
40
|
+
//# sourceMappingURL=kustomization-resolution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kustomization-resolution.d.ts","sourceRoot":"","sources":["../../src/generator/kustomization-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,oBAAoB,CAAC;AAE5B;;;GAGG;AACH,MAAM,WAAW,8BAA8B;IAC7C,YAAY,EAAE,sBAAsB,CAAC;CACtC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kCAAkC,CAChD,aAAa,EAAE,iBAAiB,EAChC,eAAe,EAAE,kBAAkB,GAAG,SAAS,EAC/C,kBAAkB,EAAE,MAAM,GACzB,sBAAsB,CAyBxB;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,iBAAiB,EAChC,eAAe,EAAE,kBAAkB,GAAG,SAAS,EAC/C,kBAAkB,EAAE,MAAM,GACzB,8BAA8B,CAQhC;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,EACpB,aAAa,EAAE,MAAM,GACpB,kBAAkB,GAAG,SAAS,CAEhC"}
|