timonel 2.3.0 → 2.5.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 (81) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +5 -1
  3. package/SECURITY.md +3 -3
  4. package/dist/cli.js +33 -38
  5. package/dist/cli.js.map +1 -1
  6. package/dist/index.d.ts +9 -2
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +10 -2
  9. package/dist/index.js.map +1 -1
  10. package/dist/lib/{HelmChartWriter.d.ts → helmChartWriter.d.ts} +1 -1
  11. package/dist/lib/{HelmChartWriter.d.ts.map → helmChartWriter.d.ts.map} +1 -1
  12. package/dist/lib/{HelmChartWriter.js → helmChartWriter.js} +1 -1
  13. package/dist/lib/{HelmChartWriter.js.map → helmChartWriter.js.map} +1 -1
  14. package/dist/lib/resources/autoscaling/autoscalingResources.d.ts +26 -0
  15. package/dist/lib/resources/autoscaling/autoscalingResources.d.ts.map +1 -0
  16. package/dist/lib/resources/autoscaling/autoscalingResources.js +35 -0
  17. package/dist/lib/resources/autoscaling/autoscalingResources.js.map +1 -0
  18. package/dist/lib/resources/baseResourceProvider.d.ts +47 -0
  19. package/dist/lib/resources/baseResourceProvider.d.ts.map +1 -0
  20. package/dist/lib/resources/baseResourceProvider.js +83 -0
  21. package/dist/lib/resources/baseResourceProvider.js.map +1 -0
  22. package/dist/lib/resources/cloud/aws/awsResources.d.ts +165 -0
  23. package/dist/lib/resources/cloud/aws/awsResources.d.ts.map +1 -0
  24. package/dist/lib/resources/cloud/aws/awsResources.js +187 -0
  25. package/dist/lib/resources/cloud/aws/awsResources.js.map +1 -0
  26. package/dist/lib/resources/cloud/azure/azureResources.d.ts +169 -0
  27. package/dist/lib/resources/cloud/azure/azureResources.d.ts.map +1 -0
  28. package/dist/lib/resources/cloud/azure/azureResources.js +218 -0
  29. package/dist/lib/resources/cloud/azure/azureResources.js.map +1 -0
  30. package/dist/lib/resources/cloud/gcp/gcpResources.d.ts +133 -0
  31. package/dist/lib/resources/cloud/gcp/gcpResources.d.ts.map +1 -0
  32. package/dist/lib/resources/cloud/gcp/gcpResources.js +162 -0
  33. package/dist/lib/resources/cloud/gcp/gcpResources.js.map +1 -0
  34. package/dist/lib/resources/core/coreResources.d.ts +766 -0
  35. package/dist/lib/resources/core/coreResources.d.ts.map +1 -0
  36. package/dist/lib/resources/core/coreResources.js +1043 -0
  37. package/dist/lib/resources/core/coreResources.js.map +1 -0
  38. package/dist/lib/resources/core/storageResources.d.ts +133 -0
  39. package/dist/lib/resources/core/storageResources.d.ts.map +1 -0
  40. package/dist/lib/resources/core/storageResources.js +120 -0
  41. package/dist/lib/resources/core/storageResources.js.map +1 -0
  42. package/dist/lib/resources/validation/validationResources.d.ts +26 -0
  43. package/dist/lib/resources/validation/validationResources.d.ts.map +1 -0
  44. package/dist/lib/resources/validation/validationResources.js +33 -0
  45. package/dist/lib/resources/validation/validationResources.js.map +1 -0
  46. package/dist/lib/rutter.d.ts +567 -0
  47. package/dist/lib/rutter.d.ts.map +1 -0
  48. package/dist/lib/rutter.js +694 -0
  49. package/dist/lib/rutter.js.map +1 -0
  50. package/dist/lib/security.d.ts +21 -0
  51. package/dist/lib/security.d.ts.map +1 -1
  52. package/dist/lib/security.js +21 -0
  53. package/dist/lib/security.js.map +1 -1
  54. package/dist/lib/umbrella.d.ts +22 -2
  55. package/dist/lib/umbrella.d.ts.map +1 -1
  56. package/dist/lib/umbrella.js +21 -1
  57. package/dist/lib/umbrella.js.map +1 -1
  58. package/dist/lib/umbrellaRutter.d.ts +97 -0
  59. package/dist/lib/umbrellaRutter.d.ts.map +1 -0
  60. package/dist/lib/{UmbrellaRutter.js → umbrellaRutter.js} +44 -1
  61. package/dist/lib/umbrellaRutter.js.map +1 -0
  62. package/dist/lib/utils/helmHelpers.d.ts +58 -0
  63. package/dist/lib/utils/helmHelpers.d.ts.map +1 -0
  64. package/dist/lib/utils/helmHelpers.js +155 -0
  65. package/dist/lib/utils/helmHelpers.js.map +1 -0
  66. package/dist/lib/utils/podTemplates.d.ts +192 -0
  67. package/dist/lib/utils/podTemplates.d.ts.map +1 -0
  68. package/dist/lib/utils/podTemplates.js +331 -0
  69. package/dist/lib/utils/podTemplates.js.map +1 -0
  70. package/dist/lib/utils/resourceNaming.d.ts +57 -0
  71. package/dist/lib/utils/resourceNaming.d.ts.map +1 -0
  72. package/dist/lib/utils/resourceNaming.js +82 -0
  73. package/dist/lib/utils/resourceNaming.js.map +1 -0
  74. package/package.json +2 -1
  75. package/dist/lib/Rutter.d.ts +0 -2688
  76. package/dist/lib/Rutter.d.ts.map +0 -1
  77. package/dist/lib/Rutter.js +0 -2863
  78. package/dist/lib/Rutter.js.map +0 -1
  79. package/dist/lib/UmbrellaRutter.d.ts +0 -34
  80. package/dist/lib/UmbrellaRutter.d.ts.map +0 -1
  81. package/dist/lib/UmbrellaRutter.js.map +0 -1
