-
Notifications
You must be signed in to change notification settings - Fork 1
/
vpc-azure.ts
47 lines (39 loc) · 1.46 KB
/
vpc-azure.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import * as azure from "@pulumi/azure";
import * as pulumi from "@pulumi/pulumi";
import { Vpc, VpcArgs } from "./vpc";
export class MyVpc extends pulumi.ComponentResource implements Vpc {
public readonly vpcId: pulumi.Output<string>;
public readonly subnetIds: pulumi.Output<string>[];
constructor(args: AzureVpcArgs) {
super("custom:azure:Vpc", args.name, {});
const resourceGroup = new azure.core.ResourceGroup(args.name, {
name: args.name,
location: args.location,
});
const vpc = new azure.network.VirtualNetwork(args.name, {
resourceGroupName: resourceGroup.name,
location: args.location,
addressSpaces: [args.cidrBlock],
name: args.name,
}, { parent: this });
const subnetIds = args.subnetCidrBlocks.map((cidrBlock, i) => {
const subnetName = `${args.name}-${i}`;
const subnet = new azure.network.Subnet(subnetName, {
resourceGroupName: resourceGroup.name,
virtualNetworkName: vpc.name,
name: subnetName,
addressPrefix: cidrBlock,
});
return subnet.name;
}, { parent: this });
this.vpcId = vpc.name;
this.subnetIds = subnetIds;
this.registerOutputs({
vpcId: vpc.id,
subnetIds: subnetIds,
})
}
}
export class AzureVpcArgs extends VpcArgs {
public location: string;
}