@appliance.sh/infra 1.11.1
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.
- package/Pulumi.yaml +7 -0
- package/package.json +20 -0
- package/src/entrypoint.ts +21 -0
- package/src/index.ts +3 -0
- package/src/lib/appliance-infra.ts +40 -0
- package/src/lib/aws/ApplianceBaseAwsPublic.ts +31 -0
- package/src/lib/aws/ApplianceBaseAwsVpc.ts +16 -0
- package/src/lib/controller.ts +12 -0
package/Pulumi.yaml
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@appliance.sh/infra",
|
|
3
|
+
"version": "1.11.1",
|
|
4
|
+
"description": "Deploy the Appliance Infrastructure",
|
|
5
|
+
"repository": "https://github.com/appliance-sh/appliance.sh",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Eliot Lim",
|
|
8
|
+
"main": "src/index.ts",
|
|
9
|
+
"scripts": {
|
|
10
|
+
"test": "echo \"Error: no test specified\" && exit 1",
|
|
11
|
+
"build": "echo \"No build required\"",
|
|
12
|
+
"deploy:entrypoint": "ts-node src/index.ts",
|
|
13
|
+
"deploy": "pulumi up"
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@pulumi/aws": "^7.15.0",
|
|
17
|
+
"@pulumi/awsx": "^3.1.0",
|
|
18
|
+
"@pulumi/pulumi": "^3.213.0"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { automation } from '@pulumi/pulumi';
|
|
2
|
+
import { applianceInfra } from './lib/appliance-infra';
|
|
3
|
+
|
|
4
|
+
export async function main() {
|
|
5
|
+
const stack = await automation.LocalWorkspace.createOrSelectStack({
|
|
6
|
+
projectName: 'appliance-infra',
|
|
7
|
+
stackName: 'bootstrap',
|
|
8
|
+
program: applianceInfra,
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
console.log(await stack.getAllConfig());
|
|
12
|
+
|
|
13
|
+
await stack.up();
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
main()
|
|
17
|
+
.then(() => process.exit(0))
|
|
18
|
+
.catch((e) => {
|
|
19
|
+
console.error(e);
|
|
20
|
+
process.exit(1);
|
|
21
|
+
});
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import * as aws from '@pulumi/aws';
|
|
2
|
+
import * as pulumi from '@pulumi/pulumi';
|
|
3
|
+
import { lookup } from './controller';
|
|
4
|
+
import { applianceBaseConfigInput } from '@appliance.sh/sdk';
|
|
5
|
+
import { ApplianceBaseAwsPublic } from './aws/ApplianceBaseAwsPublic';
|
|
6
|
+
import { ApplianceBaseAwsVpc } from './aws/ApplianceBaseAwsVpc';
|
|
7
|
+
import { ApplianceBaseConfigInput } from '@appliance.sh/sdk';
|
|
8
|
+
|
|
9
|
+
const name = 'appliance-infra';
|
|
10
|
+
|
|
11
|
+
export async function applianceInfra() {
|
|
12
|
+
const applianceConfig = new pulumi.Config(name);
|
|
13
|
+
const bases = applianceConfig.requireObject<Record<string, ApplianceBaseConfigInput>>('bases');
|
|
14
|
+
|
|
15
|
+
const applianceBases: (ApplianceBaseAwsPublic | ApplianceBaseAwsVpc)[] = [];
|
|
16
|
+
for (const base in bases) {
|
|
17
|
+
const baseConfig = applianceBaseConfigInput.safeParse({
|
|
18
|
+
...bases[base],
|
|
19
|
+
name: base,
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
if (!baseConfig.success) {
|
|
23
|
+
throw baseConfig.error;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const baseController = lookup(baseConfig.data);
|
|
27
|
+
|
|
28
|
+
const baseGlobalProvider = new aws.Provider(`${base}-global-provider`, { region: 'us-east-1' });
|
|
29
|
+
const baseRegionalProvider = new aws.Provider(`${base}-region-provider`, { region: baseConfig.data.region });
|
|
30
|
+
const applianceBase = new baseController(
|
|
31
|
+
`${base}`,
|
|
32
|
+
{ config: baseConfig.data },
|
|
33
|
+
{ globalProvider: baseGlobalProvider, provider: baseRegionalProvider }
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
applianceBases.push(applianceBase);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return { applianceBases };
|
|
40
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as pulumi from '@pulumi/pulumi';
|
|
2
|
+
import * as aws from '@pulumi/aws';
|
|
3
|
+
import { ApplianceBaseAwsPublicInput } from '@appliance.sh/sdk';
|
|
4
|
+
|
|
5
|
+
export type ApplianceBaseAwsPublicArgs = {
|
|
6
|
+
config: ApplianceBaseAwsPublicInput;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export interface ApplianceBaseAwsPublicOpts extends pulumi.ComponentResourceOptions {
|
|
10
|
+
globalProvider?: pulumi.ProviderResource;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export class ApplianceBaseAwsPublic extends pulumi.ComponentResource {
|
|
14
|
+
public readonly zoneId?: pulumi.Output<string>;
|
|
15
|
+
public readonly zone?: aws.route53.Zone;
|
|
16
|
+
constructor(name: string, args: ApplianceBaseAwsPublicArgs, opts?: ApplianceBaseAwsPublicOpts) {
|
|
17
|
+
super('appliance-infra:appliance-base-aws-public', name, args, opts);
|
|
18
|
+
|
|
19
|
+
if (args.config.dns.createZone) {
|
|
20
|
+
this.zone = new aws.route53.Zone(
|
|
21
|
+
`${name}-zone`,
|
|
22
|
+
{
|
|
23
|
+
name: args.config.dns.domainName,
|
|
24
|
+
},
|
|
25
|
+
{ parent: this, provider: opts?.globalProvider }
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
this.zoneId = this.zone.zoneId;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as pulumi from '@pulumi/pulumi';
|
|
2
|
+
import { ApplianceBaseAwsVpcInput } from '@appliance.sh/sdk';
|
|
3
|
+
|
|
4
|
+
export type ApplianceBaseAwsVpcArgs = {
|
|
5
|
+
config: ApplianceBaseAwsVpcInput;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export interface ApplianceBaseAwsVpcOpts extends pulumi.ComponentResourceOptions {
|
|
9
|
+
globalProvider?: pulumi.ProviderResource;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export class ApplianceBaseAwsVpc extends pulumi.ComponentResource {
|
|
13
|
+
constructor(name: string, args: ApplianceBaseAwsVpcArgs, opts?: ApplianceBaseAwsVpcOpts) {
|
|
14
|
+
super('appliance-infra:appliance-base-aws-vpc', name, args, opts);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ApplianceBaseConfigInput, ApplianceBaseType } from '@appliance.sh/sdk';
|
|
2
|
+
import { ApplianceBaseAwsPublic } from './aws/ApplianceBaseAwsPublic';
|
|
3
|
+
import { ApplianceBaseAwsVpc } from './aws/ApplianceBaseAwsVpc';
|
|
4
|
+
|
|
5
|
+
export function lookup(baseConfig: ApplianceBaseConfigInput) {
|
|
6
|
+
switch (baseConfig.type) {
|
|
7
|
+
case ApplianceBaseType.ApplianceAwsPublic:
|
|
8
|
+
return ApplianceBaseAwsPublic;
|
|
9
|
+
case ApplianceBaseType.ApplianceAwsVpc:
|
|
10
|
+
return ApplianceBaseAwsVpc;
|
|
11
|
+
}
|
|
12
|
+
}
|