Skip to content

Commit c1f4635

Browse files
committed
patch(feat): octo-aws-cdk with a new module - AwsRegionSharedEfsModule.
1 parent c01f127 commit c1f4635

File tree

6 files changed

+88
-44
lines changed

6 files changed

+88
-44
lines changed

packages/octo-aws-cdk/src/main.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import {
55
Diff,
66
DiffMetadata,
77
EnableHook,
8-
InputService,
98
IStateProvider,
9+
InputService,
1010
ModelSerializationService,
1111
ResourceSerializationService,
1212
ResourceSerializedOutput,

packages/octo-aws-cdk/src/models/execution/execution.model.spec.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { dirname, join } from 'path';
2020
import { fileURLToPath } from 'url';
2121
import { promisify } from 'util';
2222
import { AwsDeployment, AwsRegion, AwsServer, EcrService, OctoAws, RegionId, S3StorageService } from '../../index.js';
23+
import { AwsRegionSharedEfsModule } from '../../modules/aws-region-shared-efs.module.js';
2324
import { ProcessUtility } from '../../utilities/process/process.utility.js';
2425
import { RetryUtility } from '../../utilities/retry/retry.utility.js';
2526

@@ -45,6 +46,12 @@ describe('Execution UT', () => {
4546
value: { send: jest.fn() },
4647
},
4748
],
49+
modules: [
50+
{
51+
name: 'AwsRegionSharedEfsModule',
52+
value: AwsRegionSharedEfsModule,
53+
},
54+
],
4855
},
4956
{ factoryTimeoutInMs: 500 },
5057
);

packages/octo-aws-cdk/src/models/region/actions/add-region.model.action.ts

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
1-
import { Action, ActionInputs, ActionOutputs, Diff, DiffAction, Factory, IModelAction, ModelType } from '@quadnix/octo';
2-
import { Efs } from '../../../resources/efs/efs.resource.js';
3-
import { SharedEfs } from '../../../resources/efs/efs.shared-resource.js';
1+
import {
2+
Action,
3+
ActionInputs,
4+
ActionOutputs,
5+
Diff,
6+
DiffAction,
7+
EnableHook,
8+
Factory,
9+
IModelAction,
10+
ModelType,
11+
} from '@quadnix/octo';
412
import { InternetGateway } from '../../../resources/internet-gateway/internet-gateway.resource.js';
513
import { NetworkAcl } from '../../../resources/network-acl/network-acl.resource.js';
614
import { RouteTable } from '../../../resources/route-table/route-table.resource.js';
@@ -28,6 +36,7 @@ export class AddRegionModelAction implements IModelAction {
2836
return diff.action === DiffAction.ADD && diff.model.MODEL_NAME === 'region' && diff.field === 'regionId';
2937
}
3038

39+
@EnableHook('PostModelActionHook')
3140
async handle(diff: Diff, actionInputs: ActionInputs): Promise<ActionOutputs> {
3241
const awsRegion = diff.model as AwsRegion;
3342
const regionId = awsRegion.regionId;
@@ -224,14 +233,6 @@ export class AddRegionModelAction implements IModelAction {
224233
[vpc],
225234
);
226235

227-
// Create EFS.
228-
const efs = new Efs(
229-
`efs-${regionId}-filesystem`,
230-
{ awsRegionId: awsRegion.awsRegionId, regionId: awsRegion.regionId },
231-
[privateSubnet1, internalOpenSG],
232-
);
233-
const sharedEfs = new SharedEfs('shared-efs-filesystem', {}, [efs]);
234-
235236
const output: ActionOutputs = {};
236237
output[vpc.resourceId] = vpc;
237238
output[internetGateway.resourceId] = internetGateway;
@@ -245,8 +246,6 @@ export class AddRegionModelAction implements IModelAction {
245246
output[internalOpenSG.resourceId] = internalOpenSG;
246247
output[privateClosedSG.resourceId] = privateClosedSG;
247248
output[webSG.resourceId] = webSG;
248-
output[efs.resourceId] = efs;
249-
output[sharedEfs.resourceId] = sharedEfs;
250249

251250
return output;
252251
}

packages/octo-aws-cdk/src/models/region/actions/delete-region.model.action.ts

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
import { Action, ActionInputs, ActionOutputs, Diff, DiffAction, Factory, IModelAction, ModelType } from '@quadnix/octo';
2-
import { Efs } from '../../../resources/efs/efs.resource.js';
3-
import { SharedEfs } from '../../../resources/efs/efs.shared-resource.js';
42
import { InternetGateway } from '../../../resources/internet-gateway/internet-gateway.resource.js';
53
import { NetworkAcl } from '../../../resources/network-acl/network-acl.resource.js';
64
import { RouteTable } from '../../../resources/route-table/route-table.resource.js';
@@ -29,8 +27,6 @@ export class DeleteRegionModelAction implements IModelAction {
2927
`resource.sec-grp-${regionId}-internal-open`,
3028
`resource.sec-grp-${regionId}-private-closed`,
3129
`resource.sec-grp-${regionId}-web`,
32-
`resource.efs-${regionId}-filesystem`,
33-
'resource.shared-efs-filesystem',
3430
];
3531
}
3632

