@drunk-pulumi/azure-components 1.0.2 → 1.0.4

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 (103) hide show
  1. package/README.md +29 -2
  2. package/ResourceBuilder.d.ts +76 -24
  3. package/ResourceBuilder.js +144 -44
  4. package/aks/AzKubernetes.d.ts +30 -8
  5. package/aks/AzKubernetes.js +107 -44
  6. package/aks/ContainerRegistry.d.ts +4 -3
  7. package/aks/ContainerRegistry.js +22 -19
  8. package/apim/Apim.d.ts +51 -0
  9. package/apim/Apim.js +248 -0
  10. package/apim/ApimApi.d.ts +34 -0
  11. package/apim/ApimApi.js +193 -0
  12. package/apim/ApimApiSet.d.ts +27 -0
  13. package/apim/ApimApiSet.js +88 -0
  14. package/apim/ApimPolicyBuilder.d.ts +93 -0
  15. package/apim/ApimPolicyBuilder.js +294 -0
  16. package/apim/ApimProduct.d.ts +27 -0
  17. package/apim/ApimProduct.js +118 -0
  18. package/apim/index.d.ts +2 -0
  19. package/apim/index.js +19 -0
  20. package/apim/openAPI3Type.d.ts +85 -0
  21. package/apim/openAPI3Type.js +3 -0
  22. package/apim/openApiHelper.d.ts +1 -0
  23. package/apim/openApiHelper.js +36 -0
  24. package/app/SignalR.d.ts +3 -3
  25. package/app/SignalR.js +35 -20
  26. package/azAd/AppRegistration.d.ts +13 -7
  27. package/azAd/AppRegistration.js +48 -40
  28. package/azAd/AzRole.js +2 -2
  29. package/azAd/GroupRole.d.ts +7 -11
  30. package/azAd/GroupRole.js +7 -6
  31. package/azAd/RoleAssignment.d.ts +1 -1
  32. package/azAd/RoleAssignment.js +5 -5
  33. package/azAd/UserAssignedIdentity.d.ts +3 -0
  34. package/azAd/UserAssignedIdentity.js +23 -7
  35. package/azAd/helpers/index.d.ts +0 -2
  36. package/azAd/helpers/index.js +26 -21
  37. package/azAd/helpers/rolesBuiltIn.d.ts +6 -57
  38. package/azAd/helpers/rolesBuiltIn.js +25868 -25353
  39. package/azAd/helpers/rsRoleDefinition.d.ts +12 -6
  40. package/azAd/helpers/rsRoleDefinition.js +43 -31
  41. package/base/BaseComponent.d.ts +1 -15
  42. package/base/BaseComponent.js +3 -22
  43. package/base/BaseResourceComponent.d.ts +24 -17
  44. package/base/BaseResourceComponent.js +61 -45
  45. package/base/helpers.d.ts +0 -6
  46. package/base/helpers.js +1 -18
  47. package/common/RandomPassword.js +4 -4
  48. package/common/RandomString.d.ts +1 -1
  49. package/common/RandomString.js +3 -3
  50. package/common/RsGroup.js +2 -2
  51. package/database/AzSql.d.ts +11 -10
  52. package/database/AzSql.js +38 -24
  53. package/database/MySql.d.ts +1 -1
  54. package/database/MySql.js +45 -28
  55. package/database/Postgres.d.ts +2 -1
  56. package/database/Postgres.js +29 -17
  57. package/database/Redis.d.ts +25 -4
  58. package/database/Redis.js +88 -25
  59. package/helpers/autoTags.js +2 -1
  60. package/helpers/certHelpers.d.ts +20 -0
  61. package/helpers/certHelpers.js +85 -0
  62. package/helpers/rsHelpers.d.ts +19 -1
  63. package/helpers/rsHelpers.js +27 -4
  64. package/helpers/stackEnv.d.ts +1 -1
  65. package/helpers/stackEnv.js +1 -1
  66. package/index.d.ts +1 -0
  67. package/index.js +2 -1
  68. package/package.json +10 -7
  69. package/services/Automation.d.ts +3 -1
  70. package/services/Automation.js +8 -8
  71. package/services/ServiceBus.d.ts +3 -2
  72. package/services/ServiceBus.js +17 -19
  73. package/types.d.ts +44 -15
  74. package/vault/EncryptionKey.d.ts +1 -1
  75. package/vault/EncryptionKey.js +4 -4
  76. package/vault/KeyVault.d.ts +7 -2
  77. package/vault/KeyVault.js +16 -5
  78. package/vault/VaultSecret.d.ts +1 -1
  79. package/vault/VaultSecret.js +9 -9
  80. package/vault/VaultSecrets.d.ts +2 -4
  81. package/vault/VaultSecrets.js +4 -6
  82. package/vault/helpers.d.ts +17 -0
  83. package/vault/helpers.js +50 -2
  84. package/vm/DiskEncryptionSet.js +2 -2
  85. package/vm/VirtualMachine.d.ts +2 -1
  86. package/vm/VirtualMachine.js +37 -25
  87. package/vnet/Basion.d.ts +4 -3
  88. package/vnet/Basion.js +17 -4
  89. package/vnet/DnsZone.d.ts +1 -1
  90. package/vnet/DnsZone.js +2 -2
  91. package/vnet/IpAddresses.d.ts +6 -2
  92. package/vnet/IpAddresses.js +2 -2
  93. package/vnet/NetworkPeering.d.ts +1 -1
  94. package/vnet/NetworkPeering.js +1 -1
  95. package/vnet/PrivateDnsZone.d.ts +1 -1
  96. package/vnet/PrivateDnsZone.js +4 -4
  97. package/vnet/PrivateEndpoint.d.ts +7 -10
  98. package/vnet/PrivateEndpoint.js +11 -10
  99. package/vnet/RouteTable.d.ts +1 -1
  100. package/vnet/RouteTable.js +2 -2
  101. package/vnet/VirtualNetwork.d.ts +30 -43
  102. package/vnet/VirtualNetwork.js +77 -43
  103. package/vnet/VpnGateway.js +2 -2
