Hulpartikel overzicht

Hulpartikel

TransIP REST API: automatische snapshots maken

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.

    <?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_NAME = 'auto_snapshot';
    
        /**
         * @var TransipAPI
         */
        private $transipApi;
    
        public function __construct()
        {
            $this--->transipApi = new TransipAPI(
                self::TRANSIP_LOGIN,
                self::TRANSIP_PRIVATE_KEY,
                false
            );
        }
    
        public function run()
        {
            $vps = $this->getVps(self::VPS_NAME);
    
            if ($vps->isCustomerLocked()) {
                return;
            }
            
            $snapshot = $this->getSnapshotByDescription(self::VPS_NAME, self::SNAPSHOT_NAME);
            
            if ($snapshot !== null) {
                if ($this->waitForVpsLock(self::VPS_NAME) == false) {
                    return;
                }
                
                $this->removeSnapshot(self::VPS_NAME, self::SNAPSHOT_NAME);
            }
    
            if ($this->waitForVpsLock(self::VPS_NAME) == false) {
                return;
            }
    
            $this->createSnapshot(self::VPS_NAME, self::SNAPSHOT_NAME);
        }
    
        private function getVps(string $vpsName): Vps
        {
            return $this->transipApi->vps()->getByName($vpsName);
        }
    
        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 createSnapshot(string $vpsName, string $snapshotName): void
        {
            $this->transipApi->vpsSnapshots()->createSnapshot($vpsName, $snapshotName);
        }
    
        private function removeSnapshot(string $vpsName, string $snapshotName): void
        {
            $this->transipApi->vpsSnapshots()->deleteSnapshot($vpsName, $snapshotName);
        }
    
        private function waitForVpsLock(string $vpsName): bool
        {
            for ($i =0; $i < 20; $i++) {
                $vps = $this->getVps($vpsName);
                if (!$vps->isLocked()) {
                    return true;
                }
                sleep(5);
            }
    
            return false;
        }
    }
    
    (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.
    Toelichting
    • Onze API-voorbeelden op Gitlab zijn vrij eenvoudig in opzet. In dit voorbeeld gebruiken we object oriented programming. De ins-en outs hiervan vallen buiten de scope van deze handleiding.
       
    • De class vpsAutoSnapshot verzorgt het automatisch aanmaken van snapshots. Hiertoe is het van boven naar beneden opgebouwd uit de volgende delen:
      • diverse constants waarin je TransIP-accountnaam, API-key, de gewenste VPS en de naam van de snapshot zijn opgegeven
      • __construct maakt een verbinding met de Rest-API. De beschikbare opties die je mee kunt geven vind je hier.
      • De functie 'run' maakt de snapshot aan. Hiervoor wordt een aantal functies aangeroepen die onder de 'run' functie worden gedefinieerd:
      • getvps: haalt uit alle beschikbare VPS'en in je account de VPS met de naam gedefinieerd in VPS_NAME op.
      • getSnapshotByDescription: haalt een lijst van snapshots op die aanwezig zijn bij de gedefinieerde VPS.
      • createSnapshot: maakt een nieuwe snapshot aan
      • removeSnapshot: verwijdert snapshots. Deze functie wordt gebruikt in de run-functie om bestaande snapshots te verwijderen zodat de nieuwe aangemaakt kan worden.
      • waitForVpsLock: controleert of er door danwel een intern proces vanuit TransIP (e.g. de migratie van een VPS) of door een eigen handeling (e.g. een VPS lock, of bijvoorbeeld het terugzetten van een back-up) er tijdelijk geen bewerking kan worden uitgevoerd op de VPS.

     

    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.

    Wil je dit artikel met andere gebruikers bespreken, laat dan vooral een bericht achter onder 'Reacties'.

    Probeer BladeVPS een maand gratis

    Maak van jouw volgende website of applicatie een succes op BladeVPS PureSSD. Probeer direct of een self-managed VPS iets voor jou is; de eerste maand krijg je van ons :-)!

    Start nu je gratis maand

    Heb je ook een goed idee?

    Stuur jouw idee in! Met genoeg stemmen komt jouw idee op onze wishlist!

    Heeft dit artikel je geholpen?

    Maak een account aan of log in om een beoordeling achter te laten.

    Reacties

    Maak een account aan of log in om een reactie te plaatsen.

    Kom je er niet uit?

    Ontvang persoonlijke hulp van onze supporters

    Neem contact op