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