timonel 2.8.0-beta.4 → 2.8.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.
Files changed (72) hide show
  1. package/CHANGELOG.md +9 -19
  2. package/README.md +12 -55
  3. package/dist/cli.js +2 -2
  4. package/dist/cli.js.map +1 -1
  5. package/dist/index.d.ts +7 -15
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +5 -7
  8. package/dist/index.js.map +1 -1
  9. package/dist/lib/helm.d.ts +234 -4
  10. package/dist/lib/helm.d.ts.map +1 -1
  11. package/dist/lib/helm.js +309 -20
  12. package/dist/lib/helm.js.map +1 -1
  13. package/dist/lib/helmChartWriter.js +5 -19
  14. package/dist/lib/helmChartWriter.js.map +1 -1
  15. package/dist/lib/resources/baseResourceProvider.d.ts +1 -1
  16. package/dist/lib/resources/baseResourceProvider.d.ts.map +1 -1
  17. package/dist/lib/resources/baseResourceProvider.js.map +1 -1
  18. package/dist/lib/resources/cloud/aws/awsResources.d.ts +5 -6
  19. package/dist/lib/resources/cloud/aws/awsResources.d.ts.map +1 -1
  20. package/dist/lib/resources/cloud/aws/awsResources.js +59 -30
  21. package/dist/lib/resources/cloud/aws/awsResources.js.map +1 -1
  22. package/dist/lib/rutter.d.ts +73 -708
  23. package/dist/lib/rutter.d.ts.map +1 -1
  24. package/dist/lib/rutter.js +157 -837
  25. package/dist/lib/rutter.js.map +1 -1
  26. package/dist/lib/security.d.ts +2 -1
  27. package/dist/lib/security.d.ts.map +1 -1
  28. package/dist/lib/security.js +33 -4
  29. package/dist/lib/security.js.map +1 -1
  30. package/dist/lib/umbrellaRutter.d.ts +1 -1
  31. package/dist/lib/umbrellaRutter.d.ts.map +1 -1
  32. package/dist/lib/utils/helmHelpers.d.ts +2 -12
  33. package/dist/lib/utils/helmHelpers.d.ts.map +1 -1
  34. package/dist/lib/utils/helmHelpers.js +2 -46
  35. package/dist/lib/utils/helmHelpers.js.map +1 -1
  36. package/package.json +2 -2
  37. package/dist/lib/resources/autoscaling/autoscalingResources.d.ts +0 -248
  38. package/dist/lib/resources/autoscaling/autoscalingResources.d.ts.map +0 -1
  39. package/dist/lib/resources/autoscaling/autoscalingResources.js +0 -81
  40. package/dist/lib/resources/autoscaling/autoscalingResources.js.map +0 -1
  41. package/dist/lib/resources/cloud/azure/azureResources.d.ts +0 -169
  42. package/dist/lib/resources/cloud/azure/azureResources.d.ts.map +0 -1
  43. package/dist/lib/resources/cloud/azure/azureResources.js +0 -218
  44. package/dist/lib/resources/cloud/azure/azureResources.js.map +0 -1
  45. package/dist/lib/resources/cloud/gcp/gcpResources.d.ts +0 -164
  46. package/dist/lib/resources/cloud/gcp/gcpResources.d.ts.map +0 -1
  47. package/dist/lib/resources/cloud/gcp/gcpResources.js +0 -192
  48. package/dist/lib/resources/cloud/gcp/gcpResources.js.map +0 -1
  49. package/dist/lib/resources/core/coreResources.d.ts +0 -790
  50. package/dist/lib/resources/core/coreResources.d.ts.map +0 -1
  51. package/dist/lib/resources/core/coreResources.js +0 -1115
  52. package/dist/lib/resources/core/coreResources.js.map +0 -1
  53. package/dist/lib/resources/core/storageResources.d.ts +0 -133
  54. package/dist/lib/resources/core/storageResources.d.ts.map +0 -1
  55. package/dist/lib/resources/core/storageResources.js +0 -120
  56. package/dist/lib/resources/core/storageResources.js.map +0 -1
  57. package/dist/lib/resources/network/networkResources.d.ts +0 -229
  58. package/dist/lib/resources/network/networkResources.d.ts.map +0 -1
  59. package/dist/lib/resources/network/networkResources.js +0 -310
  60. package/dist/lib/resources/network/networkResources.js.map +0 -1
  61. package/dist/lib/resources/validation/validationResources.d.ts +0 -26
  62. package/dist/lib/resources/validation/validationResources.d.ts.map +0 -1
  63. package/dist/lib/resources/validation/validationResources.js +0 -33
  64. package/dist/lib/resources/validation/validationResources.js.map +0 -1
  65. package/dist/lib/utils/podTemplates.d.ts +0 -192
  66. package/dist/lib/utils/podTemplates.d.ts.map +0 -1
  67. package/dist/lib/utils/podTemplates.js +0 -331
  68. package/dist/lib/utils/podTemplates.js.map +0 -1
  69. package/dist/lib/utils/resourceNaming.d.ts +0 -57
  70. package/dist/lib/utils/resourceNaming.d.ts.map +0 -1
  71. package/dist/lib/utils/resourceNaming.js +0 -82
  72. package/dist/lib/utils/resourceNaming.js.map +0 -1
