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 en welke opties je moet/kunt aanpassen.

    <?php
    
    require_once(__DIR__ . '/Authenticate.php');
    
    $vps='jeaccount-vps1';
    $SnapshotDescription='auto_snapshot';
    
    function WaitForLock($api, $vps)
    {
        for($x=1; $x<=60; $X++){
            $VpsInfo = $api->vps()->getByName($vps);
            if ($VpsInfo->isLocked == true) {
                sleep(10);
            } else {
                Exit;
                break;
            }
        }
    }
    
    // If the VPS is locked in your control panel, write an error and exit script.
    
    $VpsInfo = $api->vps()->getByName($vps);
    
    if ($VpsInfo->isCustomerLocked == true) {
         echo "VPS is locked in your control panel. A snapshot can only be created or modified if your VPS is unlocked.";
    } else {
    
    // Checks if the TransIP backend is locking the VPS, for example if your VPS is migrated automatically.
    WaitForLock($api, $vps);
    
    // If there are any snapshots, get them and look for $SnapshotDescription
    
        if ($VpsInfo->getCurrentSnapshots() > 0) {
            $Snapshots = $api->vpsSnapshots()->getByVpsName($vps);
            foreach ($Snapshots as $snapshot) {
                if ($snapshot->getDescription() == $SnapshotDescription) {
                    $api->vpsSnapshots()->deleteSnapshot($vps, $snapshot->getName());
                    WaitForLock($api, $vps);
                }
            }
         }
         
         // remove the line $api->vps()->stop($vps) and WaitForLock; if you don't want your VPS to be restarted
         $api->vps()->stop($vps);
         WaitForLock($api, $vps);
         $api->vpsSnapshots()->createSnapshot($vps, $SnapshotDescription);
         echo "$(date +"%m-%d-%y %T") Snapshot created succesfully"
    }
    

    TL;DR

    • Pas $vps en $SnapshotDescription aan.
    • Wil je niet dat je VPS herstart tijdens dit proces? Verwijder dan aan het eind $api->vps()->stop($vps); en WaitForLock($api, $vps);
    Toelichting
    • Voor de authenticatie gebruiken we een bestand genaamd Authenticate.php. Je bent echter vrij de authenticatie rechtstreeks in dit bestand te verwerken. Zie deze handleiding voor meer informatie over het opzetten van authenticatie met de API.
       
    • Pas de volgende waardes aan in het script:
      • $vps: Pas de naam van de VPS aan naar de naam (niet de description) van de VPS waarvan je de snapshots wil automatiseren.
      • $SnapshotDescription: De omschrijving die je de automatische snapshots wil meegeven.
         
    • WaitForLock(): Er zijn momenten waarop je VPS door onze systemen wordt gelocked en geen bewerkingen uitgevoerd kunnen worden. Dit gebeurt bijvoorbeeld als je de VPS uit/aan zet, of een snapshot maakt/verwijdert. Er loopt dan een workflow in onze back-end en zolang die loopt, is de lock actief op je VPS. Veel van dit soort workflows duren nog geen minuut (een snapshot maken is een uitzondering). De WaitForLock-functie is daarom ingesteld om elke 10 seconden te controleren of het script verder kan. Kan dat na 10 minuten nog niet, dan stopt het script.
       
    • Vervolgens controleert het script via if ($VpsInfo->isCustomerLocked == true) of er een VPS-lock actief is. Zo ja, dan kan er geen snapshot gemaakt worden en stopt het script. Daarna wordt via de WaitForLock-functie gekeken of er een lock is als gevolg van een nog lopend proces in onze back-end.
       
    • Het script kijkt in het stuk dat begint met if ($VpsInfo->getCurrentSnapshots() > 0) of er snapshots aanwezig zijn, en zo ja, of de snapshot dezelfde description heeft als $SnapshotDescription. Is dat het geval, dan wordt eerst de bestaande snapshot verwijdert en wordt via de WaitForLock-functie gewacht tot de snapshot verwijdert is.
       
    • Tot slot wordt de VPS uit gezet, gewacht tot de VPS uit staat en daarna de snapshot aangemaakt. De VPS start bij het aanmaken automatisch. Door de VPS uit te zetten wordt de snapshot in enkele seconden aangemaakt en herstart daarna je VPS automatisch. Wil je geen downtime? Verwijder dan de code voor het uitzetten van de VPS en de WaitForLock code er onder. Het maken van de snapshot zal dan mogelijk wel enkele uren duren en niet opgeslagen werk wordt niet meegenomen in de snapshot.

     

    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