public function delete()
{
$db = $this->db();
try {
// we should set scaling to manual to prevent starting new instances while we are deleting FarmRole
$frs = new FarmRoleSetting();
$db->Execute("\n UPDATE {$frs->table()}\n SET {$frs->columnValue} = ?\n WHERE {$frs->columnFarmRoleId} = ?\n AND {$frs->columnName} = ?\n ", [0, $this->id, FarmRoleSetting::SCALING_ENABLED]);
$this->terminateServers();
$db->BeginTrans();
// Clear farm role options & scripts
$db->Execute("DELETE FROM farm_role_service_config_presets WHERE farm_roleid=?", [$this->id]);
$db->Execute("DELETE FROM farm_role_scaling_times WHERE farm_roleid=?", [$this->id]);
$db->Execute("DELETE FROM farm_role_service_config_presets WHERE farm_roleid=?", [$this->id]);
$db->Execute("DELETE FROM farm_role_scripting_targets WHERE `target`=? AND `target_type` = 'farmrole'", [$this->id]);
$db->Execute("DELETE FROM ec2_ebs WHERE farm_roleid=?", [$this->id]);
$db->Execute("DELETE FROM elastic_ips WHERE farm_roleid=?", [$this->id]);
$db->Execute("DELETE FROM storage_volumes WHERE farm_roleid=?", [$this->id]);
// Clear apache vhosts and update DNS zones
$db->Execute("UPDATE apache_vhosts SET farm_roleid='0', farm_id='0' WHERE farm_roleid=?", [$this->id]);
$db->Execute("UPDATE dns_zones SET farm_roleid='0' WHERE farm_roleid=?", [$this->id]);
$this->deleteScheduled();
$db->Execute("DELETE FROM farm_role_scripts WHERE farm_roleid=?", [$this->id]);
parent::delete();
$db->CommitTrans();
} catch (Exception $e) {
$db->RollbackTrans();
throw $e;
}
}