Net-RackSpace-CloudServers

 view release on metacpan or  search on metacpan

lib/Net/RackSpace/CloudServers/Server.pm  view on Meta::CPAN

package Net::RackSpace::CloudServers::Server;
$Net::RackSpace::CloudServers::Server::VERSION = '0.15';
use warnings;
use strict;
our $DEBUG = 0;
use Any::Moose;
use HTTP::Request;
use JSON;
use YAML;
use Net::RackSpace::CloudServers::Image;
use Carp;

has 'cloudservers' =>
    (is => 'rw', isa => 'Net::RackSpace::CloudServers', required => 1);
has 'id' => (is => 'ro', isa => 'Int', required => 1, default => 0);
has 'name'     => (is => 'ro', isa => 'Str',        required => 1);
has 'imageid'  => (is => 'ro', isa => 'Maybe[Int]', required => 1);
has 'flavorid' => (is => 'ro', isa => 'Maybe[Int]', required => 1);
has 'hostid' =>
    (is => 'ro', isa => 'Maybe[Str]', required => 1, default => undef);
has 'status' =>
    (is => 'ro', isa => 'Maybe[Str]', required => 1, default => undef);
has 'adminpass' =>
    (is => 'ro', isa => 'Maybe[Str]', required => 1, default => undef);
has 'progress' =>
    (is => 'ro', isa => 'Maybe[Str]', required => 1, default => undef);
has 'public_address' => (
    is       => 'ro',
    isa      => 'Maybe[ArrayRef[Str]]',
    required => 1,
    default  => undef
);
has 'private_address' => (
    is       => 'ro',
    isa      => 'Maybe[ArrayRef[Str]]',
    required => 1,
    default  => undef
);
has 'metadata' =>
    (is => 'ro', isa => 'Maybe[HashRef]', required => 1, default => undef);
has 'personality' =>
    (is => 'ro', isa => 'Maybe[ArrayRef]', required => 1, default => undef);

no Any::Moose;
__PACKAGE__->meta->make_immutable();

sub change_root_password {
    my $self     = shift;
    my $password = shift;
    my $uri      = '/servers/' . $self->id;
    my $request  = HTTP::Request->new(
        'PUT',
        $self->cloudservers->server_management_url . $uri,
        [
            'X-Auth-Token' => $self->cloudservers->token,
            'Content-Type' => 'application/json',
        ],
        to_json({ server => { adminPass => $password, } }));
    my $response = $self->cloudservers->_request($request);
    confess 'Unknown error' if $response->code != 202;
    return $response;
}

sub change_name {
    my $self    = shift;
    my $name    = shift;
    my $uri     = '/servers/' . $self->id;
    my $request = HTTP::Request->new(
        'PUT',
        $self->cloudservers->server_management_url . $uri,
        [
            'X-Auth-Token' => $self->cloudservers->token,
            'Content-Type' => 'application/json',
        ],
        to_json({ server => { name => $name, } }));
    my $response = $self->cloudservers->_request($request);
    confess 'Unknown error' if $response->code != 202;
    return $response;
}

sub delete_server {
    my $self    = shift;
    my $request = HTTP::Request->new(
        'DELETE',
        $self->cloudservers->server_management_url . '/servers/' . $self->id,
        [
            'X-Auth-Token' => $self->cloudservers->token,
            'Content-Type' => 'application/json',
        ],
    );
    my $response = $self->cloudservers->_request($request);
    confess 'Unknown error' if $response->code != 202;
    return;
}

sub create_image {
    my $self    = shift;
    my $imgname = shift;
    my $request = HTTP::Request->new(
        'POST',
        $self->cloudservers->server_management_url . '/images',
        [



( run in 1.294 second using v1.01-cache-2.11-cpan-39bf76dae61 )