timonel 1.0.0 → 2.1.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 CHANGED
@@ -1,35 +1,64 @@
1
- # [1.0.0](https://github.com/KenkoGeek/timonel/compare/v0.4.0...v1.0.0) (2025-09-07)
1
+ # [2.1.0](https://github.com/KenkoGeek/timonel/compare/v2.0.0...v2.1.0) (2025-09-08)
2
2
 
3
+ ### Features
3
4
 
4
- ### Bug Fixes
5
+ - **core:** add Job and CronJob helpers for batch workloads ([#21](https://github.com/KenkoGeek/timonel/issues/21)) ([0f375d2](https://github.com/KenkoGeek/timonel/commit/0f375d214e1cb3a2791522c530230757c15b2dee))
5
6
 
6
- * **ci:** configure GitHub App token for semantic-release bypass - Use RELEASE_TOKEN from npm-prd environment for checkout and semantic-release ([0d385d1](https://github.com/KenkoGeek/timonel/commit/0d385d1084a45de3ab731094e87196239811e6fb))
7
- * **ci:** disable body-max-line-length for semantic-release compatibility - Set body-max-line-length to 0 (disabled) to allow long changelog entries - Fixes semantic-release commit validation failures - Maintains other commitlint rules for developer commits ([b215f65](https://github.com/KenkoGeek/timonel/commit/b215f65bccb69a1cfca79084e6a9c96954fb478a))
8
- * **ci:** disable footer line length limit for semantic-release commits ([d5ae4dc](https://github.com/KenkoGeek/timonel/commit/d5ae4dc83e68f8fade4a8289d1ce4e2bae5046dd))
9
- * **ci:** disable footer-leading-blank for semantic-release compatibility - Set footer-leading-blank to 0 (disabled) to allow semantic-release footer format ([2f8c6c8](https://github.com/KenkoGeek/timonel/commit/2f8c6c863c6aabd1d3f3d8022b43fefecb02f010))
10
- * **ci:** replace CodeQL with security check in release validation ([#15](https://github.com/KenkoGeek/timonel/issues/15)) ([b8cecea](https://github.com/KenkoGeek/timonel/commit/b8cecea1eaf0bb6af3e6fd2f6bc38c2fb2c09f4d))
11
- * **ci:** resolve release workflow issues ([#16](https://github.com/KenkoGeek/timonel/issues/16)) ([ed5dc9b](https://github.com/KenkoGeek/timonel/commit/ed5dc9b3d86b531d4495d4d05dd913340333322c))
7
+ # [2.0.0](https://github.com/KenkoGeek/timonel/compare/v1.0.0...v2.0.0) (2025-09-07)
8
+
9
+ ### Bug Fixes
12
10
 
11
+ - **ci:** remove redundant publish workflow and configure release token ([fcea159](https://github.com/KenkoGeek/timonel/commit/fcea15914617e372a2aafc8a30001cc54ec8bff6))
12
+ - **examples:** update timonel dependency to ^1.0.0 ([3d1f692](https://github.com/KenkoGeek/timonel/commit/3d1f6922448648c7efe57cc1fdde9a5808e04d7e))
13
+ - **helm:** remove automatic numbering from template files ([#20](https://github.com/KenkoGeek/timonel/issues/20)) ([f75748a](https://github.com/KenkoGeek/timonel/commit/f75748aee974a254f576807f26396b026262b42c))
13
14
 
14
15
  ### Features
15
16
 
16
- * add manual release workflow with GitHub Actions ([1035b2e](https://github.com/KenkoGeek/timonel/commit/1035b2e18fbb808e57438353c865ecd129d9e04d))
17
- * add NetworkPolicy helpers for Zero Trust network security ([#13](https://github.com/KenkoGeek/timonel/issues/13)) ([cee3b58](https://github.com/KenkoGeek/timonel/commit/cee3b5876de839ca3cf16dd6ca6e3b76626392ce))
18
- * **ci:** add required status checks validation to release workflow ([#14](https://github.com/KenkoGeek/timonel/issues/14)) ([7f8665f](https://github.com/KenkoGeek/timonel/commit/7f8665fa908215cc92a4dbefb7fec00de98464bb))
19
- * **ci:** implement automated semantic release with conventional commits ([02ce189](https://github.com/KenkoGeek/timonel/commit/02ce18943efd8019168b5f9af29be0140a9e1524))
20
- * **ci:** implement automated semantic release with conventional commits ([bb94fda](https://github.com/KenkoGeek/timonel/commit/bb94fda3e80bf3e010e7b53bdd1794f88060408a))
21
- * **core:** add NetworkPolicy helpers for Zero Trust network security ([34ac6bd](https://github.com/KenkoGeek/timonel/commit/34ac6bda3956e5fe326b72e9831bd4bb8bc660da))
17
+ - **ci:** add automatic CHANGELOG.md formatting to semantic-release ([6846b4d](https://github.com/KenkoGeek/timonel/commit/6846b4de2cfd411b7b9b9724d67830cf192ad2b9))
18
+ - **core:** add Azure Application Gateway Ingress Controller (AGIC) support ([#19](https://github.com/KenkoGeek/timonel/issues/19)) ([75bbb99](https://github.com/KenkoGeek/timonel/commit/75bbb998981ca6492b09ad12c54e03050b307c27))
19
+ - **core:** add Azure Disk StorageClass helper for AKS ([#18](https://github.com/KenkoGeek/timonel/issues/18)) ([5fb29de](https://github.com/KenkoGeek/timonel/commit/5fb29de260c4cabf6732520b0834cf0d0421a33a))
22
20
 
21
+ ### BREAKING CHANGES
23
22
 
24
- ### Performance Improvements
23
+ - **helm:** Template files no longer have automatic numbering prefixes
24
+
25
+ - refactor(helm): unify template naming strategy and add breaking change notice
26
+
27
+ * Simplify file naming logic with unified approach
28
+ * Use consistent naming strategy for single and multiple documents
29
+ * Add breaking change warning in README for numbered filename dependencies
30
+ * Improve code maintainability with cleaner implementation
31
+
32
+ Addresses PR review feedback for better consistency and user awareness.
25
33
 
26
- * **ci:** homogenize CI/CD workflows and optimize release pipeline ([#17](https://github.com/KenkoGeek/timonel/issues/17)) ([4622d11](https://github.com/KenkoGeek/timonel/commit/4622d113e5753a5ff69c82a1e3784ecf61c34689))
34
+ # [1.0.0](https://github.com/KenkoGeek/timonel/compare/v0.4.0...v1.0.0) (2025-09-07)
35
+
36
+ ### Bug Fixes
37
+
38
+ - **ci:** configure GitHub App token for semantic-release bypass - Use RELEASE_TOKEN from npm-prd environment for checkout and semantic-release ([0d385d1](https://github.com/KenkoGeek/timonel/commit/0d385d1084a45de3ab731094e87196239811e6fb))
39
+ - **ci:** disable body-max-line-length for semantic-release compatibility - Set body-max-line-length to 0 (disabled) to allow long changelog entries - Fixes semantic-release commit validation failures - Maintains other commitlint rules for developer commits ([b215f65](https://github.com/KenkoGeek/timonel/commit/b215f65bccb69a1cfca79084e6a9c96954fb478a))
40
+ - **ci:** disable footer line length limit for semantic-release commits ([d5ae4dc](https://github.com/KenkoGeek/timonel/commit/d5ae4dc83e68f8fade4a8289d1ce4e2bae5046dd))
41
+ - **ci:** disable footer-leading-blank for semantic-release compatibility - Set footer-leading-blank to 0 (disabled) to allow semantic-release footer format ([2f8c6c8](https://github.com/KenkoGeek/timonel/commit/2f8c6c863c6aabd1d3f3d8022b43fefecb02f010))
42
+ - **ci:** replace CodeQL with security check in release validation ([#15](https://github.com/KenkoGeek/timonel/issues/15)) ([b8cecea](https://github.com/KenkoGeek/timonel/commit/b8cecea1eaf0bb6af3e6fd2f6bc38c2fb2c09f4d))
43
+ - **ci:** resolve release workflow issues ([#16](https://github.com/KenkoGeek/timonel/issues/16)) ([ed5dc9b](https://github.com/KenkoGeek/timonel/commit/ed5dc9b3d86b531d4495d4d05dd913340333322c))
44
+
45
+ ### Features
46
+
47
+ - add manual release workflow with GitHub Actions ([1035b2e](https://github.com/KenkoGeek/timonel/commit/1035b2e18fbb808e57438353c865ecd129d9e04d))
48
+ - add NetworkPolicy helpers for Zero Trust network security ([#13](https://github.com/KenkoGeek/timonel/issues/13)) ([cee3b58](https://github.com/KenkoGeek/timonel/commit/cee3b5876de839ca3cf16dd6ca6e3b76626392ce))
49
+ - **ci:** add required status checks validation to release workflow ([#14](https://github.com/KenkoGeek/timonel/issues/14)) ([7f8665f](https://github.com/KenkoGeek/timonel/commit/7f8665fa908215cc92a4dbefb7fec00de98464bb))
50
+ - **ci:** implement automated semantic release with conventional commits ([02ce189](https://github.com/KenkoGeek/timonel/commit/02ce18943efd8019168b5f9af29be0140a9e1524))
51
+ - **ci:** implement automated semantic release with conventional commits ([bb94fda](https://github.com/KenkoGeek/timonel/commit/bb94fda3e80bf3e010e7b53bdd1794f88060408a))
52
+ - **core:** add NetworkPolicy helpers for Zero Trust network security ([34ac6bd](https://github.com/KenkoGeek/timonel/commit/34ac6bda3956e5fe326b72e9831bd4bb8bc660da))
53
+
54
+ ### Performance Improvements
27
55
 
56
+ - **ci:** homogenize CI/CD workflows and optimize release pipeline ([#17](https://github.com/KenkoGeek/timonel/issues/17)) ([4622d11](https://github.com/KenkoGeek/timonel/commit/4622d113e5753a5ff69c82a1e3784ecf61c34689))
28
57
 
29
58
  ### BREAKING CHANGES
30
59
 
31
- * **ci:** ESLint configuration migrated to flat config format
32
- * **ci:** ESLint configuration migrated to flat config format
60
+ - **ci:** ESLint configuration migrated to flat config format
61
+ - **ci:** ESLint configuration migrated to flat config format
33
62
 
34
63
  # Changelog
35
64
 
package/README.md CHANGED
@@ -173,6 +173,30 @@ rutter.addPodDisruptionBudget({
173
173
  selector: { matchLabels: { app: 'my-app' } },
174
174
  });
175
175
 
176
+ // Add one-time Job for database migration
177
+ rutter.addJob({
178
+ name: 'db-migration',
179
+ image: 'migrate:latest',
180
+ command: ['migrate'],
181
+ args: ['up'],
182
+ restartPolicy: 'OnFailure',
183
+ backoffLimit: 3,
184
+ activeDeadlineSeconds: 600,
185
+ ttlSecondsAfterFinished: 86400,
186
+ });
187
+
188
+ // Add scheduled CronJob for backups
189
+ rutter.addCronJob({
190
+ name: 'backup-job',
191
+ schedule: '0 2 * * *', // Daily at 2 AM
192
+ image: 'backup:latest',
193
+ command: ['backup.sh'],
194
+ restartPolicy: 'OnFailure',
195
+ concurrencyPolicy: 'Forbid',
196
+ successfulJobsHistoryLimit: 3,
197
+ failedJobsHistoryLimit: 1,
198
+ });
199
+
176
200
  // Add IRSA ServiceAccount for AWS access
177
201
  rutter.addAWSIRSAServiceAccount({
178
202
  name: 'my-app-irsa',
@@ -186,6 +210,11 @@ rutter.write('dist/charts/my-app');
186
210
 
187
211
  ### Custom Manifest Naming
188
212
 
213
+ > **⚠️ Breaking Change Notice**: Starting from v1.1.0, template files no longer include
214
+ > automatic numbering prefixes (0000-, 0001-, etc.). Files now use descriptive names
215
+ > following Helm best practices. If your scripts or tools depend on numbered filenames,
216
+ > please update them accordingly.
217
+
189
218
  Timonel provides flexible options for naming your Kubernetes manifest files:
190
219
 
191
220
  #### Single Manifest File
@@ -210,9 +239,9 @@ const rutter = new Rutter({
210
239
  });
211
240
 
212
241
  // Generates:
213
- // templates/0000-my-app-deployment-web.yaml
214
- // templates/0001-my-app-service-web.yaml
215
- // templates/0002-my-app-configmap-config.yaml
242
+ // templates/my-app-deployment-web.yaml
243
+ // templates/my-app-service-web.yaml
244
+ // templates/my-app-configmap-config.yaml
216
245
  ```
217
246
 
218
247
  #### Default Behavior
@@ -224,9 +253,9 @@ const rutter = new Rutter({
224
253
  });
225
254
 
226
255
  // Generates:
227
- // templates/0000-deployment-web.yaml
228
- // templates/0001-service-web.yaml
229
- // templates/0002-configmap-config.yaml
256
+ // templates/deployment-web.yaml
257
+ // templates/service-web.yaml
258
+ // templates/configmap-config.yaml
230
259
  ```
231
260
 
232
261
  ## Umbrella Charts
@@ -315,9 +344,13 @@ shared values, and multi-environment support.
315
344
  (`toString`, `float64`).
316
345
  - For numeric fields (ports, replicas), use literal values or template strings with proper casting.
317
346
 
318
- ## AWS Multi-Cloud Support
347
+ ## Multi-Cloud Support
319
348
 
320
- Timonel provides comprehensive AWS-specific helpers for EKS deployments:
349
+ Timonel provides comprehensive cloud-specific helpers for major Kubernetes platforms:
350
+
351
+ ### AWS Multi-Cloud Support
352
+
353
+ Comprehensive AWS-specific helpers for EKS deployments:
321
354
 
322
355
  ### IRSA (IAM Roles for Service Accounts)
323
356
 
@@ -429,6 +462,97 @@ rutter.addAWSSecretProviderClass({
429
462
  });
430
463
  ```
431
464
 
465
+ ### Azure Multi-Cloud Support
466
+
467
+ Azure-specific helpers for AKS deployments:
468
+
469
+ #### Azure Disk Storage Classes
470
+
471
+ ```typescript
472
+ // Premium ZRS disk for production workloads
473
+ rutter.addAzureDiskStorageClass({
474
+ name: 'azure-premium-zrs',
475
+ skuName: 'Premium_ZRS',
476
+ fsType: 'ext4',
477
+ cachingMode: 'ReadWrite',
478
+ allowVolumeExpansion: true,
479
+ volumeBindingMode: 'WaitForFirstConsumer',
480
+ tags: {
481
+ Environment: 'production',
482
+ Application: 'database',
483
+ },
484
+ });
485
+
486
+ // Standard SSD for cost-optimized workloads
487
+ rutter.addAzureDiskStorageClass({
488
+ name: 'azure-standard-ssd',
489
+ skuName: 'StandardSSD_LRS',
490
+ fsType: 'ext4',
491
+ cachingMode: 'ReadOnly',
492
+ });
493
+
494
+ // Ultra SSD for high-performance workloads
495
+ rutter.addAzureDiskStorageClass({
496
+ name: 'azure-ultra-ssd',
497
+ skuName: 'UltraSSD_LRS',
498
+ fsType: 'ext4',
499
+ cachingMode: 'None',
500
+ diskIOPSReadWrite: 2000,
501
+ diskMBpsReadWrite: 200,
502
+ logicalSectorSize: 4096,
503
+ });
504
+ ```
505
+
506
+ #### Azure Application Gateway Ingress Controller (AGIC)
507
+
508
+ Comprehensive AGIC support for AKS deployments with advanced features:
509
+
510
+ ```typescript
511
+ // AGIC Ingress with SSL and health checks
512
+ rutter.addAzureAGICIngress({
513
+ name: 'app-ingress',
514
+ rules: [
515
+ {
516
+ host: 'app.example.com',
517
+ paths: [
518
+ {
519
+ path: '/',
520
+ pathType: 'Prefix',
521
+ backend: { service: { name: 'app-service', port: { number: 80 } } },
522
+ },
523
+ ],
524
+ },
525
+ ],
526
+ sslRedirect: true,
527
+ backendProtocol: 'https',
528
+ healthProbePath: '/health',
529
+ healthProbeInterval: 30,
530
+ cookieBasedAffinity: true,
531
+ requestTimeout: 60,
532
+ appgwSslCertificate: 'my-ssl-cert',
533
+ wafPolicyForPath:
534
+ '/subscriptions/sub-id/resourceGroups/rg/providers/Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/waf-policy',
535
+ });
536
+
537
+ // Advanced AGIC features
538
+ rutter.addAzureAGICIngress({
539
+ name: 'advanced-ingress',
540
+ rules: [
541
+ /* rules */
542
+ ],
543
+ backendPathPrefix: '/api/v1',
544
+ backendHostname: 'internal.example.com',
545
+ usePrivateIp: true,
546
+ overrideFrontendPort: 8080,
547
+ connectionDraining: true,
548
+ connectionDrainingTimeout: 60,
549
+ hostnameExtension: ['api.example.com', 'admin.example.com'],
550
+ appgwTrustedRootCertificate: ['root-cert-1', 'root-cert-2'],
551
+ rewriteRuleSet: 'custom-rewrite-rules',
552
+ rulePriority: 100,
553
+ });
554
+ ```
555
+
432
556
  ## Network Security with NetworkPolicies
433
557
 
434
558
  Timonel provides comprehensive NetworkPolicy helpers for implementing Zero Trust network security
@@ -691,7 +815,8 @@ Provide `envValues` in the `Rutter` constructor to automatically create
691
815
  - ✅ Auto-scaling helpers (HPA, VPA, PodDisruptionBudget)
692
816
  - ✅ AWS multi-cloud support (EBS, EFS, ALB, IRSA, Secrets Manager, Parameter Store)
693
817
  - ✅ Custom manifest naming and file organization
694
- - Azure multi-cloud support (AKS-specific helpers)
818
+ - Azure multi-cloud support (Azure Disk StorageClass, AGIC)
819
+ - ✅ Job and CronJob helpers for batch workloads
695
820
  - GCP multi-cloud support (GKE-specific helpers)
696
821
  - Richer CLI (resource generators, diff)
697
822
  - Template validation and testing utilities
@@ -97,7 +97,6 @@ function splitDocs(yamlStr) {
97
97
  .filter((p) => p.length);
98
98
  }
99
99
  function writeAssets(outDir, assets) {
100
- let counter = 0;
101
100
  for (const asset of assets) {
102
101
  if (asset.singleFile) {
103
102
  // Write as a single file without splitting documents
@@ -109,17 +108,16 @@ function writeAssets(outDir, assets) {
109
108
  fs.writeFileSync(path.join(outDir, dir, filename), asset.yaml + '\n');
110
109
  }
111
110
  else {
112
- // Split documents and create numbered files (default behavior)
111
+ // Split documents and create descriptive files following Helm best practices
113
112
  const parts = splitDocs(asset.yaml);
114
- for (const doc of parts) {
115
- const filename = `${String(counter).padStart(4, '0')}-${asset.id}.yaml`;
113
+ parts.forEach((doc, index) => {
114
+ const filename = `${asset.id}${parts.length > 1 ? `-${index + 1}` : ''}.yaml`;
116
115
  const dir = asset.target === 'crds' ? 'crds' : 'templates';
117
116
  // eslint-disable-next-line security/detect-non-literal-fs-filename -- Chart writer needs dynamic paths
118
117
  fs.mkdirSync(path.join(outDir, dir), { recursive: true });
119
118
  // eslint-disable-next-line security/detect-non-literal-fs-filename -- Chart writer needs dynamic paths
120
119
  fs.writeFileSync(path.join(outDir, dir, filename), doc + '\n');
121
- counter++;
122
- }
120
+ });
123
121
  }
124
122
  }
125
123
  }
@@ -1 +1 @@
1
- {"version":3,"file":"HelmChartWriter.js","sourceRoot":"","sources":["../../src/lib/HelmChartWriter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HelmChartWriter.js","sourceRoot":"","sources":["../../src/lib/HelmChartWriter.ts"],"names":[],"mappings":"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"}
@@ -188,6 +188,70 @@ export interface ReplicaSetSpec {
188
188
  /** Optional annotations on the pod template (useful for reloaders, etc.) */
189
189
  podAnnotations?: Record<string, string>;
190
190
  }
191
+ export interface JobSpec {
192
+ name: string;
193
+ image: string;
194
+ command?: string[];
195
+ args?: string[];
196
+ env?: Record<string, string>;
197
+ envFrom?: EnvFromSource[];
198
+ volumes?: VolumeSourceSpec[];
199
+ volumeMounts?: VolumeMountSpec[];
200
+ resources?: ResourceRequirements;
201
+ restartPolicy?: 'Never' | 'OnFailure';
202
+ backoffLimit?: number;
203
+ activeDeadlineSeconds?: number;
204
+ ttlSecondsAfterFinished?: number;
205
+ completions?: number;
206
+ parallelism?: number;
207
+ completionMode?: 'NonIndexed' | 'Indexed';
208
+ suspend?: boolean;
209
+ imagePullPolicy?: 'Always' | 'IfNotPresent' | 'Never';
210
+ serviceAccountName?: string;
211
+ /** Optional extra labels on the Job metadata */
212
+ labels?: Record<string, string>;
213
+ /** Optional annotations on the Job metadata */
214
+ annotations?: Record<string, string>;
215
+ /** Optional extra labels on the pod template */
216
+ podLabels?: Record<string, string>;
217
+ /** Optional annotations on the pod template */
218
+ podAnnotations?: Record<string, string>;
219
+ }
220
+ export interface CronJobSpec {
221
+ name: string;
222
+ schedule: string;
223
+ image: string;
224
+ command?: string[];
225
+ args?: string[];
226
+ env?: Record<string, string>;
227
+ envFrom?: EnvFromSource[];
228
+ volumes?: VolumeSourceSpec[];
229
+ volumeMounts?: VolumeMountSpec[];
230
+ resources?: ResourceRequirements;
231
+ restartPolicy?: 'Never' | 'OnFailure';
232
+ backoffLimit?: number;
233
+ activeDeadlineSeconds?: number;
234
+ ttlSecondsAfterFinished?: number;
235
+ completions?: number;
236
+ parallelism?: number;
237
+ completionMode?: 'NonIndexed' | 'Indexed';
238
+ suspend?: boolean;
239
+ startingDeadlineSeconds?: number;
240
+ concurrencyPolicy?: 'Allow' | 'Forbid' | 'Replace';
241
+ successfulJobsHistoryLimit?: number;
242
+ failedJobsHistoryLimit?: number;
243
+ timeZone?: string;
244
+ imagePullPolicy?: 'Always' | 'IfNotPresent' | 'Never';
245
+ serviceAccountName?: string;
246
+ /** Optional extra labels on the CronJob metadata */
247
+ labels?: Record<string, string>;
248
+ /** Optional annotations on the CronJob metadata */
249
+ annotations?: Record<string, string>;
250
+ /** Optional extra labels on the pod template */
251
+ podLabels?: Record<string, string>;
252
+ /** Optional annotations on the pod template */
253
+ podAnnotations?: Record<string, string>;
254
+ }
191
255
  export interface ServiceSpec {
192
256
  name: string;
193
257
  ports: Array<{
@@ -461,7 +525,7 @@ export interface PodDisruptionBudgetSpec {
461
525
  labels?: Record<string, string>;
462
526
  annotations?: Record<string, string>;
463
527
  }
464
- export interface AWSEBSStorageClassSpec {
528
+ export interface AWSEBSStorageClassSpec extends CloudResourceTags {
465
529
  name: string;
466
530
  volumeType?: 'gp2' | 'gp3' | 'io1' | 'io2' | 'sc1' | 'st1';
467
531
  fsType?: 'ext4' | 'xfs';
@@ -544,7 +608,63 @@ export interface AWSSecretProviderClassSpec {
544
608
  labels?: Record<string, string>;
545
609
  annotations?: Record<string, string>;
546
610
  }
547
- export interface AWSALBIngressSpec {
611
+ /**
612
+ * Configuration interface for Azure Disk StorageClass.
613
+ * Defines the parameters for creating an Azure Disk StorageClass in AKS.
614
+ *
615
+ * @see https://learn.microsoft.com/en-us/azure/aks/azure-csi-disk-storage-provision
616
+ */
617
+ /**
618
+ * Cloud resource tags with basic validation.
619
+ * Provides a consistent interface for tagging resources across cloud providers.
620
+ */
621
+ export interface CloudResourceTags {
622
+ /** Resource tags as key-value pairs */
623
+ tags?: Record<string, string>;
624
+ }
625
+ export interface AzureDiskStorageClassSpec extends CloudResourceTags {
626
+ /** Name of the StorageClass */
627
+ name: string;
628
+ /** Azure disk SKU to use */
629
+ skuName?: 'Standard_LRS' | 'Premium_LRS' | 'StandardSSD_LRS' | 'PremiumV2_LRS' | 'UltraSSD_LRS' | 'Premium_ZRS' | 'StandardSSD_ZRS';
630
+ /** File system type to use */
631
+ fsType?: 'ext4' | 'ext3' | 'ext2' | 'xfs' | 'btrfs' | 'ntfs';
632
+ /** Host caching mode */
633
+ cachingMode?: 'None' | 'ReadOnly' | 'ReadWrite';
634
+ /** Resource group where disks will be created */
635
+ resourceGroup?: string;
636
+ /** IOPS for the disk (UltraSSD_LRS only) */
637
+ diskIOPSReadWrite?: number;
638
+ /** Throughput in MB/s (UltraSSD_LRS only) */
639
+ diskMBpsReadWrite?: number;
640
+ /** Logical sector size in bytes */
641
+ logicalSectorSize?: 512 | 4096;
642
+ /** ID of the disk encryption set */
643
+ diskEncryptionSetID?: string;
644
+ /** Type of disk encryption */
645
+ diskEncryptionType?: 'EncryptionAtRestWithCustomerKey' | 'EncryptionAtRestWithPlatformAndCustomerKeys';
646
+ /** Enable write accelerator */
647
+ writeAcceleratorEnabled?: boolean;
648
+ /** Network access policy for the disk */
649
+ networkAccessPolicy?: 'AllowAll' | 'DenyAll' | 'AllowPrivate';
650
+ /** ID of the disk access resource */
651
+ diskAccessID?: string;
652
+ /** Enable bursting (Premium SSD only) */
653
+ enableBursting?: boolean;
654
+ /** Maximum number of hosts that can attach to the disk simultaneously */
655
+ maxShares?: number;
656
+ /** Volume reclaim policy */
657
+ reclaimPolicy?: 'Delete' | 'Retain';
658
+ /** Allow volume expansion */
659
+ allowVolumeExpansion?: boolean;
660
+ /** Volume binding mode */
661
+ volumeBindingMode?: 'Immediate' | 'WaitForFirstConsumer';
662
+ /** Labels to apply to the StorageClass */
663
+ labels?: Record<string, string>;
664
+ /** Annotations to apply to the StorageClass */
665
+ annotations?: Record<string, string>;
666
+ }
667
+ export interface AWSALBIngressSpec extends CloudResourceTags {
548
668
  name: string;
549
669
  rules: IngressRule[];
550
670
  tls?: IngressTLS[];
@@ -562,10 +682,84 @@ export interface AWSALBIngressSpec {
562
682
  healthCheckTimeoutSeconds?: number;
563
683
  healthyThresholdCount?: number;
564
684
  unhealthyThresholdCount?: number;
565
- tags?: Record<string, string>;
566
685
  labels?: Record<string, string>;
567
686
  annotations?: Record<string, string>;
568
687
  }
688
+ /**
689
+ * Configuration interface for Azure Application Gateway Ingress Controller (AGIC).
690
+ * Provides comprehensive support for AGIC annotations and features for AKS deployments.
691
+ *
692
+ * @see https://learn.microsoft.com/en-us/azure/application-gateway/ingress-controller-annotations
693
+ */
694
+ export interface AzureAGICIngressSpec {
695
+ /** Name of the Ingress resource */
696
+ name: string;
697
+ /** Ingress rules defining routing configuration */
698
+ rules: IngressRule[];
699
+ /** TLS configuration for HTTPS termination */
700
+ tls?: IngressTLS[];
701
+ /** Backend path prefix to rewrite request paths */
702
+ backendPathPrefix?: string;
703
+ /** Backend hostname for Application Gateway to use when communicating with pods */
704
+ backendHostname?: string;
705
+ /** Backend protocol (http or https) */
706
+ backendProtocol?: 'http' | 'https';
707
+ /** Enable SSL redirect from HTTP to HTTPS */
708
+ sslRedirect?: boolean;
709
+ /** Use private IP address of Application Gateway */
710
+ usePrivateIp?: boolean;
711
+ /** Override frontend port (default: 80 for HTTP, 443 for HTTPS) */
712
+ overrideFrontendPort?: number;
713
+ /** Enable cookie-based session affinity */
714
+ cookieBasedAffinity?: boolean;
715
+ /** Request timeout in seconds */
716
+ requestTimeout?: number;
717
+ /** Enable connection draining */
718
+ connectionDraining?: boolean;
719
+ /** Connection draining timeout in seconds */
720
+ connectionDrainingTimeout?: number;
721
+ /** Custom health probe hostname */
722
+ healthProbeHostname?: string;
723
+ /** Custom health probe port */
724
+ healthProbePort?: number;
725
+ /** Custom health probe path */
726
+ healthProbePath?: string;
727
+ /** Accepted HTTP status codes for health probe */
728
+ healthProbeStatusCodes?: string;
729
+ /** Health probe interval in seconds */
730
+ healthProbeInterval?: number;
731
+ /** Health probe timeout in seconds */
732
+ healthProbeTimeout?: number;
733
+ /** Health probe unhealthy threshold */
734
+ healthProbeUnhealthyThreshold?: number;
735
+ /**
736
+ * Additional hostnames for multisite listener
737
+ * @security Validate hostname format to prevent injection attacks
738
+ */
739
+ hostnameExtension?: string[];
740
+ /**
741
+ * WAF policy resource ID for path-based protection
742
+ * @security Validate resource ID format to prevent path traversal attacks
743
+ */
744
+ wafPolicyForPath?: string;
745
+ /**
746
+ * Application Gateway SSL certificate name
747
+ * @security Ensure certificate exists and is properly configured
748
+ */
749
+ appgwSslCertificate?: string;
750
+ /** Application Gateway SSL profile name */
751
+ appgwSslProfile?: string;
752
+ /** Trusted root certificate names for end-to-end SSL */
753
+ appgwTrustedRootCertificate?: string[];
754
+ /** Rewrite rule set name */
755
+ rewriteRuleSet?: string;
756
+ /** Rule priority for request routing */
757
+ rulePriority?: number;
758
+ /** Labels to apply to the Ingress */
759
+ labels?: Record<string, string>;
760
+ /** Additional annotations to apply to the Ingress */
761
+ annotations?: Record<string, string>;
762
+ }
569
763
  export interface VerticalPodAutoscalerSpec {
570
764
  name: string;
571
765
  targetRef: {
@@ -677,9 +871,14 @@ export declare class Rutter {
677
871
  private static readonly LABEL_INSTANCE;
678
872
  private static readonly HELPER_NAME;
679
873
  private static readonly NETWORKING_API_VERSION;
874
+ private static readonly STORAGE_API_VERSION;
875
+ private static readonly AZURE_DISK_CSI_DRIVER;
876
+ private static readonly AZURE_DISK_PROVISIONER_ANNOTATION;
680
877
  addDeployment(spec: DeploymentSpec): ApiObject;
681
878
  addService(spec: ServiceSpec): ApiObject;
682
879
  addReplicaSet(spec: ReplicaSetSpec): ApiObject;
880
+ addJob(spec: JobSpec): ApiObject;
881
+ addCronJob(spec: CronJobSpec): ApiObject;
683
882
  addIngress(spec: IngressSpec): ApiObject;
684
883
  addPersistentVolume(spec: PersistentVolumeSpec): ApiObject;
685
884
  private optimizePVForCloud;
@@ -705,8 +904,61 @@ export declare class Rutter {
705
904
  private addOptionalALBAnnotations;
706
905
  private addHealthCheckAnnotations;
707
906
  private addTagsAnnotation;
907
+ /**
908
+ * Add Azure Application Gateway Ingress Controller (AGIC) Ingress.
909
+ * Creates an Ingress resource with AGIC-specific annotations for AKS deployments.
910
+ *
911
+ * @param spec - AGIC Ingress specification
912
+ * @returns The created Ingress ApiObject
913
+ *
914
+ * @example
915
+ * ```typescript
916
+ * rutter.addAzureAGICIngress({
917
+ * name: 'app-ingress',
918
+ * rules: [{
919
+ * host: 'app.example.com',
920
+ * paths: [{
921
+ * path: '/',
922
+ * pathType: 'Prefix',
923
+ * backend: { service: { name: 'app-service', port: { number: 80 } } }
924
+ * }]
925
+ * }],
926
+ * sslRedirect: true,
927
+ * backendProtocol: 'https',
928
+ * healthProbePath: '/health'
929
+ * });
930
+ * ```
931
+ */
932
+ addAzureAGICIngress(spec: AzureAGICIngressSpec): ApiObject;
933
+ private buildAGICAnnotations;
934
+ private addAGICPathAnnotations;
935
+ private addAGICProtocolAnnotations;
936
+ private addAGICHealthProbeAnnotations;
937
+ private addAGICConnectionAnnotations;
938
+ private addAGICSecurityAnnotations;
939
+ private addAGICAdvancedAnnotations;
708
940
  addAWSIRSAServiceAccount(spec: AWSIRSAServiceAccountSpec): ApiObject;
709
941
  addAWSSecretProviderClass(spec: AWSSecretProviderClassSpec): ApiObject;
942
+ addAzureDiskStorageClass(spec: AzureDiskStorageClassSpec): ApiObject;
943
+ private buildAzureDiskParameters;
944
+ private addOptionalAzureDiskParameters;
945
+ private addAzureDiskEncryptionParameters;
946
+ private addAzureDiskPerformanceParameters;
947
+ private validateAzureDiskNumericParameters;
948
+ private validateAzureDiskIOPS;
949
+ private validateAzureDiskThroughput;
950
+ private validateAzureDiskShares;
951
+ private validateAzureDiskSectorSize;
952
+ /**
953
+ * Format cloud resource tags for provider-specific string format.
954
+ * Provides basic validation and consistent formatting across cloud providers.
955
+ */
956
+ private formatCloudResourceTags;
957
+ /**
958
+ * Validate cloud resource tags with basic rules.
959
+ * Each cloud provider has specific validation, but these are common basics.
960
+ */
961
+ private validateCloudResourceTags;
710
962
  addNetworkPolicy(spec: NetworkPolicySpec): ApiObject;
711
963
  private static readonly EMPTY_POD_SELECTOR;
712
964
  /**
@@ -753,6 +1005,35 @@ export declare class Rutter {
753
1005
  private validateIngressCIDRs;
754
1006
  private validateEgressCIDRs;
755
1007
  private validatePeerCIDRs;
1008
+ private validateAGICHealthProbeParams;
1009
+ private validateAGICSecurityParams;
1010
+ private isValidHostname;
1011
+ private validateAGICAnnotationConsistency;
1012
+ private buildPodEnvironment;
1013
+ private buildJobSpec;
1014
+ private buildJobPodTemplate;
1015
+ private buildCronJobSpec;
1016
+ private buildCronJobTemplate;
1017
+ /**
1018
+ * Validate Job specification for security and best practices
1019
+ */
1020
+ private validateJobSpec;
1021
+ /**
1022
+ * Validate CronJob specification for security and best practices
1023
+ */
1024
+ private validateCronJobSpec;
1025
+ /**
1026
+ * Validate cron schedule expression
1027
+ */
1028
+ private validateCronSchedule;
1029
+ /**
1030
+ * Sanitize environment variable names and values
1031
+ */
1032
+ private sanitizeEnvVar;
1033
+ /**
1034
+ * Get default resource limits for Jobs and CronJobs
1035
+ */
1036
+ private getDefaultResources;
756
1037
  /**
757
1038
  * Capture the YAML of an ApiObject or Construct into assets.
758
1039
  */