Skip to content

Commit

Permalink
Can now show or delete a server by name in oscompute.
Browse files Browse the repository at this point in the history
  • Loading branch information
ironcamel committed Jan 14, 2012
1 parent d3c0d8a commit 8f262e5
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 25 deletions.
3 changes: 3 additions & 0 deletions Changes
@@ -1,5 +1,8 @@
Revision history for Net-OpenStack-Compute

1.0400 2012-01-14
Can now show or delete a server by name in oscompute.

1.0302 2012-01-03
Added token() and base_url() methods.

Expand Down
46 changes: 31 additions & 15 deletions bin/oscompute
Expand Up @@ -23,21 +23,21 @@ sub setup {
Server commands:
server [list]
server show [<id>]
server show <id|name>
server create <name> <flavor> <image>
server delete <id>
server delete <id|name>
Image commands:
image [list]
image show [<id>]
image show <id>
image create <name> <server-id>
image delete <id>
Flavor commands:
flavor [list]
flavor show [<id>]
flavor show <id>
EOD

my $msg = "%s env var is missing. Did you forget to source novarc?\n";
Expand Down Expand Up @@ -72,9 +72,12 @@ sub server {
}
when ('show') {
die "Usage: $0 server show <id>\n" unless @args == 1;
my $s = $compute->get_server($args[0]);
my $id = $args[0];
my $s = $compute->get_server($id);
$s = $compute->get_servers_by_name($id)->[0] unless $s;
return 'No such server' unless $s;
return _to_json($s) if $c->options->{verbose};
return $s ? _format_servers($s) : 'No such server';
return _format_servers($s);
}
when ('create') {
die "Usage: $0 server create <name> <flavor> <image>\n"
Expand All @@ -88,8 +91,12 @@ sub server {
when ('delete') {
die "Usage: $0 server delete <id>\n" unless @args == 1;
my ($id) = @args;
$compute->delete_server($id);
return "Server $id has been marked for deletion";
if (not $compute->delete_server($id)) {
my $s = $compute->get_servers_by_name($id)->[0];
return "Could not delete server $id"
unless $s and $compute->delete_server($s->{id});
}
return "Server $id has been marked for deletion.";
}
default {
die "Supported server commands are list, show, create and delete."
Expand Down Expand Up @@ -220,25 +227,34 @@ sub _to_json {
Usage: oscompute command [arguments]
Available Commands:
flavor flavor [--verbose|-v] [show [<id>]]
f alias for flavor
flavor perform flavor actions
help show syntax and available commands
image image [--verbose|-v] [show [<id>]] [create <name> <server-id>] [delete <id>]
server server [--verbose|-v] [show [<id>]] [create <name> <flavor> <image>] [delete <id>]
i alias for image
image perform image actions
s alias for server
server perform server actions
Examples:
# List all servers.
oscompute s
# Same thing.
oscompute server
# Same thing.
oscompute server show
oscompute server list
# Show all details.
oscompute server -v show
oscompute server -v list
# Show info for a particular server.
# Show info for a particular server by id.
oscompute server show ec05b52e-f575-469c-a91e-7f0ddd4fab95
# Show info for a particular server by name.
oscompute server show bob
# Create a new server.
# Order of arguments are server create `name` `flavor` `image`
oscompute server create bob 1 11b2a5bf-590c-4dd4-931f-a65751a4db0e
Expand All @@ -247,7 +263,7 @@ sub _to_json {
oscompute server delete ec05b52e-f575-469c-a91e-7f0ddd4fab95
# List all available images.
oscompute image
oscompute image list
# Create a snapshot image of a given server.
oscompute image create myimg ec05b52e-f575-469c-a91e-7f0ddd4fab95
Expand Down
2 changes: 1 addition & 1 deletion dist.ini
Expand Up @@ -4,7 +4,7 @@ license = Perl_5
copyright_holder = Naveed Massjouni
copyright_year = 2011

version = 1.0302
version = 1.0400

[Prereqs]
Any::Moose = 0
Expand Down
54 changes: 45 additions & 9 deletions lib/Net/OpenStack/Compute.pm
Expand Up @@ -52,9 +52,16 @@ sub get_servers {
sub get_server {
my ($self, $id) = @_;
my $res = $self->_ua->get($self->_url("/servers/$id"));
return undef unless $res->is_success;
return from_json($res->content)->{server};
}

sub get_servers_by_name {
my ($self, $name) = @_;
my $servers = $self->get_servers(detail => 1);
return [ grep { $_->{name} eq $name } @$servers ];
}

sub create_server {
my ($self, %params) = @_;
my ($name, $flavor, $image) = @params{qw(name flavor image)};
Expand All @@ -81,8 +88,7 @@ sub delete_server {
my ($self, $id) = @_;
my $req = HTTP::Request->new(DELETE => $self->_url("/servers/$id"));
my $res = $self->_ua->request($req);
_check_res($res);
return 1;
return $res->is_success;
}

sub get_images {
Expand Down Expand Up @@ -147,7 +153,7 @@ sub _url {

sub _check_res { croak $_[0]->content unless $_[0]->is_success }

# ABSTRACT: Bindings for the OpenStack compute api.
# ABSTRACT: Bindings for the OpenStack Compute API.

=head1 SYNOPSIS
Expand All @@ -163,20 +169,29 @@ sub _check_res { croak $_[0]->content unless $_[0]->is_success }
=head1 DESCRIPTION
This is the main class responsible for interacting with OpenStack Compute.
Also see L<oscompute> for the command line tool that is a wrapper for this
class.
This class is an interface to the OpenStack Compute API.
Also see the L<oscompute> command line tool.
=head1 METHODS
=head2 get_server
get_server($id)
Returns the server with the given id or undef if it doesn't exist.
=head2 get_servers
get_servers()
get_servers(detail => 0) # Detail defaults to 1.
get_servers(detail => 1) # Detail defaults to 0.
Returns an arrayref of all the servers.
=head2 get_servers_by_name
get_servers_by_name($name)
Returns an arrayref of servers with the given name.
=head2 create_server
Expand All @@ -193,7 +208,7 @@ class.
=head2 get_images
get_images()
get_images(detail => 0) # Detail defaults to 1.
get_images(detail => 1) # Detail defaults to 0.
=head2 create_image
Expand All @@ -210,7 +225,28 @@ class.
=head2 get_flavors
get_flavors()
get_flavors(detail => 0) # Detail defaults to 1.
get_flavors(detail => 1) # Detail defaults to 0.
=head2 token
token()
Returns the OpenStack Compute API auth token.
=head2 base_url
base_url()
Returns the base url for the OpenStack Compute API, which is returned by the
server after authenticating.
=head1 SEE ALSO
=over
=item L<oscompute>
=back
=cut

Expand Down

0 comments on commit 8f262e5

Please sign in to comment.