private function updateSystemZone($serverId, $farmId, $resetAllSystemRecords = false, $skipStatusCheck = false)
{
//UPDATE RECORDS ONLY FOR SERVER
if (!\Scalr::config('scalr.dns.static.enabled')) {
return true;
}
$pdnsDb = \Scalr::getContainer()->dnsdb;
$deleteMySQL = false;
$deleteDbMsr = false;
try {
try {
$server = DBServer::LoadByID($serverId);
$dbRole = $server->GetFarmRoleObject()->GetRoleObject();
} catch (Exception $e) {
}
$domain = $pdnsDb->GetRow("SELECT id, name FROM domains WHERE scalr_farm_id = ? LIMIT 1", array($server->farmId));
$domainId = $domain['id'];
$domainName = $domain['name'];
if (!$domainId) {
return;
}
$records = [];
// Set index records
if ($server && $server->status == SERVER_STATUS::RUNNING) {
$records[] = array("int.{$server->index}.{$server->farmRoleId}", $server->localIp, $server->serverId);
$records[] = array("ext.{$server->index}.{$server->farmRoleId}", $server->remoteIp, $server->serverId);
if (\Scalr::config('scalr.dns.static.extended')) {
$records[] = array("int.{$server->farmRoleId}", $server->localIp, $server->serverId);
$records[] = array("ext.{$server->farmRoleId}", $server->remoteIp, $server->serverId);
}
if ($server->GetProperty(Scalr_Role_Behavior_MongoDB::SERVER_IS_ROUTER)) {
$records[] = array("int.mongo", $server->localIp, $server->serverId, 'mongodb');
$records[] = array("ext.mongo", $server->remoteIp, $server->serverId, 'mongodb');
}
if ($dbRole->hasBehavior(ROLE_BEHAVIORS::NGINX)) {
//$records[] = array("int.api.cloudfoundry", $server->localIp, $server->serverId, 'cloudfoundry');
//$records[] = array("ext.api.cloudfoundry", $server->remoteIp, $server->serverId, 'cloudfoundry');
$records[] = array("*.int.cloudfoundry", $server->localIp, $server->serverId, 'cloudfoundry');
$records[] = array("*.ext.cloudfoundry", $server->remoteIp, $server->serverId, 'cloudfoundry');
}
}
if ($dbRole) {
$isMysql = $dbRole->hasBehavior(ROLE_BEHAVIORS::MYSQL);
if ($isMysql) {
// Clear records
$deleteMySQL = true;
$mysqlMasterServer = null;
$mysqlSlaves = 0;
$servers = $this->DB->Execute("\n SELECT server_id, local_ip, remote_ip\n FROM servers\n WHERE `farm_roleid` = ? and `status`=?\n ", [$server->farmRoleId, SERVER_STATUS::RUNNING]);
while ($s = $servers->FetchRow()) {
if ($this->DB->GetOne("SELECT value FROM server_properties WHERE server_id = ? AND name = ? LIMIT 1", array($s['server_id'], \SERVER_PROPERTIES::DB_MYSQL_MASTER)) == 1) {
$records[] = array("int.master.mysql", $s['local_ip'], $s['server_id'], 'mysql');
$records[] = array("ext.master.mysql", $s['remote_ip'], $s['server_id'], 'mysql');
$mysqlMasterServer = $s;
} else {
$records[] = array("int.slave.mysql", $s['local_ip'], $s['server_id'], 'mysql');
$records[] = array("ext.slave.mysql", $s['remote_ip'], $s['server_id'], 'mysql');
$mysqlSlaves++;
}
$records[] = array("int.mysql", $s['local_ip'], $s['server_id'], 'mysql');
$records[] = array("ext.mysql", $s['remote_ip'], $s['server_id'], 'mysql');
}
if ($mysqlSlaves == 0 && $mysqlMasterServer) {
$records[] = array("int.slave.mysql", $mysqlMasterServer['local_ip'], $mysqlMasterServer['server_id'], 'mysql');
$records[] = array("ext.slave.mysql", $mysqlMasterServer['remote_ip'], $mysqlMasterServer['server_id'], 'mysql');
}
}
$dbmsr = $dbRole->getDbMsrBehavior();
if ($dbmsr) {
$recordPrefix = $dbmsr;
// Clear records
$deleteDbMsr = true;
$mysqlMasterServer = null;
$mysqlSlaves = 0;
$servers = $this->DB->Execute("\n SELECT server_id, local_ip, remote_ip\n FROM servers\n WHERE `farm_roleid` = ?\n AND `status`=?\n ", [$server->farmRoleId, SERVER_STATUS::RUNNING]);
while ($s = $servers->FetchRow()) {
if ($this->DB->GetOne("\n SELECT value FROM server_properties\n WHERE server_id = ? AND name = ? LIMIT 1\n ", [$s['server_id'], \Scalr_Db_Msr::REPLICATION_MASTER]) == 1) {
$records[] = array("int.master.{$recordPrefix}", $s['local_ip'], $s['server_id'], $dbmsr);
$records[] = array("ext.master.{$recordPrefix}", $s['remote_ip'], $s['server_id'], $dbmsr);
$mysqlMasterServer = $s;
} else {
$records[] = array("int.slave.{$recordPrefix}", $s['local_ip'], $s['server_id'], $dbmsr);
$records[] = array("ext.slave.{$recordPrefix}", $s['remote_ip'], $s['server_id'], $dbmsr);
$mysqlSlaves++;
}
$records[] = array("int.{$recordPrefix}", $s['local_ip'], $s['server_id'], $dbmsr);
$records[] = array("ext.{$recordPrefix}", $s['remote_ip'], $s['server_id'], $dbmsr);
}
if ($mysqlSlaves == 0 && $mysqlMasterServer) {
$records[] = array("int.slave.{$recordPrefix}", $mysqlMasterServer['local_ip'], $mysqlMasterServer['server_id'], $dbmsr);
$records[] = array("ext.slave.{$recordPrefix}", $mysqlMasterServer['remote_ip'], $mysqlMasterServer['server_id'], $dbmsr);
}
}
}
/*
foreach ($cnameRecords as $cr) {
$this->DB->Execute("INSERT INTO powerdns.records SET
`domain_id`=?, `name`=?, `type`=?, `content`=?, `ttl`=?, `server_id`=?, `service`=?
",
array($domainId, "$cr[0].{$domainName}", "CNAME", "{$cr[1]}", 20, $cr[2], $cr[3]));
}
*/
$pdnsDb->Execute("DELETE FROM records WHERE server_id = ?", array($serverId));
if ($deleteMySQL) {
$pdnsDb->Execute("DELETE FROM records WHERE `service` = ? AND domain_id = ?", array('mysql', $domainId));
}
if ($deleteDbMsr) {
$pdnsDb->Execute("DELETE FROM records WHERE `service` = ? AND domain_id = ?", array($dbmsr, $domainId));
}
if (count($records) > 0) {
foreach ($records as $r) {
$pdnsDb->Execute("\n INSERT INTO records\n SET `domain_id`=?,\n `name`=?,\n `type`=?,\n `content`=?,\n `ttl`=?,\n `server_id`=?,\n `service`=?\n ", [$domainId, "{$r['0']}.{$domainName}", "A", "{$r[1]}", 20, $r[2], count($r) == 4 ? $r[3] : null]);
}
}
} catch (Exception $e) {
throw $e;
}
}