@drunk-pulumi/azure 1.0.7 → 1.0.9

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 (146) hide show
  1. package/Aks/Helper.d.ts +3 -3
  2. package/Aks/Helper.js +2 -3
  3. package/Aks/Identity.js +17 -17
  4. package/Aks/index.d.ts +13 -15
  5. package/Aks/index.js +63 -64
  6. package/Automation/index.d.ts +4 -4
  7. package/Automation/index.js +13 -9
  8. package/AzAd/EnvRoles.d.ts +0 -5
  9. package/AzAd/EnvRoles.js +3 -4
  10. package/AzAd/Group.d.ts +4 -4
  11. package/AzAd/Group.js +14 -5
  12. package/AzAd/Helper.d.ts +3 -8
  13. package/AzAd/Helper.js +67 -51
  14. package/AzAd/Identities/AzDevOpsManagedIdentity.d.ts +3 -3
  15. package/AzAd/Identities/AzDevOpsManagedIdentity.js +4 -4
  16. package/AzAd/Identities/AzUserAdRevertSync.d.ts +2 -2
  17. package/AzAd/Identities/EnvUID.d.ts +4 -0
  18. package/AzAd/Identities/EnvUID.js +21 -0
  19. package/AzAd/Identities/index.d.ts +1 -1
  20. package/AzAd/Identities/index.js +3 -3
  21. package/AzAd/Identity.d.ts +2 -2
  22. package/AzAd/Identity.js +3 -8
  23. package/AzAd/RoleAssignment.d.ts +2 -2
  24. package/AzAd/UserAssignedIdentity.d.ts +4 -3
  25. package/AzAd/UserAssignedIdentity.js +10 -13
  26. package/Builder/AksBuilder.d.ts +2 -2
  27. package/Builder/AksBuilder.js +14 -7
  28. package/Builder/ApimBuilder.js +8 -10
  29. package/Builder/CdnBuilder.d.ts +2 -2
  30. package/Builder/CdnBuilder.js +1 -1
  31. package/Builder/PrivateDnsZoneBuilder.js +4 -5
  32. package/Builder/ResourceBuilder.d.ts +2 -2
  33. package/Builder/ResourceBuilder.js +42 -5
  34. package/Builder/SqlBuilder.d.ts +2 -2
  35. package/Builder/SqlBuilder.js +9 -10
  36. package/Builder/VaultBuilder.d.ts +2 -3
  37. package/Builder/VaultBuilder.js +16 -15
  38. package/Builder/VmBuilder.d.ts +2 -2
  39. package/Builder/VmBuilder.js +12 -3
  40. package/Builder/VnetBuilder.d.ts +2 -2
  41. package/Builder/VnetBuilder.js +100 -53
  42. package/Builder/types/apimBuilder.d.ts +8 -9
  43. package/Builder/types/apimPolicyBuilder.d.ts +3 -3
  44. package/Builder/types/apimProductBuilder.d.ts +2 -2
  45. package/Builder/types/askBuilder.d.ts +8 -3
  46. package/Builder/types/envRoleBuilder.d.ts +2 -2
  47. package/Builder/types/genericBuilder.d.ts +2 -8
  48. package/Builder/types/genericBuilder.js +1 -1
  49. package/Builder/types/resourceBuilder.d.ts +12 -6
  50. package/Builder/types/sqlBuilder.d.ts +4 -5
  51. package/Builder/types/vaultBuilder.d.ts +4 -3
  52. package/Builder/types/vmBuilder.d.ts +6 -2
  53. package/Builder/types/vnetBuilder.d.ts +13 -12
  54. package/Cdn/CdnEndpoint.d.ts +1 -1
  55. package/Cdn/CdnEndpoint.js +2 -3
  56. package/Common/AzureEnv.d.ts +0 -7
  57. package/Common/AzureEnv.js +2 -44
  58. package/Common/GlobalEnv.d.ts +1 -3
  59. package/Common/GlobalEnv.js +19 -21
  60. package/Common/Helpers.d.ts +0 -1
  61. package/Common/Helpers.js +29 -29
  62. package/Common/Naming.d.ts +68 -0
  63. package/Common/Naming.js +189 -0
  64. package/Common/RsInfo/Helper.d.ts +4 -0
  65. package/Common/RsInfo/Helper.js +48 -0
  66. package/Common/RsInfo/index.d.ts +31 -0
  67. package/Common/RsInfo/index.js +245 -0
  68. package/Common/index.d.ts +3 -0
  69. package/Common/index.js +5 -2
  70. package/ContainerRegistry/Helper.d.ts +2 -9
  71. package/ContainerRegistry/Helper.js +36 -31
  72. package/Core/KeyGenerators.js +2 -2
  73. package/Core/Locker.d.ts +6 -4
  74. package/Core/Locker.js +23 -2
  75. package/Core/Random.d.ts +2 -2
  76. package/Core/Random.js +2 -1
  77. package/Core/ResourceCreator.js +3 -6
  78. package/CosmosDb/index.d.ts +3 -3
  79. package/CosmosDb/index.js +14 -14
  80. package/IOT/Hub/index.js +2 -1
  81. package/KeyVault/CustomHelper.d.ts +4 -3
  82. package/KeyVault/CustomHelper.js +3 -2
  83. package/KeyVault/Helper.d.ts +5 -1
  84. package/KeyVault/Helper.js +13 -2
  85. package/KeyVault/index.d.ts +1 -6
  86. package/KeyVault/index.js +19 -14
  87. package/Logs/AppInsight.js +3 -1
  88. package/Logs/Helpers.d.ts +5 -54
  89. package/Logs/Helpers.js +41 -68
  90. package/Logs/LogAnalytics.d.ts +5 -11
  91. package/Logs/LogAnalytics.js +11 -11
  92. package/Logs/WebTest.d.ts +2 -2
  93. package/Logs/WebTest.js +13 -13
  94. package/Logs/index.d.ts +7 -22
  95. package/Logs/index.js +33 -52
  96. package/Postgresql/index.js +3 -3
  97. package/ServiceBus/index.d.ts +4 -5
  98. package/ServiceBus/index.js +10 -8
  99. package/Sql/Helper.js +4 -4
  100. package/Sql/SqlDb.js +3 -6
  101. package/Sql/index.d.ts +2 -5
  102. package/Sql/index.js +12 -21
  103. package/Storage/Helper.d.ts +2 -28
  104. package/Storage/Helper.js +58 -77
  105. package/Storage/index.d.ts +2 -2
  106. package/Storage/index.js +7 -6
  107. package/VM/DiskEncryptionSet.d.ts +4 -6
  108. package/VM/DiskEncryptionSet.js +18 -6
  109. package/VM/index.d.ts +3 -3
  110. package/VM/index.js +37 -13
  111. package/VNet/Firewall.d.ts +8 -6
  112. package/VNet/Firewall.js +25 -28
  113. package/VNet/FirewallPolicies/CloudPCFirewallPolicy.js +2 -2
  114. package/VNet/Helper.d.ts +3 -20
  115. package/VNet/Helper.js +6 -49
  116. package/VNet/IpAddress.js +3 -6
  117. package/VNet/IpAddressPrefix.d.ts +2 -2
  118. package/VNet/IpAddressPrefix.js +3 -3
  119. package/VNet/NSGRules/BlockInternetSecurityRule.d.ts +3 -0
  120. package/VNet/NSGRules/BlockInternetSecurityRule.js +34 -0
  121. package/VNet/NSGRules/index.d.ts +5 -4
  122. package/VNet/NSGRules/index.js +4 -2
  123. package/VNet/NetworkPeering.d.ts +18 -6
  124. package/VNet/NetworkPeering.js +43 -27
  125. package/VNet/PrivateEndpoint.js +2 -2
  126. package/VNet/VirtualWAN.js +2 -2
  127. package/VNet/types.d.ts +3 -8
  128. package/Web/AppConfig.js +2 -1
  129. package/package.json +4 -5
  130. package/types.d.ts +85 -30
  131. package/Aks/VmSetAutoScale/index.d.ts +0 -14
  132. package/Aks/VmSetAutoScale/index.js +0 -155
  133. package/Aks/VmSetMonitor/index.d.ts +0 -10
  134. package/Aks/VmSetMonitor/index.js +0 -90
  135. package/Apim/Helpers.d.ts +0 -2
  136. package/Apim/Helpers.js +0 -18
  137. package/AzAd/Identities/GlobalUserAssignedIdentity.d.ts +0 -4
  138. package/AzAd/Identities/GlobalUserAssignedIdentity.js +0 -19
  139. package/Common/Naming/index.d.ts +0 -67
  140. package/Common/Naming/index.js +0 -161
  141. package/Core/Helper.d.ts +0 -18
  142. package/Core/Helper.js +0 -42
  143. package/VNet/index.d.ts +0 -65
  144. package/VNet/index.js +0 -220
  145. package/Web/Helpers.d.ts +0 -6
  146. package/Web/Helpers.js +0 -59
@@ -1,20 +1,54 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
27
  };
5
28
  Object.defineProperty(exports, "__esModule", { value: true });
6
29
  const IpAddressPrefix_1 = __importDefault(require("../VNet/IpAddressPrefix"));
30
+ const NSGRules_1 = require("../VNet/NSGRules");
7
31
  const Firewall_1 = __importDefault(require("../VNet/Firewall"));
8
32
  const Vnet_1 = __importDefault(require("../VNet/Vnet"));
9
33
  const NatGateway_1 = __importDefault(require("../VNet/NatGateway"));
34
+ const pulumi = __importStar(require("@pulumi/pulumi"));
10
35
  const NetworkPeering_1 = __importDefault(require("../VNet/NetworkPeering"));
11
36
  const VPNGateway_1 = __importDefault(require("../VNet/VPNGateway"));
12
37
  const PrivateDnsZoneBuilder_1 = __importDefault(require("./PrivateDnsZoneBuilder"));
13
- const types_1 = require("./types");
14
- const Helper_1 = require("../VNet/Helper");
38
+ const types = __importStar(require("./types"));
15
39
  const Bastion_1 = __importDefault(require("../VNet/Bastion"));
16
- const outboundIpName = "outbound";
17
- class VnetBuilder extends types_1.Builder {
40
+ const Common_1 = require("../Common");
41
+ const outboundIpName = 'outbound';
42
+ class VnetBuilder extends types.Builder {
43
+ args;
44
+ /** The Instances */
45
+ _ipAddressInstance = undefined;
46
+ _firewallInstance = undefined;
47
+ _vnetInstance = undefined;
48
+ _natGatewayInstance = undefined;
49
+ _vnpGatewayInstance = undefined;
50
+ _privateDnsInstances = {};
51
+ _finalIpAddressIds = [];
18
52
  /** The Props */
19
53
  _subnetProps = undefined;
20
54
  _vnetProps = {};
@@ -27,18 +61,12 @@ class VnetBuilder extends types_1.Builder {
27
61
  _routeRules = [];
28
62
  _enableRoute = false;
29
63
  _peeringProps = [];
30
- _logInfo = undefined;
31
- _ipType = "prefix";
64
+ //private _logInfo: LogInfo | undefined = undefined;
65
+ _ipType = 'individual';
32
66
  _privateDns = {};
33
- /** The Instances */
34
- _ipAddressInstance = undefined;
35
- _firewallInstance = undefined;
36
- _vnetInstance = undefined;
37
- _natGatewayInstance = undefined;
38
- _vnpGatewayInstance = undefined;
39
- _privateDnsInstances = {};
40
- constructor(commonProps) {
41
- super(commonProps);
67
+ constructor(args) {
68
+ super(args);
69
+ this.args = args;
42
70
  }
43
71
  asHub(props = {}) {
44
72
  this._subnetProps = props.subnets;
@@ -56,10 +84,15 @@ class VnetBuilder extends types_1.Builder {
56
84
  };
57
85
  return this;
58
86
  }
59
- withPublicIpAddress(type) {
87
+ withPublicIP(type) {
60
88
  this._ipType = type;
61
89
  return this;
62
90
  }
91
+ withPublicIPFrom(id) {
92
+ this._finalIpAddressIds.push(id);
93
+ this._ipType = 'existing';
94
+ return this;
95
+ }
63
96
  withNatGateway() {
64
97
  this._natGatewayEnabled = true;
65
98
  return this;
@@ -72,16 +105,20 @@ class VnetBuilder extends types_1.Builder {
72
105
  this._firewallProps = props;
73
106
  return this;
74
107
  }
108
+ withFirewallAndNatGateway(props) {
109
+ this.withFirewall(props);
110
+ return this.withNatGateway();
111
+ }
75
112
  withBastion(props) {
76
113
  this._bastionProps = props;
77
114
  return this;
78
115
  }
79
- withSecurityRules(rules) {
116
+ withSecurityRules(...rules) {
80
117
  this._securityRules.push(...rules);
81
118
  this._enableSG = true;
82
119
  return this;
83
120
  }
84
- withRouteRules(rules) {
121
+ withRouteRules(...rules) {
85
122
  this._routeRules.push(...rules);
86
123
  this._enableRoute = true;
87
124
  return this;
@@ -94,42 +131,50 @@ class VnetBuilder extends types_1.Builder {
94
131
  this._peeringProps.push(props);
95
132
  return this;
96
133
  }
97
- withLogInfo(info) {
98
- this._logInfo = info;
99
- return this;
100
- }
134
+ // public withLogInfo(info: LogInfo): types.IVnetBuilder {
135
+ // this._logInfo = info;
136
+ // return this;
137
+ // }
101
138
  /** Builders methods */
102
139
  buildIpAddress() {
140
+ //IP Address Already provided
141
+ if (this._ipType === 'existing')
142
+ return;
103
143
  const ipNames = [];
104
144
  //No gateway and no firewall then Do nothing
105
145
  if (!this._natGatewayEnabled && !this._firewallProps)
106
146
  return;
107
147
  //Add outbound Ipaddress for Firewall alone
108
- if (!this._natGatewayEnabled && this._firewallProps) {
148
+ if (this._natGatewayEnabled || this._firewallProps) {
109
149
  ipNames.push(outboundIpName);
110
150
  }
111
151
  //Create IpPrefix
112
152
  this._ipAddressInstance = (0, IpAddressPrefix_1.default)({
113
153
  ...this.commonProps,
114
154
  ipAddresses: ipNames.map((n) => ({ name: n })),
115
- createPrefix: this._ipType === "prefix",
116
- config: { version: "IPv4", allocationMethod: "Static" },
155
+ createPrefix: this._ipType === 'prefix',
156
+ config: { version: 'IPv4', allocationMethod: 'Static' },
117
157
  });
158
+ //Collect All IpAddresses
159
+ if (this._ipAddressInstance.addresses) {
160
+ Object.values(this._ipAddressInstance.addresses).forEach((ip) => this._finalIpAddressIds.push(ip.id));
161
+ }
118
162
  }
119
163
  buildNatGateway() {
120
- if (!this._natGatewayEnabled || !this._ipAddressInstance)
164
+ if (!this._natGatewayEnabled)
121
165
  return;
122
166
  this._natGatewayInstance = (0, NatGateway_1.default)({
123
167
  ...this.commonProps,
124
- publicIpAddresses: this._ipType === "individual"
125
- ? Object.keys(this._ipAddressInstance.addresses).map((k) => this._ipAddressInstance.addresses[k].id)
126
- : undefined,
127
- publicIpPrefixes: this._ipType === "prefix"
168
+ publicIpAddresses: this._finalIpAddressIds,
169
+ publicIpPrefixes: this._ipAddressInstance?.addressPrefix
128
170
  ? [this._ipAddressInstance.addressPrefix.id]
129
171
  : undefined,
130
172
  });
131
173
  }
132
174
  buildVnet() {
175
+ if (!this._firewallProps) {
176
+ this.withSecurityRules(...(0, NSGRules_1.BlockInternetSecurityRule)(this.commonProps.name));
177
+ }
133
178
  const subnets = this._subnetProps
134
179
  ? Object.keys(this._subnetProps).map((k) => ({
135
180
  name: k,
@@ -148,7 +193,7 @@ class VnetBuilder extends types_1.Builder {
148
193
  //Only create Security group when firewall is not there
149
194
  securityGroup: {
150
195
  enabled: this._enableSG,
151
- allowOutboundInternetAccess: !Boolean(this._ipAddressInstance) && !this._natGatewayEnabled,
196
+ allowOutboundInternetAccess: !this._ipAddressInstance && !this._natGatewayEnabled,
152
197
  rules: this._securityRules,
153
198
  },
154
199
  //Route tables
@@ -177,15 +222,12 @@ class VnetBuilder extends types_1.Builder {
177
222
  //networkPeerings: peerings,
178
223
  dependsOn: this._firewallInstance?.firewall
179
224
  ? this._firewallInstance?.firewall
180
- : this._natGatewayInstance
181
- ? this._natGatewayInstance
182
- : undefined,
225
+ : this._natGatewayInstance,
183
226
  });
184
227
  }
185
228
  buildFirewall() {
186
229
  if (!this._firewallProps)
187
230
  return;
188
- const publicIpAddress = this._ipAddressInstance?.addresses[outboundIpName];
189
231
  const firewallSubnetId = this._vnetInstance?.firewallSubnet?.apply((s) => s?.id);
190
232
  const manageSubnetId = this._vnetInstance?.firewallManageSubnet?.apply((s) => s?.id);
191
233
  this._firewallInstance = (0, Firewall_1.default)({
@@ -195,9 +237,9 @@ class VnetBuilder extends types_1.Builder {
195
237
  {
196
238
  subnetId: firewallSubnetId,
197
239
  //Using Force Tunneling mode if Nat gateway is enabled.
198
- publicIpAddress: this._natGatewayEnabled
240
+ publicIpAddressId: this._natGatewayEnabled
199
241
  ? undefined
200
- : publicIpAddress,
242
+ : this._finalIpAddressIds[0],
201
243
  },
202
244
  ],
203
245
  //This is required for Force Tunneling mode
@@ -206,12 +248,11 @@ class VnetBuilder extends types_1.Builder {
206
248
  subnetId: manageSubnetId,
207
249
  }
208
250
  : undefined,
209
- monitorConfig: this._logInfo
210
- ? {
211
- logWpId: this._logInfo.logWp.id,
212
- }
213
- : undefined,
214
- dependsOn: this._ipAddressInstance?.addressPrefix,
251
+ logInfo: this.args.logInfo,
252
+ dependsOn: this._ipAddressInstance?.addressPrefix ??
253
+ (this._ipAddressInstance?.addresses
254
+ ? Object.values(this._ipAddressInstance.addresses)
255
+ : undefined),
215
256
  });
216
257
  }
217
258
  buildVpnGateway() {
@@ -257,20 +298,26 @@ class VnetBuilder extends types_1.Builder {
257
298
  return;
258
299
  this._peeringProps.forEach((p) => {
259
300
  let info = undefined;
260
- if ("groupName" in p) {
261
- info = (0, Helper_1.getVnetInfo)(p.groupName);
301
+ if ('groupName' in p) {
302
+ info = Common_1.rsInfo.getVnetInfo(p.groupName);
262
303
  }
263
- else if ("vnetId" in p) {
264
- info = (0, Helper_1.parseVnetInfoFromId)(p.vnetId);
304
+ else if ('vnetId' in p) {
305
+ info = pulumi
306
+ .output(p.vnetId)
307
+ .apply((id) => Common_1.rsInfo.getResourceInfoFromId(id));
265
308
  }
266
309
  if (info)
267
310
  (0, NetworkPeering_1.default)({
268
- direction: p.direction ?? "Bidirectional",
269
- firstVnet: {
270
- vnetName: this._vnetInstance.vnet.name,
271
- resourceGroupName: this.commonProps.group.resourceGroupName,
311
+ direction: p.direction ?? 'Bidirectional',
312
+ from: {
313
+ options: p.options,
314
+ vnetInfo: {
315
+ name: this._vnetInstance.name,
316
+ group: this.commonProps.group,
317
+ id: this._vnetInstance.id,
318
+ },
272
319
  },
273
- secondVnet: info,
320
+ to: { vnetInfo: info },
274
321
  });
275
322
  });
276
323
  }
@@ -295,4 +342,4 @@ class VnetBuilder extends types_1.Builder {
295
342
  }
296
343
  }
297
344
  exports.default = (props) => new VnetBuilder(props);
298
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVm5ldEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvQnVpbGRlci9WbmV0QnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLDhFQUVpQztBQUdqQyxnRUFBNEQ7QUFDNUQsd0RBQWdEO0FBRWhELG9FQUE0QztBQUc1Qyw0RUFBb0Q7QUFFcEQsb0VBQTRDO0FBQzVDLG9GQUE0RDtBQUM1RCxtQ0FnQmlCO0FBQ2pCLDJDQUFrRTtBQUNsRSw4REFBc0M7QUFFdEMsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDO0FBRWxDLE1BQU0sV0FDSixTQUFRLGVBQTJCO0lBR25DLGdCQUFnQjtJQUNSLFlBQVksR0FBb0MsU0FBUyxDQUFDO0lBQzFELFVBQVUsR0FBOEIsRUFBRSxDQUFDO0lBQzNDLGNBQWMsR0FBc0MsU0FBUyxDQUFDO0lBQzlELGFBQWEsR0FBcUMsU0FBUyxDQUFDO0lBQzVELGtCQUFrQixHQUFhLEtBQUssQ0FBQztJQUNyQyxnQkFBZ0IsR0FBd0MsU0FBUyxDQUFDO0lBQ2xFLGNBQWMsR0FBNkIsRUFBRSxDQUFDO0lBQzlDLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0IsV0FBVyxHQUE2QyxFQUFFLENBQUM7SUFDM0QsWUFBWSxHQUFZLEtBQUssQ0FBQztJQUM5QixhQUFhLEdBQW1CLEVBQUUsQ0FBQztJQUNuQyxRQUFRLEdBQStCLFNBQVMsQ0FBQztJQUNqRCxPQUFPLEdBQTRCLFFBQVEsQ0FBQztJQUM1QyxXQUFXLEdBQ2pCLEVBQUUsQ0FBQztJQUVMLG9CQUFvQjtJQUNaLGtCQUFrQixHQUN4QixTQUFTLENBQUM7SUFDSixpQkFBaUIsR0FBK0IsU0FBUyxDQUFDO0lBQzFELGFBQWEsR0FBMkIsU0FBUyxDQUFDO0lBQ2xELG1CQUFtQixHQUFtQyxTQUFTLENBQUM7SUFDaEUsbUJBQW1CLEdBQ3pCLFNBQVMsQ0FBQztJQUNKLG9CQUFvQixHQUFpQyxFQUFFLENBQUM7SUFFaEUsWUFBWSxX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
345
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVm5ldEJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvQnVpbGRlci9WbmV0QnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsOEVBRWlDO0FBQ2pDLCtDQUE2RDtBQUc3RCxnRUFBNEQ7QUFDNUQsd0RBQWdEO0FBRWhELG9FQUE0QztBQUM1Qyx1REFBeUM7QUFFekMsNEVBQW9EO0FBQ3BELG9FQUE0QztBQUM1QyxvRkFBNEQ7QUFDNUQsK0NBQWlDO0FBQ2pDLDhEQUFzQztBQUN0QyxzQ0FBbUM7QUFTbkMsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDO0FBRWxDLE1BQU0sV0FDSixTQUFRLEtBQUssQ0FBQyxPQUFpQztJQXFDM0I7SUEvQnBCLG9CQUFvQjtJQUNaLGtCQUFrQixHQUN4QixTQUFTLENBQUM7SUFDSixpQkFBaUIsR0FBK0IsU0FBUyxDQUFDO0lBQzFELGFBQWEsR0FBMkIsU0FBUyxDQUFDO0lBQ2xELG1CQUFtQixHQUFtQyxTQUFTLENBQUM7SUFDaEUsbUJBQW1CLEdBQ3pCLFNBQVMsQ0FBQztJQUNKLG9CQUFvQixHQUFpQyxFQUFFLENBQUM7SUFDeEQsa0JBQWtCLEdBQW9CLEVBQUUsQ0FBQztJQUVqRCxnQkFBZ0I7SUFDUixZQUFZLEdBQTBDLFNBQVMsQ0FBQztJQUNoRSxVQUFVLEdBQW9DLEVBQUUsQ0FBQztJQUNqRCxjQUFjLEdBQTRDLFNBQVMsQ0FBQztJQUNwRSxhQUFhLEdBQTJDLFNBQVMsQ0FBQztJQUNsRSxrQkFBa0IsR0FBYSxLQUFLLENBQUM7SUFDckMsZ0JBQWdCLEdBQ3RCLFNBQVMsQ0FBQztJQUNKLGNBQWMsR0FBNkIsRUFBRSxDQUFDO0lBQzlDLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0IsV0FBVyxHQUE2QyxFQUFFLENBQUM7SUFDM0QsWUFBWSxHQUFZLEtBQUssQ0FBQztJQUM5QixhQUFhLEdBQXlCLEVBQUUsQ0FB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
@@ -1,8 +1,7 @@
1
- import { SkuType } from "@pulumi/azure-native/apimanagement";
2
- import { Input } from "@pulumi/pulumi";
3
- import { IBuilder } from "./genericBuilder";
4
- import { PrivateLinkPropsType, ResourceInfo } from "../../types";
5
- import { AppInsightInfo } from "../../Logs/Helpers";
1
+ import { SkuType } from '@pulumi/azure-native/apimanagement';
2
+ import { Input } from '@pulumi/pulumi';
3
+ import { IBuilder } from './genericBuilder';
4
+ import { AppInsightInfo, PrivateLinkPropsType, ResourceInfo } from '../../types';
6
5
  export type ApimSkuBuilderType = {
7
6
  sku: SkuType;
8
7
  capacity?: number;
@@ -12,7 +11,7 @@ export type ApimPublisherBuilderType = {
12
11
  /** default is organization name */
13
12
  publisherName?: Input<string>;
14
13
  /** default is apimgmt-noreply@mail.windowsazure.com */
15
- notificationSenderEmail?: "apimgmt-noreply@mail.windowsazure.com" | Input<string>;
14
+ notificationSenderEmail?: 'apimgmt-noreply@mail.windowsazure.com' | Input<string>;
16
15
  };
17
16
  export type ApimCertBuilderType = {
18
17
  certificate: Input<string>;
@@ -25,7 +24,7 @@ export type ApimAdditionalLocationType = {
25
24
  disableGateway?: Input<boolean>;
26
25
  location: string;
27
26
  };
28
- export type ApimZoneType = ["1", "2"] | ["1", "2", "3"];
27
+ export type ApimZoneType = ['1', '2'] | ['1', '2', '3'];
29
28
  export type ApimVnetType = {
30
29
  enableGateway?: Input<boolean>;
31
30
  subnetId: Input<string>;
@@ -34,7 +33,7 @@ export type ApimVnetType = {
34
33
  * External means the API Management deployment is set up inside a Virtual Network having an Internet Facing Endpoint,
35
34
  * and Internal means that API Management deployment is setup inside a Virtual Network having an Intranet Facing Endpoint only.
36
35
  * */
37
- type: "External" | "Internal";
36
+ type: 'External' | 'Internal';
38
37
  };
39
38
  export type ApimPrivateLinkType = PrivateLinkPropsType & {
40
39
  disablePublicAccess?: boolean;
@@ -43,7 +42,7 @@ export type ApimAuthType = {
43
42
  clientId: Input<string>;
44
43
  clientSecret: Input<string>;
45
44
  authority?: Input<string>;
46
- type: "facebook" | "google" | "microsoft" | "twitter" | "aad" | "aadB2C" | string;
45
+ type: 'facebook' | 'google' | 'microsoft' | 'twitter' | 'aad' | 'aadB2C' | string;
47
46
  };
48
47
  export interface IApimSkuBuilder {
49
48
  withSku(props: ApimSkuBuilderType): IApimPublisherBuilder;
@@ -1,4 +1,4 @@
1
- import { NamedType } from '../../types';
1
+ import { WithNamedType } from '../../types';
2
2
  export declare enum SetHeaderTypes {
3
3
  delete = "delete",
4
4
  override = "override",
@@ -8,11 +8,11 @@ export declare enum SetHeaderTypes {
8
8
  export type ApimBaseUrlType = {
9
9
  url: string;
10
10
  };
11
- export type ApimSetHeaderType = NamedType & {
11
+ export type ApimSetHeaderType = WithNamedType & {
12
12
  value?: string;
13
13
  type: SetHeaderTypes;
14
14
  };
15
- export type ApimCheckHeaderType = NamedType & {
15
+ export type ApimCheckHeaderType = WithNamedType & {
16
16
  value?: string[];
17
17
  };
18
18
  export type ApimMockPropsType = {
@@ -1,6 +1,6 @@
1
1
  import { input as inputs } from '@pulumi/azure-native/types';
2
2
  import { Input } from '@pulumi/pulumi';
3
- import { NamedType, ResourceInfo } from '../../types';
3
+ import { WithNamedType, ResourceInfo } from '../../types';
4
4
  import { IApimPolicyBuilder } from './apimPolicyBuilder';
5
5
  import { BuilderProps, IBuilderAsync } from './genericBuilder';
6
6
  export type ApimChildBuilderProps = BuilderProps & {
@@ -22,7 +22,7 @@ export type ApimApiKeysType = {
22
22
  export type ApimApiPolicyType = (builder: IApimPolicyBuilder) => IApimPolicyBuilder;
23
23
  export type VersionBuilderFunction = (builder: IApimApiRevisionBuilder) => IApimApiRevisionBuilder;
24
24
  export type ApimApiVersionType = 'v1' | 'v2' | 'v3' | 'v4' | 'v5' | string;
25
- export type ApimApiOperationType = NamedType & {
25
+ export type ApimApiOperationType = WithNamedType & {
26
26
  method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS';
27
27
  urlTemplate: Input<string>;
28
28
  responses?: Input<Input<inputs.apimanagement.ResponseContractArgs>[]>;
@@ -1,12 +1,15 @@
1
1
  import * as cs from '@pulumi/azure-native/containerservice';
2
2
  import { SshGenerationProps } from '../../Core/KeyGenerators';
3
- import { IBuilderAsync } from './genericBuilder';
4
- import { AksAccessProps, AksNetworkProps, AksNodePoolProps, AksResults, AskAddonProps, AskFeatureProps, DefaultAksNodePoolProps } from '../../Aks';
3
+ import { BuilderProps, IBuilderAsync } from './genericBuilder';
4
+ import { AksAccessProps, AksNetworkProps, NodePoolProps, AksResults, AskAddonProps, AskFeatureProps, DefaultAksNodePoolProps } from '../../Aks';
5
+ import { WithDiskEncryption, WithEnvRoles } from '../../types';
6
+ export type AksBuilderArgs = BuilderProps & WithEnvRoles;
5
7
  export type SshBuilderProps = Omit<SshGenerationProps, 'vaultInfo' | 'name'>;
6
8
  export type AksImportProps = {
7
9
  id: string;
8
10
  ignoreChanges?: string[];
9
11
  };
12
+ export type AksEncryptionType = Required<WithDiskEncryption>;
10
13
  export interface ISshBuilder {
11
14
  withNewSsh(props: SshBuilderProps): IAksNetworkBuilder;
12
15
  }
@@ -18,10 +21,12 @@ export interface IAksDefaultNodePoolBuilder {
18
21
  }
19
22
  export interface IAksBuilder extends IBuilderAsync<AksResults> {
20
23
  withAuth(props: Omit<AksAccessProps, 'envRoles'>): IAksBuilder;
21
- withNodePool(props: AksNodePoolProps): IAksBuilder;
24
+ withNodePool(props: NodePoolProps): IAksBuilder;
22
25
  withAddon(props: AskAddonProps): IAksBuilder;
23
26
  withFeature(props: AskFeatureProps): IAksBuilder;
24
27
  withTier(tier: cs.ManagedClusterSKUTier): IAksBuilder;
28
+ /** This must be enabled before resource be created*/
29
+ enableEncryption(props: AksEncryptionType): IAksBuilder;
25
30
  import(props: AksImportProps): IAksBuilder;
26
31
  lock(): IBuilderAsync<AksResults>;
27
32
  }
@@ -1,9 +1,9 @@
1
1
  import { Input } from '@pulumi/pulumi';
2
2
  import { EnvRoleKeyTypes, EnvRolesInfo } from '../../AzAd/EnvRoles';
3
3
  import { RoleEnableTypes } from '../../AzAd/EnvRoles.Consts';
4
- import { KeyVaultInfo, NamedType } from '../../types';
4
+ import { KeyVaultInfo, WithNamedType } from '../../types';
5
5
  import { IInfo } from './genericBuilder';
6
- export type EnvRoleBuilderGrantType = NamedType & {
6
+ export type EnvRoleBuilderGrantType = WithNamedType & {
7
7
  permissions: RoleEnableTypes;
8
8
  scope: Input<string>;
9
9
  };
@@ -1,11 +1,5 @@
1
- import { Input, Resource } from '@pulumi/pulumi';
2
- import { EncryptResourceArgs, LoginArgs, ResourceInfo, TypeOmit } from '../../types';
3
- import { IEnvRoleBuilder } from './envRoleBuilder';
4
- export type BuilderProps = EncryptResourceArgs & {
5
- /** the below are optionals property and will be available depend on the situation*/
6
- envRoles?: IEnvRoleBuilder;
7
- dependsOn?: Input<Input<Resource>[]> | Input<Resource>;
8
- };
1
+ import { BasicResourceWithVaultArgs, LoginArgs, ResourceInfo, TypeOmit, WithDependsOn } from '../../types';
2
+ export type BuilderProps = BasicResourceWithVaultArgs & WithDependsOn;
9
3
  export type OmitBuilderProps<T> = TypeOmit<T, BuilderProps>;
10
4
  export interface ILoginBuilder<IReturnInterface> {
11
5
  generateLogin(): IReturnInterface;
@@ -15,4 +15,4 @@ class BuilderAsync {
15
15
  }
16
16
  }
17
17
  exports.BuilderAsync = BuilderAsync;
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpY0J1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQnVpbGRlci90eXBlcy9nZW5lcmljQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE2QkEsTUFBc0IsT0FBTztJQUdFO0lBQTdCLFlBQTZCLFdBQXlCO1FBQXpCLGdCQUFXLEdBQVgsV0FBVyxDQUFjO0lBQUcsQ0FBQztDQUUzRDtBQUxELDBCQUtDO0FBUUQsTUFBc0IsWUFBWTtJQUdIO0lBQTdCLFlBQTZCLFdBQXlCO1FBQXpCLGdCQUFXLEdBQVgsV0FBVyxDQUFjO0lBQUcsQ0FBQztDQUUzRDtBQUxELG9DQUtDIn0=
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpY0J1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvQnVpbGRlci90eXBlcy9nZW5lcmljQnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF1QkEsTUFBc0IsT0FBTztJQUdFO0lBQTdCLFlBQTZCLFdBQXlCO1FBQXpCLGdCQUFXLEdBQVgsV0FBVyxDQUFjO0lBQUcsQ0FBQztDQUUzRDtBQUxELDBCQUtDO0FBUUQsTUFBc0IsWUFBWTtJQUdIO0lBQTdCLFlBQTZCLFdBQXlCO1FBQXpCLGdCQUFXLEdBQVgsV0FBVyxDQUFjO0lBQUcsQ0FBQztDQUUzRDtBQUxELG9DQUtDIn0=
@@ -1,13 +1,11 @@
1
1
  import { EnvRolesInfo } from '../../AzAd/EnvRoles';
2
2
  import { RoleEnableTypes } from '../../AzAd/EnvRoles.Consts';
3
- import { KeyVaultInfo, ResourceGroupInfo, ResourceInfo } from '../../types';
4
- import { IEnvRoleBuilder } from './envRoleBuilder';
3
+ import { KeyVaultInfo, ResourceGroupInfo, ResourceInfo, WithEncryptionInfo, WithLogInfo } from '../../types';
5
4
  import { BuilderProps, IBuilder, IBuilderAsync, ILockable } from './genericBuilder';
6
5
  import { CertBuilderType } from './vaultBuilder';
7
6
  import { IVnetBuilder, IVnetBuilderStart, VnetBuilderResults } from './vnetBuilder';
8
7
  import { Input } from '@pulumi/pulumi';
9
- export type ResourceBuilderResults = BuilderProps & {
10
- envRoles: IEnvRoleBuilder;
8
+ export type ResourceBuilderResults = BuilderProps & WithEncryptionInfo & WithLogInfo & {
11
9
  vnetInstance?: VnetBuilderResults;
12
10
  otherInstances: Record<string, any>;
13
11
  };
@@ -29,21 +27,29 @@ export interface IResourceGroupBuilder {
29
27
  createRG(props?: RoleEnableTypes): IResourceVaultBuilder;
30
28
  withRG(props: ResourceGroupInfo): IResourceVaultBuilder;
31
29
  }
30
+ /** Key Vault is compulsory for resource builder*/
32
31
  export interface IResourceVaultBuilder {
33
32
  createVault(name?: string): IResourceBuilder;
34
33
  withVault(props: KeyVaultInfo): IResourceBuilder;
35
- getVaultInfoBy(name: string): IResourceBuilder;
34
+ withVaultFrom(name: string): IResourceBuilder;
36
35
  }
37
36
  export interface IResourceVaultItemsBuilder {
38
37
  addSecrets(items: Record<string, Input<string>>): IResourceBuilder;
39
38
  addCerts(props: CertBuilderType): IResourceBuilder;
40
39
  }
40
+ export interface IEnvUserAssignedIdentityBuilder {
41
+ /** Create User Assigned Identity for encryption purposes*/
42
+ createEnvUID(): IResourceBuilder;
43
+ /** Create User Assigned Identity for encryption purposes*/
44
+ withEnvUIDFromVault(): IResourceBuilder;
45
+ }
41
46
  export interface IResourceVnetBuilder {
42
47
  withVnet(props: ResourceVnetBuilderType): IResourceBuilder;
43
48
  linkVaultTo(props: ResourceVaultLinkingBuilderType): IResourceBuilder;
44
49
  }
45
- export interface IResourceBuilder extends IResourceVnetBuilder, IResourceVaultItemsBuilder, ILockable<IResourceBuilder> {
50
+ export interface IResourceBuilder extends IResourceVnetBuilder, IEnvUserAssignedIdentityBuilder, IResourceVaultItemsBuilder, ILockable<IResourceBuilder> {
46
51
  enableEncryption(): IResourceBuilder;
52
+ withLogFrom(name: string): IResourceBuilder;
47
53
  withBuilder(props: BuilderFunctionType): IResourceBuilder;
48
54
  withBuilderAsync(props: BuilderAsyncFunctionType): IResourceBuilder;
49
55
  withResource(builder: ResourceFunction): IResourceBuilder;
@@ -1,8 +1,9 @@
1
1
  import { Input } from '@pulumi/pulumi';
2
- import { IBuilder, IIgnoreChanges, ILockable, ILoginBuilder } from './genericBuilder';
2
+ import { BuilderProps, IBuilder, IIgnoreChanges, ILockable, ILoginBuilder } from './genericBuilder';
3
3
  import { SqlAuthType, SqlElasticPoolType, SqlNetworkType, SqlResults, SqlVulnerabilityAssessmentType } from '../../Sql';
4
4
  import { SqlDbProps, SqlDbSku } from '../../Sql/SqlDb';
5
- import { LogStorageInfo } from '../../Logs/Helpers';
5
+ import { WithEnvRoles, WithLogInfo } from '../../types';
6
+ export type SqlBuilderArgs = BuilderProps & WithEnvRoles & WithLogInfo;
6
7
  export type SqlBuilderAuthOptionsType = Omit<SqlAuthType, 'password' | 'adminLogin' | 'envRoles'>;
7
8
  export type SqlDbBuilderType = {
8
9
  name: string;
@@ -15,9 +16,7 @@ export type SqlDbReplicaType = SqlDbBuilderType & {
15
16
  replicaFromDbId: Input<string>;
16
17
  };
17
18
  export type FullSqlDbPropsType = Omit<SqlDbProps, 'dependsOn' | 'importUri' | 'ignoreChanges' | 'group' | 'elasticPoolId' | 'sqlServerName'>;
18
- export type SqlBuilderVulnerabilityAssessmentType = {
19
- logInfo: LogStorageInfo;
20
- } & Pick<SqlVulnerabilityAssessmentType, 'alertEmails'>;
19
+ export type SqlBuilderVulnerabilityAssessmentType = Pick<SqlVulnerabilityAssessmentType, 'alertEmails'>;
21
20
  export interface ISqlLoginBuilder extends ILoginBuilder<ISqlAuthBuilder> {
22
21
  }
23
22
  export interface ISqlAuthBuilder {
@@ -1,7 +1,9 @@
1
1
  import { CertArgs } from '@drunk-pulumi/azure-providers';
2
- import { BasicMonitorArgs, KeyVaultInfo, NamedType } from '../../types';
2
+ import { KeyVaultInfo, WithNamedType } from '../../types';
3
3
  import { Input } from '@pulumi/pulumi';
4
- export type CertBuilderType = NamedType & {
4
+ import { BuilderProps } from './genericBuilder';
5
+ export type VaultBuilderArgs = Omit<BuilderProps, 'vaultInfo'>;
6
+ export type CertBuilderType = WithNamedType & {
5
7
  cert: CertArgs;
6
8
  };
7
9
  export interface IVaultBuilderResults extends KeyVaultInfo {
@@ -15,6 +17,5 @@ export interface IVaultBuilderResults extends KeyVaultInfo {
15
17
  }): IVaultBuilderResults;
16
18
  }
17
19
  export interface IVaultBuilder {
18
- withDiagnostic(logInfo: BasicMonitorArgs): IVaultBuilder;
19
20
  build(): IVaultBuilderResults;
20
21
  }
@@ -1,7 +1,8 @@
1
- import { ResourceInfo } from '../../types';
1
+ import { ResourceInfo, WithDiskEncryption, WithEncryption } from '../../types';
2
2
  import { VmScheduleType } from '../../VM';
3
- import { IBuilder, ILoginBuilder } from './genericBuilder';
3
+ import { BuilderProps, IBuilder, ILoginBuilder } from './genericBuilder';
4
4
  import { Input } from '@pulumi/pulumi';
5
+ export type VmBuilderArgs = BuilderProps & WithEncryption;
5
6
  export type VmOsBuilderWindowsProps = {
6
7
  offer: 'WindowsServer' | 'CentOS' | 'Windows-10' | 'windows-11' | string;
7
8
  publisher: 'MicrosoftWindowsServer' | 'MicrosoftWindowsDesktop' | string;
@@ -13,6 +14,7 @@ export type VmOsBuilderLinuxProps = {
13
14
  sku: '22_04-lts' | string;
14
15
  };
15
16
  export type VmSizeTypes = 'Standard_D2a_v4' | 'Standard_D4a_v4' | 'Standard_D8a_v4' | 'Standard_D16a_v4' | 'Standard_D32a_v4' | 'Standard_D48a_v4' | 'Standard_D64a_v4' | 'Standard_D96a_v4' | 'Standard_D2as_v4' | 'Standard_D4as_v4' | 'Standard_D8as_v4' | 'Standard_D16as_v4' | 'Standard_D32as_v4' | 'Standard_D48as_v4' | 'Standard_D64as_v4' | 'Standard_D96as_v4' | 'Standard_E2_v4' | 'Standard_E4_v4' | 'Standard_E8_v4' | 'Standard_E16_v4' | 'Standard_E20_v4' | 'Standard_E32_v4' | 'Standard_E48_v4' | 'Standard_E64_v4' | 'Standard_E8-4ads_v5' | 'Standard_E16-4ads_v5' | 'Standard_E32-8ads_v5' | 'Standard_E64-16ads_v5' | 'Standard_E96-24ads_v5' | string;
17
+ export type VmEncryptionType = Required<WithDiskEncryption>;
16
18
  export interface IVmOsBuilder {
17
19
  withWindowsImage(props: VmOsBuilderWindowsProps): IVmSizeBuilder;
18
20
  withLinuxImage(props: VmOsBuilderLinuxProps): IVmSizeBuilder;
@@ -26,6 +28,8 @@ export interface IVmVnetBuilder {
26
28
  withSubnetId(props: Input<string>): IVmBuilder;
27
29
  }
28
30
  export interface IVmBuilder extends IBuilder<ResourceInfo> {
31
+ /** This must be enabled before resource be created*/
32
+ enableEncryption(props: VmEncryptionType): IVmBuilder;
29
33
  withTags(props: Record<string, Input<string>>): IVmBuilder;
30
34
  withSchedule(props: VmScheduleType): IVmBuilder;
31
35
  }