baked in cloud formation template
parent
ff12d4e434
commit
ae4d84f7f6
|
|
@ -2003,7 +2003,7 @@ const cli_functions_repository_1 = __nccwpck_require__(85301);
|
||||||
const input_1 = __importDefault(__nccwpck_require__(91933));
|
const input_1 = __importDefault(__nccwpck_require__(91933));
|
||||||
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855));
|
||||||
class AwsCliCommands {
|
class AwsCliCommands {
|
||||||
static awsListStacks() {
|
static awsListStacks(perResultCallback) {
|
||||||
var _a;
|
var _a;
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
process.env.AWS_REGION = input_1.default.region;
|
process.env.AWS_REGION = input_1.default.region;
|
||||||
|
|
@ -2016,13 +2016,14 @@ class AwsCliCommands {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
cloud_runner_logger_1.default.log(`${element.StackName}`);
|
cloud_runner_logger_1.default.log(`${element.StackName}`);
|
||||||
|
perResultCallback(element);
|
||||||
}
|
}
|
||||||
if (stacks === undefined) {
|
if (stacks === undefined) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
static awsListTasks() {
|
static awsListTasks(perResultCallback) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
process.env.AWS_REGION = input_1.default.region;
|
process.env.AWS_REGION = input_1.default.region;
|
||||||
cloud_runner_logger_1.default.log(`ECS Clusters`);
|
cloud_runner_logger_1.default.log(`ECS Clusters`);
|
||||||
|
|
@ -2052,6 +2053,7 @@ class AwsCliCommands {
|
||||||
cloud_runner_logger_1.default.log(`Skipping ${taskElement.taskDefinitionArn} no createdAt date`);
|
cloud_runner_logger_1.default.log(`Skipping ${taskElement.taskDefinitionArn} no createdAt date`);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
perResultCallback(taskElement, element);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2073,61 +2075,23 @@ class AwsCliCommands {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
static cleanup(deleteResources = false, olderThanAgeInHours = 0) {
|
static cleanup(deleteResources = false, olderThanAgeInHours = 0) {
|
||||||
var _a;
|
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
process.env.AWS_REGION = input_1.default.region;
|
process.env.AWS_REGION = input_1.default.region;
|
||||||
cloud_runner_logger_1.default.log(`Cloud Formation stacks`);
|
|
||||||
const CF = new aws_sdk_1.default.CloudFormation();
|
const CF = new aws_sdk_1.default.CloudFormation();
|
||||||
cloud_runner_logger_1.default.log(`ECS Clusters`);
|
|
||||||
const ecs = new aws_sdk_1.default.ECS();
|
const ecs = new aws_sdk_1.default.ECS();
|
||||||
const clusters = (yield ecs.listClusters().promise()).clusterArns || [];
|
AwsCliCommands.awsListStacks((element) => __awaiter(this, void 0, void 0, function* () {
|
||||||
for (const element of clusters) {
|
if (deleteResources &&
|
||||||
const input = {
|
new Date(Date.now()).getUTCMilliseconds() - element.CreationTime.getUTCMilliseconds() > olderThanAgeInHours) {
|
||||||
cluster: element,
|
const deleteStackInput = { StackName: element.StackName };
|
||||||
};
|
yield CF.deleteStack(deleteStackInput).promise();
|
||||||
const list = (yield ecs.listTasks(input).promise()).taskArns || [];
|
|
||||||
if (list.length > 0) {
|
|
||||||
cloud_runner_logger_1.default.log(`DescribeTasksRequest`);
|
|
||||||
cloud_runner_logger_1.default.log(JSON.stringify(list, undefined, 4));
|
|
||||||
const describeInput = { tasks: list, cluster: element };
|
|
||||||
const describeList = (yield ecs.describeTasks(describeInput).promise()).tasks || [];
|
|
||||||
if (describeList === []) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
for (const taskElement of describeList) {
|
|
||||||
if (taskElement === undefined) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
taskElement.overrides = {};
|
|
||||||
taskElement.attachments = [];
|
|
||||||
cloud_runner_logger_1.default.log(JSON.stringify(taskElement, undefined, 4));
|
|
||||||
if (taskElement.createdAt === undefined) {
|
|
||||||
cloud_runner_logger_1.default.log(`Skipping ${taskElement.taskDefinitionArn} no createdAt date`);
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
}));
|
||||||
|
AwsCliCommands.awsListTasks((taskElement, element) => __awaiter(this, void 0, void 0, function* () {
|
||||||
if (deleteResources &&
|
if (deleteResources &&
|
||||||
new Date(Date.now()).getUTCMilliseconds() - taskElement.createdAt.getUTCMilliseconds() > olderThanAgeInHours) {
|
new Date(Date.now()).getUTCMilliseconds() - taskElement.createdAt.getUTCMilliseconds() > olderThanAgeInHours) {
|
||||||
yield ecs.stopTask({ task: taskElement.taskArn || '', cluster: element }).promise();
|
yield ecs.stopTask({ task: taskElement.taskArn || '', cluster: element }).promise();
|
||||||
}
|
}
|
||||||
}
|
}));
|
||||||
}
|
|
||||||
}
|
|
||||||
const stacks = ((_a = (yield CF.listStacks().promise()).StackSummaries) === null || _a === void 0 ? void 0 : _a.filter((_x) => _x.StackStatus !== 'DELETE_COMPLETE')) || [];
|
|
||||||
for (const element of stacks) {
|
|
||||||
cloud_runner_logger_1.default.log(JSON.stringify(element, undefined, 4));
|
|
||||||
const deleteStackInput = { StackName: element.StackName };
|
|
||||||
if (element.StackName === 'game-ci' || element.TemplateDescription === 'Game-CI base stack') {
|
|
||||||
cloud_runner_logger_1.default.log(`Skipping ${element.StackName} ignore list`);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (deleteResources &&
|
|
||||||
new Date(Date.now()).getUTCMilliseconds() - element.CreationTime.getUTCMilliseconds() > olderThanAgeInHours) {
|
|
||||||
yield CF.deleteStack(deleteStackInput).promise();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (stacks === undefined) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -5,7 +5,7 @@ import CloudRunnerLogger from '../../../services/cloud-runner-logger';
|
||||||
|
|
||||||
export class AwsCliCommands {
|
export class AwsCliCommands {
|
||||||
@CliFunction(`aws-list-stacks`, `List stacks`)
|
@CliFunction(`aws-list-stacks`, `List stacks`)
|
||||||
static async awsListStacks() {
|
static async awsListStacks(perResultCallback: any) {
|
||||||
process.env.AWS_REGION = Input.region;
|
process.env.AWS_REGION = Input.region;
|
||||||
const CF = new AWS.CloudFormation();
|
const CF = new AWS.CloudFormation();
|
||||||
const stacks =
|
const stacks =
|
||||||
|
|
@ -17,13 +17,14 @@ export class AwsCliCommands {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
CloudRunnerLogger.log(`${element.StackName}`);
|
CloudRunnerLogger.log(`${element.StackName}`);
|
||||||
|
perResultCallback(element);
|
||||||
}
|
}
|
||||||
if (stacks === undefined) {
|
if (stacks === undefined) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@CliFunction(`aws-list-tasks`, `List tasks`)
|
@CliFunction(`aws-list-tasks`, `List tasks`)
|
||||||
static async awsListTasks() {
|
static async awsListTasks(perResultCallback: any) {
|
||||||
process.env.AWS_REGION = Input.region;
|
process.env.AWS_REGION = Input.region;
|
||||||
CloudRunnerLogger.log(`ECS Clusters`);
|
CloudRunnerLogger.log(`ECS Clusters`);
|
||||||
const ecs = new AWS.ECS();
|
const ecs = new AWS.ECS();
|
||||||
|
|
@ -52,6 +53,7 @@ export class AwsCliCommands {
|
||||||
CloudRunnerLogger.log(`Skipping ${taskElement.taskDefinitionArn} no createdAt date`);
|
CloudRunnerLogger.log(`Skipping ${taskElement.taskDefinitionArn} no createdAt date`);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
perResultCallback(taskElement, element);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -72,62 +74,24 @@ export class AwsCliCommands {
|
||||||
|
|
||||||
private static async cleanup(deleteResources = false, olderThanAgeInHours = 0) {
|
private static async cleanup(deleteResources = false, olderThanAgeInHours = 0) {
|
||||||
process.env.AWS_REGION = Input.region;
|
process.env.AWS_REGION = Input.region;
|
||||||
CloudRunnerLogger.log(`Cloud Formation stacks`);
|
|
||||||
const CF = new AWS.CloudFormation();
|
const CF = new AWS.CloudFormation();
|
||||||
CloudRunnerLogger.log(`ECS Clusters`);
|
|
||||||
const ecs = new AWS.ECS();
|
const ecs = new AWS.ECS();
|
||||||
const clusters = (await ecs.listClusters().promise()).clusterArns || [];
|
AwsCliCommands.awsListStacks(async (element) => {
|
||||||
for (const element of clusters) {
|
if (
|
||||||
const input: AWS.ECS.ListTasksRequest = {
|
deleteResources &&
|
||||||
cluster: element,
|
new Date(Date.now()).getUTCMilliseconds() - element.CreationTime.getUTCMilliseconds() > olderThanAgeInHours
|
||||||
};
|
) {
|
||||||
const list = (await ecs.listTasks(input).promise()).taskArns || [];
|
const deleteStackInput: AWS.CloudFormation.DeleteStackInput = { StackName: element.StackName };
|
||||||
if (list.length > 0) {
|
await CF.deleteStack(deleteStackInput).promise();
|
||||||
CloudRunnerLogger.log(`DescribeTasksRequest`);
|
|
||||||
CloudRunnerLogger.log(JSON.stringify(list, undefined, 4));
|
|
||||||
const describeInput: AWS.ECS.DescribeTasksRequest = { tasks: list, cluster: element };
|
|
||||||
const describeList = (await ecs.describeTasks(describeInput).promise()).tasks || [];
|
|
||||||
if (describeList === []) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
for (const taskElement of describeList) {
|
|
||||||
if (taskElement === undefined) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
taskElement.overrides = {};
|
|
||||||
taskElement.attachments = [];
|
|
||||||
CloudRunnerLogger.log(JSON.stringify(taskElement, undefined, 4));
|
|
||||||
if (taskElement.createdAt === undefined) {
|
|
||||||
CloudRunnerLogger.log(`Skipping ${taskElement.taskDefinitionArn} no createdAt date`);
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
AwsCliCommands.awsListTasks(async (taskElement, element) => {
|
||||||
if (
|
if (
|
||||||
deleteResources &&
|
deleteResources &&
|
||||||
new Date(Date.now()).getUTCMilliseconds() - taskElement.createdAt.getUTCMilliseconds() > olderThanAgeInHours
|
new Date(Date.now()).getUTCMilliseconds() - taskElement.createdAt.getUTCMilliseconds() > olderThanAgeInHours
|
||||||
) {
|
) {
|
||||||
await ecs.stopTask({ task: taskElement.taskArn || '', cluster: element }).promise();
|
await ecs.stopTask({ task: taskElement.taskArn || '', cluster: element }).promise();
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
}
|
|
||||||
}
|
|
||||||
const stacks =
|
|
||||||
(await CF.listStacks().promise()).StackSummaries?.filter((_x) => _x.StackStatus !== 'DELETE_COMPLETE') || [];
|
|
||||||
for (const element of stacks) {
|
|
||||||
CloudRunnerLogger.log(JSON.stringify(element, undefined, 4));
|
|
||||||
const deleteStackInput: AWS.CloudFormation.DeleteStackInput = { StackName: element.StackName };
|
|
||||||
if (element.StackName === 'game-ci' || element.TemplateDescription === 'Game-CI base stack') {
|
|
||||||
CloudRunnerLogger.log(`Skipping ${element.StackName} ignore list`);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (
|
|
||||||
deleteResources &&
|
|
||||||
new Date(Date.now()).getUTCMilliseconds() - element.CreationTime.getUTCMilliseconds() > olderThanAgeInHours
|
|
||||||
) {
|
|
||||||
await CF.deleteStack(deleteStackInput).promise();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (stacks === undefined) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue