Skip to content

Commit 1a735e4

Browse files
committed
Support trying multiple subnets
ported from machulav#85
1 parent 2698ed6 commit 1a735e4

File tree

2 files changed

+26
-20
lines changed

2 files changed

+26
-20
lines changed

action.yml

+2-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ inputs:
2727
required: false
2828
subnet-id:
2929
description: >-
30-
VPC Subnet Id. The subnet should belong to the same VPC as the specified security group.
30+
VPC Subnet Id. You may provide a comma-separated list of subnet ids to try multiple subnets.
31+
The subnet should belong to the same VPC as the specified security group.
3132
This input is required if you use the 'start' mode.
3233
required: false
3334
security-group-id:

src/aws.js

+24-19
Original file line numberDiff line numberDiff line change
@@ -33,27 +33,32 @@ async function startEc2Instance(label, githubRegistrationToken) {
3333

3434
const userData = buildUserDataScript(githubRegistrationToken, label);
3535

36-
const params = {
37-
ImageId: config.input.ec2ImageId,
38-
InstanceType: config.input.ec2InstanceType,
39-
MinCount: 1,
40-
MaxCount: 1,
41-
UserData: Buffer.from(userData.join('\n')).toString('base64'),
42-
SubnetId: config.input.subnetId,
43-
SecurityGroupIds: [config.input.securityGroupId],
44-
IamInstanceProfile: { Name: config.input.iamRoleName },
45-
TagSpecifications: config.tagSpecifications,
46-
};
36+
const subnetId = config.input.subnetId;
37+
const subnets = subnetId ? subnetId.replace(/\s/g, '').split(',') : [null];
4738

48-
try {
49-
const result = await ec2.runInstances(params).promise();
50-
const ec2InstanceId = result.Instances[0].InstanceId;
51-
core.info(`AWS EC2 instance ${ec2InstanceId} is started`);
52-
return ec2InstanceId;
53-
} catch (error) {
54-
core.error('AWS EC2 instance starting error');
55-
throw error;
39+
for (const subnet of subnets) {
40+
const params = {
41+
ImageId: config.input.ec2ImageId,
42+
InstanceType: config.input.ec2InstanceType,
43+
MinCount: 1,
44+
MaxCount: 1,
45+
UserData: Buffer.from(userData.join('\n')).toString('base64'),
46+
SubnetId: subnet,
47+
SecurityGroupIds: [config.input.securityGroupId],
48+
IamInstanceProfile: { Name: config.input.iamRoleName },
49+
TagSpecifications: config.tagSpecifications,
50+
};
51+
try {
52+
const result = await ec2.runInstances(params).promise();
53+
const ec2InstanceId = result.Instances[0].InstanceId;
54+
core.info(`AWS EC2 instance ${ec2InstanceId} is started`);
55+
return ec2InstanceId;
56+
} catch (error) {
57+
core.warning('AWS EC2 instance starting error');
58+
core.warning(error);
59+
}
5660
}
61+
core.setFailed(`Failed to launch instance after trying in ${subnets.length} subnets.`);
5762
}
5863

5964
async function terminateEc2Instance() {

0 commit comments

Comments
 (0)