/** * @param ProvisionServiceRequest $request * @param array $options ['keep-database'=>true|false] * * @return bool * @throws ProvisioningException */ protected function deprovisionInstance($request, $options = []) { $_keepDatabase = array_get($options, 'keep-database', false); $_instance = $request->getInstance(); $_name = $_instance->instance_id_text; $this->info('[deprovisioning:instance] instance "' . $_name . '" begin'); if ($_keepDatabase) { $this->info('[deprovisioning:instance] "keep-database" specified. Keeping existing schema, if any.'); } else { // Deprovision the database $_dbService = Provision::getDatabaseProvisioner($_instance->guest_location_nbr); if (false === ($_dbConfig = $_dbService->deprovision($request))) { throw new ProvisioningException('Failed to deprovision database. Check logs for error.'); } } try { if (!$_instance->delete()) { throw new \RuntimeException('Instance row deletion failed.'); } } catch (\Exception $_ex) { $this->error('[deprovisioning:instance] exception while deleting instance row: ' . $_ex->getMessage()); return false; } // Fire off a "deprovisioned" event... \Event::fire('dfe.deprovisioned', [$this, $request]); $this->info('[deprovisioning:instance] instance "' . $_name . '" complete'); return true; }