docs: function(options, cb) {
  
          function writeTemplate(callback) {
              options.soajs.log.debug('Writing template to temp folder ...');
              let templateFolderPath = path.join(__dirname, config.terraform.tempFolderPrefix);
              let templateFiles = [
                  { name: config.terraform.templateDefaultName, content: options.params.template },
                  { name: config.terraform.stateFileName, content: JSON.stringify(options.params.templateState, null, 2) },
              ];
  
              options.params.path = templateFolderPath;
              options.params.files = templateFiles;
              helper.writeToTempFolder(options, function(error, output) {
                  if (error) return callback({error, code: 728});
                  return callback(null, output);
              });
          }
  
          function excludeResources(result, callback) {
              if(!options.params.exclude || (Array.isArray(options.params.exclude) && options.params.exclude.length === 0)) {
                  return callback(null, true);
              }
  
              options.soajs.log.debug('Excluding sensitive resources before destroying...');
              options.params.command = config.terraform.excludeResourceCommand;
              options.params.cwd = result.writeTemplate.tempFolderPath;
              options.params.exclude.forEach((oneExcludedResource) => options.params.command += `${oneExcludedResource} `);
              helper.runChildProcess(options, function(error, output) {
                  if(error) options.soajs.log.debug(error);
                  return callback(null, output);
              });
          }
  
          function destroyTemplate(result, callback) {
              options.soajs.log.debug('Destroying infra created using template ...');
              options.params.command = config.terraform.destroyCommand;
              options.params.cwd = result.writeTemplate.tempFolderPath;
              helper.runChildProcess(options, function(error, output) {
                  if(error) return callback({ error, code: 729 });
                  return callback(null, output);
              });
          }
  
          function cleanup(result, callback) {
              options.soajs.log.debug('Cleaing up temp folder ...');
              helper.cleanup({ tempFolderPath: result.writeTemplate.tempFolderPath }, function(error) {
                  if(error) options.soajs.log.error('Cleanup failed after destroying terraform template!', error);
                  return callback(null, true);
              });
          }
  
          async.auto({
              // create temp folder and write template and state file to it
              writeTemplate,
              // exclude resources that should'nt be destroyed
              excludeResources: ['writeTemplate', excludeResources],
              // terraform destroy
              destroyTemplate: ['writeTemplate', 'excludeResources', destroyTemplate],
              //delete temp folder
              cleanup: ['destroyTemplate', cleanup]
          }, function(error, result) {
              utils.checkError(error && error.error, error && error.code, cb, () => {
                  let backupData = { render: options.params.template, templateOutput: result.destroyTemplate };
                  helper.backup('destroy', options, backupData, function() {
                      return cb(null, {
                          destroyed: true,
                          output: result.destroyTemplate.output
                      });
                  });
              });
          });
      }