La synchronisation horaire est souvent un élément important dans une infrastructure.
En cas de disparités, on peut rencontrer des problèmes. Par exemple, un trop forte désynchronisation peut poser des problèmes d’authentification avec les services Kerberos de Windows.
Mais il est compliqué aussi de rechercher des éléments simultanés dans les logs de plusieurs serveurs s’ils ne sont pas à la même heure.

Il est déjà assez compliqué de travailler avec des serveurs dans différents fuseaux horaires, alors que les écarts sont en heures entières, mais ça devient ingérable lorsqu’il faut tenir compte de décalages en minutes et secondes.
J’ai eu récemment l’occasion de travailler pour un client international dont toute l’infrastructure travaillait en UTC. Finalement ce n’est pas une mauvaise idée. Tous les serveurs sont synchro. Bien entendu, il faut tenir compte des fuseaux horaires pour déclencher certaines tâche (un backup de fin de journée se fera à 22h UTC à Paris mais à 13h UTC à Las Vegas).

Pour ce script, je n’ai pas pris la peine de tester la configuration existante, car ça allait bien vite de l’écraser, même si elle était déjà correcte. En échange, pour une fois j’ai commenté le script étape par étape, pour bien différencier les différents éléments à configurer.


Variables

Deux variables sont initialisées dans les 2 premières lignes.

$EsxHosts : contient la liste des hosts ESXi à contrôler.
Elle est initialisée par une requête pour lister par exemple un host, les hosts d’un cluster, ou tous les hosts connus du vCenter.

$EsxHosts = Get-VMHost host01.infra.local
$EsxHosts = Get-Cluster | Get-VMHost | Sort-Object -Property Name
$EsxHosts = Get-VMHost | Sort-Object -Property Name

$NTPServers : Liste des serveurs NTP à utiliser.

$NTPServers = "10.20.20.2","10.20.20.3"

Script

$EsxHosts = Get-VMHost | Sort-Object -Property Name
$NTPServers = "10.20.20.2","10.20.20.3"
Foreach ($EsxHost in $EsxHosts)
{
   Write-Host $EsxHost.Name -ForegroundColor Red
   Write-Host "- Opening Firewall..." -ForegroundColor Yellow
   $Resule = $EsxHost | Get-VMHostFirewallException -Name "NTP Client" | Set-VMHostFirewallException -Enabled:$true
   Write-Host "- Synchronizing ESXi with local time to avoid too large gap for NTP..." -ForegroundColor Yellow
   $EsxHost | Where-Object {
      $LocalDateTime = Get-Date
      $HostDateTime = $_ | ForEach-Object { Get-View $_.ExtensionData.ConfigManager.DateTimeSystem }
      $HostDateTime.UpdateDateTime((Get-Date($LocalDateTime.ToUniversalTime()) -Format u))
   }
   Write-Host "- Removing existing NTP servers..." -ForegroundColor Yellow
   $CurrentNTP = $EsxHost | Get-VMHostNTPServer
   $Result = $EsxHosts | Remove-VMHostNTPServer -NtpServer $CurrentNTP -Confirm:$false
   Write-Host "- Configuring NTP servers..." -ForegroundColor Yellow
   $Result = $EsxHost | Add-VMHostNTPServer -NtpServer $NTPServers -Confirm:$false
   Write-Host "- Starting NTP service..." -ForegroundColor Yellow
   $Result = $EsxHost | Get-VmHostService | Where-Object {$_.key -eq "ntpd"} | Start-VMHostService
   Write-Host "- Configing NTP service to start with host..." -ForegroundColor Yellow
   $Result = $EsxHost | Get-VMHostService | Where-Object {$_.Key -eq "ntpd"} | Set-VMHostService -Policy "on" -Confirm:$false
   Write-Host "- Restarting NTP service..." -ForegroundColor Yellow
   $Result = $EsxHost | Get-VMHostService | Where-Object {$_.Key -eq "ntpd"} | Restart-VMHostService -Confirm:$false
}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *