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 `orchestration_log` WHERE `farmid` = ?", [$this->id]);
}