openstack 1.0.7 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +16 -1
 - data/VERSION +1 -1
 - data/lib/openstack.rb +1 -0
 - data/lib/openstack/connection.rb +3 -1
 - data/lib/openstack/image/connection.rb +16 -0
 - data/lib/openstack/volume/connection.rb +41 -8
 - data/lib/openstack/volume/snapshot.rb +25 -0
 - metadata +3 -2
 
    
        data/README.rdoc
    CHANGED
    
    | 
         @@ -195,7 +195,7 @@ See the class definitions for documentation on specific methods and operations. 
     | 
|
| 
       195 
195 
     | 
    
         
             
              >> os.detach_volume(704289, 90805)
         
     | 
| 
       196 
196 
     | 
    
         
             
              => true
         
     | 
| 
       197 
197 
     | 
    
         | 
| 
       198 
     | 
    
         
            -
            == Examples for Volumes:
         
     | 
| 
      
 198 
     | 
    
         
            +
            == Examples for Volumes and Snaphots:
         
     | 
| 
       199 
199 
     | 
    
         | 
| 
       200 
200 
     | 
    
         
             
              #NOTE - attach/detach operations are implemented for the compute service as the OS API defines these operations as extensions to Openstack Compute.
         
     | 
| 
       201 
201 
     | 
    
         | 
| 
         @@ -227,6 +227,21 @@ See the class definitions for documentation on specific methods and operations. 
     | 
|
| 
       227 
227 
     | 
    
         
             
              >> vs.delete_volume(90805)
         
     | 
| 
       228 
228 
     | 
    
         
             
              => true
         
     | 
| 
       229 
229 
     | 
    
         | 
| 
      
 230 
     | 
    
         
            +
              # Create a snapshot: - must specify display_name and volume_id parameters... optionally also :display_description
         
     | 
| 
      
 231 
     | 
    
         
            +
              >> vs.create_snapshot({:volume_id=>"3b38b570-a4ff-4444-984a-3566cbdc8ab2", :display_name=>"marios_snapshot"})
         
     | 
| 
      
 232 
     | 
    
         
            +
              => #<OpenStack::Volume::Snapshot:0xa0cfea4 @id=223, @display_name="marios_snapshot", @display_description=nil, @volume_id="3b38b570-a4ff-4444-984a-3566cbdc8ab2", @status="creating", @size=1, @created_at="2013-01-23 14:25:02.654217">
         
     | 
| 
      
 233 
     | 
    
         
            +
             
     | 
| 
      
 234 
     | 
    
         
            +
              # List snapshots: - aliased as just 'snapshots' ... vs.snapshots
         
     | 
| 
      
 235 
     | 
    
         
            +
              >> vs.list_snapshots
         
     | 
