From e4cf9e3db905f65f506c7ff1cb9c943cce69eeec Mon Sep 17 00:00:00 2001 From: "Philip Mark M. Deazeta" Date: Mon, 14 May 2012 14:38:27 +0800 Subject: [PATCH] [openstack|volume] Added volume model --- lib/fog/openstack/models/volume/volume.rb | 46 ++++++++++++++++++++++ lib/fog/openstack/models/volume/volumes.rb | 27 +++++++++++++ lib/fog/openstack/volume.rb | 6 +-- 3 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 lib/fog/openstack/models/volume/volume.rb create mode 100644 lib/fog/openstack/models/volume/volumes.rb diff --git a/lib/fog/openstack/models/volume/volume.rb b/lib/fog/openstack/models/volume/volume.rb new file mode 100644 index 000000000..27047365c --- /dev/null +++ b/lib/fog/openstack/models/volume/volume.rb @@ -0,0 +1,46 @@ +require 'fog/core/model' + +module Fog + module Volume + class OpenStack + + class Volume < Fog::Model + + identity :id + + attribute :display_name, :aliases => 'displayName' + attribute :display_description, :aliases => 'displayDescription' + attribute :status + attribute :size + attribute :type, :aliases => 'volumeType' + attribute :snapshot_id, :aliases => 'snapshotId' + attribute :availability_zone, :aliases => 'availabilityZone' + attribute :created_at, :aliases => 'createdAt' + attribute :attachments + + + def initialize(attributes) + @connection = attributes[:connection] + super + end + + def save + requires :display_name, :size + data = connection.create_volume(display_name, display_description, size, attributes) + merge_attributes(data.body['volume']) + true + end + + def destroy + requires :id + connection.delete_volume(id) + true + end + + end + + end + end + +end + diff --git a/lib/fog/openstack/models/volume/volumes.rb b/lib/fog/openstack/models/volume/volumes.rb new file mode 100644 index 000000000..7bb8e6cda --- /dev/null +++ b/lib/fog/openstack/models/volume/volumes.rb @@ -0,0 +1,27 @@ +require 'fog/core/collection' +require 'fog/openstack/models/volume/volume' + +module Fog + module Volume + class OpenStack + + class Volumes < Fog::Collection + model Fog::Volume::OpenStack::Volume + + def all(detailed=true) + load(connection.list_volumes(detailed).body['volumes']) + end + + def find_by_id(volume_id) + if volume = connection.get_volume_details(volume_id).body['volume'] + new(volume) + end + rescue Fog::Volume::OpenStack::NotFound + nil + end + end + + end + end +end + diff --git a/lib/fog/openstack/volume.rb b/lib/fog/openstack/volume.rb index 65b8cd0b1..d62c10810 100644 --- a/lib/fog/openstack/volume.rb +++ b/lib/fog/openstack/volume.rb @@ -11,10 +11,10 @@ module Fog :openstack_api_key, :openstack_username, :current_user, :current_tenant - #model_path 'fog/openstack/models/volume' + model_path 'fog/openstack/models/volume' - #model :volume - #collection :volumes + model :volume + collection :volumes request_path 'fog/openstack/requests/volume'