diff --git a/lib/fog/rackspace/models/servers/server.rb b/lib/fog/rackspace/models/servers/server.rb new file mode 100644 index 000000000..4d040171f --- /dev/null +++ b/lib/fog/rackspace/models/servers/server.rb @@ -0,0 +1,49 @@ +module Fog + module Rackspace + class Server + + class Server < Fog::Model + + attribute :admin_pass, 'adminPass' + attribute :id + attribute :name + attribute :image_id, 'imageId' + attribute :flavor_id, 'flavorId' + attribute :host_id, 'hostId' + attribute :status + attribute :personality + attribute :progress + attribute :addresses + attribute :metadata + + def destroy + connection.delete_server(@id) + true + end + + def reload + new_attributes = servers.get(@id).attributes + merge_attributes(new_attributes) + end + + def save + data = connection.create_server(@flavor_id, @image_id) + merge_attributes(data.body['server']) + true + end + + def servers + @servers + end + + private + + def servers=(new_servers) + @servers = new_servers + end + + end + + end + end +end diff --git a/lib/fog/rackspace/models/servers/servers.rb b/lib/fog/rackspace/models/servers/servers.rb new file mode 100644 index 000000000..66b1cc6bd --- /dev/null +++ b/lib/fog/rackspace/models/servers/servers.rb @@ -0,0 +1,52 @@ +module Fog + module Rackspace + class Servers + + def servers + Fog::Rackspace::Servers::Servers.new(:connection => self) + end + + class Servers < Fog::Collection + + def all + data = connection.get_servers_details.body + servers = Fog::Rackspace::Servers::Servers.new({ + :connection => connection + }) + for server in data['servers'] + servers << Fog::Rackspace::Servers::Server.new({ + :connection => connection, + :servers => servers + }.merge!(server)) + end + servers + end + + def create(attributes = {}) + server = new(attributes) + server.save + server + end + + def get(id) + connection.get_server_details(id) + rescue Fog::Errors::NotFound + nil + end + + def new + Fog::Rackspace::Servers::Server.new( + :connection => connection, + :servers => self + ) + end + + def reload + get(id) + end + + end + + end + end +end diff --git a/lib/fog/rackspace/servers.rb b/lib/fog/rackspace/servers.rb index 845cd236a..fffd2fe13 100644 --- a/lib/fog/rackspace/servers.rb +++ b/lib/fog/rackspace/servers.rb @@ -3,6 +3,9 @@ module Fog class Servers def self.reload + load "fog/rackspace/models/servers/server.rb" + load "fog/rackspace/models/servers/servers.rb" + load "fog/rackspace/requests/servers/create_server.rb" load "fog/rackspace/requests/servers/delete_server.rb" load "fog/rackspace/requests/servers/get_flavors.rb"