Skip to content

Commit 2c8acf5

Browse files
authored
Merge pull request #57 from baoduy/dev
Fix network config issues
2 parents 733dd5f + 86b53f6 commit 2c8acf5

File tree

18 files changed

+96
-106
lines changed

18 files changed

+96
-106
lines changed

src/aks/ContainerRegistry.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,12 @@ export class ContainerRegistry extends BaseResourceComponent<ContainerRegistryAr
106106
}
107107
: undefined,
108108

109-
publicNetworkAccess: network?.publicNetworkAccess ? 'Enabled' : network?.privateLink ? 'Disabled' : 'Enabled',
109+
publicNetworkAccess: network?.publicNetworkAccess
110+
? registry.PublicNetworkAccess.Enabled
111+
: network?.privateLink
112+
? registry.PublicNetworkAccess.Disabled
113+
: registry.PublicNetworkAccess.Enabled,
114+
110115
networkRuleBypassOptions: network?.bypass,
111116

112117
networkRuleSet:

src/apim/Apim.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,7 @@ import { PrivateEndpoint } from '../vnet';
1313
import { vaultHelpers } from '../vault';
1414

1515
export type ApimCertType = certHelpers.CertType | certHelpers.VaultCertType | certHelpers.CertFile;
16-
export type ApimProductType = Omit<
17-
ApimProductArgs,
18-
'rsGroup' | 'serviceName' | 'groupRoles' | 'enableDiagnostic'
19-
> &
16+
export type ApimProductType = Omit<ApimProductArgs, 'rsGroup' | 'serviceName' | 'groupRoles' | 'enableDiagnostic'> &
2017
Required<types.WithName>;
2118

2219
export interface ApimArgs
@@ -181,7 +178,12 @@ export class Apim extends BaseResourceComponent<ApimArgs> {
181178
//Only support when linking to a virtual network
182179
//publicIpAddressId: this._apimVnet ? this._ipAddressInstances[this.commonProps.name]?.id : undefined,
183180
//natGatewayState: this._apimVnet?.enableGateway ? 'Enabled' : 'Disabled',
184-
publicNetworkAccess: network?.publicNetworkAccess ? 'Enabled' : network?.privateLink ? 'Disabled' : 'Enabled',
181+
publicNetworkAccess: network?.publicNetworkAccess
182+
? apim.PublicNetworkAccess.Enabled
183+
: network?.privateLink
184+
? apim.PublicNetworkAccess.Disabled
185+
: apim.PublicNetworkAccess.Enabled,
186+
185187
//NATGateway
186188
virtualNetworkType: 'None',
187189
virtualNetworkConfiguration: network?.vnetRules
@@ -190,7 +192,11 @@ export class Apim extends BaseResourceComponent<ApimArgs> {
190192
}
191193
: undefined,
192194

193-
zones: sku.name == 'Basic' || sku.name == 'Consumption' ? undefined : zoneHelper.getDefaultZones(zones),
195+
zones:
196+
sku.name == apim.SkuType.Basic || sku.name == apim.SkuType.Consumption
197+
? undefined
198+
: zoneHelper.getDefaultZones(zones),
199+
194200
//Only available for Premium
195201
additionalLocations:
196202
sku.name === 'Premium'

src/apim/helpers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export const createProxyApi = ({
1414
...props,
1515
//Dummy serviceUrl for proxy api this will be overwritten by api management during runtime
1616
serviceUrl: `https://${props.name}-hook-delivery.local`,
17-
operations: [{ name: 'POST', method: 'POST', urlTemplate: '/' }],
17+
operations: [{ name: 'POST', method: 'POST', urlTemplate: '/', responses: [{ statusCode: 200 }] }],
1818
subscriptionRequired: Boolean(subscriptionKeyParameterNames),
1919
subscriptionKeyParameterNames,
2020
policyBuilder: (p: ApimPolicyBuilder) =>

src/app/SignalR.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ export class SignalR extends BaseResourceComponent<SignalRArgs> {
5757
...props,
5858
...rsGroup,
5959
sku,
60+
6061
publicNetworkAccess: network?.publicNetworkAccess ? 'Enabled' : network?.privateLink ? 'Disabled' : 'Enabled',
62+
6163
networkACLs: isFreeTier
6264
? undefined
6365
: network?.privateLink

src/base/BaseResourceComponent.ts

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ import * as types from '../types';
44

55
import { RandomPassword, RandomPasswordArgs } from '../common/RandomPassword';
66
import { RandomString, RandomStringArgs } from '../common/RandomString';
7-
import { VaultSecretResult, VaultSecrets } from '../vault/VaultSecrets';
7+
import { VaultSecrets } from '../vault/VaultSecrets';
88

99
import { BaseComponent } from './BaseComponent';
1010
import { EncryptionKey } from '../vault/EncryptionKey';
11-
import { ResourceLocker } from '../common/ResourceLocker';
1211
import { RoleAssignment } from '../azAd/RoleAssignment';
1312
import { SecretItemArgs } from '../vault/VaultSecret';
1413
import { getComponentResourceType } from './helpers';
14+
import * as authorization from '@pulumi/azure-native/authorization';
1515

1616
/**
1717
* Base interface for resource component arguments that combines vault information
@@ -48,7 +48,7 @@ export interface CommonBaseArgs
4848
* @template TArgs - Type parameter extending BaseArgs to define required component arguments
4949
*/
5050
export abstract class BaseResourceComponent<TArgs extends BaseArgs> extends BaseComponent<TArgs> {
51-
public vaultSecrets?: { [key: string]: VaultSecretResult };
51+
public vaultSecrets?: pulumi.Output<string>[];
5252
private _secrets: { [key: string]: pulumi.Input<string> } = {};
5353
private _vaultSecretsCreated: boolean = false;
5454

@@ -220,22 +220,27 @@ export abstract class BaseResourceComponent<TArgs extends BaseArgs> extends Base
220220
return new RandomString(props.name ?? this.name, props, { parent: this });
221221
}
222222

223-
protected lockFromDeleting(resource: pulumi.CustomResource) {
224-
return new ResourceLocker(
225-
`${this.name}-lock`,
226-
{
227-
resource,
228-
level: 'CanNotDelete',
229-
},
230-
{ dependsOn: resource, parent: this },
231-
);
223+
private lockFromDeleting() {
224+
const { protect } = this.opts ?? { protect: false };
225+
if (!protect) return undefined;
226+
227+
pulumi.output(this.getOutputs()).apply((o) => {
228+
const id = o?.id;
229+
if (!id) return undefined;
230+
231+
new authorization.ManagementLockByScope(
232+
`${this.name}-lock`,
233+
{
234+
level: 'CanNotDelete',
235+
scope: id,
236+
notes: `Lock ${this.name} from DELETE`,
237+
},
238+
{ dependsOn: this, parent: this, retainOnDelete: true },
239+
);
240+
});
232241
}
233242

234-
/**
235-
* Internal method to handle post-creation secret management
236-
* Creates vault secrets if any secrets were added during component creation
237-
*/
238-
private postCreated() {
243+
private createVaultSecrets() {
239244
const { vaultInfo } = this.args;
240245
if (this._vaultSecretsCreated || Object.keys(this._secrets).length <= 0 || !vaultInfo) return;
241246

@@ -259,6 +264,15 @@ export abstract class BaseResourceComponent<TArgs extends BaseArgs> extends Base
259264
{ dependsOn: this.opts?.dependsOn, parent: this },
260265
);
261266

262-
this.vaultSecrets = rs.results;
267+
this.vaultSecrets = Object.keys(rs.results).map((k) => pulumi.output(k));
268+
}
269+
270+
/**
271+
* Internal method to handle post-creation secret management
272+
* Creates vault secrets if any secrets were added during component creation
273+
*/
274+
private postCreated() {
275+
this.createVaultSecrets();
276+
this.lockFromDeleting();
263277
}
264278
}

src/common/ResourceLocker.ts

Lines changed: 0 additions & 24 deletions
This file was deleted.

src/common/RsGroup.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import * as types from '../types';
77
export interface RsGroupArgs extends BaseArgs, Omit<resources.ResourceGroupArgs, 'managedBy' | 'location'> {
88
/** if the role definition is not provided the readonly role will be added to this group by default */
99
roleAssignments?: RsRoleDefinitionType[];
10-
lock?: boolean;
1110
}
1211

1312
export class RsGroup extends BaseResourceComponent<RsGroupArgs> {
@@ -28,8 +27,6 @@ export class RsGroup extends BaseResourceComponent<RsGroupArgs> {
2827
this.id = group.id;
2928

3029
this.createRoleAssignment();
31-
if (args.lock) this.lockFromDeleting(group);
32-
3330
this.registerOutputs();
3431
}
3532

src/database/AzSql.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ export interface AzSqlArgs
8484
alertEmails: pulumi.Input<string[]>;
8585
retentionDays?: number;
8686
};
87-
lock?: boolean;
8887
databases?: Record<string, AzSqlDbType>;
8988
}
9089

@@ -101,7 +100,6 @@ export class AzSql extends BaseResourceComponent<AzSqlArgs> {
101100
this.createVulnerabilityAssessment(server);
102101
this.createNetwork(server);
103102
this.createDatabases(server, password, elastic);
104-
if (args.lock) this.lockFromDeleting(server);
105103

106104
this.id = server.id;
107105
this.resourceName = server.name;
@@ -141,7 +139,6 @@ export class AzSql extends BaseResourceComponent<AzSqlArgs> {
141139
defaultUAssignedId,
142140
administrators,
143141
network,
144-
lock,
145142
administratorLogin,
146143
...props
147144
} = this.args;
@@ -187,13 +184,14 @@ export class AzSql extends BaseResourceComponent<AzSqlArgs> {
187184
}
188185
: undefined,
189186

190-
publicNetworkAccess: network?.privateLink
191-
? sql.ServerNetworkAccessFlag.Disabled
192-
: sql.ServerNetworkAccessFlag.Enabled,
187+
publicNetworkAccess: network?.publicNetworkAccess
188+
? sql.ServerNetworkAccessFlag.Enabled
189+
: network?.privateLink
190+
? sql.ServerNetworkAccessFlag.Disabled
191+
: sql.ServerNetworkAccessFlag.Enabled,
193192
},
194193
{
195194
...this.opts,
196-
protect: lock ?? this.opts?.protect,
197195
parent: this,
198196
},
199197
);

src/database/MySql.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ export interface MySqlArgs
3131
};
3232
enableAzureADAdmin: boolean;
3333
databases?: Array<{ name: string }>;
34-
lock?: boolean;
3534
}
3635

