@drunk-pulumi/azure-components 0.0.6

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 (181) hide show
  1. package/PulumiPlugin.yaml +1 -0
  2. package/README.md +1 -0
  3. package/ResourceBuilder.d.ts +54 -0
  4. package/ResourceBuilder.js +71 -0
  5. package/aks/AzKubernetes.d.ts +55 -0
  6. package/aks/AzKubernetes.js +288 -0
  7. package/aks/ContainerRegistry.d.ts +19 -0
  8. package/aks/ContainerRegistry.js +119 -0
  9. package/aks/helpers.d.ts +6 -0
  10. package/aks/helpers.js +52 -0
  11. package/aks/index.d.ts +3 -0
  12. package/aks/index.js +43 -0
  13. package/app/AppCert.d.ts +15 -0
  14. package/app/AppCert.js +74 -0
  15. package/app/AppConfig.d.ts +18 -0
  16. package/app/AppConfig.js +124 -0
  17. package/app/AppService.d.ts +69 -0
  18. package/app/AppService.js +122 -0
  19. package/app/IoTHub.d.ts +15 -0
  20. package/app/IoTHub.js +80 -0
  21. package/app/LogicApp.d.ts +19 -0
  22. package/app/LogicApp.js +77 -0
  23. package/app/SignalR.d.ts +45 -0
  24. package/app/SignalR.js +125 -0
  25. package/app/index.d.ts +6 -0
  26. package/app/index.js +23 -0
  27. package/azAd/AppRegistration.d.ts +52 -0
  28. package/azAd/AppRegistration.js +165 -0
  29. package/azAd/AzRole.d.ts +14 -0
  30. package/azAd/AzRole.js +72 -0
  31. package/azAd/CustomRoles.d.ts +10 -0
  32. package/azAd/CustomRoles.js +73 -0
  33. package/azAd/GroupRole.d.ts +29 -0
  34. package/azAd/GroupRole.js +107 -0
  35. package/azAd/RoleAssignment.d.ts +15 -0
  36. package/azAd/RoleAssignment.js +63 -0
  37. package/azAd/UserAssignedIdentity.d.ts +17 -0
  38. package/azAd/UserAssignedIdentity.js +76 -0
  39. package/azAd/helpers/graphBuiltIn.d.ts +14 -0
  40. package/azAd/helpers/graphBuiltIn.js +5134 -0
  41. package/azAd/helpers/index.d.ts +3 -0
  42. package/azAd/helpers/index.js +39 -0
  43. package/azAd/helpers/rolesBuiltIn.d.ts +90 -0
  44. package/azAd/helpers/rolesBuiltIn.js +18601 -0
  45. package/azAd/helpers/rsRoleDefinition.d.ts +62 -0
  46. package/azAd/helpers/rsRoleDefinition.js +120 -0
  47. package/azAd/index.d.ts +7 -0
  48. package/azAd/index.js +24 -0
  49. package/base/BaseComponent.d.ts +53 -0
  50. package/base/BaseComponent.js +98 -0
  51. package/base/BaseResourceComponent.d.ts +108 -0
  52. package/base/BaseResourceComponent.js +180 -0
  53. package/base/helpers.d.ts +12 -0
  54. package/base/helpers.js +29 -0
  55. package/base/index.d.ts +3 -0
  56. package/base/index.js +43 -0
  57. package/common/PGPGenerator.d.ts +26 -0
  58. package/common/PGPGenerator.js +72 -0
  59. package/common/RandomPassword.d.ts +21 -0
  60. package/common/RandomPassword.js +84 -0
  61. package/common/RandomString.d.ts +20 -0
  62. package/common/RandomString.js +74 -0
  63. package/common/ResourceLocker.d.ts +9 -0
  64. package/common/ResourceLocker.js +52 -0
  65. package/common/RsGroup.d.ts +20 -0
  66. package/common/RsGroup.js +85 -0
  67. package/common/SshGenerator.d.ts +17 -0
  68. package/common/SshGenerator.js +66 -0
  69. package/common/index.d.ts +5 -0
  70. package/common/index.js +22 -0
  71. package/database/AzSql.d.ts +71 -0
  72. package/database/AzSql.js +283 -0
  73. package/database/MySql.d.ts +35 -0
  74. package/database/MySql.js +181 -0
  75. package/database/Postgres.d.ts +32 -0
  76. package/database/Postgres.js +171 -0
  77. package/database/Redis.d.ts +26 -0
  78. package/database/Redis.js +125 -0
  79. package/database/helpers.d.ts +7 -0
  80. package/database/helpers.js +52 -0
  81. package/database/index.d.ts +5 -0
  82. package/database/index.js +45 -0
  83. package/helpers/Location/LocationBuiltIn.d.ts +6 -0
  84. package/helpers/Location/LocationBuiltIn.js +493 -0
  85. package/helpers/Location/index.d.ts +3 -0
  86. package/helpers/Location/index.js +25 -0
  87. package/helpers/autoTags.d.ts +1 -0
  88. package/helpers/autoTags.js +27 -0
  89. package/helpers/azureEnv.d.ts +21 -0
  90. package/helpers/azureEnv.js +102 -0
  91. package/helpers/configHelper.d.ts +5 -0
  92. package/helpers/configHelper.js +54 -0
  93. package/helpers/index.d.ts +4 -0
  94. package/helpers/index.js +41 -0
  95. package/helpers/rsHelpers.d.ts +18 -0
  96. package/helpers/rsHelpers.js +92 -0
  97. package/helpers/stackEnv.d.ts +4 -0
  98. package/helpers/stackEnv.js +54 -0
  99. package/index.d.ts +14 -0
  100. package/index.js +53 -0
  101. package/logs/Logs.d.ts +48 -0
  102. package/logs/Logs.js +154 -0
  103. package/logs/helpers.d.ts +1 -0
  104. package/logs/helpers.js +38 -0
  105. package/logs/index.d.ts +1 -0
  106. package/logs/index.js +18 -0
  107. package/package.json +34 -0
  108. package/services/Automation.d.ts +16 -0
  109. package/services/Automation.js +85 -0
  110. package/services/AzSearch.d.ts +20 -0
  111. package/services/AzSearch.js +113 -0
  112. package/services/ServiceBus.d.ts +42 -0
  113. package/services/ServiceBus.js +256 -0
  114. package/services/index.d.ts +3 -0
  115. package/services/index.js +20 -0
  116. package/storage/StorageAccount.d.ts +53 -0
  117. package/storage/StorageAccount.js +261 -0
  118. package/storage/helpers.d.ts +24 -0
  119. package/storage/helpers.js +89 -0
  120. package/storage/index.d.ts +2 -0
  121. package/storage/index.js +42 -0
  122. package/types.d.ts +125 -0
  123. package/types.js +3 -0
  124. package/vault/EncryptionKey.d.ts +21 -0
  125. package/vault/EncryptionKey.js +73 -0
  126. package/vault/KeyVault.d.ts +31 -0
  127. package/vault/KeyVault.js +110 -0
  128. package/vault/VaultSecret.d.ts +23 -0
  129. package/vault/VaultSecret.js +72 -0
  130. package/vault/VaultSecrets.d.ts +25 -0
  131. package/vault/VaultSecrets.js +31 -0
  132. package/vault/helpers.d.ts +1 -0
  133. package/vault/helpers.js +13 -0
  134. package/vault/index.d.ts +5 -0
  135. package/vault/index.js +45 -0
  136. package/vm/DiskEncryptionSet.d.ts +16 -0
  137. package/vm/DiskEncryptionSet.js +74 -0
  138. package/vm/VirtualMachine.d.ts +45 -0
  139. package/vm/VirtualMachine.js +192 -0
  140. package/vm/helpers.d.ts +16 -0
  141. package/vm/helpers.js +15 -0
  142. package/vm/index.d.ts +3 -0
  143. package/vm/index.js +43 -0
  144. package/vnet/AzCdn.d.ts +44 -0
  145. package/vnet/AzCdn.js +276 -0
  146. package/vnet/Basion.d.ts +19 -0
  147. package/vnet/Basion.js +78 -0
  148. package/vnet/DnsZone.d.ts +36 -0
  149. package/vnet/DnsZone.js +113 -0
  150. package/vnet/Firewall.d.ts +53 -0
  151. package/vnet/Firewall.js +136 -0
  152. package/vnet/FirewallPolicies/FirewallPolicyBuilder.d.ts +18 -0
  153. package/vnet/FirewallPolicies/FirewallPolicyBuilder.js +91 -0
  154. package/vnet/FirewallPolicies/commonPolicies.d.ts +10 -0
  155. package/vnet/FirewallPolicies/commonPolicies.js +55 -0
  156. package/vnet/FirewallPolicies/index.d.ts +0 -0
  157. package/vnet/FirewallPolicies/index.js +2 -0
  158. package/vnet/IpAddresses.d.ts +36 -0
  159. package/vnet/IpAddresses.js +74 -0
  160. package/vnet/NetworkPeering.d.ts +21 -0
  161. package/vnet/NetworkPeering.js +85 -0
  162. package/vnet/PrivateDnsZone.d.ts +38 -0
  163. package/vnet/PrivateDnsZone.js +111 -0
  164. package/vnet/PrivateEndpoint.d.ts +43 -0
  165. package/vnet/PrivateEndpoint.js +181 -0
  166. package/vnet/RouteTable.d.ts +22 -0
  167. package/vnet/RouteTable.js +75 -0
  168. package/vnet/VirtualNetwork.d.ts +99 -0
  169. package/vnet/VirtualNetwork.js +311 -0
  170. package/vnet/VpnGateway.d.ts +18 -0
  171. package/vnet/VpnGateway.js +90 -0
  172. package/vnet/helpers.d.ts +16 -0
  173. package/vnet/helpers.js +47 -0
  174. package/vnet/index.d.ts +13 -0
  175. package/vnet/index.js +53 -0
  176. package/vnet/securityRules/SecurityRuleBuilder.d.ts +12 -0
  177. package/vnet/securityRules/SecurityRuleBuilder.js +55 -0
  178. package/vnet/securityRules/commonRules.d.ts +9 -0
  179. package/vnet/securityRules/commonRules.js +94 -0
  180. package/vnet/securityRules/index.d.ts +2 -0
  181. package/vnet/securityRules/index.js +19 -0
@@ -0,0 +1,181 @@
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 () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.MySql = void 0;
37
+ const mysql = __importStar(require("@pulumi/azure-native/dbformysql"));
38
+ const pulumi = __importStar(require("@pulumi/pulumi"));
39
+ const azAd_1 = require("../azAd");
40
+ const base_1 = require("../base");
41
+ const helpers_1 = require("../helpers");
42
+ const vnet = __importStar(require("../vnet"));
43
+ const helpers_2 = require("./helpers");
44
+ class MySql extends base_1.BaseResourceComponent {
45
+ id;
46
+ resourceName;
47
+ constructor(name, args, opts) {
48
+ super('MySql', name, args, opts);
49
+ const server = this.createMySql();
50
+ this.createNetwork(server);
51
+ this.enableADAdmin(server);
52
+ this.createDatabases(server);
53
+ if (args.lock)
54
+ this.lockFromDeleting(server);
55
+ this.id = server.id;
56
+ this.resourceName = server.name;
57
+ this.registerOutputs();
58
+ }
59
+ getOutputs() {
60
+ return {
61
+ id: this.id,
62
+ resourceName: this.resourceName,
63
+ };
64
+ }
65
+ createMySql() {
66
+ const { rsGroup, enableEncryption, administratorLogin, lock } = this.args;
67
+ const adminLogin = administratorLogin ?? pulumi.interpolate `${this.name}-admin-${this.createRandomString().value}`;
68
+ const password = this.createPassword();
69
+ const encryptionKey = enableEncryption ? this.getEncryptionKey() : undefined;
70
+ const uAssignedId = this.getUAssignedId();
71
+ const server = new mysql.Server(this.name, {
72
+ ...this.args,
73
+ ...rsGroup,
74
+ administratorLogin: adminLogin,
75
+ administratorLoginPassword: password.value,
76
+ version: this.args.version ?? mysql.ServerVersion.ServerVersion_8_0_21,
77
+ storage: this.args.storage ?? { storageSizeGB: 30 },
78
+ identity: {
79
+ type: mysql.ManagedServiceIdentityType.UserAssigned,
80
+ userAssignedIdentities: [uAssignedId.id],
81
+ },
82
+ dataEncryption: encryptionKey
83
+ ? {
84
+ type: mysql.DataEncryptionType.AzureKeyVault,
85
+ primaryUserAssignedIdentityId: uAssignedId.id,
86
+ primaryKeyURI: encryptionKey.id,
87
+ }
88
+ : { type: 'SystemManaged' },
89
+ maintenanceWindow: this.args.maintenanceWindow ?? {
90
+ customWindow: 'Enabled',
91
+ dayOfWeek: 0, //0 is Sunday
92
+ startHour: 0,
93
+ startMinute: 0,
94
+ },
95
+ backup: this.args.backup ?? {
96
+ geoRedundantBackup: helpers_1.azureEnv.isPrd ? 'Enabled' : 'Disabled',
97
+ backupRetentionDays: helpers_1.azureEnv.isPrd ? 30 : 7,
98
+ },
99
+ highAvailability: this.args.sku.tier !== 'Burstable'
100
+ ? this.args.highAvailability ?? {
101
+ mode: helpers_1.azureEnv.isPrd ? 'ZoneRedundant' : 'SameZone',
102
+ standbyAvailabilityZone: helpers_1.azureEnv.isPrd ? '3' : '1',
103
+ }
104
+ : undefined,
105
+ availabilityZone: this.args.availabilityZone ?? helpers_1.azureEnv.isPrd ? '3' : '1',
106
+ network: {
107
+ publicNetworkAccess: this.args.network?.publicNetworkAccess ?? this.args.network?.privateLink ? 'Disabled' : 'Enabled',
108
+ },
109
+ }, {
110
+ ...this.opts,
111
+ protect: lock ?? this.opts?.protect,
112
+ parent: this,
113
+ });
114
+ this.addSecrets({
115
+ [`${this.name}-host`]: pulumi.interpolate `${server.name}.mysql.database.azure.com`,
116
+ [`${this.name}-port`]: '3306',
117
+ [`${this.name}-login`]: this.args.administratorLogin,
118
+ [`${this.name}-pass`]: password.value,
119
+ [`${this.name}-username`]: adminLogin,
120
+ });
121
+ return server;
122
+ }
123
+ createNetwork(server) {
124
+ const { rsGroup, network } = this.args;
125
+ if (network?.ipRules) {
126
+ pulumi.output(network.ipRules).apply((ips) => (0, helpers_2.convertToIpRange)(ips).map((f, i) => new mysql.FirewallRule(`${this.name}-firewall-${i}`, {
127
+ ...rsGroup,
128
+ //firewallRuleName: `${this.name}-firewall-${i}`,
129
+ serverName: server.name,
130
+ startIpAddress: f.start,
131
+ endIpAddress: f.end,
132
+ }, { dependsOn: server, parent: this })));
133
+ }
134
+ if (network?.privateLink) {
135
+ new vnet.PrivateEndpoint(this.name, {
136
+ ...network.privateLink,
137
+ rsGroup,
138
+ type: 'mysql',
139
+ resourceInfo: server,
140
+ }, { dependsOn: server, parent: this });
141
+ }
142
+ }
143
+ enableADAdmin(server) {
144
+ const { rsGroup, groupRoles, enableAzureADAdmin } = this.args;
145
+ if (!enableAzureADAdmin || !groupRoles)
146
+ return undefined;
147
+ return new mysql.AzureADAdministrator(this.name, {
148
+ ...rsGroup,
149
+ administratorName: `${this.name}-azure-ad`,
150
+ serverName: server.name,
151
+ login: server.administratorLogin.apply((login) => login),
152
+ administratorType: 'ActiveDirectory',
153
+ sid: groupRoles.contributor.objectId,
154
+ tenantId: helpers_1.azureEnv.tenantId,
155
+ }, { dependsOn: server, parent: this });
156
+ }
157
+ createDatabases(server) {
158
+ const { rsGroup, databases } = this.args;
159
+ if (!databases)
160
+ return undefined;
161
+ return databases.map((d) => {
162
+ const db = new mysql.Database(`${this.name}-${d.name}`, {
163
+ ...rsGroup,
164
+ serverName: server.name,
165
+ databaseName: d.name,
166
+ }, { dependsOn: server, parent: this });
167
+ //add connection string to vault
168
+ // const conn = pulumi.interpolate``;
169
+ // this.addSecret(`${this.name}-${d.name}-conn`, conn);
170
+ return db;
171
+ });
172
+ }
173
+ getUAssignedId() {
174
+ const { defaultUAssignedId, rsGroup, groupRoles, vaultInfo } = this.args;
175
+ if (defaultUAssignedId)
176
+ return defaultUAssignedId;
177
+ return new azAd_1.UserAssignedIdentity(this.name, { rsGroup, vaultInfo, memberof: groupRoles ? [groupRoles.readOnly] : undefined }, { dependsOn: this.opts?.dependsOn, parent: this });
178
+ }
179
+ }
180
+ exports.MySql = MySql;
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTXlTcWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvTXlTcWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdUVBQXlEO0FBQ3pELHVEQUF5QztBQUN6QyxrQ0FBK0M7QUFDL0Msa0NBQTBEO0FBQzFELHdDQUFzQztBQUV0Qyw4Q0FBZ0M7QUFDaEMsdUNBQTZDO0FBa0M3QyxNQUFhLEtBQU0sU0FBUSw0QkFBZ0M7SUFDekMsRUFBRSxDQUF3QjtJQUMxQixZQUFZLENBQXdCO0lBRXBELFlBQVksSUFBWSxFQUFFLElBQWUsRUFBRSxJQUFzQztRQUMvRSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTdCLElBQUksSUFBSSxDQUFDLElBQUk7WUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUVoQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVNLFVBQVU7UUFDZixPQUFPO1lBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQ2hDLENBQUM7SUFDSixDQUFDO0lBRU8sV0FBVztRQUNqQixNQUFNLEVBQUUsT0FB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
@@ -0,0 +1,32 @@
1
+ import * as postgresql from '@pulumi/azure-native/dbforpostgresql';
2
+ import * as pulumi from '@pulumi/pulumi';
3
+ import { BaseArgs, BaseResourceComponent } from '../base';
4
+ import * as types from '../types';
5
+ export interface PostgresArgs extends BaseArgs, types.WithEncryptionEnabler, types.WithResourceGroupInputs, types.WithGroupRolesArgs, types.WithUserAssignedIdentity, types.WithNetworkArgs, Pick<postgresql.ServerArgs, 'version' | 'storage' | 'administratorLogin' | 'maintenanceWindow' | 'backup' | 'highAvailability' | 'availabilityZone'> {
6
+ sku: {
7
+ /** The name of postgres: Standard_B2ms, */
8
+ name: pulumi.Input<string>;
9
+ /**
10
+ * The tier of the particular SKU, e.g. Burstable.
11
+ */
12
+ tier: postgresql.SkuTier;
13
+ };
14
+ enableAzureADAdmin?: boolean;
15
+ databases?: Array<{
16
+ name: string;
17
+ }>;
18
+ lock?: boolean;
19
+ }
20
+ export declare class Postgres extends BaseResourceComponent<PostgresArgs> {
21
+ readonly id: pulumi.Output<string>;
22
+ readonly resourceName: pulumi.Output<string>;
23
+ constructor(name: string, args: PostgresArgs, opts?: pulumi.ComponentResourceOptions);
24
+ getOutputs(): {
25
+ id: pulumi.Output<string>;
26
+ resourceName: pulumi.Output<string>;
27
+ };
28
+ private createPostgres;
29
+ private createNetwork;
30
+ private createDatabases;
31
+ private getUAssignedId;
32
+ }
@@ -0,0 +1,171 @@
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 () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Postgres = void 0;
37
+ const postgresql = __importStar(require("@pulumi/azure-native/dbforpostgresql"));
38
+ const pulumi = __importStar(require("@pulumi/pulumi"));
39
+ const azAd_1 = require("../azAd");
40
+ const base_1 = require("../base");
41
+ const helpers_1 = require("../helpers");
42
+ const vnet = __importStar(require("../vnet"));
43
+ const helpers_2 = require("./helpers");
44
+ class Postgres extends base_1.BaseResourceComponent {
45
+ id;
46
+ resourceName;
47
+ constructor(name, args, opts) {
48
+ super('Postgres', name, args, opts);
49
+ const server = this.createPostgres();
50
+ this.createNetwork(server);
51
+ this.createDatabases(server);
52
+ if (args.lock)
53
+ this.lockFromDeleting(server);
54
+ this.id = server.id;
55
+ this.resourceName = server.name;
56
+ this.registerOutputs();
57
+ }
58
+ getOutputs() {
59
+ return {
60
+ id: this.id,
61
+ resourceName: this.resourceName,
62
+ };
63
+ }
64
+ createPostgres() {
65
+ const { rsGroup, enableEncryption, administratorLogin, lock } = this.args;
66
+ const adminLogin = administratorLogin ?? pulumi.interpolate `${this.name}-admin-${this.createRandomString().value}`;
67
+ const password = this.createPassword();
68
+ const encryptionKey = enableEncryption ? this.getEncryptionKey() : undefined;
69
+ const uAssignedId = this.getUAssignedId();
70
+ const server = new postgresql.Server(this.name, {
71
+ ...this.args,
72
+ ...rsGroup,
73
+ version: this.args.version ?? postgresql.ServerVersion.ServerVersion_16,
74
+ administratorLogin: adminLogin,
75
+ administratorLoginPassword: password.value,
76
+ storage: this.args.storage ?? { storageSizeGB: 32 },
77
+ identity: {
78
+ type: postgresql.IdentityType.UserAssigned,
79
+ userAssignedIdentities: pulumi.output(uAssignedId.id).apply((id) => ({ [id]: {} })),
80
+ },
81
+ dataEncryption: encryptionKey?.id
82
+ ? {
83
+ type: postgresql.DataEncryptionType.AzureKeyVault,
84
+ primaryUserAssignedIdentityId: uAssignedId.id,
85
+ primaryKeyURI: encryptionKey.id,
86
+ }
87
+ : { type: 'SystemManaged' },
88
+ maintenanceWindow: this.args.maintenanceWindow ?? {
89
+ customWindow: 'Enabled',
90
+ dayOfWeek: 0, //0 is Sunday
91
+ startHour: 0,
92
+ startMinute: 0,
93
+ },
94
+ authConfig: {
95
+ activeDirectoryAuth: this.args.enableAzureADAdmin ? 'Enabled' : 'Disabled',
96
+ passwordAuth: 'Enabled',
97
+ tenantId: helpers_1.azureEnv.tenantId,
98
+ },
99
+ backup: this.args.backup ?? {
100
+ geoRedundantBackup: helpers_1.azureEnv.isPrd ? 'Enabled' : 'Disabled',
101
+ backupRetentionDays: helpers_1.azureEnv.isPrd ? 30 : 7,
102
+ },
103
+ highAvailability: this.args.sku?.tier !== 'Burstable'
104
+ ? this.args.highAvailability ?? {
105
+ mode: helpers_1.azureEnv.isPrd ? 'ZoneRedundant' : 'SameZone',
106
+ standbyAvailabilityZone: helpers_1.azureEnv.isPrd ? '3' : '1',
107
+ }
108
+ : undefined,
109
+ availabilityZone: this.args.availabilityZone ?? helpers_1.azureEnv.isPrd ? '3' : '1',
110
+ network: {
111
+ publicNetworkAccess: this.args.network?.publicNetworkAccess ?? this.args.network?.privateLink ? 'Disabled' : 'Enabled',
112
+ },
113
+ }, {
114
+ ...this.opts,
115
+ protect: lock ?? this.opts?.protect,
116
+ parent: this,
117
+ });
118
+ this.addSecrets({
119
+ [`${this.name}-host`]: pulumi.interpolate `${server.name}.postgres.database.azure.com`,
120
+ [`${this.name}-port`]: '5432',
121
+ [`${this.name}-login`]: this.args.administratorLogin,
122
+ [`${this.name}-pass`]: password.value,
123
+ [`${this.name}-username`]: adminLogin,
124
+ });
125
+ return server;
126
+ }
127
+ createNetwork(server) {
128
+ const { rsGroup, network } = this.args;
129
+ if (network?.ipRules) {
130
+ pulumi.output(network.ipRules).apply((ips) => (0, helpers_2.convertToIpRange)(ips).map((f, i) => new postgresql.FirewallRule(`${this.name}-firewall-${i}`, {
131
+ ...rsGroup,
132
+ //firewallRuleName: `${this.name}-firewall-${i}`,
133
+ serverName: server.name,
134
+ startIpAddress: f.start,
135
+ endIpAddress: f.end,
136
+ }, { dependsOn: server, parent: this })));
137
+ }
138
+ if (network?.privateLink) {
139
+ new vnet.PrivateEndpoint(this.name, {
140
+ ...network.privateLink,
141
+ rsGroup,
142
+ type: 'postgres',
143
+ resourceInfo: server,
144
+ }, { dependsOn: server, parent: this });
145
+ }
146
+ }
147
+ createDatabases(server) {
148
+ const { rsGroup, databases } = this.args;
149
+ if (!databases)
150
+ return undefined;
151
+ return databases.map((d) => {
152
+ const db = new postgresql.Database(`${this.name}-${d.name}`, {
153
+ ...rsGroup,
154
+ serverName: server.name,
155
+ databaseName: d.name,
156
+ }, { dependsOn: server, parent: this });
157
+ //add connection string to vault
158
+ // const conn = pulumi.interpolate``;
159
+ // this.addSecret(`${this.name}-${d.name}-conn`, conn);
160
+ return db;
161
+ });
162
+ }
163
+ getUAssignedId() {
164
+ const { defaultUAssignedId, rsGroup, groupRoles, vaultInfo } = this.args;
165
+ if (defaultUAssignedId)
166
+ return defaultUAssignedId;
167
+ return new azAd_1.UserAssignedIdentity(this.name, { rsGroup, vaultInfo, memberof: groupRoles ? [groupRoles.readOnly] : undefined }, { dependsOn: this.opts?.dependsOn, parent: this });
168
+ }
169
+ }
170
+ exports.Postgres = Postgres;
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9zdGdyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvUG9zdGdyZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaUZBQW1FO0FBQ25FLHVEQUF5QztBQUN6QyxrQ0FBK0M7QUFDL0Msa0NBQTBEO0FBQzFELHdDQUFzQztBQUV0Qyw4Q0FBZ0M7QUFDaEMsdUNBQTZDO0FBZ0M3QyxNQUFhLFFBQVMsU0FBUSw0QkFBbUM7SUFDL0MsRUFBRSxDQUF3QjtJQUMxQixZQUFZLENBQXdCO0lBRXBELFlBQVksSUFBWSxFQUFFLElBQWtCLEVBQUUsSUFBc0M7UUFDbEYsS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXBDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsSUFBSTtZQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU3QyxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBRWhDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU0sVUFBVTtRQUNmLE9BQU87WUFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDWCxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDaEMsQ0FBQztJQUNKLENBQUM7SUFDTyxjQUFjO1FBQ3BCLE1BQU0sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsSUFB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
@@ -0,0 +1,26 @@
1
+ import * as redis from '@pulumi/azure-native/redis';
2
+ import * as pulumi from '@pulumi/pulumi';
3
+ import { BaseArgs, BaseResourceComponent } from '../base';
4
+ import * as types from '../types';
5
+ import { PrivateEndpointType } from '../vnet';
6
+ export interface RedisArgs extends BaseArgs, types.WithResourceGroupInputs, Pick<redis.RedisArgs, 'sku' | 'zones' | 'disableAccessKeyAuthentication' | 'redisVersion' | 'replicasPerMaster' | 'replicasPerPrimary' | 'tenantSettings' | 'redisConfiguration' | 'identity'> {
7
+ network?: {
8
+ subnetId: pulumi.Input<string>;
9
+ staticIP?: pulumi.Input<string>;
10
+ privateLink?: PrivateEndpointType;
11
+ ipRules?: pulumi.Input<pulumi.Input<string>[]>;
12
+ };
13
+ lock?: boolean;
14
+ }
15
+ export declare class Redis extends BaseResourceComponent<RedisArgs> {
16
+ readonly id: pulumi.Output<string>;
17
+ readonly resourceName: pulumi.Output<string>;
18
+ constructor(name: string, args: RedisArgs, opts?: pulumi.ComponentResourceOptions);
19
+ getOutputs(): {
20
+ id: pulumi.Output<string>;
21
+ resourceName: pulumi.Output<string>;
22
+ };
23
+ private createRedis;
24
+ private createNetwork;
25
+ private addSecretsToVault;
26
+ }
@@ -0,0 +1,125 @@
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 () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Redis = void 0;
37
+ const redis = __importStar(require("@pulumi/azure-native/redis"));
38
+ const pulumi = __importStar(require("@pulumi/pulumi"));
39
+ const base_1 = require("../base");
40
+ const vault = __importStar(require("../vault"));
41
+ const vnet = __importStar(require("../vnet"));
42
+ const helpers_1 = require("./helpers");
43
+ class Redis extends base_1.BaseResourceComponent {
44
+ id;
45
+ resourceName;
46
+ constructor(name, args, opts) {
47
+ super('Redis', name, args, opts);
48
+ const server = this.createRedis();
49
+ this.createNetwork(server);
50
+ this.addSecretsToVault(server);
51
+ if (args.lock)
52
+ this.lockFromDeleting(server);
53
+ this.id = server.id;
54
+ this.resourceName = server.name;
55
+ this.registerOutputs();
56
+ }
57
+ getOutputs() {
58
+ return {
59
+ id: this.id,
60
+ resourceName: this.resourceName,
61
+ };
62
+ }
63
+ createRedis() {
64
+ const { rsGroup, network, lock, ...props } = this.args;
65
+ const server = new redis.Redis(this.name, {
66
+ ...props,
67
+ ...rsGroup,
68
+ minimumTlsVersion: '1.2',
69
+ enableNonSslPort: false,
70
+ redisVersion: props.redisVersion ?? '6.0',
71
+ subnetId: network?.subnetId,
72
+ staticIP: network?.staticIP,
73
+ publicNetworkAccess: network?.privateLink ? 'Disabled' : 'Enabled',
74
+ updateChannel: 'Stable',
75
+ }, { ...this.opts, protect: lock ?? this.opts?.protect, parent: this });
76
+ return server;
77
+ }
78
+ createNetwork(server) {
79
+ const { rsGroup, network } = this.args;
80
+ if (network?.ipRules) {
81
+ pulumi.output(network.ipRules).apply((ips) => (0, helpers_1.convertToIpRange)(ips).map((f, i) => new redis.FirewallRule(`${this.name}-firewall-${i}`, {
82
+ ...rsGroup,
83
+ //ruleName: `${this.name}-firewall-${i}`,
84
+ cacheName: server.name,
85
+ startIP: f.start,
86
+ endIP: f.end,
87
+ }, { dependsOn: server, parent: this })));
88
+ }
89
+ if (network?.privateLink) {
90
+ new vnet.PrivateEndpoint(this.name, {
91
+ ...network.privateLink,
92
+ rsGroup,
93
+ type: 'redis',
94
+ resourceInfo: server,
95
+ }, { dependsOn: server, parent: this });
96
+ }
97
+ }
98
+ addSecretsToVault(server) {
99
+ const { rsGroup, vaultInfo } = this.args;
100
+ if (!vaultInfo)
101
+ return;
102
+ return server.hostName.apply(async (h) => {
103
+ if (!h)
104
+ return;
105
+ const keys = await redis.listRedisKeysOutput({
106
+ name: server.name,
107
+ resourceGroupName: rsGroup.resourceGroupName,
108
+ });
109
+ return new vault.VaultSecrets(this.name, {
110
+ vaultInfo,
111
+ secrets: {
112
+ [`${this.name}-host`]: { value: h, contentType: `Redis host` },
113
+ [`${this.name}-pass`]: { value: keys.primaryKey, contentType: `Redis pass` },
114
+ [`${this.name}-port`]: { value: '6380', contentType: `Redis port` },
115
+ [`${this.name}-conn`]: {
116
+ value: pulumi.interpolate `${h}:6380,password=${keys.primaryKey},ssl=True,abortConnect=False`,
117
+ contentType: `Redis conn`,
118
+ },
119
+ },
120
+ }, { dependsOn: server, parent: this });
121
+ });
122
+ }
123
+ }
124
+ exports.Redis = Redis;
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVkaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWJhc2UvUmVkaXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0VBQW9EO0FBQ3BELHVEQUF5QztBQUN6QyxrQ0FBMEQ7QUFFMUQsZ0RBQWtDO0FBQ2xDLDhDQUFnQztBQUVoQyx1Q0FBNkM7QUEwQjdDLE1BQWEsS0FBTSxTQUFRLDRCQUFnQztJQUN6QyxFQUFFLENBQXdCO0lBQzFCLFlBQVksQ0FBd0I7SUFFcEQsWUFBWSxJQUFZLEVBQUUsSUFBZSxFQUFFLElBQXNDO1FBQy9FLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVqQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFL0IsSUFBSSxJQUFJLENBQUMsSUFBSTtZQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU3QyxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBRWhDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU0sVUFBVTtRQUNmLE9BQU87WUFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDWCxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDaEMsQ0FBQztJQUNKLENBQUM7SUFDTyxXQUFXO1FBQ2pCLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssRUFBRSxHQUFHLElBQUks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
@@ -0,0 +1,7 @@
1
+ import * as netmask from 'netmask';
2
+ export declare function getIpsRange(prefix: string): netmask.Netmask;
3
+ /** Convert IP address and IP address group into range */
4
+ export declare function convertToIpRange(ipAddress: string[]): Array<{
5
+ start: string;
6
+ end: string;
7
+ }>;
@@ -0,0 +1,52 @@
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 () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getIpsRange = getIpsRange;
37
+ exports.convertToIpRange = convertToIpRange;
38
+ const netmask = __importStar(require("netmask"));
39
+ function getIpsRange(prefix) {
40
+ return new netmask.Netmask(prefix);
41
+ }
42
+ /** Convert IP address and IP address group into range */
43
+ function convertToIpRange(ipAddress) {
44
+ return ipAddress.map((ip) => {
45
+ if (ip.includes('/')) {
46
+ const range = getIpsRange(ip);
47
+ return { start: range.base, end: range.broadcast };
48
+ }
49
+ return { start: ip, end: ip };
50
+ });
51
+ }
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhYmFzZS9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsa0NBRUM7QUFHRCw0Q0FRQztBQWZELGlEQUFtQztBQUVuQyxTQUFnQixXQUFXLENBQUMsTUFBYztJQUN4QyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNyQyxDQUFDO0FBRUQseURBQXlEO0FBQ3pELFNBQWdCLGdCQUFnQixDQUFDLFNBQW1CO0lBQ2xELE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO1FBQzFCLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM5QixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyJ9
@@ -0,0 +1,5 @@
1
+ export * from './AzSql';
2
+ export * as dbHelpers from './helpers';
3
+ export * from './MySql';
4
+ export * from './Postgres';
5
+ export * from './Redis';