Scalr\Observer\DNSEventObserver::updateSystemZone PHP Метод

updateSystemZone() приватный Метод

Updates System Zone
private updateSystemZone ( string $serverId, integer $farmId, boolean $resetAllSystemRecords = false, boolean $skipStatusCheck = false )
$serverId string The identifier of the Server
$farmId integer The identifier of the Farm
$resetAllSystemRecords boolean optional
$skipStatusCheck boolean optional
    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;
        }
    }