@drunk-pulumi/azure-components 1.0.1 → 1.0.3

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 (104) hide show
  1. package/README.md +127 -1
  2. package/ResourceBuilder.d.ts +85 -46
  3. package/ResourceBuilder.js +147 -46
  4. package/aks/AzKubernetes.d.ts +17 -3
  5. package/aks/AzKubernetes.js +92 -43
  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 +15 -11
  27. package/azAd/AppRegistration.js +67 -68
  28. package/azAd/AzRole.js +2 -2
  29. package/azAd/GroupRole.d.ts +7 -17
  30. package/azAd/GroupRole.js +7 -17
  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 -22
  37. package/azAd/helpers/rolesBuiltIn.d.ts +10 -19
  38. package/azAd/helpers/rolesBuiltIn.js +25868 -18593
  39. package/azAd/helpers/rsRoleDefinition.d.ts +12 -6
  40. package/azAd/helpers/rsRoleDefinition.js +48 -32
  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/ResourceLocker.js +2 -2
  51. package/common/RsGroup.js +2 -2
  52. package/database/AzSql.d.ts +5 -5
  53. package/database/AzSql.js +37 -24
  54. package/database/MySql.d.ts +1 -1
  55. package/database/MySql.js +45 -28
  56. package/database/Postgres.d.ts +2 -1
  57. package/database/Postgres.js +29 -17
  58. package/database/Redis.d.ts +25 -4
  59. package/database/Redis.js +88 -25
  60. package/helpers/autoTags.js +37 -3
  61. package/helpers/certHelpers.d.ts +20 -0
  62. package/helpers/certHelpers.js +85 -0
  63. package/helpers/rsHelpers.d.ts +19 -1
  64. package/helpers/rsHelpers.js +27 -4
  65. package/helpers/stackEnv.d.ts +2 -1
  66. package/helpers/stackEnv.js +10 -7
  67. package/index.d.ts +1 -0
  68. package/index.js +2 -1
  69. package/package.json +11 -7
  70. package/services/Automation.d.ts +3 -1
  71. package/services/Automation.js +8 -8
  72. package/services/ServiceBus.d.ts +3 -2
  73. package/services/ServiceBus.js +17 -19
  74. package/types.d.ts +44 -15
  75. package/vault/EncryptionKey.d.ts +1 -1
  76. package/vault/EncryptionKey.js +4 -4
  77. package/vault/KeyVault.d.ts +3 -8
  78. package/vault/KeyVault.js +4 -7
  79. package/vault/VaultSecret.d.ts +1 -1
  80. package/vault/VaultSecret.js +9 -9
  81. package/vault/VaultSecrets.d.ts +2 -4
  82. package/vault/VaultSecrets.js +4 -6
  83. package/vault/helpers.d.ts +17 -0
  84. package/vault/helpers.js +56 -3
  85. package/vm/DiskEncryptionSet.js +2 -2
  86. package/vm/VirtualMachine.d.ts +2 -1
  87. package/vm/VirtualMachine.js +37 -25
  88. package/vnet/Basion.d.ts +4 -3
  89. package/vnet/Basion.js +17 -4
  90. package/vnet/DnsZone.d.ts +1 -1
  91. package/vnet/DnsZone.js +2 -2
  92. package/vnet/IpAddresses.d.ts +6 -2
  93. package/vnet/IpAddresses.js +2 -2
  94. package/vnet/NetworkPeering.d.ts +1 -1
  95. package/vnet/NetworkPeering.js +1 -1
  96. package/vnet/PrivateDnsZone.d.ts +1 -1
  97. package/vnet/PrivateDnsZone.js +4 -4
  98. package/vnet/PrivateEndpoint.d.ts +7 -10
  99. package/vnet/PrivateEndpoint.js +11 -10
  100. package/vnet/RouteTable.d.ts +1 -1
  101. package/vnet/RouteTable.js +2 -2
  102. package/vnet/VirtualNetwork.d.ts +30 -43
  103. package/vnet/VirtualNetwork.js +77 -43
  104. package/vnet/VpnGateway.js +2 -2