@@ -38,29 +38,37 @@ const ccs = __importStar(require("@pulumi/azure-native/containerservice"));
38
38
  const pulumi = __importStar(require("@pulumi/pulumi"));
39
39
  const azAd_1 = require("../azAd");
40
40
  const base_1 = require("../base");
41
- const common_1 = require("../common");
42
41
  const helpers_1 = require("../helpers");
43
- const vault_1 = require("../vault");
44
42
  const DiskEncryptionSet_1 = require("../vm/DiskEncryptionSet");
45
- const aksHelpers = __importStar(require("./helpers"));
43
+ const common_1 = require("../common");
46
44
  class AzKubernetes extends base_1.BaseResourceComponent {
47
45
  id;
48
46
  resourceName;
47
+ namespaces;
48
+ privateDnsZone;
49
49
  constructor(name, args, opts) {
50
50
  super('AzKubernetes', name, args, opts);
51
51
  const app = this.createIdentity();
52
52
  const cluster = this.createCluster(app);
53
+ this.createExtraAgentPoolProfiles(cluster);
53
54
  this.createMaintenance(cluster);
54
55
  this.assignPermission(cluster);
55
- this.addAksCredentialToVault(cluster);
56
+ const nss = this.createNameSpaces(cluster);
57
+ this.privateDnsZone = this.getPrivateDNSZone(cluster);
56
58
  this.id = cluster.id;
57
59
  this.resourceName = cluster.name;
60
+ this.namespaces = helpers_1.rsHelpers.dictReduce(nss, (n, ns) => ({
61
+ id: ns.id,
62
+ resourceName: ns.name.apply((n) => n),
63
+ }));
58
64
  this.registerOutputs();
59
65
  }
60
66
  getOutputs() {
61
67
  return {
62
68
  id: this.id,
63
69
  resourceName: this.resourceName,
70
+ namespaces: this.namespaces,
71
+ privateDnsZone: this.privateDnsZone,
64
72
  };
65
73
  }
66
74
  createIdentity() {
@@ -88,27 +96,30 @@ class AzKubernetes extends base_1.BaseResourceComponent {
88
96
  return { userName, sshPublicKey: ssh.publicKey };
89
97
  }
90
98
  createDiskEncryptionSet() {
91
- const { rsGroup, enableEncryption, defaultUAssignedId, vaultInfo } = this.args;
99
+ const { rsGroup, enableEncryption, diskEncryptionSet, defaultUAssignedId, vaultInfo } = this.args;
92
100
  if (!enableEncryption)
93
101
  return undefined;
102
+ if (diskEncryptionSet)
103
+ return diskEncryptionSet;
94
104
  return new DiskEncryptionSet_1.DiskEncryptionSet(`${this.name}-disk-encryption-set`, {
95
105
  rsGroup,
96
106
  vaultInfo,
97
107
  defaultUAssignedId,
98
108
  encryptionType: 'EncryptionAtRestWithPlatformAndCustomerKeys',
99
- }, { dependsOn: this.opts?.dependsOn, parent: this });
109
+ }, { dependsOn: this.opts?.dependsOn, parent: this }).getOutputs();
100
110
  }
