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.
Files changed (67) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +5 -1
  3. package/SECURITY.md +3 -3
  4. package/dist/index.d.ts +6 -2
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +6 -2
  7. package/dist/index.js.map +1 -1
  8. package/dist/lib/{HelmChartWriter.d.ts → helmChartWriter.d.ts} +1 -1
  9. package/dist/lib/{HelmChartWriter.d.ts.map → helmChartWriter.d.ts.map} +1 -1
  10. package/dist/lib/{HelmChartWriter.js → helmChartWriter.js} +1 -1
  11. package/dist/lib/{HelmChartWriter.js.map → helmChartWriter.js.map} +1 -1
  12. package/dist/lib/resources/autoscaling/autoscalingResources.d.ts +26 -0
  13. package/dist/lib/resources/autoscaling/autoscalingResources.d.ts.map +1 -0
  14. package/dist/lib/resources/autoscaling/autoscalingResources.js +35 -0
  15. package/dist/lib/resources/autoscaling/autoscalingResources.js.map +1 -0
  16. package/dist/lib/resources/baseResourceProvider.d.ts +47 -0
  17. package/dist/lib/resources/baseResourceProvider.d.ts.map +1 -0
  18. package/dist/lib/resources/baseResourceProvider.js +83 -0
  19. package/dist/lib/resources/baseResourceProvider.js.map +1 -0
  20. package/dist/lib/resources/cloud/aws/awsResources.d.ts +165 -0
  21. package/dist/lib/resources/cloud/aws/awsResources.d.ts.map +1 -0
  22. package/dist/lib/resources/cloud/aws/awsResources.js +187 -0
  23. package/dist/lib/resources/cloud/aws/awsResources.js.map +1 -0
  24. package/dist/lib/resources/cloud/azure/azureResources.d.ts +169 -0
  25. package/dist/lib/resources/cloud/azure/azureResources.d.ts.map +1 -0
  26. package/dist/lib/resources/cloud/azure/azureResources.js +218 -0
  27. package/dist/lib/resources/cloud/azure/azureResources.js.map +1 -0
  28. package/dist/lib/resources/cloud/gcp/gcpResources.d.ts +133 -0
  29. package/dist/lib/resources/cloud/gcp/gcpResources.d.ts.map +1 -0
  30. package/dist/lib/resources/cloud/gcp/gcpResources.js +162 -0
  31. package/dist/lib/resources/cloud/gcp/gcpResources.js.map +1 -0
  32. package/dist/lib/resources/core/coreResources.d.ts +584 -0
  33. package/dist/lib/resources/core/coreResources.d.ts.map +1 -0
  34. package/dist/lib/resources/core/coreResources.js +796 -0
  35. package/dist/lib/resources/core/coreResources.js.map +1 -0
  36. package/dist/lib/resources/core/storageResources.d.ts +133 -0
  37. package/dist/lib/resources/core/storageResources.d.ts.map +1 -0
  38. package/dist/lib/resources/core/storageResources.js +120 -0
  39. package/dist/lib/resources/core/storageResources.js.map +1 -0
  40. package/dist/lib/resources/validation/validationResources.d.ts +26 -0
  41. package/dist/lib/resources/validation/validationResources.d.ts.map +1 -0
  42. package/dist/lib/resources/validation/validationResources.js +33 -0
  43. package/dist/lib/resources/validation/validationResources.js.map +1 -0
  44. package/dist/lib/rutter.d.ts +554 -0
  45. package/dist/lib/rutter.d.ts.map +1 -0
  46. package/dist/lib/rutter.js +665 -0
  47. package/dist/lib/rutter.js.map +1 -0
  48. package/dist/lib/security.d.ts +21 -0
  49. package/dist/lib/security.d.ts.map +1 -1
  50. package/dist/lib/security.js +21 -0
  51. package/dist/lib/security.js.map +1 -1
  52. package/dist/lib/umbrella.d.ts +22 -2
  53. package/dist/lib/umbrella.d.ts.map +1 -1
  54. package/dist/lib/umbrella.js +21 -1
  55. package/dist/lib/umbrella.js.map +1 -1
  56. package/dist/lib/umbrellaRutter.d.ts +97 -0
  57. package/dist/lib/umbrellaRutter.d.ts.map +1 -0
  58. package/dist/lib/{UmbrellaRutter.js → umbrellaRutter.js} +44 -1
  59. package/dist/lib/umbrellaRutter.js.map +1 -0
  60. package/package.json +2 -1
  61. package/dist/lib/Rutter.d.ts +0 -2688
  62. package/dist/lib/Rutter.d.ts.map +0 -1
  63. package/dist/lib/Rutter.js +0 -2863
  64. package/dist/lib/Rutter.js.map +0 -1
  65. package/dist/lib/UmbrellaRutter.d.ts +0 -34
  66. package/dist/lib/UmbrellaRutter.d.ts.map +0 -1
  67. package/dist/lib/UmbrellaRutter.js.map +0 -1
@@ -0,0 +1,187 @@
1
+ import { ApiObject } from 'cdk8s';
2
+ import { BaseResourceProvider } from '../../baseResourceProvider.js';
3
+ /**
4
+ * AWS-specific Kubernetes resources provider
5
+ * Handles AWS integrations like EBS, EFS, ALB, IRSA, and other AWS services
6
+ *
7
+ * @since 2.4.0
8
+ */
9
+ export class AWSResources extends BaseResourceProvider {
10
+ /**
11
+ * Creates an AWS EBS StorageClass
12
+ * @param spec - EBS StorageClass specification
13
+ * @returns Created StorageClass ApiObject
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * awsResources.addEBSStorageClass({
18
+ * name: 'fast-ebs',
19
+ * volumeType: 'gp3',
20
+ * encrypted: true,
21
+ * allowVolumeExpansion: true
22
+ * });
23
+ * ```
24
+ *
25
+ * @since 2.4.0
26
+ */
27
+ addEBSStorageClass(spec) {
28
+ const parameters = {
29
+ type: spec.volumeType ?? 'gp3',
30
+ ...(spec.encrypted !== undefined ? { encrypted: String(spec.encrypted) } : {}),
31
+ ...(spec.iops ? { iops: String(spec.iops) } : {}),
32
+ ...(spec.throughput ? { throughput: String(spec.throughput) } : {}),
33
+ ...(spec.fsType ? { fsType: spec.fsType } : {}),
34
+ };
35
+ const storageClassSpec = {
36
+ provisioner: 'ebs.csi.aws.com',
37
+ parameters,
38
+ reclaimPolicy: spec.reclaimPolicy ?? 'Delete',
39
+ allowVolumeExpansion: spec.allowVolumeExpansion ?? true,
40
+ volumeBindingMode: spec.volumeBindingMode ?? 'WaitForFirstConsumer',
41
+ };
42
+ return this.createApiObject(spec.name, AWSResources.STORAGE_API_VERSION, 'StorageClass', storageClassSpec, spec.labels, spec.annotations);
43
+ }
44
+ /**
45
+ * Creates an AWS EFS StorageClass
46
+ * @param spec - EFS StorageClass specification
47
+ * @returns Created StorageClass ApiObject
48
+ *
49
+ * @example
50
+ * ```typescript
51
+ * awsResources.addEFSStorageClass({
52
+ * name: 'efs-storage',
53
+ * fileSystemId: 'fs-12345678',
54
+ * directoryPerms: '0755'
55
+ * });
56
+ * ```
57
+ *
58
+ * @since 2.4.0
59
+ */
60
+ addEFSStorageClass(spec) {
61
+ const parameters = {
62
+ ...(spec.fileSystemId ? { fileSystemId: spec.fileSystemId } : {}),
63
+ ...(spec.directoryPerms ? { directoryPerms: spec.directoryPerms } : {}),
64
+ ...(spec.gidRangeStart ? { gidRangeStart: String(spec.gidRangeStart) } : {}),
65
+ ...(spec.gidRangeEnd ? { gidRangeEnd: String(spec.gidRangeEnd) } : {}),
66
+ ...(spec.basePath ? { basePath: spec.basePath } : {}),
67
+ };
68
+ const storageClassSpec = {
69
+ provisioner: 'efs.csi.aws.com',
70
+ parameters,
71
+ reclaimPolicy: spec.reclaimPolicy ?? 'Delete',
72
+ volumeBindingMode: spec.volumeBindingMode ?? 'Immediate',
73
+ };
74
+ return this.createApiObject(spec.name, AWSResources.STORAGE_API_VERSION, 'StorageClass', storageClassSpec, spec.labels, spec.annotations);
75
+ }
76
+ /**
77
+ * Creates an AWS IRSA (IAM Roles for Service Accounts) ServiceAccount
78
+ * @param spec - IRSA ServiceAccount specification
79
+ * @returns Created ServiceAccount ApiObject
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * awsResources.addIRSAServiceAccount({
84
+ * name: 'aws-service-account',
85
+ * roleArn: 'arn:aws:iam::123456789012:role/MyRole'
86
+ * });
87
+ * ```
88
+ *
89
+ * @since 2.4.0
90
+ */
91
+ addIRSAServiceAccount(spec) {
92
+ this.validateRoleArn(spec.roleArn);
93
+ const annotations = {
94
+ 'eks.amazonaws.com/role-arn': spec.roleArn,
95
+ ...(spec.annotations ?? {}),
96
+ };
97
+ return new ApiObject(this.chart, spec.name, {
98
+ apiVersion: AWSResources.CORE_API_VERSION,
99
+ kind: 'ServiceAccount',
100
+ metadata: {
101
+ name: spec.name,
102
+ annotations,
103
+ ...(spec.labels ? { labels: spec.labels } : {}),
104
+ },
105
+ ...(spec.automountServiceAccountToken !== undefined
106
+ ? { automountServiceAccountToken: spec.automountServiceAccountToken }
107
+ : {}),
108
+ ...(spec.imagePullSecrets ? { imagePullSecrets: spec.imagePullSecrets } : {}),
109
+ });
110
+ }
111
+ /**
112
+ * Creates an AWS ALB Ingress
113
+ * @param spec - ALB Ingress specification
114
+ * @returns Created Ingress ApiObject
115
+ *
116
+ * @example
117
+ * ```typescript
118
+ * awsResources.addALBIngress({
119
+ * name: 'web-ingress',
120
+ * rules: [{
121
+ * paths: [{
122
+ * path: '/',
123
+ * pathType: 'Prefix',
124
+ * backend: { service: { name: 'web-service', port: { number: 80 } } }
125
+ * }]
126
+ * }],
127
+ * scheme: 'internet-facing'
128
+ * });
129
+ * ```
130
+ *
131
+ * @since 2.4.0
132
+ */
133
+ addALBIngress(spec) {
134
+ const annotations = this.buildALBAnnotations(spec);
135
+ const ingressSpec = {
136
+ ...(spec.ingressClassName ? { ingressClassName: spec.ingressClassName } : {}),
137
+ rules: spec.rules,
138
+ ...(spec.tls ? { tls: spec.tls } : {}),
139
+ };
140
+ return this.createApiObject(spec.name, AWSResources.NETWORKING_API_VERSION, 'Ingress', ingressSpec, spec.labels, annotations);
141
+ }
142
+ /**
143
+ * Validates AWS IAM Role ARN format
144
+ * @param roleArn - Role ARN to validate
145
+ */
146
+ validateRoleArn(roleArn) {
147
+ // Skip validation for Helm template values
148
+ if (roleArn.includes('{{') && roleArn.includes('}}')) {
149
+ return;
150
+ }
151
+ const arnRegex = /^arn:aws:iam::\d{12}:role\/[\w+=,.@-]+$/;
152
+ if (!arnRegex.test(roleArn)) {
153
+ throw new Error(`Invalid AWS IAM Role ARN format: ${roleArn}`);
154
+ }
155
+ }
156
+ /**
157
+ * Builds ALB-specific annotations
158
+ * @param spec - ALB Ingress specification
159
+ * @returns ALB annotations
160
+ */
161
+ buildALBAnnotations(spec) {
162
+ const annotations = {
163
+ 'kubernetes.io/ingress.class': 'alb',
164
+ ...(spec.annotations ?? {}),
165
+ };
166
+ if (spec.scheme) {
167
+ annotations['alb.ingress.kubernetes.io/scheme'] = spec.scheme;
168
+ }
169
+ if (spec.targetType) {
170
+ annotations['alb.ingress.kubernetes.io/target-type'] = spec.targetType;
171
+ }
172
+ if (spec.certificateArn) {
173
+ annotations['alb.ingress.kubernetes.io/certificate-arn'] = spec.certificateArn;
174
+ }
175
+ if (spec.sslRedirect) {
176
+ annotations['alb.ingress.kubernetes.io/ssl-redirect'] = '443';
177
+ }
178
+ if (spec.healthCheckPath) {
179
+ annotations['alb.ingress.kubernetes.io/healthcheck-path'] = spec.healthCheckPath;
180
+ }
181
+ return annotations;
182
+ }
183
+ }
184
+ AWSResources.STORAGE_API_VERSION = 'storage.k8s.io/v1';
185
+ AWSResources.CORE_API_VERSION = 'v1';
186
+ AWSResources.NETWORKING_API_VERSION = 'networking.k8s.io/v1';
187
+ //# sourceMappingURL=awsResources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"awsResources.js","sourceRoot":"","sources":["../../../../../src/lib/resources/cloud/aws/awsResources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,169 @@
1
+ import type { ApiObject } from 'cdk8s';
2
+ import { BaseResourceProvider } from '../../baseResourceProvider.js';
3
+ /**
4
+ * Azure-specific Kubernetes resources provider
5
+ * Handles Azure integrations like Azure Disk, Azure File, Application Gateway, AGIC, and other Azure services
6
+ *
7
+ * @since 2.4.0
8
+ */
9
+ export declare class AzureResources extends BaseResourceProvider {
10
+ private static readonly STORAGE_API_VERSION;
11
+ private static readonly NETWORKING_API_VERSION;
12
+ /**
13
+ * Creates an Azure Disk StorageClass
14
+ * @param spec - Azure Disk StorageClass specification
15
+ * @returns Created StorageClass ApiObject
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * azureResources.addAzureDiskStorageClass({
20
+ * name: 'premium-disk',
21
+ * skuName: 'Premium_LRS',
22
+ * cachingMode: 'ReadOnly',
23
+ * allowVolumeExpansion: true
24
+ * });
25
+ * ```
26
+ *
27
+ * @since 2.4.0
28
+ */
29
+ addAzureDiskStorageClass(spec: AzureDiskStorageClassSpec): ApiObject;
30
+ /**
31
+ * Creates an Azure File StorageClass
32
+ * @param spec - Azure File StorageClass specification
33
+ * @returns Created StorageClass ApiObject
34
+ *
35
+ * @example
36
+ * ```typescript
37
+ * azureResources.addAzureFileStorageClass({
38
+ * name: 'azure-file-premium',
39
+ * skuName: 'Premium_LRS',
40
+ * protocol: 'nfs',
41
+ * allowSharedAccess: true
42
+ * });
43
+ * ```
44
+ *
45
+ * @since 2.4.0
46
+ */
47
+ addAzureFileStorageClass(spec: AzureFileStorageClassSpec): ApiObject;
48
+ /**
49
+ * Creates an Azure Application Gateway Ingress
50
+ * @param spec - AGIC Ingress specification
51
+ * @returns Created Ingress ApiObject
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * azureResources.addApplicationGatewayIngress({
56
+ * name: 'app-gateway-ingress',
57
+ * host: 'myapp.example.com',
58
+ * serviceName: 'my-service',
59
+ * servicePort: 80,
60
+ * sslRedirect: true
61
+ * });
62
+ * ```
63
+ *
64
+ * @since 2.4.0
65
+ */
66
+ addApplicationGatewayIngress(spec: AzureAGICIngressSpec): ApiObject;
67
+ /**
68
+ * Creates an Azure Key Vault SecretProviderClass
69
+ * @param spec - Azure Key Vault SecretProviderClass specification
70
+ * @returns Created SecretProviderClass ApiObject
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * azureResources.addAzureKeyVaultSecretProviderClass({
75
+ * name: 'app-secrets',
76
+ * keyVaultName: 'my-keyvault',
77
+ * tenantId: '87654321-4321-4321-4321-210987654321',
78
+ * objects: [
79
+ * { objectName: 'database-password', objectType: 'secret' }
80
+ * ]
81
+ * });
82
+ * ```
83
+ *
84
+ * @since 2.4.0
85
+ */
86
+ addAzureKeyVaultSecretProviderClass(spec: AzureKeyVaultSecretProviderClassSpec): ApiObject;
87
+ /**
88
+ * Creates an Azure Container Registry ServiceAccount
89
+ * @param spec - Azure ACR ServiceAccount specification
90
+ * @returns Created ServiceAccount ApiObject
91
+ *
92
+ * @example
93
+ * ```typescript
94
+ * azureResources.addAzureACRServiceAccount({
95
+ * name: 'acr-service-account',
96
+ * acrName: 'myregistry',
97
+ * resourceGroup: 'my-rg'
98
+ * });
99
+ * ```
100
+ *
101
+ * @since 2.4.0
102
+ */
103
+ addAzureACRServiceAccount(spec: AzureACRServiceAccountSpec): ApiObject;
104
+ }
105
+ export interface AzureDiskStorageClassSpec {
106
+ name: string;
107
+ skuName?: 'Standard_LRS' | 'Premium_LRS' | 'StandardSSD_LRS' | 'UltraSSD_LRS';
108
+ cachingMode?: 'None' | 'ReadOnly' | 'ReadWrite';
109
+ fsType?: string;
110
+ kind?: 'Shared' | 'Dedicated' | 'Managed';
111
+ reclaimPolicy?: 'Delete' | 'Retain';
112
+ allowVolumeExpansion?: boolean;
113
+ volumeBindingMode?: 'Immediate' | 'WaitForFirstConsumer';
114
+ labels?: Record<string, string>;
115
+ annotations?: Record<string, string>;
116
+ }
117
+ export interface AzureFileStorageClassSpec {
118
+ name: string;
119
+ skuName?: 'Standard_LRS' | 'Premium_LRS';
120
+ protocol?: 'smb' | 'nfs';
121
+ allowSharedAccess?: boolean;
122
+ reclaimPolicy?: 'Delete' | 'Retain';
123
+ allowVolumeExpansion?: boolean;
124
+ volumeBindingMode?: 'Immediate' | 'WaitForFirstConsumer';
125
+ labels?: Record<string, string>;
126
+ annotations?: Record<string, string>;
127
+ }
128
+ export interface AzureAGICIngressSpec {
129
+ name: string;
130
+ host: string;
131
+ serviceName: string;
132
+ servicePort: number;
133
+ path?: string;
134
+ sslRedirect?: boolean;
135
+ cookieBasedAffinity?: boolean;
136
+ requestTimeout?: number;
137
+ connectionDraining?: boolean;
138
+ tls?: Array<{
139
+ hosts: string[];
140
+ secretName: string;
141
+ }>;
142
+ labels?: Record<string, string>;
143
+ annotations?: Record<string, string>;
144
+ }
145
+ export interface AzureKeyVaultSecretProviderClassSpec {
146
+ name: string;
147
+ keyVaultName: string;
148
+ tenantId: string;
149
+ objects: Array<{
150
+ objectName: string;
151
+ objectType: 'secret' | 'key' | 'cert';
152
+ objectAlias?: string;
153
+ objectVersion?: string;
154
+ }>;
155
+ secretName?: string;
156
+ userAssignedIdentityID?: string;
157
+ labels?: Record<string, string>;
158
+ annotations?: Record<string, string>;
159
+ }
160
+ export interface AzureACRServiceAccountSpec {
161
+ name: string;
162
+ acrName: string;
163
+ resourceGroup?: string;
164
+ clientId?: string;
165
+ tenantId?: string;
166
+ labels?: Record<string, string>;
167
+ annotations?: Record<string, string>;
168
+ }
169
+ //# sourceMappingURL=azureResources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azureResources.d.ts","sourceRoot":"","sources":["../../../../../src/lib/resources/cloud/azure/azureResources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,218 @@
1
+ import { BaseResourceProvider } from '../../baseResourceProvider.js';
2
+ /**
3
+ * Azure-specific Kubernetes resources provider
4
+ * Handles Azure integrations like Azure Disk, Azure File, Application Gateway, AGIC, and other Azure services
5
+ *
6
+ * @since 2.4.0
7
+ */
8
+ export class AzureResources extends BaseResourceProvider {
9
+ /**
10
+ * Creates an Azure Disk StorageClass
11
+ * @param spec - Azure Disk StorageClass specification
12
+ * @returns Created StorageClass ApiObject
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * azureResources.addAzureDiskStorageClass({
17
+ * name: 'premium-disk',
18
+ * skuName: 'Premium_LRS',
19
+ * cachingMode: 'ReadOnly',
20
+ * allowVolumeExpansion: true
21
+ * });
22
+ * ```
23
+ *
24
+ * @since 2.4.0
25
+ */
26
+ addAzureDiskStorageClass(spec) {
27
+ const parameters = {
28
+ skuName: spec.skuName ?? 'Standard_LRS',
29
+ ...(spec.cachingMode ? { cachingmode: spec.cachingMode } : {}),
30
+ ...(spec.fsType ? { fsType: spec.fsType } : {}),
31
+ ...(spec.kind ? { kind: spec.kind } : {}),
32
+ };
33
+ const storageClassSpec = {
34
+ provisioner: 'disk.csi.azure.com',
35
+ parameters,
36
+ reclaimPolicy: spec.reclaimPolicy ?? 'Delete',
37
+ allowVolumeExpansion: spec.allowVolumeExpansion ?? true,
38
+ volumeBindingMode: spec.volumeBindingMode ?? 'WaitForFirstConsumer',
39
+ };
40
+ return this.createApiObject(spec.name, AzureResources.STORAGE_API_VERSION, 'StorageClass', storageClassSpec, spec.labels, spec.annotations);
41
+ }
42
+ /**
43
+ * Creates an Azure File StorageClass
44
+ * @param spec - Azure File StorageClass specification
45
+ * @returns Created StorageClass ApiObject
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * azureResources.addAzureFileStorageClass({
50
+ * name: 'azure-file-premium',
51
+ * skuName: 'Premium_LRS',
52
+ * protocol: 'nfs',
53
+ * allowSharedAccess: true
54
+ * });
55
+ * ```
56
+ *
57
+ * @since 2.4.0
58
+ */
59
+ addAzureFileStorageClass(spec) {
60
+ const parameters = {
61
+ skuName: spec.skuName ?? 'Standard_LRS',
62
+ ...(spec.protocol ? { protocol: spec.protocol } : {}),
63
+ ...(spec.allowSharedAccess !== undefined
64
+ ? { allowSharedAccess: String(spec.allowSharedAccess) }
65
+ : {}),
66
+ };
67
+ const storageClassSpec = {
68
+ provisioner: 'file.csi.azure.com',
69
+ parameters,
70
+ reclaimPolicy: spec.reclaimPolicy ?? 'Delete',
71
+ allowVolumeExpansion: spec.allowVolumeExpansion ?? true,
72
+ volumeBindingMode: spec.volumeBindingMode ?? 'Immediate',
73
+ };
74
+ return this.createApiObject(spec.name, AzureResources.STORAGE_API_VERSION, 'StorageClass', storageClassSpec, spec.labels, spec.annotations);
75
+ }
76
+ /**
77
+ * Creates an Azure Application Gateway Ingress
78
+ * @param spec - AGIC Ingress specification
79
+ * @returns Created Ingress ApiObject
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * azureResources.addApplicationGatewayIngress({
84
+ * name: 'app-gateway-ingress',
85
+ * host: 'myapp.example.com',
86
+ * serviceName: 'my-service',
87
+ * servicePort: 80,
88
+ * sslRedirect: true
89
+ * });
90
+ * ```
91
+ *
92
+ * @since 2.4.0
93
+ */
94
+ addApplicationGatewayIngress(spec) {
95
+ const annotations = {
96
+ 'kubernetes.io/ingress.class': 'azure/application-gateway',
97
+ ...(spec.sslRedirect !== undefined
98
+ ? { 'appgw.ingress.kubernetes.io/ssl-redirect': String(spec.sslRedirect) }
99
+ : {}),
100
+ ...(spec.cookieBasedAffinity !== undefined
101
+ ? { 'appgw.ingress.kubernetes.io/cookie-based-affinity': String(spec.cookieBasedAffinity) }
102
+ : {}),
103
+ ...(spec.requestTimeout
104
+ ? { 'appgw.ingress.kubernetes.io/request-timeout': String(spec.requestTimeout) }
105
+ : {}),
106
+ ...(spec.connectionDraining !== undefined
107
+ ? { 'appgw.ingress.kubernetes.io/connection-draining': String(spec.connectionDraining) }
108
+ : {}),
109
+ ...(spec.annotations || {}),
110
+ };
111
+ const rules = [
112
+ {
113
+ host: spec.host,
114
+ http: {
115
+ paths: [
116
+ {
117
+ path: spec.path ?? '/',
118
+ pathType: 'Prefix',
119
+ backend: {
120
+ service: {
121
+ name: spec.serviceName,
122
+ port: { number: spec.servicePort },
123
+ },
124
+ },
125
+ },
126
+ ],
127
+ },
128
+ },
129
+ ];
130
+ const ingressSpec = {
131
+ rules,
132
+ ...(spec.tls ? { tls: spec.tls } : {}),
133
+ };
134
+ return this.createApiObject(spec.name, AzureResources.NETWORKING_API_VERSION, 'Ingress', ingressSpec, spec.labels, annotations);
135
+ }
136
+ /**
137
+ * Creates an Azure Key Vault SecretProviderClass
138
+ * @param spec - Azure Key Vault SecretProviderClass specification
139
+ * @returns Created SecretProviderClass ApiObject
140
+ *
141
+ * @example
142
+ * ```typescript
143
+ * azureResources.addAzureKeyVaultSecretProviderClass({
144
+ * name: 'app-secrets',
145
+ * keyVaultName: 'my-keyvault',
146
+ * tenantId: '87654321-4321-4321-4321-210987654321',
147
+ * objects: [
148
+ * { objectName: 'database-password', objectType: 'secret' }
149
+ * ]
150
+ * });
151
+ * ```
152
+ *
153
+ * @since 2.4.0
154
+ */
155
+ addAzureKeyVaultSecretProviderClass(spec) {
156
+ // Validate object names for security
157
+ spec.objects.forEach((obj) => {
158
+ if (obj.objectName.includes('../') || obj.objectName.includes('..\\')) {
159
+ throw new Error(`Azure Key Vault ${spec.name}: Object name '${obj.objectName}' contains invalid path traversal sequences`);
160
+ }
161
+ });
162
+ const objects = spec.objects.map((obj) => ({
163
+ objectName: obj.objectName,
164
+ objectType: obj.objectType,
165
+ ...(obj.objectAlias ? { objectAlias: obj.objectAlias } : {}),
166
+ ...(obj.objectVersion ? { objectVersion: obj.objectVersion } : {}),
167
+ }));
168
+ const secretProviderSpec = {
169
+ secretObjects: [
170
+ {
171
+ secretName: spec.secretName || spec.name,
172
+ type: 'Opaque',
173
+ data: objects.map((obj) => ({
174
+ objectName: obj.objectName,
175
+ key: obj.objectAlias || obj.objectName,
176
+ })),
177
+ },
178
+ ],
179
+ parameters: {
180
+ keyvaultName: spec.keyVaultName,
181
+ tenantId: spec.tenantId,
182
+ objects: JSON.stringify({ array: objects }),
183
+ ...(spec.userAssignedIdentityID
184
+ ? { userAssignedIdentityID: spec.userAssignedIdentityID }
185
+ : {}),
186
+ },
187
+ };
188
+ return this.createApiObject(spec.name, 'secrets-store.csi.x-k8s.io/v1', 'SecretProviderClass', secretProviderSpec, spec.labels, spec.annotations);
189
+ }
190
+ /**
191
+ * Creates an Azure Container Registry ServiceAccount
192
+ * @param spec - Azure ACR ServiceAccount specification
193
+ * @returns Created ServiceAccount ApiObject
194
+ *
195
+ * @example
196
+ * ```typescript
197
+ * azureResources.addAzureACRServiceAccount({
198
+ * name: 'acr-service-account',
199
+ * acrName: 'myregistry',
200
+ * resourceGroup: 'my-rg'
201
+ * });
202
+ * ```
203
+ *
204
+ * @since 2.4.0
205
+ */
206
+ addAzureACRServiceAccount(spec) {
207
+ const annotations = {
208
+ 'azure.workload.identity/client-id': spec.clientId || '',
209
+ 'azure.workload.identity/tenant-id': spec.tenantId || '',
210
+ ...(spec.annotations || {}),
211
+ };
212
+ const serviceAccountSpec = {};
213
+ return this.createApiObject(spec.name, 'v1', 'ServiceAccount', serviceAccountSpec, spec.labels, annotations);
214
+ }
215
+ }
216
+ AzureResources.STORAGE_API_VERSION = 'storage.k8s.io/v1';
217
+ AzureResources.NETWORKING_API_VERSION = 'networking.k8s.io/v1';
218
+ //# sourceMappingURL=azureResources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azureResources.js","sourceRoot":"","sources":["../../../../../src/lib/resources/cloud/azure/azureResources.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE;;;;;GAKG;AACH,MAAM,OAAO,cAAe,SAAQ,oBAAoB;IAItD;;;;;;;;;;;;;;;;OAgBG;IACH,wBAAwB,CAAC,IAA+B;QACtD,MAAM,UAAU,GAA2B;YACzC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,cAAc;YACvC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C,CAAC;QAEF,MAAM,gBAAgB,GAAG;YACvB,WAAW,EAAE,oBAAoB;YACjC,UAAU;YACV,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,QAAQ;YAC7C,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,IAAI,IAAI;YACvD,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,sBAAsB;SACpE,CAAC;QAEF,OAAO,IAAI,CAAC,eAAe,CACzB,IAAI,CAAC,IAAI,EACT,cAAc,CAAC,mBAAmB,EAClC,cAAc,EACd,gBAAgB,EAChB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,CACjB,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,wBAAwB,CAAC,IAA+B;QACtD,MAAM,UAAU,GAA2B;YACzC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,cAAc;YACvC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,IAAI,CAAC,iBAAiB,KAAK,SAAS;gBACtC,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;gBACvD,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QAEF,MAAM,gBAAgB,GAAG;YACvB,WAAW,EAAE,oBAAoB;YACjC,UAAU;YACV,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,QAAQ;YAC7C,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,IAAI,IAAI;YACvD,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,WAAW;SACzD,CAAC;QAEF,OAAO,IAAI,CAAC,eAAe,CACzB,IAAI,CAAC,IAAI,EACT,cAAc,CAAC,mBAAmB,EAClC,cAAc,EACd,gBAAgB,EAChB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,CACjB,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,4BAA4B,CAAC,IAA0B;QACrD,MAAM,WAAW,GAA2B;YAC1C,6BAA6B,EAAE,2BAA2B;YAC1D,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS;gBAChC,CAAC,CAAC,EAAE,0CAA0C,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;gBAC1E,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,mBAAmB,KAAK,SAAS;gBACxC,CAAC,CAAC,EAAE,mDAAmD,EAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE;gBAC3F,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,cAAc;gBACrB,CAAC,CAAC,EAAE,6CAA6C,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;gBAChF,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,kBAAkB,KAAK,SAAS;gBACvC,CAAC,CAAC,EAAE,iDAAiD,EAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE;gBACxF,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;SAC5B,CAAC;QAEF,MAAM,KAAK,GAAG;YACZ;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE;oBACJ,KAAK,EAAE;wBACL;4BACE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,GAAG;4BACtB,QAAQ,EAAE,QAAQ;4BAClB,OAAO,EAAE;gCACP,OAAO,EAAE;oCACP,IAAI,EAAE,IAAI,CAAC,WAAW;oCACtB,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE;iCACnC;6BACF;yBACF;qBACF;iBACF;aACF;SACF,CAAC;QAEF,MAAM,WAAW,GAAG;YAClB,KAAK;YACL,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvC,CAAC;QAEF,OAAO,IAAI,CAAC,eAAe,CACzB,IAAI,CAAC,IAAI,EACT,cAAc,CAAC,sBAAsB,EACrC,SAAS,EACT,WAAW,EACX,IAAI,CAAC,MAAM,EACX,WAAW,CACZ,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,mCAAmC,CAAC,IAA0C;QAC5E,qCAAqC;QACrC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC3B,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtE,MAAM,IAAI,KAAK,CACb,mBAAmB,IAAI,CAAC,IAAI,kBAAkB,GAAG,CAAC,UAAU,6CAA6C,CAC1G,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACzC,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnE,CAAC,CAAC,CAAC;QAEJ,MAAM,kBAAkB,GAAG;YACzB,aAAa,EAAE;gBACb;oBACE,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI;oBACxC,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;wBAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;wBAC1B,GAAG,EAAE,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,UAAU;qBACvC,CAAC,CAAC;iBACJ;aACF;YACD,UAAU,EAAE;gBACV,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;gBAC3C,GAAG,CAAC,IAAI,CAAC,sBAAsB;oBAC7B,CAAC,CAAC,EAAE,sBAAsB,EAAE,IAAI,CAAC,sBAAsB,EAAE;oBACzD,CAAC,CAAC,EAAE,CAAC;aACR;SACF,CAAC;QAEF,OAAO,IAAI,CAAC,eAAe,CACzB,IAAI,CAAC,IAAI,EACT,+BAA+B,EAC/B,qBAAqB,EACrB,kBAAkB,EAClB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,CACjB,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,yBAAyB,CAAC,IAAgC;QACxD,MAAM,WAAW,GAA2B;YAC1C,mCAAmC,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;YACxD,mCAAmC,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;YACxD,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;SAC5B,CAAC;QAEF,MAAM,kBAAkB,GAAG,EAAE,CAAC;QAE9B,OAAO,IAAI,CAAC,eAAe,CACzB,IAAI,CAAC,IAAI,EACT,IAAI,EACJ,gBAAgB,EAChB,kBAAkB,EAClB,IAAI,CAAC,MAAM,EACX,WAAW,CACZ,CAAC;IACJ,CAAC;;AArQuB,kCAAmB,GAAG,mBAAmB,CAAC;AAC1C,qCAAsB,GAAG,sBAAsB,CAAC"}