@@ -10,18 +10,18 @@ const appEnv = config.app.env === 'local' ? 'dev' : config.app.env
10
10
const cloudName = `stacks-cloud-${ appEnv } `
11
11
const ec2 = new EC2 ( { region : 'us-east-1' } )
12
12
13
- export async function getSecurityGroupId ( name : string ) {
13
+ export async function getSecurityGroupId ( securityGroupName : string ) {
14
14
const { SecurityGroups } = await ec2 . describeSecurityGroups ( {
15
- Filters : [ { Name : 'group-name' , Values : [ name ] } ] ,
15
+ Filters : [ { Name : 'group-name' , Values : [ securityGroupName ] } ] ,
16
16
} )
17
17
18
18
if ( ! SecurityGroups )
19
- return err ( `Security group ${ name } not found` )
19
+ return err ( `Security group ${ securityGroupName } not found` )
20
20
21
21
if ( SecurityGroups [ 0 ] )
22
22
return ok ( SecurityGroups [ 0 ] . GroupId )
23
23
24
- return err ( `Security group ${ name } not found` )
24
+ return err ( `Security group ${ securityGroupName } not found` )
25
25
}
26
26
27
27
export * from './drivers'
@@ -183,7 +183,7 @@ export async function getJumpBoxInstanceProfileName() {
183
183
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
184
184
const data = await iam . listInstanceProfiles ( { } )
185
185
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-return
186
- const instanceProfile = data . InstanceProfiles ?. find ( profile => profile . InstanceProfileName ?. includes ( 'JumpBoxInstance ' ) )
186
+ const instanceProfile = data . InstanceProfiles ?. find ( profile => profile . InstanceProfileName ?. includes ( 'JumpBox ' ) )
187
187
188
188
if ( ! instanceProfile )
189
189
return err ( 'Jump-box IAM instance profile not found' )
@@ -201,8 +201,15 @@ export async function addJumpBox(stackName?: string) {
201
201
202
202
const ec2 = new EC2 ( { region : 'us-east-1' } )
203
203
204
- // TODO: fix this
205
- const result = await getSecurityGroupId ( 'stacks-cloud-JumpBoxInstanceInstanceSecurityGroupF8898C8C-1J0P9G9EIC1JR' )
204
+ const r = await getJumpBoxSecurityGroupName ( )
205
+
206
+ if ( r . isErr ( ) )
207
+ return err ( r . error )
208
+
209
+ if ( ! r . value )
210
+ return err ( 'Security group not found when adding jump box' )
211
+
212
+ const result = await getSecurityGroupId ( r . value )
206
213
let sgId : string | undefined
207
214
208
215
if ( result . isErr ( ) )
@@ -281,6 +288,41 @@ git clone https://github.com/stacksjs/stacks.git /mnt/efs
281
288
: err ( 'Jump box creation failed' )
282
289
}
283
290
291
+ export async function getJumpBoxSecurityGroupName ( ) {
292
+ const jumpBoxId = await getJumpBoxInstanceId ( )
293
+
294
+ if ( ! jumpBoxId )
295
+ return err ( 'Jump box not found' )
296
+
297
+ const ec2 = new EC2 ( { region : 'us-east-1' } )
298
+ const data = await ec2 . describeInstances ( { InstanceIds : [ jumpBoxId ] } )
299
+
300
+ if ( data . Reservations && data . Reservations [ 0 ] && data . Reservations [ 0 ] . Instances && data . Reservations [ 0 ] . Instances [ 0 ] ) {
301
+ const instance = data . Reservations [ 0 ] . Instances [ 0 ]
302
+ const securityGroups = instance . SecurityGroups
303
+
304
+ if ( securityGroups && securityGroups [ 0 ] )
305
+ return ok ( securityGroups [ 0 ] . GroupName )
306
+ }
307
+
308
+ return err ( 'Security group not found' )
309
+ }
310
+
311
+ export async function getSecurityGroupFromInstanceId ( instanceId : string ) {
312
+ const ec2 = new EC2 ( { region : 'us-east-1' } )
313
+ const data = await ec2 . describeInstances ( { InstanceIds : [ instanceId ] } )
314
+
315
+ if ( data . Reservations && data . Reservations [ 0 ] && data . Reservations [ 0 ] . Instances && data . Reservations [ 0 ] . Instances [ 0 ] ) {
316
+ const instance = data . Reservations [ 0 ] . Instances [ 0 ]
317
+ const securityGroups = instance . SecurityGroups
318
+
319
+ if ( securityGroups && securityGroups [ 0 ] )
320
+ return securityGroups [ 0 ] . GroupId // Returns the ID of the first security group
321
+ }
322
+
323
+ return undefined
324
+ }
325
+
284
326
export async function isFirstDeployment ( ) {
285
327
const stackName = cloudName
286
328
const cloudFormation = new CloudFormation ( )
0 commit comments