@@ -41,18 +37,9 @@ export class DeleteRegionModelAction implements IModelAction {
4137
async handle(diff: Diff, actionInputs: ActionInputs): Promise<ActionOutputs> {
4238
const { regionId } = diff.model as AwsRegion;
4339

44-
const internalOpenSG = actionInputs[`resource.sec-grp-${regionId}-internal-open`] as SecurityGroup;
45-
const privateSubnet1 = actionInputs[`resource.subnet-${regionId}-private-1`] as Subnet;
46-
47-
const efs = actionInputs[`resource.efs-${regionId}-filesystem`] as Efs;
48-
const sharedEfs = actionInputs['resource.shared-efs-filesystem'] as SharedEfs;
49-
efs.removeRelationship(privateSubnet1);
50-
efs.removeRelationship(internalOpenSG);
51-
efs.removeRelationship(sharedEfs);
52-
efs.markDeleted();
53-
5440
const accessSG = actionInputs[`resource.sec-grp-${regionId}-access`] as SecurityGroup;
5541
accessSG.markDeleted();
42+
const internalOpenSG = actionInputs[`resource.sec-grp-${regionId}-internal-open`] as SecurityGroup;
5643
internalOpenSG.markDeleted();
5744
const privateClosedSG = actionInputs[`resource.sec-grp-${regionId}-private-closed`] as SecurityGroup;
5845
privateClosedSG.markDeleted();
@@ -69,6 +56,7 @@ export class DeleteRegionModelAction implements IModelAction {
6956
const publicRT1 = actionInputs[`resource.rt-${regionId}-public-1`] as RouteTable;
7057
publicRT1.markDeleted();
7158

59+
const privateSubnet1 = actionInputs[`resource.subnet-${regionId}-private-1`] as Subnet;
7260
privateSubnet1.markDeleted();
7361
const publicSubnet1 = actionInputs[`resource.subnet-${regionId}-public-1`] as Subnet;
7462
publicSubnet1.markDeleted();
@@ -92,7 +80,6 @@ export class DeleteRegionModelAction implements IModelAction {
9280
output[internalOpenSG.resourceId] = internalOpenSG;
9381
output[privateClosedSG.resourceId] = privateClosedSG;
9482
output[webSG.resourceId] = webSG;
95-
output[efs.resourceId] = efs;
9683

9784
return output;
9885
}

packages/octo-aws-cdk/src/models/region/aws.region.model.spec.ts

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -202,11 +202,6 @@ describe('AwsRegion UT', () => {
202202
"field": "resourceId",
203203
"value": "nacl-aws-us-east-1a-public-1",
204204
},
205-
{
206-
"action": "add",
207-
"field": "resourceId",
208-
"value": undefined,
209-
},
210205
],
211206
]
212207
`);
@@ -232,6 +227,11 @@ describe('AwsRegion UT', () => {
232227
"field": "resourceId",
233228
"value": "sec-grp-aws-us-east-1a-access",
234229
},
230+
{
231+
"action": "delete",
232+
"field": "resourceId",
233+
"value": "sec-grp-aws-us-east-1a-internal-open",
234+
},
235235
{
236236
"action": "delete",
237237
"field": "resourceId",
@@ -262,11 +262,6 @@ describe('AwsRegion UT', () => {
262262
"field": "resourceId",
263263
"value": "nacl-aws-us-east-1a-public-1",
264264
},
265-
{
266-
"action": "delete",
267-
"field": "resourceId",
268-
"value": undefined,
269-
},
270265
],
271266
[
272267
{
@@ -284,11 +279,6 @@ describe('AwsRegion UT', () => {
284279
"field": "resourceId",
285280
"value": "subnet-aws-us-east-1a-public-1",
286281
},
287-
{
288-
"action": "delete",
289-
"field": "resourceId",
290-
"value": "sec-grp-aws-us-east-1a-internal-open",
291-
},
292282
],
293283
[
294284
{
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import { ActionInputs, ActionOutputs, Diff, Module } from '@quadnix/octo';
2+
import { AwsRegion } from '../models/region/aws.region.model.js';
3+
import { Efs } from '../resources/efs/efs.resource.js';
4+
import { SharedEfs } from '../resources/efs/efs.shared-resource.js';
5+
import { SecurityGroup } from '../resources/security-group/security-group.resource.js';
6+
import { Subnet } from '../resources/subnet/subnet.resource.js';
7+
8+
@Module({
9+
postModelActionHandles: [
10+
{
11+
ACTION_NAME: 'AddRegionModelAction',
12+
callback: async (args: [Diff, ActionInputs], output: ActionOutputs): Promise<ActionOutputs> => {
13+
const awsRegion = args[0].model as AwsRegion;
14+
const regionId = awsRegion.regionId;
15+
16+
const privateSubnet1 = output[`subnet-${regionId}-private-1`] as Subnet;
17+
const internalOpenSG = output[`sec-grp-${regionId}-internal-open`] as SecurityGroup;
18+
19+
// Create EFS.
20+
const efs = new Efs(
21+
`efs-${regionId}-filesystem`,
22+
{ awsRegionId: awsRegion.awsRegionId, regionId: awsRegion.regionId },
23+
[privateSubnet1, internalOpenSG],
24+
);
25+
const sharedEfs = new SharedEfs('shared-efs-filesystem', {}, [efs]);
26+
27+
output[efs.resourceId] = efs;
28+
output[sharedEfs.resourceId] = sharedEfs;
29+
return output;
30+
},
31+
},
32+
],
33+
preModelActionHandles: [
34+
{
35+
ACTION_NAME: 'DeleteRegionModelAction',
36+
callback: async (args: [Diff, ActionInputs], output: ActionOutputs): Promise<ActionOutputs> => {
37+
const awsRegion = args[0].model as AwsRegion;
38+
const regionId = awsRegion.regionId;
39+
40+
const sharedEfs = args[1]['resource.shared-efs-filesystem'] as SharedEfs;
41+
const efs = args[1][`resource.efs-${regionId}-filesystem`] as Efs;
42+
const internalOpenSG = args[1][`resource.sec-grp-${regionId}-internal-open`] as SecurityGroup;
43+
const privateSubnet1 = args[1][`resource.subnet-${regionId}-private-1`] as Subnet;
44+
45+
// Delete EFS.
46+
efs.removeRelationship(privateSubnet1);
47+
efs.removeRelationship(internalOpenSG);
48+
efs.removeRelationship(sharedEfs);
49+
efs.markDeleted();
50+
51+
output[efs.resourceId] = efs;
52+
return output;
53+
},
54+
collectInput: (diff: Diff): string[] => {
55+
const { regionId } = diff.model as AwsRegion;
56+
return [`resource.efs-${regionId}-filesystem`, 'resource.shared-efs-filesystem'];
57+
},
58+
},
59+
],
60+
})
61+
export class AwsRegionSharedEfsModule {}

0 commit comments

Comments
 (0)