Some ideas of how the implementation could be like
Initialisie a VM object:
use VM::JiffyBox;
my $secret_token = 'secretbla1234567890';
my $hypervisor = VM::JiffyBox->new( auth_token => $secret_token);
Get a specific box:
my $vm_id = 'master_box123';
my $vm = $hypervisor->get_vm( $vm_id );
Create a new box:
my $image = 'hfsidhfvksdhverw24ths';
my $vm = $hypervisor->create_vm( $image );
Or get all boxes:
my @vms = $hypervisor->get_vms();
Get specific ID for box-name:
my $vm_id = $hypervisor->get_id_for_name( 'KundeA' );
Do stuff with a specific box:
$vm->stop();
$vm->delete();
my $ip = $vm->get_information()->{result}->{ips}->{public}->[0];
my $ip = $vm->get_ip();
my $image = $vm->get_backup_id( 'daily' );
Forther stuff which is needed:
# tell a box a specific API-Token,
# represented with the hypervisor
$vm->set_hypervisor( $hypervisor );
# Interface for authentikation token
$hypervisor->set_auth_token( 'usfhisfh22fsfhs' );
Example how to use
This is an example how we then could use this interface:
use VM::JiffyBox;
my $jiffy = VM::JiffyBox->new( auth_token => 'geheim' );
my $box_id_A = $jiffy->get_id_for_name( 'Kunde_A' );
my $box_A = $jiffy->get_vm( $box_id_A );
my $backup_img_A = $box_A->get_backup_id( 'daily' );
my $test_box_A = $jiffy->create_vm( $backup_img_A );
my $test_ip_A = $test_box_A->get_ip();
# Do some stuff with the clone
#
# MAGIC GOES HERE (with Rex e.g.)
#
# ssh on IP and so on...
$test_box_A->stop();
$test_box_A->delete();