/** * Detach configured cloud configuration from specified environment * * @param int $envId Environment ID * @param string $cloud Cloud platform name * * @return ResultEnvelope * * @throws ApiErrorException * @throws ModelException */ public function detachCredentialsAction($envId, $cloud) { if (!$this->getUser()->canManageAcl()) { $this->checkPermissions(Acl::RESOURCE_ENV_CLOUDS_ENVIRONMENT); } $env = $this->getEnv($envId); $cloudCredentials = $env->keychain($cloud); if (empty($cloudCredentials->id)) { throw new ApiErrorException(404, ErrorMessage::ERR_OBJECT_NOT_FOUND, "Cloud '{$cloud}' not configured for this environment"); } if (in_array($cloudCredentials->cloud, [SERVER_PLATFORMS::EC2, SERVER_PLATFORMS::GCE]) && (count(Entity\Server::find([['envId' => $envId], ['platform' => $cloudCredentials->cloud]])) || count(Entity\Image::find([['envId' => $envId], ['platform' => $cloudCredentials->cloud]])))) { throw new ApiErrorException(409, ErrorMessage::ERR_OBJECT_IN_USE, "Cloud Credentials are used"); } $cloudCredentials->environments[$envId]->delete(); return $this->result(null); }
/** * Returns prepared orchestration log data for response * * @param EntityIterator $logs List of Orchestration Log objects * @return array */ private function prepareOrchestrationLogData($logs) { $farmIds = []; $serverIds = []; $taskIds = []; $eventIds = []; $ids = []; foreach ($logs as $row) { /* @var $row OrchestrationLog */ $farmIds[] = $row->farmId; $serverIds[] = $row->serverId; if ($row->eventServerId) { $serverIds[] = $row->eventServerId; } if ($row->taskId) { $taskIds[] = $row->taskId; } if ($row->eventId) { $eventIds[] = $row->eventId; } if ($row->type == OrchestrationLog::TYPE_MANUAL) { $ids[] = $row->id; } } if (!empty($farmIds)) { $farms = Farm::find([['id' => ['$in' => array_unique($farmIds)]]]); foreach ($farms as $farm) { /* @var $farm Farm */ $farmData[$farm->id] = $farm->name; } } if (!empty($serverIds)) { $servers = Server::find([['serverId' => ['$in' => array_unique($serverIds)]]]); $farmRoleIds = []; $serverFarmIds = []; foreach ($servers as $server) { /* @var $server Server */ $serverData[$server->serverId]['serverIndex'] = $server->index; $farmRoleIds[$server->serverId] = $server->farmRoleId; $serverFarmIds[$server->serverId] = $server->farmId; } $farms = Farm::find([['id' => ['$in' => array_unique(array_values($serverFarmIds))]]]); foreach ($farms as $farm) { /* @var $farm Farm */ foreach ($serverFarmIds as $serverId => $farmId) { if ($farmId == $farm->id) { $serverData[$serverId]['farmName'] = $farm->name; $serverData[$serverId]['farmId'] = $farm->id; } } } $farmRoles = FarmRole::find([['id' => ['$in' => array_unique(array_values($farmRoleIds))]]]); foreach ($farmRoles as $farmRole) { /* @var $farmRole FarmRole */ foreach ($farmRoleIds as $serverId => $farmRoleId) { if ($farmRoleId == $farmRole->id) { $serverData[$serverId]['alias'] = $farmRole->alias; $serverData[$serverId]['farmRoleId'] = $farmRole->id; } } } } if (!empty($taskIds)) { $tasks = SchedulerTask::find([['id' => ['$in' => array_unique($taskIds)]]]); foreach ($tasks as $task) { /* @var $task SchedulerTask */ $taskData[$task->id] = $task->name; } } if (!empty($eventIds)) { $events = Event::find([['eventId' => ['$in' => array_unique($eventIds)]]]); foreach ($events as $event) { /* @var $event Event */ $eventData[$event->eventId] = $event->type; } } if (!empty($ids)) { $manualLogs = OrchestrationLogManualScript::find([['orchestrationLogId' => ['$in' => array_unique($ids)]]]); foreach ($manualLogs as $manualLog) { /* @var $manualLog OrchestrationLogManualScript */ $scriptData[$manualLog->orchestrationLogId] = $manualLog->userEmail; } } $data = []; foreach ($logs as $row) { /* @var $row OrchestrationLog */ $dataRow = get_object_vars($row); $dataRow['targetFarmName'] = isset($farmData[$row->farmId]) ? $farmData[$row->farmId] : null; $dataRow['targetFarmId'] = $row->farmId; $dataRow['targetServerId'] = $row->serverId; $dataRow['targetServerIndex'] = isset($serverData[$row->serverId]['serverIndex']) ? $serverData[$row->serverId]['serverIndex'] : null; $dataRow['targetFarmRoleId'] = isset($serverData[$row->serverId]['farmRoleId']) ? $serverData[$row->serverId]['farmRoleId'] : null; $dataRow['targetRoleName'] = isset($serverData[$row->serverId]['alias']) ? $serverData[$row->serverId]['alias'] : null; $dataRow['added'] = Scalr_Util_DateTime::convertTz($row->added); if (\Scalr::config('scalr.system.scripting.logs_storage') == 'scalr') { $dataRow['executionId'] = null; } if ($dataRow['message']) { $dataRow['message'] = nl2br(htmlspecialchars($dataRow['message'])); } if ($row->eventServerId) { $dataRow['eventFarmName'] = isset($serverData[$row->eventServerId]['farmName']) ? $serverData[$row->eventServerId]['farmName'] : null; $dataRow['eventFarmId'] = isset($serverData[$row->eventServerId]['farmId']) ? $serverData[$row->eventServerId]['farmId'] : null; $dataRow['eventFarmRoleId'] = isset($serverData[$row->eventServerId]['farmRoleId']) ? $serverData[$row->eventServerId]['farmRoleId'] : null; $dataRow['eventRoleName'] = isset($serverData[$row->eventServerId]['alias']) ? $serverData[$row->eventServerId]['alias'] : null; $dataRow['eventServerIndex'] = isset($serverData[$row->eventServerId]['serverIndex']) ? $serverData[$row->eventServerId]['serverIndex'] : null; } $dataRow['event'] = null; if ($row->taskId) { $dataRow['event'] = isset($taskData[$row->taskId]) ? $taskData[$row->taskId] : null; } if ($row->eventId) { $dataRow['event'] = isset($eventData[$row->eventId]) ? $eventData[$row->eventId] : null; } if ($row->type == OrchestrationLog::TYPE_MANUAL) { $dataRow['event'] = isset($scriptData[$row->id]) ? $scriptData[$row->id] : null; } $data[] = $dataRow; } return $data; }
/** * {@inheritdoc} * @see AbstractEntity::delete() */ public function delete() { if ($this->status != FARM_STATUS::TERMINATED) { throw new FarmInUseException("Cannot delete a running farm, please terminate a farm before deleting it"); } $servers = Server::find([['farmId' => $this->id], ['status' => ['$ne' => Server::STATUS_TERMINATED]]]); if (count($servers)) { throw new FarmInUseException(sprintf("Cannot delete a running farm, %s server%s still running on this farm", count($servers), count($servers) > 1 ? 's are' : ' is')); } $db = $this->db(); try { $db->BeginTrans(); foreach ($this->farmRoles as $farmRole) { $farmRole->delete(); } $this->deleteScheduled(); $db->Execute("DELETE FROM `logentries` WHERE `farmid` = ?", [$this->id]); $db->Execute("DELETE FROM `elastic_ips` WHERE `farmid` = ?", [$this->id]); $db->Execute("DELETE FROM `events` WHERE `farmid` = ?", [$this->id]); $db->Execute("DELETE FROM `ec2_ebs` WHERE `farm_id` = ?", [$this->id]); $db->Execute("DELETE FROM `farm_lease_requests` WHERE `farm_id` = ?", [$this->id]); foreach ($this->servers as $server) { $server->delete(); } $db->Execute("UPDATE `dns_zones` SET `farm_id` = '0', `farm_roleid` ='0' WHERE `farm_id` = ?", [$this->id]); $db->Execute("UPDATE `apache_vhosts` SET `farm_id` = '0', `farm_roleid` ='0' WHERE `farm_id` = ?", [$this->id]); parent::delete(); $db->CommitTrans(); } catch (Exception $e) { $db->RollbackTrans(); throw $e; } $db->Execute("DELETE FROM `scripting_log` WHERE `farmid` = ?", [$this->id]); }