101
111
  createCluster(app) {
102
- const { rsGroup, vaultInfo, groupRoles, defaultUAssignedId, enableEncryption, features, addonProfiles, network, logWorkspace, sku, ...props } = this.args;
103
- const nodeResourceGroup = pulumi.interpolate `${rsGroup.resourceGroupName}-nodes`;
112
+ const { rsGroup, vaultInfo, groupRoles, defaultUAssignedId, enableEncryption, nodeResourceGroup, features, addonProfiles, network, logWorkspace, sku, autoScalerProfile, extraAgentPoolProfiles, ...props } = this.args;
113
+ const nodeRg = nodeResourceGroup ?? pulumi.interpolate `${rsGroup.resourceGroupName}-nodes`;
104
114
  const login = this.createUserNameAndSshKeys();
105
115
  const diskEncryptionSet = this.createDiskEncryptionSet();
106
116
  return new ccs.ManagedCluster(this.name, {
107
117
  ...props,
108
118
  ...rsGroup,
109
- nodeResourceGroup,
119
+ nodeResourceGroup: nodeRg,
110
120
  dnsPrefix: props.dnsPrefix ?? `${helpers_1.azureEnv.currentEnv}-${this.name}`,
111
121
  enableRBAC: true,
122
+ disableLocalAccounts: true,
112
123
  aadProfile: groupRoles
113
124
  ? {
114
125
  enableAzureRBAC: true,
@@ -118,7 +129,7 @@ class AzKubernetes extends base_1.BaseResourceComponent {
118
129
  }
119
130
  : undefined,
120
131
  apiServerAccessProfile: {
121
- authorizedIPRanges: features?.enablePrivateCluster ? undefined : network?.authorizedIPRanges ?? [],
132
+ authorizedIPRanges: features?.enablePrivateCluster ? undefined : (network?.authorizedIPRanges ?? []),
122
133
  disableRunCommand: true,
123
134
  enablePrivateCluster: features?.enablePrivateCluster,
124
135
  //TODO: to make the life simple we enable this to allows IP DNS query from public internet.
@@ -173,7 +184,7 @@ class AzKubernetes extends base_1.BaseResourceComponent {
173
184
  verticalPodAutoscaler: {
174
185
  enabled: features?.enableVerticalPodAutoscaler || false,
175
186
  },
176
- keda: { enabled: features?.enableKeda || false },
187
+ keda: { enabled: true },
177
188
  },
178
189
  //azureMonitorProfile: { metrics: { enabled } },
179
190
  //Refer here for details https://learn.microsoft.com/en-us/azure/aks/use-managed-identity
@@ -207,80 +218,132 @@ class AzKubernetes extends base_1.BaseResourceComponent {
207
218
  type: defaultUAssignedId ? ccs.ResourceIdentityType.UserAssigned : ccs.ResourceIdentityType.SystemAssigned,
208
219
  userAssignedIdentities: defaultUAssignedId ? [defaultUAssignedId.id] : undefined,
209
220
  },
221
+ // identityProfile: defaultUAssignedId
222
+ // ? pulumi.output(defaultUAssignedId).apply((uID) => ({ [uID.id]: uID }))
223
+ // : undefined,
210
224
  networkProfile: {
211
225
  ...network,
212
226
  networkMode: ccs.NetworkMode.Transparent,
213
- networkPolicy: ccs.NetworkPolicy.Azure,
227
+ networkPolicy: network?.networkPolicy ?? ccs.NetworkPolicy.Cilium,
214
228
  networkPlugin: ccs.NetworkPlugin.Azure,
215
229
  loadBalancerSku: 'Standard',
216
230
  outboundType: network?.outboundType ?? ccs.OutboundType.UserDefinedRouting,
217
231
  },
232
+ autoScalerProfile: autoScalerProfile ?? {
233
+ balanceSimilarNodeGroups: 'false',
234
+ expander: 'random',
235
+ maxEmptyBulkDelete: '10',
236
+ maxGracefulTerminationSec: '600',
237
+ maxNodeProvisionTime: '15m',
238
+ maxTotalUnreadyPercentage: '45',
239
+ newPodScaleUpDelay: '0s',
240
+ okTotalUnreadyCount: '3',
241
+ scaleDownDelayAfterAdd: '10m',
242
+ scaleDownDelayAfterDelete: '10s',
243
+ scaleDownDelayAfterFailure: '3m',
244
+ scaleDownUnneededTime: '10m',
245
+ scaleDownUnreadyTime: '20m',
246
+ scaleDownUtilizationThreshold: '0.5',
247
+ scanInterval: '10s',
248
+ skipNodesWithLocalStorage: 'false',
249
+ skipNodesWithSystemPods: 'true',
250
+ },
251
+ autoUpgradeProfile: {
252
+ nodeOSUpgradeChannel: ccs.NodeOSUpgradeChannel.NodeImage,
253
+ upgradeChannel: ccs.UpgradeChannel.Stable,
254
+ },
218
255
  }, {
219
256
  ...this.opts,
220
257
  dependsOn: app,
221
258
  parent: this,
222
259
  });
223
260
  }
261
+ createExtraAgentPoolProfiles(aks) {
262
+ const { rsGroup, extraAgentPoolProfiles } = this.args;
263
+ if (!extraAgentPoolProfiles || extraAgentPoolProfiles.length === 0)
264
+ return;
265
+ return extraAgentPoolProfiles.map((profile) => new ccs.AgentPool(`${this.name}-${profile.name}`, {
266
+ ...rsGroup,
267
+ ...profile,
268
+ resourceName: aks.name,
269
+ agentPoolName: profile.name,
270
+ }, { dependsOn: aks, deletedWith: aks, parent: this }));
271
+ }
272
+ createNameSpaces(aks) {
273
+ const { rsGroup, namespaces } = this.args;
274
+ if (!namespaces)
275
+ return {};
276
+ return helpers_1.rsHelpers.dictReduce(namespaces, (n, props) => new ccs.Namespace(`${this.name}-ns-${n}`, {
277
+ ...rsGroup,
278
+ resourceName: aks.name,
279
+ namespaceName: n,
280
+ properties: props,
281
+ }, { dependsOn: aks, parent: this, retainOnDelete: true }));
282
+ }
224
283
  createMaintenance(aks) {
225
284
  const { rsGroup, maintenance } = this.args;
226
- if (!maintenance)
227
- return undefined;
228
285
  return new ccs.MaintenanceConfiguration(`${this.name}-MaintenanceConfiguration`, {
229
286
  ...rsGroup,
230
- ...maintenance,
231
287
  configName: 'default',
232
288
  resourceName: aks.name,
233
- timeInWeek: maintenance.timeInWeek ?? [
289
+ timeInWeek: maintenance?.timeInWeek ?? [
234
290
  {
235
291
  day: ccs.WeekDay.Sunday,
236
292
  hourSlots: [0, 23],
237
293
  },
238
294
  ],
239
- }, { dependsOn: aks, deleteBeforeReplace: true });
295
+ notAllowedTime: maintenance?.notAllowedTime,
296
+ }, { dependsOn: aks, deletedWith: aks, deleteBeforeReplace: true, parent: this });
240
297
  }
241
298
  assignPermission(aks) {
242
299
  const { rsGroup, attachToAcr } = this.args;
243
- pulumi.all([aks.identity, aks.identityProfile]).apply(([identity, identityProfile]) => {
244
- if (identityProfile?.kubeletIdentity) {
245
- this.addIdentityToRole('contributor', { principalId: identityProfile.kubeletIdentity.objectId });
246
- if (attachToAcr) {
300
+ pulumi
301
+ .all([aks.identity, aks.identityProfile, aks.addonProfiles, attachToAcr])
302
+ .apply(([identity, identityProfile, addon, acr]) => {
303
+ //User Assigned Identity
304
+ //console.log(Object.values(identityProfile!));
305
+ if (identityProfile?.kubeletidentity) {
306
+ this.addIdentityToRole('contributor', { principalId: identityProfile.kubeletidentity.objectId });
307
+ if (acr) {
247
308
  new azAd_1.RoleAssignment(`${this.name}-aks-acr`, {
248
- principalId: identityProfile.kubeletIdentity.objectId,
309
+ principalId: identityProfile.kubeletidentity.objectId,
249
310
  principalType: 'ServicePrincipal',
250
- roleName: 'acr-pull',
251
- scope: attachToAcr.id,
252
- }, { dependsOn: aks, parent: this });
311
+ roleName: 'AcrPull',
312
+ scope: acr.id,
313
+ }, { dependsOn: aks, deletedWith: aks, parent: this });
253
314
  }
254
315
  }
255
- if (identity) {
316
+ //System Managed Identity
317
+ if (identity?.principalId) {
256
318
  new azAd_1.RoleAssignment(`${this.name}-aks-identity`, {
257
319
  principalId: identity.principalId,
258
320
  principalType: 'ServicePrincipal',
259
321
  roleName: 'Contributor',
260
322
  scope: helpers_1.rsHelpers.getRsGroupIdFrom(rsGroup),
261
- }, { dependsOn: aks, parent: this });
323
+ }, { dependsOn: aks, deletedWith: aks, parent: this });
324
+ }
325
+ //addon
326
+ if (addon?.azureKeyvaultSecretsProvider?.identity) {
327
+ this.addIdentityToRole('readOnly', {
328
+ principalId: addon.azureKeyvaultSecretsProvider.identity.objectId,
329
+ });
262
330
  }
263
331
  });
264
332
  }
265
- addAksCredentialToVault(aks) {
266
- const { rsGroup, disableLocalAccounts, vaultInfo } = this.args;
267
- if (!vaultInfo)
333
+ getPrivateDNSZone(aks) {
334
+ const { features } = this.args;
335
+ if (!features.enablePrivateCluster)
268
336
  return undefined;
269
- return pulumi.all([aks.name, rsGroup.resourceGroupName, disableLocalAccounts]).apply(([name, rgName, disabled]) => {
270
- if (!name)
271
- return;
272
- const credential = aksHelpers.getAksConfig({
273
- resourceName: name,
274
- resourceGroupName: rgName,
275
- disableLocalAccounts: disabled,
276
- });
277
- return new vault_1.VaultSecret(`${this.name}-credential`, {
278
- vaultInfo,
279
- value: credential,
280
- contentType: `AzKubernetes ${this.name} aks config`,
281
- }, { dependsOn: aks, parent: this, retainOnDelete: true });
337
+ const rsGroup = aks.nodeResourceGroup;
338
+ const zoneName = aks.privateFQDN.apply((fqdn) => {
339
+ if (!fqdn)
340
+ return fqdn;
341
+ const firstDot = fqdn.indexOf('.');
342
+ return firstDot >= 0 ? fqdn.substring(firstDot + 1) : fqdn;
282
343
  });
344
+ const id = pulumi.interpolate `/subscriptions/${helpers_1.azureEnv.subscriptionId}/resourceGroups/${rsGroup}/providers/Microsoft.Network/privateDnsZones/${zoneName}`;
345
+ return { id, resourceName: zoneName };
283
346
  }
284
347
  }
285
348
  exports.AzKubernetes = AzKubernetes;
286
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXpLdWJlcm5ldGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Frcy9Bekt1YmVybmV0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkVBQTZEO0FBRTdELHVEQUF5QztBQUN6QyxrQ0FBMEQ7QUFDMUQsa0NBQWdFO0FBQ2hFLHNDQUF5QztBQUN6Qyx3Q0FBaUQ7QUFFakQsb0NBQXVDO0FBQ3ZDLCtEQUE0RDtBQUM1RCxzREFBd0M7QUFxRHhDLE1BQWEsWUFBYSxTQUFRLDRCQUF1QztJQUN2RCxFQUFFLENBQXdCO0lBQzFCLFlBQVksQ0FBd0I7SUFFcEQsWUFBWSxJQUFZLEVBQUUsSUFBc0IsRUFBRSxJQUFzQztRQUN0RixLQUFLLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFeEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFeEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdEMsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUVqQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVNLFVBQVU7UUFDZixPQUFPO1lBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQ2hDLENBQUM7SUFDSixDQUFD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
349
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXpLdWJlcm5ldGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Frcy9Bekt1YmVybmV0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkVBQTZEO0FBRTdELHVEQUF5QztBQUd6QyxrQ0FBMEQ7QUFDMUQsa0NBQWdFO0FBQ2hFLHdDQUFpRDtBQUVqRCwrREFBNEQ7QUFDNUQsc0NBQXlDO0FBMER6QyxNQUFhLFlBQWEsU0FBUSw0QkFBdUM7SUFDdkQsRUFBRSxDQUF3QjtJQUMxQixZQUFZLENBQXdCO0lBQ3BDLFVBQVUsQ0FBd0M7SUFDbEQsY0FBYyxDQUFvQztJQUVsRSxZQUFZLElBQVksRUFBRSxJQUFzQixFQUFFLElBQXNDO1FBQ3RGLEtBQUssQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV4QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsNEJBQTRCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdEQsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUVqQyxJQUFJLENB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
@@ -1,8 +1,8 @@
1
- import * as registry from '@pulumi/azure-native/containerregistry';
2
1
  import * as pulumi from '@pulumi/pulumi';
3
- import { BaseResourceComponent, CommonBaseArgs } from '../base';
2
+ import * as registry from '@pulumi/azure-native/containerregistry';
4
3
  import * as types from '../types';
5
- export interface ContainerRegistryArgs extends CommonBaseArgs, types.WithEncryptionEnabler, types.WithGroupRolesArgs, types.WithUserAssignedIdentity, Pick<registry.RegistryArgs, 'dataEndpointEnabled' | 'zoneRedundancy'> {
4
+ import { BaseResourceComponent, CommonBaseArgs } from '../base';
5
+ export interface ContainerRegistryArgs extends CommonBaseArgs, types.WithEncryptionEnabler, types.WithUserAssignedIdentity, Partial<Pick<registry.RegistryArgs, 'dataEndpointEnabled' | 'zoneRedundancy'>> {
6
6
  sku: registry.SkuName;
7
7
  retentionDaysPolicy?: number;
8
8
  network?: Omit<types.NetworkArgs, 'vnetRules'>;
@@ -15,5 +15,6 @@ export declare class ContainerRegistry extends BaseResourceComponent<ContainerRe
15
15
  id: pulumi.Output<string>;
16
16
  resourceName: pulumi.Output<string>;
17
17
  };
18
+ private createAcr;
18
19
  private createPrivateLink;
19
20
  }
@@ -34,8 +34,8 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.ContainerRegistry = void 0;
37
- const registry = __importStar(require("@pulumi/azure-native/containerregistry"));
38
37
  const pulumi = __importStar(require("@pulumi/pulumi"));
38
+ const registry = __importStar(require("@pulumi/azure-native/containerregistry"));
39
39
  const base_1 = require("../base");
40
40
  const PrivateEndpoint_1 = require("../vnet/PrivateEndpoint");
41
41
  class ContainerRegistry extends base_1.BaseResourceComponent {
@@ -43,24 +43,37 @@ class ContainerRegistry extends base_1.BaseResourceComponent {
43
43
  resourceName;
44
44
  constructor(name, args, opts) {
45
45
  super('ContainerRegistry', name, args, opts);
46
- const { rsGroup, enableEncryption, groupRoles, defaultUAssignedId, retentionDaysPolicy, sku, network, ...props } = args;
47
- const encryptionKey = enableEncryption ? this.getEncryptionKey() : undefined;
48
- const acr = new registry.Registry(name, {
46
+ const acr = this.createAcr();
47
+ this.createPrivateLink(acr);
48
+ this.id = acr.id;
49
+ this.resourceName = acr.name;
50
+ this.registerOutputs();
51
+ }
52
+ getOutputs() {
53
+ return {
54
+ id: this.id,
55
+ resourceName: this.resourceName,
56
+ };
57
+ }
58
+ createAcr() {
59
+ const { rsGroup, enableEncryption, defaultUAssignedId, retentionDaysPolicy, sku, network, ...props } = this.args;
60
+ const encryptionKey = sku === 'Premium' && enableEncryption ? this.getEncryptionKey() : undefined;
61
+ const alphanumericString = (this.name.match(/[a-zA-Z0-9]+/g) || []).join('');
62
+ return new registry.Registry(alphanumericString, {
49
63
  ...props,
50
64
  ...rsGroup,
51
65
  sku: { name: sku },
52
66
  adminUserEnabled: false,
53
67
  anonymousPullEnabled: false,
54
- //This is for encryption
55
68
  identity: {
56
69
  type: defaultUAssignedId
57
70
  ? registry.ResourceIdentityType.SystemAssigned_UserAssigned
58
71
  : registry.ResourceIdentityType.SystemAssigned,
59
72
  userAssignedIdentities: defaultUAssignedId
60
- ? pulumi.output(defaultUAssignedId.id).apply((id) => ({ [id]: defaultUAssignedId }))
73
+ ? pulumi.output(defaultUAssignedId).apply((id) => ({ [id.id]: {} }))
61
74
  : undefined,
62
75
  },
63
- encryption: sku === 'Premium' && encryptionKey && defaultUAssignedId
76
+ encryption: encryptionKey && defaultUAssignedId
64
77
  ? {
65
78
  keyVaultProperties: {
66
79
  identity: defaultUAssignedId.clientId,
@@ -96,17 +109,7 @@ class ContainerRegistry extends base_1.BaseResourceComponent {
96
109
  : undefined,
97
110
  }
98
111
  : undefined,
99
- }, { ...opts, parent: this });
100
- this.createPrivateLink(acr);
101
- this.id = acr.id;
102
- this.resourceName = acr.name;
103
- this.registerOutputs();
104
- }
105
- getOutputs() {
106
- return {
107
- id: this.id,
108
- resourceName: this.resourceName,
109
- };
112
+ }, { ...this.opts, parent: this });
110
113
  }
111
114
  createPrivateLink(acr) {
112
115
  const { rsGroup, network } = this.args;
@@ -116,4 +119,4 @@ class ContainerRegistry extends base_1.BaseResourceComponent {
116
119
  }
117
120
  }
118
121
  exports.ContainerRegistry = ContainerRegistry;
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGFpbmVyUmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWtzL0NvbnRhaW5lclJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlGQUFtRTtBQUNuRSx1REFBeUM7QUFDekMsa0NBQWdFO0FBRWhFLDZEQUEwRDtBQWExRCxNQUFhLGlCQUFrQixTQUFRLDRCQUE0QztJQUNqRSxFQUFFLENBQXdCO0lBQzFCLFlBQVksQ0FBd0I7SUFFcEQsWUFBWSxJQUFZLEVBQUUsSUFBMkIsRUFBRSxJQUFzQztRQUMzRixLQUFLLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU3QyxNQUFNLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQzlHLElBQUksQ0FBQztRQUNQLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRTdFLE1BQU0sR0FBRyxHQUFHLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FDL0IsSUFBSSxFQUNKO1lBQ0UsR0FBRyxLQUFLO1lBQ1IsR0FBRyxPQUFPO1lBRVYsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtZQUNsQixnQkFBZ0IsRUFBRSxLQUFLO1lBQ3ZCLG9CQUFvQixFQUFFLEtBQUs7WUFFM0Isd0JBQXdCO1lBQ3hCLFFBQVEsRUFBRTtnQkFDUixJQUFJLEVBQUUsa0JBQWtCO29CQUN0QixDQUFDLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLDJCQUEyQjtvQkFDM0QsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0Is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
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGFpbmVyUmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWtzL0NvbnRhaW5lclJlZ2lzdHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVEQUF5QztBQUN6QyxpRkFBbUU7QUFHbkUsa0NBQWdFO0FBRWhFLDZEQUEwRDtBQVkxRCxNQUFhLGlCQUFrQixTQUFRLDRCQUE0QztJQUNqRSxFQUFFLENBQXdCO0lBQzFCLFlBQVksQ0FBd0I7SUFFcEQsWUFBWSxJQUFZLEVBQUUsSUFBMkIsRUFBRSxJQUFzQztRQUMzRixLQUFLLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU3QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTVCLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFFN0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTSxVQUFVO1FBQ2YsT0FBTztZQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtTQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUVPLFNBQVM7UUFDZixNQUFNLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ2pILE1BQU0sYUFBYSxHQUFHLEdBQUcsS0FBSyxTQUFTLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFD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
package/apim/Apim.d.ts ADDED
@@ -0,0 +1,51 @@
1
+ import * as apim from '@pulumi/azure-native/apimanagement';
2
+ import * as certHelpers from '../helpers/certHelpers';
3
+ import * as inputs from '@pulumi/azure-native/types/input';
4
+ import * as pulumi from '@pulumi/pulumi';
5
+ import * as types from '../types';
6
+ import { ApimProductArgs } from './ApimProduct';
7
+ import { BaseResourceComponent, CommonBaseArgs } from '../base';
8
+ type ApimCertType = certHelpers.CertType | certHelpers.VaultCertType | certHelpers.CertFile;
9
+ export interface ApimArgs extends CommonBaseArgs, types.WithUserAssignedIdentity, types.WithNetworkArgs, types.WithLogs, Omit<apim.ApiManagementServiceArgs, types.CommonProps | 'serviceName' | 'sku' | 'additionalLocations' | 'certificates' | 'hostnameConfigurations' | 'publicNetworkAccess' | 'virtualNetworkType' | 'virtualNetworkConfiguration' | 'publisherName' | 'publisherEmail' | 'customProperties'> {
10
+ publisherEmail?: pulumi.Input<string>;
11
+ publisherName?: pulumi.Input<string>;
12
+ customProperties?: string[];
13
+ hostnameConfigurations?: Array<{
14
+ hostName: pulumi.Input<string>;
15
+ negotiateClientCertificate: boolean;
16
+ defaultSslBinding: boolean;
17
+ cert?: ApimCertType;
18
+ }>;
19
+ additionalLocations?: inputs.apimanagement.AdditionalLocationArgs[] | undefined;
20
+ certificates?: {
21
+ caCerts?: Array<ApimCertType>;
22
+ rootCerts?: Array<ApimCertType>;
23
+ };
24
+ sku: {
25
+ capacity: pulumi.Input<number>;
26
+ name: apim.SkuType;
27
+ };
28
+ disableSignIn?: boolean;
29
+ permissions?: Array<Omit<types.GrantIdentityRoles, 'identity'>>;
30
+ products?: Array<Omit<ApimProductArgs, 'rsGroup' | 'serviceName' | 'vaultInfo' | 'groupRoles' | 'enableDiagnostic'> & {
31
+ name: string;
32
+ }>;
33
+ }
34
+ export declare class Apim extends BaseResourceComponent<ApimArgs> {
35
+ readonly id: pulumi.Output<string>;
36
+ readonly resourceName: pulumi.Output<string>;
37
+ constructor(name: string, args: ApimArgs, opts?: pulumi.ComponentResourceOptions);
38
+ getOutputs(): {
39
+ id: pulumi.Output<string>;
40
+ resourceName: pulumi.Output<string>;
41
+ };
42
+ private getCerts;
43
+ private createApim;
44
+ private buildEntraID;
45
+ private buildDisableSigIn;
46
+ private buildPrivateLink;
47
+ private buildLogs;
48
+ private buildProducts;
49
+ private buildGroupRoles;
50
+ }
51
+ export {};