<?php

/**
 * Script de bascule d'une IP failover entre 2 serveurs OVH
 *
 * S'appelle ainsi :
 *  php script.php srv-old srv-cible
 *
 * Le fichier .auth-api-ovh.ini permet de stocker les identifiants de connexion
 * et ressemble à :
 *  login = xxNNNNN-ovh
 *  password = xxxxxxxxxxxxxxx
 *
 * FIXME: seul hostnameOvh est nécessaire : faire sauter la conf. et passer
 *        les noms des serveurs en argument.
 */

/* Config */
$failoverIp = 'ip.fa.il.ov.er';
$listeServeurs = array(
	'srv1' => array(
		'hostnameOvh' => 'ns111111.ovh.net',
		'ip' => '1.1.1.1',
		),
	'srv2' => array(
		'hostnameOvh' => 'ns222222.ovh.net',
		'ip' => '2.2.2.2',
		),
	);



if ( ! ($identifiants = parse_ini_file('.auth-api-ovh.ini'))) {
    echo "ERREUR : Impossible de récupérer les identifiants de connexion à l'API OVH.\n";
    exit(1);
}

// Vérification des arguments
if (empty($argv[1]) or ! in_array($argv[1], array_keys($listeServeurs))) {
 echo "ERREUR : veuillez spécifier le serveur sur lequel pointe actuellement l'IP failover : " . implode(', ', array_keys($listeServeurs)) . "\n";
 exit(1);
}
if (empty($argv[2]) or ! in_array($argv[2], array_keys($listeServeurs))) {
 echo "ERREUR : veuillez spécifier le serveur vers lequel rediriger l'IP failover : " . implode(', ', array_keys($listeServeurs)) . "\n";
 exit(1);
}
$serveurActuel = $argv[1];
$serveurDestination = $argv[2];
if ($serveurActuel == $serveurDestination) {
 echo "ERREUR : serveur actuel identique au serveur de destination.\n";
 exit(1);
}

try {
 $soap = new SoapClient("https://www.ovh.com/soapi/soapi-re-1.59.wsdl");

 //login
 $session = $soap->login($identifiants['login'], $identifiants['password'],"fr", false);

 // Changement de pointage de l'IP failover
 // doc : http://www.ovh.com/soapi/fr/?method=dedicatedFailoverUpdate
 $soap->dedicatedFailoverUpdate($session, $listeServeurs[$serveurActuel]['hostnameOvh'], $failoverIp, $listeServeurs[$serveurDestination]['ip']);

 //logout
 $soap->logout($session);

} catch(SoapFault $fault) {
 echo $fault;
 exit(1);
}

// Code de retour Ok
exit(0);