package/apim/Apim.js ADDED
@@ -0,0 +1,248 @@
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.Apim = void 0;
37
+ const apim = __importStar(require("@pulumi/azure-native/apimanagement"));
38
+ const certHelpers = __importStar(require("../helpers/certHelpers"));
39
+ const pulumi = __importStar(require("@pulumi/pulumi"));
40
+ const ApimProduct_1 = require("./ApimProduct");
41
+ const base_1 = require("../base");
42
+ const helpers_1 = require("../helpers");
43
+ const azAd_1 = require("../azAd");
44
+ const vnet_1 = require("../vnet");
45
+ class Apim extends base_1.BaseResourceComponent {
46
+ id;
47
+ resourceName;
48
+ constructor(name, args, opts) {
49
+ super('Apim', name, args, opts);
50
+ const apim = this.createApim();
51
+ this.buildEntraID(apim);
52
+ this.buildDisableSigIn(apim);
53
+ this.buildPrivateLink(apim);
54
+ this.buildLogs(apim);
55
+ this.buildProducts(apim);
56
+ this.buildGroupRoles(apim);
57
+ this.id = apim.id;
58
+ this.resourceName = apim.name;
59
+ this.registerOutputs();
60
+ }
61
+ getOutputs() {
62
+ return {
63
+ id: this.id,
64
+ resourceName: this.resourceName,
65
+ };
66
+ }
67
+ getCerts() {
68
+ const { vaultInfo, certificates = {} } = this.args;
69
+ const caCerts = certificates.caCerts
70
+ ? certificates.caCerts.map((c) => {
71
+ const crt = certHelpers.getCertOutputs(c, vaultInfo);
72
+ return crt.apply((c) => ({ ...c, storeName: 'CertificateAuthority' }));
73
+ })
74
+ : [];
75
+ const rootCerts = certificates.rootCerts
76
+ ? certificates.rootCerts.map((c) => {
77
+ const crt = certHelpers.getCertOutputs(c, vaultInfo);
78
+ return crt.apply((c) => ({ ...c, storeName: 'Root' }));
79
+ })
80
+ : [];
81
+ return { ...caCerts, ...rootCerts };
82
+ }
83
+ createApim() {
84
+ const { defaultUAssignedId, groupRoles, rsGroup, sku, publisherName, publisherEmail, notificationSenderEmail, apiVersionConstraint, additionalLocations, hostnameConfigurations = [], customProperties = {}, zones, network, ...others } = this.args;
85
+ return new apim.ApiManagementService(this.name, {
86
+ ...rsGroup,
87
+ ...others,
88
+ publisherName: publisherName ?? helpers_1.stackInfo.organization,
89
+ publisherEmail: publisherEmail ?? 'apimgmt-noreply@mail.windowsazure.com',
90
+ notificationSenderEmail: notificationSenderEmail ?? 'apimgmt-noreply@mail.windowsazure.com',
91
+ identity: {
92
+ type: defaultUAssignedId
93
+ ? apim.ApimIdentityType.SystemAssigned_UserAssigned
94
+ : apim.ApimIdentityType.SystemAssigned,
95
+ userAssignedIdentities: defaultUAssignedId
96
+ ? pulumi.output(defaultUAssignedId).apply((d) => ({ [d.id]: {} }))
97
+ : undefined,
98
+ },
99
+ sku: sku ?? { name: 'Consumption', capacity: 0 },
100
+ apiVersionConstraint: apiVersionConstraint ?? {
101
+ minApiVersion: '2019-12-01',
102
+ },
103
+ certificates: this.getCerts(),
104
+ hostnameConfigurations: hostnameConfigurations.map((d) => {
105
+ if (!d.cert)
106
+ return {
107
+ ...d,
108
+ type: 'Proxy',
109
+ };
110
+ const cert = certHelpers.getCertOutputs(d.cert, this.args.vaultInfo);
111
+ return cert.apply((c) => ({
112
+ ...d,
113
+ certificateSource: c.encodedCertificate,
114
+ certificatePassword: c.certificatePassword,
115
+ type: 'Proxy',
116
+ }));
117
+ }),
118
+ //Only support when linking to a virtual network
119
+ //publicIpAddressId: this._apimVnet ? this._ipAddressInstances[this.commonProps.name]?.id : undefined,
120
+ //natGatewayState: this._apimVnet?.enableGateway ? 'Enabled' : 'Disabled',
121
+ publicNetworkAccess: network?.publicNetworkAccess ? 'Enabled' : network?.privateLink ? 'Disabled' : 'Enabled',
122
+ //NATGateway
123
+ virtualNetworkType: 'None',
124
+ virtualNetworkConfiguration: network?.vnetRules
125
+ ? {
126
+ subnetResourceId: network?.vnetRules[0].subnetId,
127
+ }
128
+ : undefined,
129
+ zones,
130
+ //Only available for Premium
131
+ additionalLocations: sku.name === 'Premium'
132
+ ? additionalLocations?.map((a) => ({
133
+ ...a,
134
+ sku,
135
+ zones,
136
+ }))
137
+ : undefined,
138
+ customProperties: {
139
+ 'Microsoft.WindowsAzure.ApiManagement.Gateway.Protocols.Server.Http2': 'true',
140
+ 'Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Ssl30': 'false',
141
+ 'Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls10': 'false',
142
+ 'Microsoft.WindowsAzure.ApiManagement.Gateway.Security.Backend.Protocols.Tls11': 'false',
143
+ ...customProperties,
144
+ },
145
+ }, {
146
+ dependsOn: this.opts?.dependsOn,
147
+ deleteBeforeReplace: true,
148
+ parent: this,
149
+ });
150
+ }
151
+ buildEntraID(service) {
152
+ const { disableSignIn, rsGroup, vaultInfo } = this.args;
153
+ if (disableSignIn)
154
+ return;
155
+ const identity = new azAd_1.AppRegistration(`${this.name}-apim`, {
156
+ vaultInfo,
157
+ }, { dependsOn: service, deletedWith: service, parent: this });
158
+ return new apim.IdentityProvider(this.name, {
159
+ ...rsGroup,
160
+ serviceName: service.name,
161
+ clientId: identity.clientId,
162
+ clientSecret: identity.clientSecret,
163
+ authority: pulumi.interpolate `https://login.microsoftonline.com/${helpers_1.azureEnv.tenantId}/`,
164
+ type: 'aad',
165
+ identityProviderName: 'aad',
166
+ allowedTenants: [helpers_1.azureEnv.tenantId],
167
+ signinTenant: helpers_1.azureEnv.tenantId,
168
+ }, { dependsOn: identity, deletedWith: identity, parent: this });
169
+ }
170
+ buildDisableSigIn(service) {
171
+ const { disableSignIn, rsGroup } = this.args;
172
+ if (!disableSignIn)
173
+ return;
174
+ //Turn off Sign upsetting
175
+ // return new ApimSignUpSettingsResource(
176
+ // this.name,
177
+ // {
178
+ // ...rsGroup,
179
+ // serviceName: service.name,
180
+ // subscriptionId,
181
+ // enabled: false,
182
+ // termsOfService: {
183
+ // consentRequired: false,
184
+ // enabled: false,
185
+ // text: 'Terms & Conditions Of Service',
186
+ // },
187
+ // },
188
+ // { dependsOn: service, deletedWith: service, parent: this },
189
+ // );
190
+ }
191
+ buildPrivateLink(service) {
192
+ const { network, rsGroup } = this.args;
193
+ if (!network?.privateLink)
194
+ return;
195
+ return new vnet_1.PrivateEndpoint(this.name, {
196
+ ...network.privateLink,
197
+ rsGroup,
198
+ type: 'azApi',
199
+ resourceInfo: service,
200
+ }, { dependsOn: service, deletedWith: service, parent: this });
201
+ }
202
+ buildLogs(service) {
203
+ const { logs, rsGroup } = this.args;
204
+ if (!logs?.appInsight)
205
+ return;
206
+ //App Insight Logs
207
+ return new apim.Logger(`${this.name}-insight`, {
208
+ ...rsGroup,
209
+ serviceName: service.name,
210
+ loggerType: apim.LoggerType.ApplicationInsights,
211
+ description: 'App Insight Logger',
212
+ loggerId: `${this.name}-appInsight`,
213
+ resourceId: logs.appInsight.id,
214
+ credentials: {
215
+ //This credential will be added to NameValue automatically.
216
+ instrumentationKey: logs.appInsight.instrumentationKey,
217
+ },
218
+ }, { dependsOn: service, deletedWith: service, parent: this });
219
+ }
220
+ buildProducts(service) {
221
+ const { products, rsGroup, vaultInfo, groupRoles, logs } = this.args;
222
+ if (!products?.length)
223
+ return;
224
+ return products.map((p) => new ApimProduct_1.ApimProduct(p.name, {
225
+ ...p,
226
+ rsGroup,
227
+ vaultInfo,
228
+ groupRoles,
229
+ serviceName: service.name,
230
+ enableDiagnostic: Boolean(logs?.appInsight),
231
+ }, {
232
+ dependsOn: service,
233
+ deletedWith: service,
234
+ parent: this,
235
+ }));
236
+ }
237
+ buildGroupRoles(service) {
238
+ const { permissions } = this.args;
239
+ if (!permissions?.length)
240
+ return;
241
+ return permissions.map((p) => this.grantPermissionsToIdentity({
242
+ ...p,
243
+ identity: service.identity,
244
+ }));
245
+ }
246
+ }
247
+ exports.Apim = Apim;
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBpbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGltL0FwaW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseUVBQTJEO0FBQzNELG9FQUFzRDtBQUV0RCx1REFBeUM7QUFHekMsK0NBQTZEO0FBQzdELGtDQUFnRTtBQUNoRSx3Q0FBaUQ7QUFDakQsa0NBQTBDO0FBQzFDLGtDQUEwQztBQW1EMUMsTUFBYSxJQUFLLFNBQVEsNEJBQStCO0lBQ3ZDLEVBQUUsQ0FBd0I7SUFDMUIsWUFBWSxDQUF3QjtJQUVwRCxZQUFZLElBQVksRUFBRSxJQUFjLEVBQUUsSUFBc0M7UUFDOUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRWhDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUU5QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVNLFVBQVU7UUFDZixPQUFPO1lBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsWUFBWSxFQUFF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
@@ -0,0 +1,34 @@
1
+ import { BaseResourceComponent, CommonBaseArgs } from '../base';
2
+ import * as apim from '@pulumi/azure-native/apimanagement';
3
+ import * as pulumi from '@pulumi/pulumi';
4
+ import { ApimPolicyBuilder } from './ApimPolicyBuilder';
5
+ import * as types from '../types';
6
+ export interface ApimApiArgs extends CommonBaseArgs, Omit<apim.ApiArgs, types.CommonProps | 'format' | 'value' | 'isCurrent' | 'apiVersionDescription' | 'apiRevisionDescription' | 'apiVersion' | 'soapApiType' | 'protocols'> {
7
+ apiVersion: 'v1' | 'v2' | 'v3' | string;
8
+ productId?: pulumi.Input<string>;
9
+ enableDiagnostic?: boolean;
10
+ openSpecUrl?: string;
11
+ soapApiType?: apim.SoapApiType;
12
+ protocols?: Array<apim.Protocol>;
13
+ operations?: Array<Omit<apim.ApiOperationArgs, 'policies' | 'apiId' | 'resourceGroupName' | 'serviceName' | 'method' | 'displayName'> & {
14
+ name: string;
15
+ displayName?: pulumi.Input<string>;
16
+ policyBuilder?: (policy: ApimPolicyBuilder) => ApimPolicyBuilder;
17
+ method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS' | 'TRACE';
18
+ }>;
19
+ policyBuilder?: (policy: ApimPolicyBuilder) => ApimPolicyBuilder;
20
+ }
21
+ export declare class ApimApi extends BaseResourceComponent<ApimApiArgs> {
22
+ readonly id: pulumi.Output<string>;
23
+ readonly resourceName: pulumi.Output<string>;
24
+ constructor(name: string, args: ApimApiArgs, opts?: pulumi.ComponentResourceOptions);
25
+ getOutputs(): {
26
+ id: pulumi.Output<string>;
27
+ resourceName: pulumi.Output<string>;
28
+ };
29
+ private buidApi;
30
+ private buildApiPolicy;
31
+ private buildApiDiagnostic;
32
+ private buildProductLink;
33
+ private buildOperations;
34
+ }
@@ -0,0 +1,193 @@
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.ApimApi = void 0;
37
+ const base_1 = require("../base");
38
+ const apim = __importStar(require("@pulumi/azure-native/apimanagement"));
39
+ const pulumi = __importStar(require("@pulumi/pulumi"));
40
+ const openApi = __importStar(require("./openApiHelper"));
41
+ const ApimPolicyBuilder_1 = require("./ApimPolicyBuilder");
42
+ const helpers_1 = require("../helpers");
43
+ class ApimApi extends base_1.BaseResourceComponent {
44
+ id;
45
+ resourceName;
46
+ constructor(name, args, opts) {
47
+ super('ApimApi', name, args, opts);
48
+ const api = this.buidApi();
49
+ this.buildApiPolicy(api);
50
+ this.buildApiDiagnostic(api);
51
+ this.buildProductLink(api);
52
+ this.buildOperations(api);
53
+ this.id = api.id;
54
+ this.resourceName = api.name;
55
+ this.registerOutputs();
56
+ }
57
+ getOutputs() {
58
+ return {
59
+ id: this.id,
60
+ resourceName: this.resourceName,
61
+ };
62
+ }
63
+ buidApi() {
64
+ let { productId, apiId, displayName, description, groupRoles, vaultInfo, rsGroup, apiVersion, apiRevision, serviceUrl, openSpecUrl, protocols, ...others } = this.args;
65
+ if (!apiVersion)
66
+ apiVersion = 'v1';
67
+ if (!apiRevision)
68
+ apiRevision = '1';
69
+ const apiRevName = `${this.name};rev=${apiRevision}`;
70
+ return new apim.Api(this.name, {
71
+ ...rsGroup,
72
+ ...others,
73
+ apiId: apiId ?? this.name,
74
+ displayName: displayName ?? this.name,
75
+ description: description ?? this.name,
76
+ isCurrent: true,
77
+ protocols: protocols ?? [apim.Protocol.Https],
78
+ apiVersion,
79
+ apiVersionDescription: pulumi.interpolate `The version ${apiVersion} of ${this.name}`,
80
+ apiRevision,
81
+ apiRevisionDescription: pulumi.interpolate `${apiRevName} ${new Date().toLocaleDateString()}`,
82
+ serviceUrl: serviceUrl
83
+ ? pulumi.interpolate `${serviceUrl}/${apiVersion}`
84
+ : `https://${helpers_1.stackInfo.organization}.com/${apiVersion}`,
85
+ format: openSpecUrl ? apim.ContentFormat.Openapi_json : undefined,
86
+ value: openSpecUrl ? pulumi.output(openApi.getImportConfig(openSpecUrl, apiVersion)) : undefined,
87
+ }, {
88
+ ...this.opts,
89
+ parent: this,
90
+ customTimeouts: { create: '20m', update: '20m' },
91
+ });
92
+ }
93
+ buildApiPolicy(api) {
94
+ const { policyBuilder, serviceName, apiId, rsGroup } = this.args;
95
+ if (!policyBuilder)
96
+ return;
97
+ return new apim.ApiPolicy(`${this.name}-policy`, {
98
+ ...rsGroup,
99
+ serviceName,
100
+ apiId: apiId ?? this.name,
101
+ policyId: 'policy',
102
+ format: 'xml',
103
+ value: policyBuilder(new ApimPolicyBuilder_1.ApimPolicyBuilder()).build(),
104
+ }, { dependsOn: api, deletedWith: api, parent: this });
105
+ }
106
+ buildApiDiagnostic(api) {
107
+ const { rsGroup, serviceName, enableDiagnostic, apiId } = this.args;
108
+ if (!enableDiagnostic)
109
+ return;
110
+ return new apim.ApiDiagnostic(`apim-${this.name}-apiDiagnostic`, {
111
+ ...rsGroup,
112
+ serviceName,
113
+ apiId: apiId ?? this.name,
114
+ alwaysLog: apim.AlwaysLog.AllErrors,
115
+ httpCorrelationProtocol: 'W3C',
116
+ operationNameFormat: 'Url',
117
+ logClientIp: true,
118
+ verbosity: 'information',
119
+ loggerId: pulumi.interpolate `/subscriptions/${helpers_1.azureEnv.subscriptionId}/resourceGroups/${rsGroup.resourceGroupName}/providers/Microsoft.ApiManagement/service/${serviceName}/loggers/${serviceName}-appInsight`,
120
+ diagnosticId: 'applicationinsights',
121
+ sampling: {
122
+ percentage: 100,
123
+ samplingType: apim.SamplingType.Fixed,
124
+ },
125
+ }, { dependsOn: api, deletedWith: api, parent: this });
126
+ }
127
+ buildProductLink(api) {
128
+ const { serviceName, productId, apiId, rsGroup } = this.args;
129
+ if (!productId)
130
+ return;
131
+ return new apim.ProductApi(this.name, {
132
+ ...rsGroup,
133
+ serviceName,
134
+ productId,
135
+ apiId: apiId ?? this.name,
136
+ }, { dependsOn: api, deletedWith: api, parent: this });
137
+ }
138
+ buildOperations(api) {
139
+ const { operations, serviceName, rsGroup, apiId } = this.args;
140
+ if (!operations?.length)
141
+ return;
142
+ return operations.map((o) => {
143
+ const opsName = o.name.replace(/\//g, '');
144
+ const opsRsName = `${this.name}-ops-${opsName}-${o.method}`.toLowerCase();
145
+ const apiOps = new apim.ApiOperation(opsRsName, {
146
+ ...o,
147
+ ...rsGroup,
148
+ serviceName,
149
+ operationId: o.operationId ?? opsName,
150
+ apiId: apiId ?? this.name,
151
+ displayName: o.displayName ?? o.name,
152
+ description: o.description ?? o.name,
153
+ urlTemplate: o.urlTemplate ?? o.name,
154
+ request: o.request ?? {
155
+ description: o.name,
156
+ headers: [],
157
+ queryParameters: [],
158
+ representations: [
159
+ {
160
+ contentType: 'application/json',
161
+ },
162
+ ],
163
+ },
164
+ responses: o.responses ?? [
165
+ {
166
+ description: 'successful operation',
167
+ headers: [],
168
+ representations: [
169
+ {
170
+ contentType: 'application/json',
171
+ },
172
+ ],
173
+ statusCode: 200,
174
+ },
175
+ ],
176
+ }, { dependsOn: api, deletedWith: api, parent: this });
177
+ if (o.policyBuilder) {
178
+ new apim.ApiOperationPolicy(opsRsName, {
179
+ ...rsGroup,
180
+ serviceName,
181
+ operationId: o.operationId ?? opsName,
182
+ apiId: apiId ?? this.name,
183
+ policyId: 'policy',
184
+ format: 'xml',
185
+ value: o.policyBuilder(new ApimPolicyBuilder_1.ApimPolicyBuilder()).build(),
186
+ }, { dependsOn: apiOps });
187
+ }
188
+ return apiOps;
189
+ });
190
+ }
191
+ }
192
+ exports.ApimApi = ApimApi;
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBpbUFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGltL0FwaW1BcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0NBQWdFO0FBQ2hFLHlFQUEyRDtBQUMzRCx1REFBeUM7QUFDekMseURBQTJDO0FBQzNDLDJEQUF3RDtBQUN4RCx3Q0FBaUQ7QUFxQ2pELE1BQWEsT0FBUSxTQUFRLDRCQUFrQztJQUM3QyxFQUFFLENBQXdCO0lBQzFCLFlBQVksQ0FBd0I7SUFFcEQsWUFBWSxJQUFZLEVBQUUsSUFBaUIsRUFBRSxJQUFzQztRQUNqRixLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFbkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTFCLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTSxVQUFVO1FBQ2YsT0FBTztZQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtTQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUVPLE9BQU87UUFDYixJQUFJLEVBQ0YsU0FBUyxFQUNULEtBQUssRUFDTCxXQUFXLEVBQ1gsV0FBVyxFQUNY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
@@ -0,0 +1,27 @@
1
+ import { BaseResourceComponent, CommonBaseArgs } from '../base';
2
+ import * as pulumi from '@pulumi/pulumi';
3
+ import * as apim from '@pulumi/azure-native/apimanagement';
4
+ import { ApimApiArgs } from './ApimApi';
5
+ import * as types from '../types';
6
+ export interface ApimApiSetArgs extends CommonBaseArgs, Omit<apim.ApiVersionSetArgs, types.CommonProps | 'displayName' | 'description' | 'versioningScheme'> {
7
+ displayName?: pulumi.Input<string>;
8
+ description?: pulumi.Input<string>;
9
+ productId?: pulumi.Input<string>;
10
+ subscriptionRequired?: boolean;
11
+ versioningScheme?: apim.VersioningScheme;
12
+ enableDiagnostic?: boolean;
13
+ apis: Array<Omit<ApimApiArgs, types.CommonProps | 'productId' | 'serviceName' | 'enableDiagnostic'> & {
14
+ name: string;
15
+ }>;
16
+ }
17
+ export declare class ApimApiSet extends BaseResourceComponent<ApimApiSetArgs> {
18
+ readonly id: pulumi.Output<string>;
19
+ readonly resourceName: pulumi.Output<string>;
20
+ constructor(name: string, args: ApimApiSetArgs, opts?: pulumi.ComponentResourceOptions);
21
+ getOutputs(): {
22
+ id: pulumi.Output<string>;
23
+ resourceName: pulumi.Output<string>;
24
+ };
25
+ private buildApiSet;
26
+ private buildApis;
27
+ }
@@ -0,0 +1,88 @@
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.ApimApiSet = void 0;
37
+ const base_1 = require("../base");
38
+ const apim = __importStar(require("@pulumi/azure-native/apimanagement"));
39
+ const ApimApi_1 = require("./ApimApi");
40
+ class ApimApiSet extends base_1.BaseResourceComponent {
41
+ id;
42
+ resourceName;
43
+ constructor(name, args, opts) {
44
+ super('ApimApiSet', name, args, opts);
45
+ const apiSet = this.buildApiSet();
46
+ this.buildApis(apiSet);
47
+ this.id = apiSet.id;
48
+ this.resourceName = apiSet.name;
49
+ this.registerOutputs();
50
+ }
51
+ getOutputs() {
52
+ return {
53
+ id: this.id,
54
+ resourceName: this.resourceName,
55
+ };
56
+ }
57
+ buildApiSet() {
58
+ const { rsGroup, serviceName, versionSetId, displayName, description, versioningScheme, ...others } = this.args;
59
+ //Create ApiSet
60
+ return new apim.ApiVersionSet(this.name, {
61
+ ...rsGroup,
62
+ ...others,
63
+ serviceName,
64
+ versionSetId: versionSetId ?? this.name,
65
+ displayName: displayName ?? this.name,
66
+ description: description ?? this.name,
67
+ versioningScheme: versioningScheme ?? apim.VersioningScheme.Segment,
68
+ }, { ...this.opts, parent: this });
69
+ }
70
+ buildApis(set) {
71
+ const { apis, rsGroup, serviceName, productId, subscriptionRequired } = this.args;
72
+ if (!apis.length)
73
+ return;
74
+ return apis.map((a) => {
75
+ return new ApimApi_1.ApimApi(a.name, {
76
+ ...a,
77
+ rsGroup,
78
+ serviceName,
79
+ productId,
80
+ subscriptionRequired,
81
+ apiVersionSetId: set.id,
82
+ enableDiagnostic: this.args.enableDiagnostic,
83
+ }, { dependsOn: set, deletedWith: set, parent: this });
84
+ });
85
+ }
86
+ }
87
+ exports.ApimApiSet = ApimApiSet;
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBpbUFwaVNldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGltL0FwaW1BcGlTZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0NBQWdFO0FBRWhFLHlFQUEyRDtBQUMzRCx1Q0FBaUQ7QUFpQmpELE1BQWEsVUFBVyxTQUFRLDRCQUFxQztJQUNuRCxFQUFFLENBQXdCO0lBQzFCLFlBQVksQ0FBd0I7SUFFcEQsWUFBWSxJQUFZLEVBQUUsSUFBb0IsRUFBRSxJQUFzQztRQUNwRixLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFdEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdkIsSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVNLFVBQVU7UUFDZixPQUFPO1lBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQ2hDLENBQUM7SUFDSixDQUFDO0lBRU8sV0FBVztRQUNqQixNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDaEgsZUFBZTtRQUNmLE9BQU8sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUMzQixJQUFJLENBQUMsSUFBSSxFQUNUO1lBQ0UsR0FBRyxPQUFPO1lBQ1YsR0FBRyxNQUFNO1lBQ1QsV0FBVztZQUNYLFlBQVksRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDLElBQUk7WUFDdkMsV0FBVyxFQUFFLFdBQVcsSUFBSSxJQUFJLENBQUMsSUFBSTtZQUNyQyxXQUFXLEVBQUUsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJO1lBQ3JDLGdCQUFnQixFQUFFLGdCQUFnQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPO1NBQ3BFLEVBQ0QsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVPLFNBQVMsQ0FBQyxHQUF1QjtRQUN2QyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNsRixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRXpCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3BCLE9BQU8sSUFBSSxpQkFBTyxDQUNoQixDQUFDLENBQUMsSUFBSSxFQUNOO2dCQUNFLEdBQUcsQ0FBQztnQkFDSixPQUFPO2dCQUNQLFdBQVc7Z0JBQ1gsU0FBUztnQkFDVCxvQkFBb0I7Z0JBQ3BCLGVBQWUsRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDdkIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7YUFDN0MsRUFDRCxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQ25ELENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTVERCxnQ0E0REMifQ==