3736
export class MySql extends BaseResourceComponent<MySqlArgs> {
@@ -47,8 +46,6 @@ export class MySql extends BaseResourceComponent<MySqlArgs> {
4746
this.enableADAdmin(server, uAssignedId);
4847
this.createDatabases(server, credentials);
4948

50-
if (args.lock) this.lockFromDeleting(server);
51-
5249
this.id = server.id;
5350
this.resourceName = server.name;
5451

@@ -64,7 +61,7 @@ export class MySql extends BaseResourceComponent<MySqlArgs> {
6461
}
6562

6663
private createMySql(uid: types.UserAssignedIdentityInputs) {
67-
const { rsGroup, enableResourceIdentity, enableEncryption, administratorLogin, lock } = this.args;
64+
const { rsGroup, enableResourceIdentity, enableEncryption, administratorLogin, network } = this.args;
6865

6966
const adminLogin = administratorLogin ?? pulumi.interpolate`${this.name}-admin-${this.createRandomString().value}`;
7067
const password = this.createPassword();
@@ -121,13 +118,11 @@ export class MySql extends BaseResourceComponent<MySqlArgs> {
121118
availabilityZone: (this.args.availabilityZone ?? azureEnv.isPrd) ? '3' : '1',
122119

123120
network: {
124-
publicNetworkAccess:
125-
(this.args.network?.publicNetworkAccess ?? this.args.network?.privateLink) ? 'Disabled' : 'Enabled',
121+
publicNetworkAccess: network?.publicNetworkAccess ? 'Enabled' : network?.privateLink ? 'Disabled' : 'Enabled',
126122
},
127123
},
128124
{
129125
...this.opts,
130-
protect: lock ?? this.opts?.protect,
131126
parent: this,
132127
},
133128
);

src/database/Postgres.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ export interface PostgresArgs
3030
enableAzureADAdmin: boolean;
3131
enablePasswordAuth?: boolean;
3232
databases?: Array<{ name: string }>;
33-
lock?: boolean;
3433
}
3534

3635
export class Postgres extends BaseResourceComponent<PostgresArgs> {
@@ -43,7 +42,6 @@ export class Postgres extends BaseResourceComponent<PostgresArgs> {
4342
const { server, credentials } = this.createPostgres();
4443
this.createNetwork(server);
4544
this.createDatabases(server, credentials);
46-
if (args.lock) this.lockFromDeleting(server);
4745

4846
this.id = server.id;
4947
this.resourceName = server.name;
@@ -67,7 +65,7 @@ export class Postgres extends BaseResourceComponent<PostgresArgs> {
6765
administratorLogin,
6866
enableAzureADAdmin,
6967
enablePasswordAuth,
70-
lock,
68+
network,
7169
} = this.args;
7270

7371
const adminLogin = administratorLogin ?? pulumi.interpolate`${this.name}-admin-${this.createRandomString().value}`;
@@ -130,13 +128,11 @@ export class Postgres extends BaseResourceComponent<PostgresArgs> {
130128
availabilityZone: (this.args.availabilityZone ?? azureEnv.isPrd) ? '3' : '1',
131129

132130
network: {
133-
publicNetworkAccess:
134-
(this.args.network?.publicNetworkAccess ?? this.args.network?.privateLink) ? 'Disabled' : 'Enabled',
131+
publicNetworkAccess: network?.publicNetworkAccess ? 'Enabled' : network?.privateLink ? 'Disabled' : 'Enabled',
135132
},
136133
},
137134
{
138135
...this.opts,
139-
protect: lock ?? this.opts?.protect,
140136
parent: this,
141137
},
142138
);

0 commit comments

Comments
 (0)