In deze handleiding laten wij zien hoe je met behulp van de TransIP REST API via een PHP-script en een cronjob automatisch snapshots maakt van een VPS op een vast tijdstip.
Voor de stappen in deze handleiding is het belangrijk dat in je controlepaneel de API is ingeschakeld en dat de authenticatie met de API is geconfigureerd.
Stap 1
Open/maak een PHP-script aan waarin je de automatische snapshots inricht, bijvoorbeeld:
nano ~/snapshot.php
Stap 2
Geef het script de inhoud hieronder. Klik onder de code op 'Toelichting' voor een nadere uitleg over deze opzet.
Let op: Het script controleert alleen of er snapshots bestaan met de naam die je opgeeft achter 'SNAPSHOT_DESCRIPTION'. Zo voorkom je dat als je twee of meer snapshots gebruikt, eventuele andere snapshots met andere descriptions verwijdert worden. Gebruik je voor je dit script uitvoert één snapshot en heeft die een andere description dan de waarde van 'SNAPSHOT_DESCRIPTION'? Verwijder die dan eerst voor je dit script uitvoert.
<?php
require_once(__DIR__ . '/../vendor/autoload.php');
use Transip\Api\Library\TransipAPI;
use Transip\Api\Library\Entity\Vps;
use Transip\Api\Library\Entity\Vps\Snapshot;
class vpsAutoSnapshot
{
private const TRANSIP_LOGIN = 'jeaccount';
private const TRANSIP_PRIVATE_KEY = '';
private const VPS_NAME = 'jeaccount-vps';
private const SNAPSHOT_DESCRIPTION = 'auto_snapshot';
/**
* @var TransipAPI
*/
private $transipApi;
public function __construct()
{
$this->transipApi = new TransipAPI(
self::TRANSIP_LOGIN,
self::TRANSIP_PRIVATE_KEY,
false
);
}
public function run(): void
{
if ($this->vpsIsLocked(self::VPS_NAME)) {
return; // vps is locked, don't continue
}
$snapshot = $this->getSnapshotByDescription(self::VPS_NAME, self::SNAPSHOT_DESCRIPTION);
if ($snapshot !== null) {
$this->transipApi->vpsSnapshots()->deleteSnapshot(self::VPS_NAME, $snapshot->getName());
}
$this->waitForVpsToUnlock();
$this->transipApi->vpsSnapshots()->createSnapshot(self::VPS_NAME, self::SNAPSHOT_DESCRIPTION);
}
private function vpsIsLocked(string $vpsName): bool
{
$vps = $this->transipApi->vps()->getByName($vpsName);
return ($vps->isCustomerLocked() || $vps->isLocked());
}
private function getSnapshotByDescription(string $vpsName, string $snapshotDescription): ?Snapshot
{
$snapshots = $this->transipApi->vpsSnapshots()->getByVpsName($vpsName);
foreach ($snapshots as $snapshot) {
if ($snapshot->getDescription() == $snapshotDescription) {
return $snapshot;
}
}
return null;
}
private function waitForVpsToUnlock(): void
{
$sleepCount = 0;
while ($this->vpsIsLocked(self::VPS_NAME)) {
if ($sleepCount > 10) {
throw new \RuntimeException('Try out threshold reached, VPS has been locked for more than 2 minutes');
}
sleep(10);
$sleepCount++;
}
}
}
(new vpsAutoSnapshot)->run();
TL;DR
- Vervang 'jeaccount' door de naam van je TransIP-account.
- Geef je private key op achter TRANSIP_PRIVATE_KEY tussen de haakjes.
- Vervang jeaccount-vps door de naam (niet je eigen omschrijving) van de VPS waar je een snapshot van wil maken.
Stap 3
Open crontab met het commando:
crontab -e
Stap 4
Voeg onderstaande regel toe onderaan de crontab. Pas de tijd aan naar het gewenste moment waarop je de snapshot wil laten maken (in dit voorbeeld 1 uur 's nachts iedere zondag). Voor meer informatie over het instellen van een cronjob, zie deze handleiding.
* 1 * * 0 ~/snapshot.php
Sla de wijzigingen op en sluit crontab (ctrl + x > y > enter, of :wq! afhankelijk van de editor die je gebruikt).
Daarmee zijn we aan het eind gekomen van deze handleiding voor het automatisch maken van snapshots voor VPS'en.
Mocht je aan de hand van deze handleiding nog vragen hebben, aarzel dan niet om onze supportafdeling te benaderen. Je kunt hen bereiken via de knop 'Neem contact op' onderaan deze pagina.