docs: function (options, cb) {
  		//Ref: https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.zones.clusters/delete
  		let request = getConnector(options.infra.api);
  		let stack = options.infra.stack;
  		request.zone = [];
  		request.clusterId = stack.id;
  		let project = request.project;
  		delete request.project;
  		options.soajs.log.debug("Removing Cluster:", request.clusterId);
  		driver.checkZoneRegion(options, stack.options.zone, false, (err, type) => {
  			if (err) {
  				return cb(err)
  			}
  			request.name = `projects/${options.infra.api.project}/locations/${stack.options.zone}/clusters/${stack.id}`;
  			v1beta1container().projects[type].clusters.get(request, function (err, clusterInformation) {
  				if (err) {
  					return cb(err);
  				}
  				v1beta1container().projects[type].clusters.delete(request, function (err, operation) {
  					if (err) {
  						return cb(err);
  					}
  					if (operation) {
  						checkIfDeleteIsDone(operation, type, (error) => {
  							if (error) {
  								options.soajs.log.error(error);
  							} else {
  								let deleteNetwork = true;
  								if (options.infra && options.infra._id && options.soajs && options.soajs.registry && options.soajs.registry.restriction && options.soajs.registry.restriction[options.infra._id]) {
  									if (Object.keys(options.soajs.registry.restriction[options.infra._id]).length > 0) {
  										let region = stack.options.zone;
  										if (options.soajs.registry.restriction[options.infra._id][region] && options.soajs.registry.restriction[options.infra._id][region].network) {
  											if (options.soajs.registry.restriction[options.infra._id][region].network === clusterInformation.network) {
  												options.soajs.log.debug("Cluster network provided as input, it will not be deleted ...");
  												options.soajs.log.debug("Cluster deleted successfully");
  												deleteNetwork = false;
  											}
  										}
  									}
  								}
  								
  								if (deleteNetwork) {
  									options.soajs.log.debug("waiting 1 min for network propagation before deleting Firewalls.");
  									let networkOptions = Object.assign({}, options);
  									networkOptions.params = {name: clusterInformation.network};
  									networks.delete(networkOptions, (error) => {
  										if (error) {
  											options.soajs.log.error(error);
  										} else {
  											deleteAddress();
  											options.soajs.log.debug("Cluster and Network Deleted Successfully.");
  										}
  									});
  								} else {
  									deleteAddress();
  								}
  							}
  						});
  						
  					}
  					//return response that cluster delete was triggered correctly
  					return cb(null, true);
  				});
  			});
  		});
  		
  		function checkIfDeleteIsDone(operation, type, vCb) {
  			//Ref: https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1/projects.zones.operations/get
  			let request = getConnector(options.infra.api);
  			delete request.project;
  			options.soajs.log.debug("Checking if Cluster was removed:", stack.id);
  			request.zone = [];
  			request.name = `projects/${options.infra.api.project}/locations/${stack.options.zone}/operations/${operation.name}`;
  			request.operationId = operation.name;
  			v1beta1container().projects[type].operations.get(request, function (err, response) {
  				if (err) {
  					return vCb(err);
  				}
  				
  				if (response && response.operationType === "DELETE_CLUSTER" && response.status === "DONE") {
  					return vCb(null, true);
  				} else {
  					setTimeout(function () {
  						checkIfDeleteIsDone(operation, type, vCb);
  					}, (process.env.SOAJS_CLOOSTRO_TEST) ? 1 : 60 * 1000);
  				}
  			});
  		}
  		
  		function deleteAddress() {
  			options.soajs.log.debug("Deleting Cluster IP Addresses");
  			let region;
  			request.project = project;
  			
  			function getRegion(cb) {
  				request.zone = stack.options.zone;
  				v1Compute().zones.get(request, function (err, response) {
  					if (err) {
  						options.soajs.log.error(err);
  					} else {
  						//zonal
  						if (response && response.region) {
  							let regionUrl = response.region.split("/");
  							region = regionUrl[regionUrl.length - 1];
  						} else {
  							//regional
  							region = stack.options.zone;
  						}
  					}
  					return cb();
  				});
  				
  			}
  			
  			request.filter = "name eq gke-" + stack.id.substring(0, 19) + "-" + stack.options.nodePoolId + "-.*";
  			getRegion((err) => {
  				if (err) {
  					options.soajs.log.error(err);
  				}
  				delete request.region;
  				delete request.clusterId;
  				request.region = region;
  				//list all addresses
  				v1Compute().addresses.list(request, (err, addresses) => {
  					if (err) {
  						options.soajs.log.error(err);
  					}
  					if (addresses && addresses.items && addresses.items.length > 0) {
  						async.eachSeries(addresses.items, function (one, callback) {
  							request.address = one.name;
  							//release each address in series
  							v1Compute().addresses.delete(request, (err) => {
  								if (err) {
  									return callback(err);
  								}
  								options.soajs.log.debug("IP " + one.address + " is released!");
  								return callback();
  							});
  						}, (err) => {
  							if (err) {
  								options.soajs.log.error(err);
  							}
  						});
  					}
  				});
  			});
  		}
  	}