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,165 @@
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 declare class AWSResources extends BaseResourceProvider {
10
+ private static readonly STORAGE_API_VERSION;
11
+ private static readonly CORE_API_VERSION;
12
+ private static readonly NETWORKING_API_VERSION;
13
+ /**
14
+ * Creates an AWS EBS StorageClass
15
+ * @param spec - EBS StorageClass specification
16
+ * @returns Created StorageClass ApiObject
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * awsResources.addEBSStorageClass({
21
+ * name: 'fast-ebs',
22
+ * volumeType: 'gp3',
23
+ * encrypted: true,
24
+ * allowVolumeExpansion: true
25
+ * });
26
+ * ```
27
+ *
28
+ * @since 2.4.0
29
+ */
30
+ addEBSStorageClass(spec: AWSEBSStorageClassSpec): ApiObject;
31
+ /**
32
+ * Creates an AWS EFS StorageClass
33
+ * @param spec - EFS StorageClass specification
34
+ * @returns Created StorageClass ApiObject
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * awsResources.addEFSStorageClass({
39
+ * name: 'efs-storage',
40
+ * fileSystemId: 'fs-12345678',
41
+ * directoryPerms: '0755'
42
+ * });
43
+ * ```
44
+ *
45
+ * @since 2.4.0
46
+ */
47
+ addEFSStorageClass(spec: AWSEFSStorageClassSpec): ApiObject;
48
+ /**
49
+ * Creates an AWS IRSA (IAM Roles for Service Accounts) ServiceAccount
50
+ * @param spec - IRSA ServiceAccount specification
51
+ * @returns Created ServiceAccount ApiObject
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * awsResources.addIRSAServiceAccount({
56
+ * name: 'aws-service-account',
57
+ * roleArn: 'arn:aws:iam::123456789012:role/MyRole'
58
+ * });
59
+ * ```
60
+ *
61
+ * @since 2.4.0
62
+ */
63
+ addIRSAServiceAccount(spec: AWSIRSAServiceAccountSpec): ApiObject;
64
+ /**
65
+ * Creates an AWS ALB Ingress
66
+ * @param spec - ALB Ingress specification
67
+ * @returns Created Ingress ApiObject
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * awsResources.addALBIngress({
72
+ * name: 'web-ingress',
73
+ * rules: [{
74
+ * paths: [{
75
+ * path: '/',
76
+ * pathType: 'Prefix',
77
+ * backend: { service: { name: 'web-service', port: { number: 80 } } }
78
+ * }]
79
+ * }],
80
+ * scheme: 'internet-facing'
81
+ * });
82
+ * ```
83
+ *
84
+ * @since 2.4.0
85
+ */
86
+ addALBIngress(spec: AWSALBIngressSpec): ApiObject;
87
+ /**
88
+ * Validates AWS IAM Role ARN format
89
+ * @param roleArn - Role ARN to validate
90
+ */
91
+ private validateRoleArn;
92
+ /**
93
+ * Builds ALB-specific annotations
94
+ * @param spec - ALB Ingress specification
95
+ * @returns ALB annotations
96
+ */
97
+ private buildALBAnnotations;
98
+ }
99
+ export interface AWSEBSStorageClassSpec {
100
+ name: string;
101
+ volumeType?: 'gp2' | 'gp3' | 'io1' | 'io2' | 'sc1' | 'st1';
102
+ encrypted?: boolean;
103
+ iops?: number;
104
+ throughput?: number;
105
+ fsType?: string;
106
+ reclaimPolicy?: 'Delete' | 'Retain';
107
+ allowVolumeExpansion?: boolean;
108
+ volumeBindingMode?: 'Immediate' | 'WaitForFirstConsumer';
109
+ labels?: Record<string, string>;
110
+ annotations?: Record<string, string>;
111
+ }
112
+ export interface AWSEFSStorageClassSpec {
113
+ name: string;
114
+ fileSystemId?: string;
115
+ directoryPerms?: string;
116
+ gidRangeStart?: number;
117
+ gidRangeEnd?: number;
118
+ basePath?: string;
119
+ reclaimPolicy?: 'Delete' | 'Retain';
120
+ volumeBindingMode?: 'Immediate' | 'WaitForFirstConsumer';
121
+ labels?: Record<string, string>;
122
+ annotations?: Record<string, string>;
123
+ }
124
+ export interface AWSIRSAServiceAccountSpec {
125
+ name: string;
126
+ roleArn: string;
127
+ automountServiceAccountToken?: boolean;
128
+ imagePullSecrets?: Array<{
129
+ name: string;
130
+ }>;
131
+ labels?: Record<string, string>;
132
+ annotations?: Record<string, string>;
133
+ }
134
+ export interface AWSALBIngressSpec {
135
+ name: string;
136
+ rules: Array<{
137
+ host?: string;
138
+ paths: Array<{
139
+ path: string;
140
+ pathType: 'Exact' | 'Prefix' | 'ImplementationSpecific';
141
+ backend: {
142
+ service: {
143
+ name: string;
144
+ port: {
145
+ number?: number;
146
+ name?: string;
147
+ };
148
+ };
149
+ };
150
+ }>;
151
+ }>;
152
+ tls?: Array<{
153
+ hosts?: string[];
154
+ secretName?: string;
155
+ }>;
156
+ scheme?: 'internet-facing' | 'internal';
157
+ targetType?: 'ip' | 'instance';
158
+ certificateArn?: string;
159
+ sslRedirect?: boolean;
160
+ healthCheckPath?: string;
161
+ ingressClassName?: string;
162
+ labels?: Record<string, string>;
163
+ annotations?: Record<string, string>;
164
+ }
165
+ //# sourceMappingURL=awsResources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"awsResources.d.ts","sourceRoot":"","sources":["../../../../../src/lib/resources/cloud/aws/awsResources.ts"],"names":[],"mappings":"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"}
@@ -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":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,oBAAoB;IACtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAuB;IAClE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAA0B;IAExE;;;;;;;;;;;;;;;;OAgBG;IACH,wBAAwB,CAAC,IAAI,EAAE,yBAAyB,GAAG,SAAS;IA0BpE;;;;;;;;;;;;;;;;OAgBG;IACH,wBAAwB,CAAC,IAAI,EAAE,yBAAyB,GAAG,SAAS;IA2BpE;;;;;;;;;;;;;;;;;OAiBG;IACH,4BAA4B,CAAC,IAAI,EAAE,oBAAoB,GAAG,SAAS;IAqDnE;;;;;;;;;;;;;;;;;;OAkBG;IACH,mCAAmC,CAAC,IAAI,EAAE,oCAAoC,GAAG,SAAS;IAgD1F;;;;;;;;;;;;;;;OAeG;IACH,yBAAyB,CAAC,IAAI,EAAE,0BAA0B,GAAG,SAAS;CAkBvE;AAGD,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,cAAc,GAAG,aAAa,GAAG,iBAAiB,GAAG,cAAc,CAAC;IAC9E,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;IAC1C,aAAa,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACpC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,WAAW,GAAG,sBAAsB,CAAC;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,cAAc,GAAG,aAAa,CAAC;IACzC,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACpC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,WAAW,GAAG,sBAAsB,CAAC;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,GAAG,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,oCAAoC;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;QACtC,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC"}