X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FOyster%2FProvision%2FRackspace.pm;h=10f92fd41cd93561cdad81f7d8db5de96985d32f;hb=355db0c8c7f54f982795764a045fb2debeda0ec4;hp=e9c83984b18da366d2909252e61ac9d3f36461a3;hpb=1f1bb35ee6999b168b62a42a9cd89998b19ce7d7;p=p5sagit%2FOyster.git diff --git a/lib/Oyster/Provision/Rackspace.pm b/lib/Oyster/Provision/Rackspace.pm index e9c8398..10f92fd 100644 --- a/lib/Oyster/Provision/Rackspace.pm +++ b/lib/Oyster/Provision/Rackspace.pm @@ -7,31 +7,27 @@ use MIME::Base64; requires 'config'; -has 'api_username' => ( is => 'ro', isa => 'Str', required => 1, default => sub { - return $ENV{RACKSPACE_USER} if exists $ENV{RACKSPACE_USER}; - confess "Need api_username or RACKSPACE_USER in environment"; -}); -has 'api_key' => ( is => 'ro', isa => 'Str', required => 1, default => sub { - return $ENV{RACKSPACE_KEY} if exists $ENV{RACKSPACE_KEY}; - confess "Need api_key or RACKSPACE_KEY in environment"; -}); +has 'api_username' => ( is => 'ro', isa => 'Str', required => 1, lazy_build => 1); +sub _build_api_username { + return $ENV{CLOUDSERVERS_USER} if exists $ENV{CLOUDSERVERS_USER}; + confess "Need api_username or CLOUDSERVERS_USER in environment"; +} + +has 'api_password' => ( is => 'ro', isa => 'Str', required => 1, lazy_build => 1); +sub _build_api_password { + return $ENV{CLOUDSERVERS_KEY} if exists $ENV{CLOUDSERVERS_KEY}; + confess "Need api_password or CLOUDSERVERS_KEY in environment"; +} has '_rs' => ( is => 'rw', isa => 'Net::RackSpace::CloudServers', default => sub { my $self = shift; my $rs = Net::RackSpace::CloudServers->new( user => $self->api_username, - key => $self->api_key, + key => $self->api_password, ); $rs; }); -sub BUILD { - my $self = shift; - # get api username and key from config? - my $config = $self->config; - # ... -} - sub create { my $self = shift; @@ -51,21 +47,32 @@ sub create { # Build the server my $server = Net::RackSpace::CloudServers::Server->new( - cloudservers => $self->_cs, - name => $self->name, - flavor => $self->size, - image => $self->image, - personality => [ + cloudservers => $self->_rs, + name => $self->name, + flavorid => $self->size, + imageid => $self->image, + personality => [ { path => $self->pub_ssh, contents => encode_base64($pub_ssh), }, - ], + ], ); - $server->create_server; - - warn "Server public IP is: ", ($server->public_address)[0], "\n"; - warn "Server root password: ", $server->adminpass, "\n"; + my $newserver = $server->create_server; + warn "Server root password: ", $newserver->adminpass, "\n"; + + do { + $|=1; + my @tmpservers = $self->_rs->get_server_detail(); + $server = ( grep { $_->name eq $self->name } @tmpservers )[0]; + print "\rServer status: ", ($server->status || '?'), " progress: ", ($server->progress || '?'); + if ( ( $server->status // '' ) ne 'ACTIVE' ) { + print " sleeping.."; + sleep 2; + } + } while ( ( $server->status // '' ) ne 'ACTIVE' ); + + warn "Server public IP is: @{$server->public_address}\n"; # Connect to server and execute installation routines? # Use Net::SSH? @@ -111,7 +118,9 @@ The following are required to instantiate a backend: The rackspace API username, or C<$ENV{RACKSPACE_USER}> will be used if that is not given -=item api_key +=item password + +This is your rackspace API Key The rackspace API key, or C<$ENV{RACKSPACE_KEY}> will be used if that is not given