clearEcsCluster: function()

in backend/src/cleanup/clear-ecs-cluster.js [7:121]


  clearEcsCluster: function (event, context, cb) {
    console.log("Event=", event);
    console.log("Context=", context);
    if (event.RequestType === 'Delete')  {
      var tasks = null;
      var taskDefinitions = null;
      var failure = 0;

      var blankArray = new Object();
      blankArray = [];

      var clusterName = event.ResourceProperties.ECSClusterName;
      var taskRoleArn = event.ResourceProperties.ECSTaskRoleArn;

      console.log("Found cluster name: ", clusterName);

      tasks = listTasks(ecs, clusterName);
      tasks.then(function(result) {
        if (JSON.stringify(result.taskArns) === JSON.stringify(blankArray)) {
          console.log("No tasks exist in cluster", clusterName);
          console.log("listTasks API returned", result);
        } else {
          console.log("Task(s) found for cluster ", clusterName, ".  DELETING");
          console.log(result);

          var stop = [];
          for (var i = 0, len = result.taskArns.length; i < len; i++) {
            stop.push(stopTask(ecs, clusterName, result.taskArns[i]));
          }

          Promise.all(stop)
          .then(function(result) {
            for (var i = 0, len = result.length; i < len; i++) {
              console.log("Stopped Task", result[i].task.taskArn);
            }
          })
          .catch(function(err) {
            console.log("ERROR: stopTask API call failed!");
            console.log(err);
            sendResponse(event, context, "FAILED");
            failure = 1;
          });
        }
      }, function(err) {
        console.log("ERROR: listTasks API call failed!");
        console.log(err);
        sendResponse(event, context, "FAILED");
        failure = 1;
      });

      console.log("Found task role arn: ", taskRoleArn);

      taskDefinitions = listActiveTaskDefinitions(ecs);

      taskDefinitions.then(function(result) {
        if (JSON.stringify(result.taskDefinitionArns) === JSON.stringify(blankArray)) {
          console.log("No task definitions found with Role Arn ", taskRoleArn);
          console.log("listTaskDefinitions API returned", result);
        } else {
          console.log("Task Definition(s) found.  DELETING");
          console.log(result);

          var descTaskDef = [];
          for (var i = 0, len = result.taskDefinitionArns.length; i < len; i++) {
            descTaskDef.push(describeTaskDefinition(ecs, result.taskDefinitionArns[i]));
          }

          Promise.all(descTaskDef)
          .then(function(result) {
            var deregister = [];

            for (var i = 0, len = result.length; i < len; i++) {
              console.log(result[i].taskDefinition.taskRoleArn, " = ", taskRoleArn);

              if ( result[i].taskDefinition.taskRoleArn === taskRoleArn )  {
                 deregister.push(deregisterTaskDefinition(ecs, result[i].taskDefinition.taskDefinitionArn));
              }

              Promise.all(deregister)
              .then(function(result) {
                for (var i = 0, len = result.length; i < len; i++) {
                  console.log("Deregistered Task Definition", result[i].taskDefinition.taskDefinitionArn);
                }
              })
              .catch(function(err) {
                console.log("ERROR: deregisterTaskDefinition API call failed!");
                console.log(err);
                sendResponse(event, context, "FAILED");
                failure = 1;
              });

            }
          })
          .catch(function(err) {
            console.log("ERROR: describeTaskDefinition API call failed!");
            console.log(err);
            sendResponse(event, context, "FAILED");
            failure = 1;
          });
        }
      }, function(err) {
        console.log("ERROR: listTaskDefinitions API call failed!");
        console.log(err);
        sendResponse(event, context, "FAILED");
        failure = 1;
      });

      if ( failure === 0 ) {
        sendResponse(event, context, "SUCCESS");
      }
    } else {
      console.log("Delete not requested.");
      sendResponse(event, context, "SUCCESS");
    }
  }