public function onCompleted()
{
if (!\Scalr::config('scalr.dns.global.enabled')) {
return true;
}
$db = \Scalr::getDb();
$remoteBind = new Scalr_Net_Dns_Bind_RemoteBind();
$transport = new Scalr_Net_Dns_Bind_Transports_LocalFs('/usr/sbin/rndc', '/var/named/etc/namedb/client_zones');
$remoteBind->setTransport($transport);
$zones = $db->GetAll("SELECT id FROM dns_zones WHERE iszoneconfigmodified = '1'");
$s_zones = [];
if (count($zones) != 0) {
foreach ($zones as $zone) {
$DBDNSZone = DBDNSZone::loadById($zone['id']);
switch ($DBDNSZone->status) {
case DNS_ZONE_STATUS::PENDING_DELETE:
case DNS_ZONE_STATUS::INACTIVE:
$remoteBind->removeZoneFromNamedConf($DBDNSZone->zoneName);
break;
default:
$remoteBind->addZoneToNamedConf($DBDNSZone->zoneName, $DBDNSZone->getContents(true));
$DBDNSZone->status = DNS_ZONE_STATUS::ACTIVE;
break;
}
$s_zones[] = $DBDNSZone;
}
$remoteBind->saveNamedConf();
foreach ($s_zones as $DBDNSZone) {
if ($DBDNSZone->status == DNS_ZONE_STATUS::PENDING_DELETE) {
$DBDNSZone->remove();
} else {
if ($DBDNSZone->status == DNS_ZONE_STATUS::INACTIVE) {
$DBDNSZone->isOnNsServer = 0;
} else {
$DBDNSZone->isOnNsServer = 1;
}
$DBDNSZone->isZoneConfigModified = 0;
$DBDNSZone->save();
}
}
}
$remoteBind->reloadBind();
}