The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
use strict;
use warnings;
use 5.010_000;
use Net::RackSpace::CloudServers;
use Net::RackSpace::CloudServers::Server;
use Net::RackSpace::CloudServers::Image;

my $user = $ENV{'CLOUDSERVERS_USER'}
  or die "Need CLOUDSERVERS_USER environment variable set";
my $key = $ENV{'CLOUDSERVERS_KEY'}
  or die "Need CLOUDSERVERS_KEY environment variable set";

my $serverid = shift or die "$0: need server id\n";
my $imgname = "@ARGV";
die "Need a name for the new image\n" unless $imgname;

my $CS = Net::RackSpace::CloudServers->new(
    user => $user,
    key  => $key,
);
$Net::RackSpace::CloudServers::DEBUG         = 0;
$Net::RackSpace::CloudServers::Server::DEBUG = 0;
my $server;
{
    my @servers = $CS->get_server_detail($serverid);
    die "Server id $serverid not found; exiting\n" unless @servers;
    $server = $servers[0];
}
my $img      = $server->create_image($imgname);
my $newimgid = $img->id;

say "Image ID ", $img->id, " created from server id ", $img->serverid;
say "Named '", $img->name, "', status ", $img->status;
say "The image will need to be ACTIVE before being able to be used.";
say "Rackspace's caching may prevent you from getting an up-to-date status.";