Skip to content

Commit e800457

Browse files
committed
chore: wip
1 parent b1080ac commit e800457

File tree

2 files changed

+50
-8
lines changed

2 files changed

+50
-8
lines changed

.stacks/core/cloud/src/cloud.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,7 @@ export class StacksCloud extends Stack {
367367
role.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonSSMManagedInstanceCore'))
368368

369369
// this instance needs to be created once to mount the EFS & clone the Stacks repo
370-
this.ec2Instance = new ec2.Instance(this, 'JumpBoxInstance', {
370+
this.ec2Instance = new ec2.Instance(this, 'JumpBox', {
371371
vpc: this.vpc,
372372
instanceType: ec2.InstanceType.of(ec2.InstanceClass.T2, ec2.InstanceSize.MICRO),
373373
machineImage: new ec2.AmazonLinuxImage(),

.stacks/core/cloud/src/index.ts

Lines changed: 49 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,18 @@ const appEnv = config.app.env === 'local' ? 'dev' : config.app.env
1010
const cloudName = `stacks-cloud-${appEnv}`
1111
const ec2 = new EC2({ region: 'us-east-1' })
1212

13-
export async function getSecurityGroupId(name: string) {
13+
export async function getSecurityGroupId(securityGroupName: string) {
1414
const { SecurityGroups } = await ec2.describeSecurityGroups({
15-
Filters: [{ Name: 'group-name', Values: [name] }],
15+
Filters: [{ Name: 'group-name', Values: [securityGroupName] }],
1616
})
1717

1818
if (!SecurityGroups)
19-
return err(`Security group ${name} not found`)
19+
return err(`Security group ${securityGroupName} not found`)
2020

2121
if (SecurityGroups[0])
2222
return ok(SecurityGroups[0].GroupId)
2323

24-
return err(`Security group ${name} not found`)
24+
return err(`Security group ${securityGroupName} not found`)
2525
}
2626

2727
export * from './drivers'
@@ -183,7 +183,7 @@ export async function getJumpBoxInstanceProfileName() {
183183
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
184184
const data = await iam.listInstanceProfiles({})
185185
// 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'))
187187

188188
if (!instanceProfile)
189189
return err('Jump-box IAM instance profile not found')
@@ -201,8 +201,15 @@ export async function addJumpBox(stackName?: string) {
201201

202202
const ec2 = new EC2({ region: 'us-east-1' })
203203

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)
206213
let sgId: string | undefined
207214

208215
if (result.isErr())
@@ -281,6 +288,41 @@ git clone https://github.com/stacksjs/stacks.git /mnt/efs
281288
: err('Jump box creation failed')
282289
}
283290

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+
284326
export async function isFirstDeployment() {
285327
const stackName = cloudName
286328
const cloudFormation = new CloudFormation()

0 commit comments

Comments
 (0)