| 
      
 236 
     | 
    
         
            +
              => [#<OpenStack::Volume::Snapshot:0x9a6e4fc @id="0e76dacb-2fcf-4565-84a3-aa3d7bd16224", @display_name="marios_snapshot", @display_description=nil, @volume_id="3b38b570-a4ff-4444-984a-3566cbdc8ab2", @status="creating", @size=1, @created_at="2013-01-23T14:18:13.000000">]
         
     | 
| 
      
 237 
     | 
    
         
            +
             
     | 
| 
      
 238 
     | 
    
         
            +
              # Get a specific snapshot: - aliased as 'snapshot'
         
     | 
| 
      
 239 
     | 
    
         
            +
              >> vs.get_snapshot("0e76dacb-2fcf-4565-84a3-aa3d7bd16224")
         
     | 
| 
      
 240 
     | 
    
         
            +
              => #<OpenStack::Volume::Snapshot:0x9a890b8 @id="0e76dacb-2fcf-4565-84a3-aa3d7bd16224", @display_name="marios_snapshot", @display_description=nil, @volume_id="3b38b570-a4ff-4444-984a-3566cbdc8ab2", @status="creating", @size=1, @created_at="2013-01-23T14:18:13.000000">
         
     | 
| 
      
 241 
     | 
    
         
            +
             
     | 
| 
      
 242 
     | 
    
         
            +
              # Delete a snapshot:
         
     | 
| 
      
 243 
     | 
    
         
            +
              >> vs.delete_snapshot("0e76dacb-2fcf-4565-84a3-aa3d7bd16224")
         
     | 
| 
      
 244 
     | 
    
         
            +
              => true
         
     | 
| 
       230 
245 
     | 
    
         | 
| 
       231 
246 
     | 
    
         
             
            == Examples for Object-Store:
         
     | 
| 
       232 
247 
     | 
    
         | 
    
        data/VERSION
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            1.0. 
     | 
| 
      
 1 
     | 
    
         
            +
            1.0.8
         
     | 
    
        data/lib/openstack.rb
    CHANGED
    
    
    
        data/lib/openstack/connection.rb
    CHANGED
    
    | 
         @@ -65,7 +65,9 @@ class Connection 
     | 
|
| 
       65 
65 
     | 
    
         
             
                      OpenStack::Swift::Connection.new(connection)
         
     | 
| 
       66 
66 
     | 
    
         
             
                    when "volume"
         
     | 
| 
       67 
67 
     | 
    
         
             
                      OpenStack::Volume::Connection.new(connection)
         
     | 
| 
       68 
     | 
    
         
            -
                     
     | 
| 
      
 68 
     | 
    
         
            +
                    when "image"
         
     | 
| 
      
 69 
     | 
    
         
            +
                      OpenStack::Image::Connection.new(connection)
         
     | 
| 
      
 70 
     | 
    
         
            +
                   else
         
     | 
| 
       69 
71 
     | 
    
         
             
                      raise Exception::InvalidArgument, "Invalid :service_type parameter: #{@service_type}"
         
     | 
| 
       70 
72 
     | 
    
         
             
                  end
         
     | 
| 
       71 
73 
     | 
    
         
             
                end
         
     | 
| 
         @@ -9,7 +9,8 @@ module Volume 
     | 
|
| 
       9 
9 
     | 
    
         
             
                def initialize(connection)
         
     | 
| 
       10 
10 
     | 
    
         
             
                  @connection = connection
         
     | 
| 
       11 
11 
     | 
    
         
             
                  OpenStack::Authentication.init(@connection)
         
     | 
| 
       12 
     | 
    
         
            -
                  @volumes_native, @volume_path = check_if_native
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @volumes_native, @volume_path = check_if_native("volumes")
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @snapshots_native, @snapshot_path = check_if_native("snapshots")
         
     | 
| 
       13 
14 
     | 
    
         
             
                end
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
       15 
16 
     | 
    
         
             
                # Returns true if the authentication was successful and returns false otherwise.
         
     | 
| 
         @@ -27,6 +28,7 @@ module Volume 
     | 
|
| 
       27 
28 
     | 
    
         
             
                  raise OpenStack::Exception::MissingArgument, ":display_name and :size must be specified to create a volume" unless (options[:display_name] && options[:size])
         
     | 
| 
       28 
29 
     | 
    
         
             
                  data = JSON.generate(:volume => options)
         
     | 
| 
       29 
30 
     | 
    
         
             
                  response = @connection.csreq("POST",@connection.service_host,"#{@connection.service_path}/#{@volume_path}",@connection.service_port,@connection.service_scheme,{'content-type' => 'application/json'},data)
         
     | 
| 
      
 31 
     | 
    
         
            +
                  OpenStack::Exception.raise_exception(response) unless response.code.match(/^20.$/)
         
     | 
| 
       30 
32 
     | 
    
         
             
                  volume_info = JSON.parse(response.body)["volume"]
         
     | 
| 
       31 
33 
     | 
    
         
             
                  volume = OpenStack::Volume::Volume.new(volume_info)
         
     | 
| 
       32 
34 
     | 
    
         
             
                end
         
     | 
| 
         @@ -53,32 +55,63 @@ module Volume 
     | 
|
| 
       53 
55 
     | 
    
         
             
                  true
         
     | 
| 
       54 
56 
     | 
    
         
             
                end
         
     | 
| 
       55 
57 
     | 
    
         | 
| 
       56 
     | 
    
         
            -
                 
     | 
| 
      
 58 
     | 
    
         
            +
                def list_snapshots
         
     | 
| 
      
 59 
     | 
    
         
            +
                  response = @connection.req("GET", "/#{@snapshot_path}")
         
     | 
| 
      
 60 
     | 
    
         
            +
                  snapshot_hash = JSON.parse(response.body)["snapshots"]
         
     | 
| 
      
 61 
     | 
    
         
            +
                  snapshot_hash.inject([]){|res, current| res << OpenStack::Volume::Snapshot.new(current); res}
         
     | 
| 
      
 62 
     | 
    
         
            +
                end
         
     | 
| 
      
 63 
     | 
    
         
            +
                alias :snapshots :list_snapshots
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                def get_snapshot(snap_id)
         
     | 
| 
      
 66 
     | 
    
         
            +
                  response = @connection.req("GET", "/#{@snapshot_path}/#{snap_id}")
         
     | 
| 
      
 67 
     | 
    
         
            +
                  snapshot_hash = JSON.parse(response.body)["snapshot"]
         
     | 
| 
      
 68 
     | 
    
         
            +
                  OpenStack::Volume::Snapshot.new(snapshot_hash)
         
     | 
| 
      
 69 
     | 
    
         
            +
                end
         
     | 
| 
      
 70 
     | 
    
         
            +
                alias :snapshot :get_snapshot
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                #require params:  {:display_name, :volume_id}
         
     | 
| 
      
 73 
     | 
    
         
            +
                #optional params: {:display_description, :metadata=>{:key=>val, ...}, :availability_zone, :volume_type }
         
     | 
| 
      
 74 
     | 
    
         
            +
                #returns OpenStack::Volume::Snapshot object
         
     | 
| 
      
 75 
     | 
    
         
            +
                def create_snapshot(options)
         
     | 
| 
      
 76 
     | 
    
         
            +
                  raise OpenStack::Exception::MissingArgument, ":volume_id and :display_name must be specified to create a snapshot" unless (options[:display_name] && options[:volume_id])
         
     | 
| 
      
 77 
     | 
    
         
            +
                  #:force documented in API but not explained... clarify (fails without)
         
     | 
| 
      
 78 
     | 
    
         
            +
                  options.merge!({:force=>"true"})
         
     | 
| 
      
 79 
     | 
    
         
            +
                  data = JSON.generate(:snapshot => options)
         
     | 
| 
      
 80 
     | 
    
         
            +
                  response = @connection.csreq("POST",@connection.service_host,"#{@connection.service_path}/#{@snapshot_path}",@connection.service_port,@connection.service_scheme,{'content-type' => 'application/json'},data)
         
     | 
| 
      
 81 
     | 
    
         
            +
                  OpenStack::Exception.raise_exception(response) unless response.code.match(/^20.$/)
         
     | 
| 
      
 82 
     | 
    
         
            +
                  snapshot_info = JSON.parse(response.body)["snapshot"]
         
     | 
| 
      
 83 
     | 
    
         
            +
                  OpenStack::Volume::Snapshot.new(snapshot_info)
         
     | 
| 
      
 84 
     | 
    
         
            +
                end
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                def delete_snapshot(snap_id)
         
     | 
| 
      
 87 
     | 
    
         
            +
                  @connection.req("DELETE", "/#{@snapshot_path}/#{snap_id}")
         
     | 
| 
      
 88 
     | 
    
         
            +
                  true
         
     | 
| 
      
 89 
     | 
    
         
            +
                end
         
     | 
| 
       57 
90 
     | 
    
         | 
| 
       58 
91 
     | 
    
         
             
                private
         
     | 
| 
       59 
92 
     | 
    
         | 
| 
       60 
93 
     | 
    
         
             
                #fudge... not clear if volumes support is available as 'native' volume API or
         
     | 
| 
       61 
94 
     | 
    
         
             
                #as the os-volumes extension. Need to probe to find out (for now)
         
     | 
| 
       62 
95 
     | 
    
         
             
                #see https://lists.launchpad.net/openstack/msg16601.html
         
     | 
| 
       63 
     | 
    
         
            -
                def check_if_native
         
     | 
| 
      
 96 
     | 
    
         
            +
                def check_if_native(entity) #volumes or snapshots
         
     | 
| 
       64 
97 
     | 
    
         
             
                  native = extension = false
         
     | 
| 
       65 
98 
     | 
    
         
             
                  #check if 'native' volume API present:
         
     | 
| 
       66 
99 
     | 
    
         
             
                  begin
         
     | 
| 
       67 
     | 
    
         
            -
                    response = @connection.req("GET", " 
     | 
| 
      
 100 
     | 
    
         
            +
                    response = @connection.req("GET", "/#{entity}")
         
     | 
| 
       68 
101 
     | 
    
         
             
                    native = true if response.code.match(/^20.$/)
         
     | 
| 
       69 
     | 
    
         
            -
                    return true,  
     | 
| 
      
 102 
     | 
    
         
            +
                    return true, entity
         
     | 
| 
       70 
103 
     | 
    
         
             
                  rescue OpenStack::Exception::ItemNotFound => not_found
         
     | 
| 
       71 
104 
     | 
    
         
             
                    native = false
         
     | 
| 
       72 
105 
     | 
    
         
             
                  end
         
     | 
| 
       73 
106 
     | 
    
         
             
                  #check if available as extension:
         
     | 
| 
       74 
107 
     | 
    
         
             
                  begin
         
     | 
| 
       75 
     | 
    
         
            -
                    response = @connection.req("GET", "/os 
     | 
| 
      
 108 
     | 
    
         
            +
                    response = @connection.req("GET", "/os-#{entity}")
         
     | 
| 
       76 
109 
     | 
    
         
             
                    extension = true if response.code.match(/^20.$/)
         
     | 
| 
       77 
     | 
    
         
            -
                    return false, "os 
     | 
| 
      
 110 
     | 
    
         
            +
                    return false, "os-#{entity}"
         
     | 
| 
       78 
111 
     | 
    
         
             
                  rescue OpenStack::Exception::ItemNotFound => not_found
         
     | 
| 
       79 
112 
     | 
    
         
             
                    extension = false
         
     | 
| 
       80 
113 
     | 
    
         
             
                  end
         
     | 
| 
       81 
     | 
    
         
            -
                  raise OpenStack::Exception::NotImplemented.new("No Volumes support for this provider", 501, "No  
     | 
| 
      
 114 
     | 
    
         
            +
                  raise OpenStack::Exception::NotImplemented.new("No Volumes support for this provider", 501, "No #{entity} Support") unless (native || extension)
         
     | 
| 
       82 
115 
     | 
    
         
             
                end
         
     | 
| 
       83 
116 
     | 
    
         | 
| 
       84 
117 
     | 
    
         | 
| 
         @@ -0,0 +1,25 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module OpenStack
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Volume
         
     | 
| 
      
 3 
     | 
    
         
            +
                class Snapshot
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                  attr_reader :id
         
     | 
| 
      
 6 
     | 
    
         
            +
                  attr_reader :display_name
         
     | 
| 
      
 7 
     | 
    
         
            +
                  attr_reader :display_description
         
     | 
| 
      
 8 
     | 
    
         
            +
                  attr_reader :volume_id
         
     | 
| 
      
 9 
     | 
    
         
            +
                  attr_reader :status
         
     | 
| 
      
 10 
     | 
    
         
            +
                  attr_reader :size
         
     | 
| 
      
 11 
     | 
    
         
            +
                  attr_reader :created_at
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  def initialize(snap_info)
         
     | 
| 
      
 14 
     | 
    
         
            +
                    @id = snap_info["id"]
         
     | 
| 
      
 15 
     | 
    
         
            +
                    @display_name = snap_info["display_name"] || snap_info["displayName"]
         
     | 
| 
      
 16 
     | 
    
         
            +
                    @display_description = snap_info["display_description"] || snap_info["displayDescription"]
         
     | 
| 
      
 17 
     | 
    
         
            +
                    @volume_id = snap_info["volume_id"] || snap_info["volumeId"]
         
     | 
| 
      
 18 
     | 
    
         
            +
                    @status = snap_info["status"]
         
     | 
| 
      
 19 
     | 
    
         
            +
                    @size  = snap_info["size"]
         
     | 
| 
      
 20 
     | 
    
         
            +
                    @created_at = snap_info["created_at"] || snap_info["createdAt"]
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: openstack
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.0.8
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -10,7 +10,7 @@ authors: 
     | 
|
| 
       10 
10 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       11 
11 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       12 
12 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       13 
     | 
    
         
            -
            date:  
     | 
| 
      
 13 
     | 
    
         
            +
            date: 2013-01-23 00:00:00.000000000 Z
         
     | 
| 
       14 
14 
     | 
    
         
             
            dependencies:
         
     | 
| 
       15 
15 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       16 
16 
     | 
    
         
             
              name: mocha
         
     | 
| 
         @@ -81,6 +81,7 @@ files: 
     | 
|
| 
       81 
81 
     | 
    
         
             
            - lib/openstack/compute/personalities.rb
         
     | 
| 
       82 
82 
     | 
    
         
             
            - lib/openstack/compute/server.rb
         
     | 
| 
       83 
83 
     | 
    
         
             
            - lib/openstack/connection.rb
         
     | 
| 
      
 84 
     | 
    
         
            +
            - lib/openstack/image/connection.rb
         
     | 
| 
       84 
85 
     | 
    
         
             
            - lib/openstack/swift/connection.rb
         
     | 
| 
       85 
86 
     | 
    
         
             
            - lib/openstack/swift/container.rb
         
     | 
| 
       86 
87 
     | 
    
         
             
            - lib/openstack/swift/storage_object.rb
         
     |