@@ -0,0 +1,694 @@
1
+ import { Chart, App, Testing } from 'cdk8s';
2
+ import YAML from 'yaml';
3
+ // Import resource providers
4
+ import { CoreResources } from './resources/core/coreResources.js';
5
+ import { StorageResources } from './resources/core/storageResources.js';
6
+ import { AWSResources } from './resources/cloud/aws/awsResources.js';
7
+ import { AzureResources } from './resources/cloud/azure/azureResources.js';
8
+ import { GCPResources } from './resources/cloud/gcp/gcpResources.js';
9
+ // Import HelmChartWriter for write functionality
10
+ import { HelmChartWriter } from './helmChartWriter.js';
11
+ import { include, helm } from './helm.js';
12
+ import { generateHelpersTemplate } from './utils/helmHelpers.js';
13
+ import { generateManifestName } from './utils/resourceNaming.js';
14
+ /**
15
+ * Rutter class with modular architecture
16
+ * Provides a clean API while delegating to specialized resource providers
17
+ * Maintains full backward compatibility with the original Rutter class
18
+ *
19
+ * @since 2.4.0
20
+ */
21
+ export class Rutter {
22
+ constructor(props) {
23
+ this.assets = [];
24
+ this.props = props;
25
+ this.meta = props.meta;
26
+ this.defaultValues = props.defaultValues ?? {};
27
+ this.envValues = props.envValues ?? {};
28
+ // Create CDK8s infrastructure
29
+ this.app = new App();
30
+ this.chart = new Chart(this.app, props.meta.name, {
31
+ ...props.chartProps,
32
+ ...(props.namespace ? { namespace: props.namespace } : {}),
33
+ });
34
+ // Initialize resource providers
35
+ this.coreResources = new CoreResources(this.chart);
36
+ this.storageResources = new StorageResources(this.chart);
37
+ this.awsResources = new AWSResources(this.chart);
38
+ this.azureResources = new AzureResources(this.chart);
39
+ this.gcpResources = new GCPResources(this.chart);
40
+ }
41
+ // Core Kubernetes Resources
42
+ /**
43
+ * Creates a Deployment resource
44
+ * @param spec - Deployment specification
45
+ * @returns Created Deployment ApiObject
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * rutter.addDeployment({
50
+ * name: 'web-app',
51
+ * image: 'nginx:1.21',
52
+ * replicas: 3,
53
+ * containerPort: 80
54
+ * });
55
+ * ```
56
+ *
57
+ * @since 1.0.0
58
+ */
59
+ addDeployment(spec) {
60
+ return this.coreResources.addDeployment(spec);
61
+ }
62
+ /**
63
+ * Creates a DaemonSet resource
64
+ * @param spec - DaemonSet specification
65
+ * @returns Created DaemonSet ApiObject
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * rutter.addDaemonSet({
70
+ * name: 'log-collector',
71
+ * image: 'fluentd:v1.14',
72
+ * containerPort: 24224,
73
+ * hostNetwork: true
74
+ * });
75
+ * ```
76
+ *
77
+ * @since 2.4.0
78
+ */
79
+ addDaemonSet(spec) {
80
+ return this.coreResources.addDaemonSet(spec);
81
+ }
82
+ /**
83
+ * Creates a StatefulSet resource
84
+ * @param spec - StatefulSet specification
85
+ * @returns Created StatefulSet ApiObject
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * rutter.addStatefulSet({
90
+ * name: 'database',
91
+ * image: 'postgres:13',
92
+ * replicas: 3,
93
+ * serviceName: 'database-headless',
94
+ * containerPort: 5432
95
+ * });
96
+ * ```
97
+ *
98
+ * @since 2.4.0
99
+ */
100
+ addStatefulSet(spec) {
101
+ return this.coreResources.addStatefulSet(spec);
102
+ }
103
+ /**
104
+ * Creates a Role resource for RBAC
105
+ * @param spec - Role specification
106
+ * @returns Created Role ApiObject
107
+ *
108
+ * @example
109
+ * ```typescript
110
+ * rutter.addRole({
111
+ * name: 'pod-reader',
112
+ * rules: [
113
+ * {
114
+ * apiGroups: [''],
115
+ * resources: ['pods'],
116
+ * verbs: ['get', 'list', 'watch']
117
+ * }
118
+ * ]
119
+ * });
120
+ * ```
121
+ *
122
+ * @since 2.4.0
123
+ */
124
+ addRole(spec) {
125
+ return this.coreResources.addRole(spec);
126
+ }
127
+ /**
128
+ * Creates a ClusterRole resource for cluster-wide RBAC
129
+ * @param spec - ClusterRole specification
130
+ * @returns Created ClusterRole ApiObject
131
+ *
132
+ * @example
133
+ * ```typescript
134
+ * rutter.addClusterRole({
135
+ * name: 'cluster-reader',
136
+ * rules: [
137
+ * {
138
+ * apiGroups: [''],
139
+ * resources: ['nodes', 'namespaces'],
140
+ * verbs: ['get', 'list', 'watch']
141
+ * }
142
+ * ]
143
+ * });
144
+ * ```
145
+ *
146
+ * @since 2.4.0
147
+ */
148
+ addClusterRole(spec) {
149
+ return this.coreResources.addClusterRole(spec);
150
+ }
151
+ /**
152
+ * Creates a RoleBinding resource for RBAC
153
+ * @param spec - RoleBinding specification
154
+ * @returns Created RoleBinding ApiObject
155
+ *
156
+ * @example
157
+ * ```typescript
158
+ * rutter.addRoleBinding({
159
+ * name: 'pod-reader-binding',
160
+ * roleRef: {
161
+ * kind: 'Role',
162
+ * name: 'pod-reader',
163
+ * apiGroup: 'rbac.authorization.k8s.io'
164
+ * },
165
+ * subjects: [
166
+ * {
167
+ * kind: 'ServiceAccount',
168
+ * name: 'my-service-account'
169
+ * }
170
+ * ]
171
+ * });
172
+ * ```
173
+ *
174
+ * @since 2.4.0
175
+ */
176
+ addRoleBinding(spec) {
177
+ return this.coreResources.addRoleBinding(spec);
178
+ }
179
+ /**
180
+ * Creates a ClusterRoleBinding resource for cluster-wide RBAC
181
+ * @param spec - ClusterRoleBinding specification
182
+ * @returns Created ClusterRoleBinding ApiObject
183
+ *
184
+ * @example
185
+ * ```typescript
186
+ * rutter.addClusterRoleBinding({
187
+ * name: 'cluster-reader-binding',
188
+ * roleRef: {
189
+ * kind: 'ClusterRole',
190
+ * name: 'cluster-reader',
191
+ * apiGroup: 'rbac.authorization.k8s.io'
192
+ * },
193
+ * subjects: [
194
+ * {
195
+ * kind: 'ServiceAccount',
196
+ * name: 'monitoring-agent',
197
+ * namespace: 'monitoring'
198
+ * }
199
+ * ]
200
+ * });
201
+ * ```
202
+ *
203
+ * @since 2.4.0
204
+ */
205
+ addClusterRoleBinding(spec) {
206
+ return this.coreResources.addClusterRoleBinding(spec);
207
+ }
208
+ /**
209
+ * Creates a Job resource for batch workloads
210
+ * @param spec - Job specification
211
+ * @returns Created Job ApiObject
212
+ *
213
+ * @example
214
+ * ```typescript
215
+ * rutter.addJob({
216
+ * name: 'data-processor',
217
+ * image: 'busybox:1.35',
218
+ * command: ['sh', '-c', 'echo "Processing..." && sleep 30'],
219
+ * completions: 1
220
+ * });
221
+ * ```
222
+ *
223
+ * @since 2.4.0
224
+ */
225
+ addJob(spec) {
226
+ return this.coreResources.addJob(spec);
227
+ }
228
+ /**
229
+ * Creates a Service resource
230
+ * @param spec - Service specification
231
+ * @returns Created Service ApiObject
232
+ *
233
+ * @example
234
+ * ```typescript
235
+ * rutter.addService({
236
+ * name: 'web-service',
237
+ * port: 80,
238
+ * targetPort: 8080,
239
+ * type: 'ClusterIP'
240
+ * });
241
+ * ```
242
+ *
243
+ * @since 1.0.0
244
+ */
245
+ addService(spec) {
246
+ return this.coreResources.addService(spec);
247
+ }
248
+ /**
249
+ * Creates a ConfigMap resource
250
+ * @param spec - ConfigMap specification
251
+ * @returns Created ConfigMap ApiObject
252
+ *
253
+ * @example
254
+ * ```typescript
255
+ * rutter.addConfigMap({
256
+ * name: 'app-config',
257
+ * data: {
258
+ * 'config.yaml': 'key: value',
259
+ * 'app.properties': 'debug=true'
260
+ * }
261
+ * });
262
+ * ```
263
+ *
264
+ * @since 1.0.0
265
+ */
266
+ addConfigMap(spec) {
267
+ return this.coreResources.addConfigMap(spec);
268
+ }
269
+ /**
270
+ * Creates a Secret resource
271
+ * @param spec - Secret specification
272
+ * @returns Created Secret ApiObject
273
+ *
274
+ * @example
275
+ * ```typescript
276
+ * rutter.addSecret({
277
+ * name: 'app-secrets',
278
+ * type: 'Opaque',
279
+ * data: {
280
+ * username: 'YWRtaW4=',
281
+ * password: 'MWYyZDFlMmU2N2Rm'
282
+ * }
283
+ * });
284
+ * ```
285
+ *
286
+ * @since 1.0.0
287
+ */
288
+ addSecret(spec) {
289
+ return this.coreResources.addSecret(spec);
290
+ }
291
+ /**
292
+ * Creates a ServiceAccount resource
293
+ * @param spec - ServiceAccount specification
294
+ * @returns Created ServiceAccount ApiObject
295
+ *
296
+ * @example
297
+ * ```typescript
298
+ * rutter.addServiceAccount({
299
+ * name: 'app-service-account',
300
+ * automountServiceAccountToken: false
301
+ * });
302
+ * ```
303
+ *
304
+ * @since 1.0.0
305
+ */
306
+ addServiceAccount(spec) {
307
+ return this.coreResources.addServiceAccount(spec);
308
+ }
309
+ // Storage Resources
310
+ /**
311
+ * Creates a PersistentVolume resource
312
+ * @param spec - PersistentVolume specification
313
+ * @returns Created PersistentVolume ApiObject
314
+ *
315
+ * @example
316
+ * ```typescript
317
+ * rutter.addPersistentVolume({
318
+ * name: 'data-pv',
319
+ * capacity: '10Gi',
320
+ * accessModes: ['ReadWriteOnce'],
321
+ * storageClassName: 'fast-ssd'
322
+ * });
323
+ * ```
324
+ *
325
+ * @since 1.0.0
326
+ */
327
+ addPersistentVolume(spec) {
328
+ return this.storageResources.addPersistentVolume(spec);
329
+ }
330
+ /**
331
+ * Creates a PersistentVolumeClaim resource
332
+ * @param spec - PersistentVolumeClaim specification
333
+ * @returns Created PersistentVolumeClaim ApiObject
334
+ *
335
+ * @example
336
+ * ```typescript
337
+ * rutter.addPersistentVolumeClaim({
338
+ * name: 'data-pvc',
339
+ * size: '10Gi',
340
+ * accessModes: ['ReadWriteOnce'],
341
+ * storageClassName: 'fast-ssd'
342
+ * });
343
+ * ```
344
+ *
345
+ * @since 1.0.0
346
+ */
347
+ addPersistentVolumeClaim(spec) {
348
+ return this.storageResources.addPersistentVolumeClaim(spec);
349
+ }
350
+ /**
351
+ * Creates a StorageClass resource
352
+ * @param spec - StorageClass specification
353
+ * @returns Created StorageClass ApiObject
354
+ *
355
+ * @example
356
+ * ```typescript
357
+ * rutter.addStorageClass({
358
+ * name: 'fast-ssd',
359
+ * provisioner: 'kubernetes.io/aws-ebs',
360
+ * parameters: {
361
+ * type: 'gp3',
362
+ * encrypted: 'true'
363
+ * }
364
+ * });
365
+ * ```
366
+ *
367
+ * @since 1.0.0
368
+ */
369
+ addStorageClass(spec) {
370
+ return this.storageResources.addStorageClass(spec);
371
+ }
372
+ // AWS Resources
373
+ /**
374
+ * Creates an AWS EBS StorageClass
375
+ * @param spec - EBS StorageClass specification
376
+ * @returns Created StorageClass ApiObject
377
+ *
378
+ * @example
379
+ * ```typescript
380
+ * rutter.addAWSEBSStorageClass({
381
+ * name: 'fast-ebs',
382
+ * volumeType: 'gp3',
383
+ * encrypted: true,
384
+ * allowVolumeExpansion: true
385
+ * });
386
+ * ```
387
+ *
388
+ * @since 1.0.0
389
+ */
390
+ addAWSEBSStorageClass(spec) {
391
+ return this.awsResources.addEBSStorageClass(spec);
392
+ }
393
+ /**
394
+ * Creates an AWS EFS StorageClass
395
+ * @param spec - EFS StorageClass specification
396
+ * @returns Created StorageClass ApiObject
397
+ *
398
+ * @example
399
+ * ```typescript
400
+ * rutter.addAWSEFSStorageClass({
401
+ * name: 'efs-storage',
402
+ * fileSystemId: 'fs-12345678',
403
+ * directoryPerms: '0755'
404
+ * });
405
+ * ```
406
+ *
407
+ * @since 1.0.0
408
+ */
409
+ addAWSEFSStorageClass(spec) {
410
+ return this.awsResources.addEFSStorageClass(spec);
411
+ }
412
+ /**
413
+ * Creates an AWS IRSA ServiceAccount
414
+ * @param spec - IRSA ServiceAccount specification
415
+ * @returns Created ServiceAccount ApiObject
416
+ *
417
+ * @example
418
+ * ```typescript
419
+ * rutter.addAWSIRSAServiceAccount({
420
+ * name: 'aws-service-account',
421
+ * roleArn: 'arn:aws:iam::123456789012:role/MyRole'
422
+ * });
423
+ * ```
424
+ *
425
+ * @since 1.0.0
426
+ */
427
+ addAWSIRSAServiceAccount(spec) {
428
+ return this.awsResources.addIRSAServiceAccount(spec);
429
+ }
430
+ /**
431
+ * Creates an AWS ALB Ingress
432
+ * @param spec - ALB Ingress specification
433
+ * @returns Created Ingress ApiObject
434
+ *
435
+ * @example
436
+ * ```typescript
437
+ * rutter.addAWSALBIngress({
438
+ * name: 'web-ingress',
439
+ * rules: [{
440
+ * paths: [{
441
+ * path: '/',
442
+ * pathType: 'Prefix',
443
+ * backend: { service: { name: 'web-service', port: { number: 80 } } }
444
+ * }]
445
+ * }],
446
+ * scheme: 'internet-facing'
447
+ * });
448
+ * ```
449
+ *
450
+ * @since 1.0.0
451
+ */
452
+ addAWSALBIngress(spec) {
453
+ return this.awsResources.addALBIngress(spec);
454
+ }
455
+ // Azure Cloud Resources
456
+ /**
457
+ * Creates an Azure Disk StorageClass
458
+ * @param spec - Azure Disk StorageClass specification
459
+ * @returns Created StorageClass ApiObject
460
+ *
461
+ * @since 2.4.0
462
+ */
463
+ addAzureDiskStorageClass(spec) {
464
+ return this.azureResources.addAzureDiskStorageClass(spec);
465
+ }
466
+ /**
467
+ * Creates an Azure File StorageClass
468
+ * @param spec - Azure File StorageClass specification
469
+ * @returns Created StorageClass ApiObject
470
+ *
471
+ * @since 2.4.0
472
+ */
473
+ addAzureFileStorageClass(spec) {
474
+ return this.azureResources.addAzureFileStorageClass(spec);
475
+ }
476
+ /**
477
+ * Creates an Azure Application Gateway Ingress
478
+ * @param spec - AGIC Ingress specification
479
+ * @returns Created Ingress ApiObject
480
+ *
481
+ * @since 2.4.0
482
+ */
483
+ addAzureApplicationGatewayIngress(spec) {
484
+ return this.azureResources.addApplicationGatewayIngress(spec);
485
+ }
486
+ /**
487
+ * Creates an Azure Key Vault SecretProviderClass
488
+ * @param spec - Azure Key Vault SecretProviderClass specification
489
+ * @returns Created SecretProviderClass ApiObject
490
+ *
491
+ * @since 2.4.0
492
+ */
493
+ addAzureKeyVaultSecretProviderClass(spec) {
494
+ return this.azureResources.addAzureKeyVaultSecretProviderClass(spec);
495
+ }
496
+ /**
497
+ * Creates an Azure Container Registry ServiceAccount
498
+ * @param spec - Azure ACR ServiceAccount specification
499
+ * @returns Created ServiceAccount ApiObject
500
+ *
501
+ * @since 2.4.0
502
+ */
503
+ addAzureACRServiceAccount(spec) {
504
+ return this.azureResources.addAzureACRServiceAccount(spec);
505
+ }
506
+ // GCP Cloud Resources
507
+ /**
508
+ * Creates a GCP Persistent Disk StorageClass
509
+ * @param spec - GCP PD StorageClass specification
510
+ * @returns Created StorageClass ApiObject
511
+ *
512
+ * @since 2.4.0
513
+ */
514
+ addGCPPersistentDiskStorageClass(spec) {
515
+ return this.gcpResources.addPersistentDiskStorageClass(spec);
516
+ }
517
+ /**
518
+ * Creates a GCP Filestore StorageClass
519
+ * @param spec - GCP Filestore StorageClass specification
520
+ * @returns Created StorageClass ApiObject
521
+ *
522
+ * @since 2.4.0
523
+ */
524
+ addGCPFilestoreStorageClass(spec) {
525
+ return this.gcpResources.addFilestoreStorageClass(spec);
526
+ }
527
+ /**
528
+ * Creates a GCE Ingress with Google Cloud Load Balancer
529
+ * @param spec - GCE Ingress specification
530
+ * @returns Created Ingress ApiObject
531
+ *
532
+ * @since 2.4.0
533
+ */
534
+ addGCPGCEIngress(spec) {
535
+ return this.gcpResources.addGCEIngress(spec);
536
+ }
537
+ /**
538
+ * Creates a ServiceAccount with Workload Identity annotations
539
+ * @param spec - Workload Identity ServiceAccount specification
540
+ * @returns Created ServiceAccount ApiObject
541
+ *
542
+ * @since 2.4.0
543
+ */
544
+ addGCPWorkloadIdentityServiceAccount(spec) {
545
+ return this.gcpResources.addWorkloadIdentityServiceAccount(spec);
546
+ }
547
+ // Utility methods
548
+ /**
549
+ * Adds a custom resource definition (CRD) YAML
550
+ * @param yaml - CRD YAML content
551
+ * @param id - Unique identifier for the CRD
552
+ *
553
+ * @since 1.0.0
554
+ */
555
+ addCrd(yaml, id = 'crd') {
556
+ this.assets.push({ id, yaml, target: 'crds' });
557
+ }
558
+ /**
559
+ * Gets chart metadata
560
+ * @returns Chart metadata
561
+ *
562
+ * @since 1.0.0
563
+ */
564
+ getMeta() {
565
+ return { ...this.meta };
566
+ }
567
+ /**
568
+ * Gets default values
569
+ * @returns Default values object
570
+ *
571
+ * @since 1.0.0
572
+ */
573
+ getDefaultValues() {
574
+ return { ...this.defaultValues };
575
+ }
576
+ /**
577
+ * Gets environment-specific values
578
+ * @returns Environment values object
579
+ *
580
+ * @since 1.0.0
581
+ */
582
+ getEnvValues() {
583
+ return { ...this.envValues };
584
+ }
585
+ /**
586
+ * Gets all assets (CRDs, etc.)
587
+ * @returns Array of assets
588
+ *
589
+ * @since 1.0.0
590
+ */
591
+ getAssets() {
592
+ return [...this.assets];
593
+ }
594
+ /**
595
+ * Converts the chart to SynthAsset array for HelmChartWriter
596
+ * @returns Array of synthesized assets
597
+ *
598
+ * @since 2.4.0
599
+ */
600
+ toSynthArray() {
601
+ // Use cdk8s Testing.synth to obtain manifest objects
602
+ const manifestObjs = Testing.synth(this.chart);
603
+ // Enforce common labels best-practice on all rendered objects
604
+ const enriched = manifestObjs.map((obj) => {
605
+ if (obj && typeof obj === 'object') {
606
+ const o = obj;
607
+ o.metadata = o.metadata ?? {};
608
+ o.metadata.labels = o.metadata.labels ?? {};
609
+ const labels = o.metadata.labels;
610
+ const defaults = {
611
+ 'helm.sh/chart': '{{ .Chart.Name }}-{{ .Chart.Version }}',
612
+ 'app.kubernetes.io/name': include(Rutter.HELPER_NAME),
613
+ 'app.kubernetes.io/instance': helm.releaseName,
614
+ 'app.kubernetes.io/version': helm.chartVersion,
615
+ 'app.kubernetes.io/managed-by': '{{ .Release.Service }}',
616
+ 'app.kubernetes.io/part-of': helm.chartName,
617
+ };
618
+ // Apply defaults only if not already set
619
+ for (const [key, value] of Object.entries(defaults)) {
620
+ if (!(key in labels)) {
621
+ // eslint-disable-next-line security/detect-object-injection -- Safe: controlled label assignment
622
+ labels[key] = value;
623
+ }
624
+ }
625
+ }
626
+ return obj;
627
+ });
628
+ const synthAssets = [];
629
+ if (this.props.singleManifestFile) {
630
+ // Combine all resources into single manifest
631
+ const combinedYaml = enriched
632
+ .map((obj) => YAML.stringify(obj).trim())
633
+ .filter(Boolean)
634
+ .join('\n---\n');
635
+ const manifestId = this.props.manifestPrefix ?? 'manifests';
636
+ synthAssets.push({ id: manifestId, yaml: combinedYaml });
637
+ }
638
+ else {
639
+ // Create separate files for each resource (default behavior)
640
+ enriched.forEach((obj, index) => {
641
+ const yaml = YAML.stringify(obj).trim();
642
+ if (yaml) {
643
+ const manifestId = generateManifestName(obj, this.props.namingStrategy ?? 'descriptive', index + 1, this.props.manifestPrefix);
644
+ synthAssets.push({ id: manifestId, yaml });
645
+ }
646
+ });
647
+ }
648
+ // Add any additional assets (CRDs, etc.)
649
+ this.assets.forEach((asset) => {
650
+ synthAssets.push({ id: asset.id, yaml: asset.yaml });
651
+ });
652
+ return synthAssets;
653
+ }
654
+ /**
655
+ * Writes the Helm chart to the specified output directory
656
+ * @param outDir - Output directory path
657
+ *
658
+ * @since 1.0.0
659
+ */
660
+ write(outDir) {
661
+ // Generate helpers template
662
+ let helpersContent;
663
+ if (this.props.helpersTpl) {
664
+ if (typeof this.props.helpersTpl === 'string') {
665
+ helpersContent = this.props.helpersTpl;
666
+ }
667
+ else {
668
+ helpersContent = this.props.helpersTpl
669
+ .map((helper) => `{{/*
670
+ ${helper.name}
671
+ */}}
672
+ {{- define "${helper.name}" -}}
673
+ ${helper.template}
674
+ {{- end }}`)
675
+ .join('\n\n');
676
+ }
677
+ }
678
+ else {
679
+ // Auto-generate standard helpers
680
+ helpersContent = generateHelpersTemplate(this.props.cloudProvider);
681
+ }
682
+ HelmChartWriter.write({
683
+ outDir,
684
+ meta: this.meta,
685
+ defaultValues: this.defaultValues,
686
+ envValues: this.envValues,
687
+ assets: this.toSynthArray(),
688
+ helpersTpl: helpersContent,
689
+ });
690
+ }
691
+ }
692
+ // Constants for labels
693
+ Rutter.HELPER_NAME = 'chart.name';
694
+ //# sourceMappingURL=rutter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rutter.js","sourceRoot":"","sources":["../../src/lib/rutter.ts"],"names":[],"mappings":"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"}