@@ -1,310 +0,0 @@
1
- /**
2
- * @fileoverview Network resources for Kubernetes networking
3
- * @since 2.7.0
4
- */
5
- import { BaseResourceProvider } from '../baseResourceProvider.js';
6
- /**
7
- * Network resources provider for NetworkPolicy and Ingress
8
- * @extends BaseResourceProvider
9
- * @since 2.7.0
10
- */
11
- export class NetworkResources extends BaseResourceProvider {
12
- /**
13
- * Creates a NetworkPolicy resource
14
- * @param spec - NetworkPolicy specification
15
- * @returns Created NetworkPolicy ApiObject
16
- * @since 2.7.0
17
- */
18
- addNetworkPolicy(spec) {
19
- const policySpec = {
20
- podSelector: spec.podSelector,
21
- };
22
- if (spec.policyTypes) {
23
- policySpec['policyTypes'] = spec.policyTypes;
24
- }
25
- if (spec.ingress) {
26
- policySpec['ingress'] = spec.ingress;
27
- }
28
- if (spec.egress) {
29
- policySpec['egress'] = spec.egress;
30
- }
31
- return this.createApiObject(spec.name, NetworkResources.NETWORKING_API_VERSION, 'NetworkPolicy', policySpec, spec.labels, spec.annotations);
32
- }
33
- /**
34
- * Creates a deny-all NetworkPolicy that blocks all ingress and egress traffic
35
- * @param name - Policy name
36
- * @param podSelector - Pod selector to apply policy to
37
- * @param labels - Optional labels
38
- * @param annotations - Optional annotations
39
- * @returns Created NetworkPolicy ApiObject
40
- * @since 2.7.0
41
- */
42
- addDenyAllNetworkPolicy(name, podSelector = {}, labels, annotations) {
43
- return this.addNetworkPolicy({
44
- name,
45
- podSelector,
46
- policyTypes: ['Ingress', 'Egress'],
47
- ingress: [],
48
- egress: [],
49
- ...(labels && { labels }),
50
- ...(annotations && { annotations }),
51
- });
52
- }
53
- /**
54
- * Creates a NetworkPolicy that allows traffic from specific pods
55
- * @param name - Policy name
56
- * @param podSelector - Pod selector to apply policy to
57
- * @param fromPodSelector - Pod selector for allowed source pods
58
- * @param ports - Optional ports to allow
59
- * @param labels - Optional labels
60
- * @param annotations - Optional annotations
61
- * @returns Created NetworkPolicy ApiObject
62
- * @since 2.7.0
63
- */
64
- addAllowFromPodsNetworkPolicy(name, podSelector, fromPodSelector, ports, labels, annotations) {
65
- const ingressRule = {};
66
- if (fromPodSelector) {
67
- ingressRule.podSelector = fromPodSelector;
68
- }
69
- if (ports) {
70
- ingressRule.ports = ports;
71
- }
72
- return this.addNetworkPolicy({
73
- name,
74
- podSelector,
75
- policyTypes: ['Ingress'],
76
- ingress: [ingressRule],
77
- ...(labels && { labels }),
78
- ...(annotations && { annotations }),
79
- });
80
- }
81
- /**
82
- * Creates a NetworkPolicy that allows traffic from specific namespaces
83
- * @param name - Policy name
84
- * @param podSelector - Pod selector to apply policy to
85
- * @param fromNamespaceSelector - Namespace selector for allowed source namespaces
86
- * @param ports - Optional ports to allow
87
- * @param labels - Optional labels
88
- * @param annotations - Optional annotations
89
- * @returns Created NetworkPolicy ApiObject
90
- * @since 2.7.0
91
- */
92
- addAllowFromNamespaceNetworkPolicy(name, podSelector, fromNamespaceSelector, ports, labels, annotations) {
93
- const ingressRule = {};
94
- if (fromNamespaceSelector) {
95
- ingressRule.namespaceSelector = fromNamespaceSelector;
96
- }
97
- if (ports) {
98
- ingressRule.ports = ports;
99
- }
100
- return this.addNetworkPolicy({
101
- name,
102
- podSelector,
103
- policyTypes: ['Ingress'],
104
- ingress: [ingressRule],
105
- ...(labels && { labels }),
106
- ...(annotations && { annotations }),
107
- });
108
- }
109
- /**
110
- * Validates TLS configuration for security compliance
111
- * @param spec - Ingress specification to validate
112
- * @throws Error if TLS validation fails
113
- * @since 2.8.0
114
- */
115
- validateIngressSecurity(spec) {
116
- const isProductionEnvironment = spec.environment === 'production';
117
- const tlsRequired = spec.requireTLS || isProductionEnvironment;
118
- // Check if TLS is required but not configured
119
- if (tlsRequired && (!spec.tls || spec.tls.length === 0)) {
120
- throw new Error(NetworkResources.TLS_REQUIRED_ERROR_MESSAGE);
121
- }
122
- // Validate TLS configuration if present
123
- if (spec.tls && spec.tls.length > 0) {
124
- spec.tls.forEach((tlsConfig, index) => {
125
- if (!tlsConfig.secretName) {
126
- throw new Error(`TLS configuration at index ${index} must specify a secretName. ` +
127
- 'The secret should contain "tls.crt" and "tls.key" data.');
128
- }
129
- // Validate secret name format (RFC 1123 DNS subdomain)
130
- // This regex is safe as it only matches alphanumeric characters and hyphens
131
- // eslint-disable-next-line security/detect-unsafe-regex
132
- const secretNameRegex = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;
133
- if (!secretNameRegex.test(tlsConfig.secretName)) {
134
- throw new Error(`Invalid TLS secret name "${tlsConfig.secretName}" at index ${index}. ` +
135
- 'Secret names must be valid RFC 1123 DNS subdomains (lowercase alphanumeric and hyphens).');
136
- }
137
- // Validate hosts if specified
138
- if (tlsConfig.hosts && tlsConfig.hosts.length > 0) {
139
- tlsConfig.hosts.forEach((host, hostIndex) => {
140
- if (!this.isValidHostname(host)) {
141
- throw new Error(`Invalid hostname "${host}" in TLS configuration at index ${index}, host ${hostIndex}. ` +
142
- 'Hostnames must be valid DNS names or wildcard patterns.');
143
- }
144
- });
145
- }
146
- });
147
- }
148
- // Validate that TLS hosts match Ingress rule hosts
149
- if (spec.tls && spec.rules) {
150
- const tlsHosts = new Set(spec.tls.flatMap((tls) => tls.hosts || []));
151
- const ruleHosts = spec.rules
152
- .map((rule) => rule.host)
153
- .filter((host) => Boolean(host));
154
- for (const ruleHost of ruleHosts) {
155
- if (!tlsHosts.has(ruleHost)) {
156
- console.warn(`Warning: Host "${ruleHost}" in Ingress rules is not covered by TLS configuration. ` +
157
- 'Consider adding it to the TLS hosts for secure communication.');
158
- }
159
- }
160
- }
161
- }
162
- /**
163
- * Validates hostname format (supports wildcards) with ReDoS protection
164
- * @param hostname - Hostname to validate
165
- * @returns True if hostname is valid
166
- * @since 2.8.0
167
- */
168
- isValidHostname(hostname) {
169
- if (!hostname || hostname.length === 0 || hostname.length > 253) {
170
- return false;
171
- }
172
- // Split hostname into parts and validate each part
173
- const parts = hostname.split('.');
174
- if (parts.length < 2)
175
- return false;
176
- // Handle wildcard
177
- if (hostname.startsWith('*.')) {
178
- parts.shift(); // Remove wildcard part
179
- if (parts.length < 2)
180
- return false; // Must have at least two parts after wildcard
181
- }
182
- // Validate each part
183
- return parts.every((part) => {
184
- if (part.length === 0 || part.length > 63)
185
- return false;
186
- if (part.startsWith('-') || part.endsWith('-'))
187
- return false;
188
- return /^[a-z0-9-]+$/i.test(part);
189
- });
190
- }
191
- /**
192
- * Applies security defaults to Ingress annotations
193
- * @param spec - Ingress specification
194
- * @returns Enhanced annotations with security defaults
195
- * @since 2.8.0
196
- */
197
- applySecurityDefaults(spec) {
198
- const annotations = { ...spec.annotations };
199
- // Apply SSL redirect if TLS is configured or force SSL redirect is enabled
200
- if ((spec.tls && spec.tls.length > 0) || spec.forceSSLRedirect) {
201
- // NGINX Ingress Controller annotations
202
- annotations['nginx.ingress.kubernetes.io/ssl-redirect'] = 'true';
203
- annotations['nginx.ingress.kubernetes.io/force-ssl-redirect'] = 'true';
204
- // Traefik annotations
205
- annotations['traefik.ingress.kubernetes.io/redirect-entry-point'] = 'https';
206
- // HAProxy annotations
207
- annotations['haproxy.org/ssl-redirect'] = 'true';
208
- }
209
- // Add security headers for production environments
210
- if (spec.environment === 'production' || spec.requireTLS) {
211
- // NGINX security headers with CSP
212
- annotations['nginx.ingress.kubernetes.io/configuration-snippet'] = `
213
- more_set_headers "X-Frame-Options: DENY";
214
- more_set_headers "X-Content-Type-Options: nosniff";
215
- more_set_headers "X-XSS-Protection: 1; mode=block";
216
- more_set_headers "Referrer-Policy: strict-origin-when-cross-origin";
217
- more_set_headers "Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';";
218
- `.trim();
219
- }
220
- return annotations;
221
- }
222
- /**
223
- * Creates a secure Ingress with TLS validation and environment-aware defaults
224
- * @param spec - Enhanced Ingress specification
225
- * @returns Created Ingress ApiObject
226
- * @example
227
- * ```typescript
228
- * // Production Ingress with mandatory TLS
229
- * networkResources.addSecureIngress({
230
- * name: 'web-ingress',
231
- * environment: 'production',
232
- * tls: [{
233
- * hosts: ['example.com'],
234
- * secretName: 'example-tls'
235
- * }],
236
- * rules: [{
237
- * host: 'example.com',
238
- * http: {
239
- * paths: [{
240
- * path: '/',
241
- * pathType: 'Prefix',
242
- * backend: {
243
- * service: { name: 'web-service', port: { number: 80 } }
244
- * }
245
- * }]
246
- * }
247
- * }]
248
- * });
249
- * ```
250
- * @since 2.8.0
251
- */
252
- addSecureIngress(spec) {
253
- // Validate TLS configuration and security requirements
254
- this.validateIngressSecurity(spec);
255
- // Apply security defaults to annotations
256
- const enhancedAnnotations = this.applySecurityDefaults(spec);
257
- // Create the Ingress with enhanced security
258
- const ingressSpec = {};
259
- if (spec.ingressClassName) {
260
- ingressSpec['ingressClassName'] = spec.ingressClassName;
261
- }
262
- if (spec.tls) {
263
- ingressSpec['tls'] = spec.tls;
264
- }
265
- if (spec.rules) {
266
- ingressSpec['rules'] = spec.rules;
267
- }
268
- return this.createApiObject(spec.name, NetworkResources.NETWORKING_API_VERSION, 'Ingress', ingressSpec, spec.labels, enhancedAnnotations);
269
- }
270
- /**
271
- * Creates an Ingress resource with optional TLS validation
272
- * @param spec - Ingress specification
273
- * @returns Created Ingress ApiObject
274
- * @deprecated Use addSecureIngress for enhanced security validation
275
- * @since 2.7.0
276
- */
277
- addIngress(spec) {
278
- // Apply basic validation if environment is specified
279
- if (spec.environment || spec.requireTLS) {
280
- this.validateIngressSecurity(spec);
281
- const enhancedAnnotations = this.applySecurityDefaults(spec);
282
- const ingressSpec = {};
283
- if (spec.ingressClassName) {
284
- ingressSpec['ingressClassName'] = spec.ingressClassName;
285
- }
286
- if (spec.tls) {
287
- ingressSpec['tls'] = spec.tls;
288
- }
289
- if (spec.rules) {
290
- ingressSpec['rules'] = spec.rules;
291
- }
292
- return this.createApiObject(spec.name, NetworkResources.NETWORKING_API_VERSION, 'Ingress', ingressSpec, spec.labels, enhancedAnnotations);
293
- }
294
- // Legacy behavior for backward compatibility
295
- const ingressSpec = {};
296
- if (spec.ingressClassName) {
297
- ingressSpec['ingressClassName'] = spec.ingressClassName;
298
- }
299
- if (spec.tls) {
300
- ingressSpec['tls'] = spec.tls;
301
- }
302
- if (spec.rules) {
303
- ingressSpec['rules'] = spec.rules;
304
- }
305
- return this.createApiObject(spec.name, NetworkResources.NETWORKING_API_VERSION, 'Ingress', ingressSpec, spec.labels, spec.annotations);
306
- }
307
- }
308
- NetworkResources.TLS_REQUIRED_ERROR_MESSAGE = 'TLS configuration is required for production Ingress resources. Please configure the "tls" field with valid certificate references.';
309
- NetworkResources.NETWORKING_API_VERSION = 'networking.k8s.io/v1';
310
- //# sourceMappingURL=networkResources.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"networkResources.js","sourceRoot":"","sources":["../../../../src/lib/resources/network/networkResources.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- /**
2
- * @fileoverview Validation and security resources for Kubernetes
3
- * @since 2.3.0
4
- */
5
- import { BaseResourceProvider } from '../baseResourceProvider.js';
6
- /**
7
- * Validation and security resources provider for NetworkPolicies and security policies
8
- *
9
- * @extends BaseResourceProvider
10
- * @since 2.3.0
11
- */
12
- export declare class ValidationResources extends BaseResourceProvider {
13
- /**
14
- * Add NetworkPolicy for network segmentation
15
- */
16
- addNetworkPolicy(_spec: unknown): void;
17
- /**
18
- * Add PodSecurityPolicy (deprecated but still used)
19
- */
20
- addPodSecurityPolicy(_spec: unknown): void;
21
- /**
22
- * Add SecurityContext validation
23
- */
24
- addSecurityContextConstraints(_spec: unknown): void;
25
- }
26
- //# sourceMappingURL=validationResources.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validationResources.d.ts","sourceRoot":"","sources":["../../../../src/lib/resources/validation/validationResources.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE;;;;;GAKG;AACH,qBAAa,mBAAoB,SAAQ,oBAAoB;IAC3D;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,OAAO;IAK/B;;OAEG;IACH,oBAAoB,CAAC,KAAK,EAAE,OAAO;IAInC;;OAEG;IACH,6BAA6B,CAAC,KAAK,EAAE,OAAO;CAG7C"}
@@ -1,33 +0,0 @@
1
- /**
2
- * @fileoverview Validation and security resources for Kubernetes
3
- * @since 2.3.0
4
- */
5
- import { BaseResourceProvider } from '../baseResourceProvider.js';
6
- /**
7
- * Validation and security resources provider for NetworkPolicies and security policies
8
- *
9
- * @extends BaseResourceProvider
10
- * @since 2.3.0
11
- */
12
- export class ValidationResources extends BaseResourceProvider {
13
- /**
14
- * Add NetworkPolicy for network segmentation
15
- */
16
- addNetworkPolicy(_spec) {
17
- // Implementation moved from CoreResources
18
- // TODO: Move NetworkPolicy implementation here
19
- }
20
- /**
21
- * Add PodSecurityPolicy (deprecated but still used)
22
- */
23
- addPodSecurityPolicy(_spec) {
24
- // TODO: Implement PodSecurityPolicy
25
- }
26
- /**
27
- * Add SecurityContext validation
28
- */
29
- addSecurityContextConstraints(_spec) {
30
- // TODO: Implement SecurityContextConstraints for OpenShift
31
- }
32
- }
33
- //# sourceMappingURL=validationResources.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validationResources.js","sourceRoot":"","sources":["../../../../src/lib/resources/validation/validationResources.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE;;;;;GAKG;AACH,MAAM,OAAO,mBAAoB,SAAQ,oBAAoB;IAC3D;;OAEG;IACH,gBAAgB,CAAC,KAAc;QAC7B,0CAA0C;QAC1C,+CAA+C;IACjD,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,KAAc;QACjC,oCAAoC;IACtC,CAAC;IAED;;OAEG;IACH,6BAA6B,CAAC,KAAc;QAC1C,2DAA2D;IAC7D,CAAC;CACF"}
@@ -1,192 +0,0 @@
1
- /**
2
- * @fileoverview Pod template utilities for generating reusable Kubernetes pod specifications
3
- * @since 2.5.0
4
- */
5
- /**
6
- * Container specification for pod templates
7
- * @interface ContainerSpec
8
- * @since 2.5.0
9
- */
10
- export interface ContainerSpec {
11
- /** Container name */
12
- name: string;
13
- /** Container image */
14
- image: string;
15
- /** Container port */
16
- port?: number;
17
- /** Environment variables */
18
- env?: Array<{
19
- name: string;
20
- value?: string;
21
- valueFrom?: unknown;
22
- }>;
23
- /** Resource requirements */
24
- resources?: {
25
- requests?: {
26
- cpu?: string;
27
- memory?: string;
28
- };
29
- limits?: {
30
- cpu?: string;
31
- memory?: string;
32
- };
33
- };
34
- /** Volume mounts */
35
- volumeMounts?: Array<{
36
- name: string;
37
- mountPath: string;
38
- readOnly?: boolean;
39
- }>;
40
- /** Security context */
41
- securityContext?: unknown;
42
- /** Liveness probe */
43
- livenessProbe?: unknown;
44
- /** Readiness probe */
45
- readinessProbe?: unknown;
46
- /** Startup probe */
47
- startupProbe?: unknown;
48
- /** Command to run */
49
- command?: string[];
50
- /** Arguments to command */
51
- args?: string[];
52
- }
53
- /**
54
- * Pod template specification
55
- * @interface PodTemplateSpec
56
- * @since 2.5.0
57
- */
58
- export interface PodTemplateSpec {
59
- /** Pod name */
60
- name: string;
61
- /** Container specifications */
62
- containers: ContainerSpec[];
63
- /** Init containers */
64
- initContainers?: ContainerSpec[];
65
- /** Volumes */
66
- volumes?: Array<unknown>;
67
- /** Service account name */
68
- serviceAccountName?: string;
69
- /** Restart policy */
70
- restartPolicy?: 'Always' | 'OnFailure' | 'Never';
71
- /** Node selector */
72
- nodeSelector?: Record<string, string>;
73
- /** Tolerations */
74
- tolerations?: Array<unknown>;
75
- /** Affinity */
76
- affinity?: unknown;
77
- /** Security context */
78
- securityContext?: unknown;
79
- /** DNS policy */
80
- dnsPolicy?: string;
81
- /** Host network */
82
- hostNetwork?: boolean;
83
- /** Priority class name */
84
- priorityClassName?: string;
85
- /** Labels */
86
- labels?: Record<string, string>;
87
- /** Annotations */
88
- annotations?: Record<string, string>;
89
- }
90
- /**
91
- * Security profile for pod templates
92
- * @since 2.5.0
93
- */
94
- export type SecurityProfile = 'baseline' | 'restricted' | 'privileged';
95
- /**
96
- * Workload type for pod templates
97
- * @since 2.5.0
98
- */
99
- export type WorkloadType = 'web' | 'api' | 'worker' | 'database' | 'cache' | 'batch';
100
- /**
101
- * Creates a secure pod template with best practices
102
- * @param spec - Pod template specification
103
- * @param profile - Security profile to apply
104
- * @returns Pod template object
105
- *
106
- * @example
107
- * ```typescript
108
- * const template = createSecurePodTemplate({
109
- * name: 'web-app',
110
- * containers: [{
111
- * name: 'app',
112
- * image: 'nginx:1.27',
113
- * port: 80
114
- * }]
115
- * }, 'restricted');
116
- * ```
117
- *
118
- * @since 2.5.0
119
- */
120
- export declare function createSecurePodTemplate(spec: PodTemplateSpec, profile?: SecurityProfile): Record<string, unknown>;
121
- /**
122
- * Creates a workload-optimized pod template
123
- * @param spec - Pod template specification
124
- * @param workloadType - Type of workload
125
- * @returns Pod template object
126
- *
127
- * @example
128
- * ```typescript
129
- * const template = createWorkloadPodTemplate({
130
- * name: 'api-server',
131
- * containers: [{
132
- * name: 'api',
133
- * image: 'myapi:latest',
134
- * port: 8080
135
- * }]
136
- * }, 'api');
137
- * ```
138
- *
139
- * @since 2.5.0
140
- */
141
- export declare function createWorkloadPodTemplate(spec: PodTemplateSpec, workloadType: WorkloadType): Record<string, unknown>;
142
- /**
143
- * Creates a multi-container pod template with sidecar pattern
144
- * @param mainContainer - Main application container
145
- * @param sidecars - Sidecar containers
146
- * @param options - Additional pod options
147
- * @returns Pod template object
148
- *
149
- * @example
150
- * ```typescript
151
- * const template = createSidecarPodTemplate(
152
- * { name: 'app', image: 'myapp:latest', port: 8080 },
153
- * [{ name: 'proxy', image: 'envoy:latest', port: 9901 }],
154
- * { name: 'app-with-proxy' }
155
- * );
156
- * ```
157
- *
158
- * @since 2.5.0
159
- */
160
- export declare function createSidecarPodTemplate(mainContainer: ContainerSpec, sidecars: ContainerSpec[], options: Partial<PodTemplateSpec>): Record<string, unknown>;
161
- /**
162
- * Creates a pod template with health checks
163
- * @param spec - Pod template specification
164
- * @param healthConfig - Health check configuration
165
- * @returns Pod template object
166
- *
167
- * @example
168
- * ```typescript
169
- * const template = createHealthyPodTemplate({
170
- * name: 'web-app',
171
- * containers: [{
172
- * name: 'app',
173
- * image: 'nginx:1.27',
174
- * port: 80
175
- * }]
176
- * }, {
177
- * httpPath: '/health',
178
- * port: 80
179
- * });
180
- * ```
181
- *
182
- * @since 2.5.0
183
- */
184
- export declare function createHealthyPodTemplate(spec: PodTemplateSpec, healthConfig: {
185
- httpPath?: string;
186
- port?: number;
187
- initialDelaySeconds?: number;
188
- periodSeconds?: number;
189
- timeoutSeconds?: number;
190
- failureThreshold?: number;
191
- }): Record<string, unknown>;
192
- //# sourceMappingURL=podTemplates.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"podTemplates.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/podTemplates.ts"],"names":[],"mappings":"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"}