Skip to content

Commit

Permalink
[openstack] add volume transfer models/requests
Browse files Browse the repository at this point in the history
  • Loading branch information
majewsky committed Jul 8, 2015
1 parent acd8520 commit 8b68318
Show file tree
Hide file tree
Showing 13 changed files with 2,134 additions and 0 deletions.
36 changes: 36 additions & 0 deletions lib/fog/openstack/models/volume/transfer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
require 'fog/core/model'

module Fog
module Volume
class OpenStack
class Transfer < Fog::Model
identity :id

attribute :auth_key, :aliases => 'authKey'
attribute :created_at, :aliases => 'createdAt'
attribute :name
attribute :volume_id, :aliases => 'volumeId'

def save
requires :name, :volume_id
data = service.create_transfer(volume_id, :name => name)
merge_attributes(data.body['transfer'])
true
end

def destroy
requires :id
service.delete_transfer(id)
true
end

def initialize(attributes)
# Old 'connection' is renamed as service and should be used instead
prepare_service_value(attributes)
super
end

end
end
end
end
39 changes: 39 additions & 0 deletions lib/fog/openstack/models/volume/transfers.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
require 'fog/core/collection'
require 'fog/openstack/models/volume/transfer'

module Fog
module Volume
class OpenStack
class Transfers < Fog::Collection
model Fog::Volume::OpenStack::Transfer

def all(options = {})
load(service.list_transfers_detailed(options).body['transfers'])
end

def summary(options = {})
load(service.list_transfers(options).body['transfers'])
end

def get(transfer_id)
if transfer = service.get_transfer_details(transfer_id).body['transfer']
new(transfer)
end
rescue Fog::Volume::OpenStack::NotFound
nil
end
alias_method :find_by_id, :get

def accept(transfer_id, auth_key)
# NOTE: This is NOT a method on the Transfer object, since the
# receiver cannot see the transfer object in the get_transfer_details
# or list_transfers(_detailed) requests.
if transfer = service.accept_transfer(transfer_id, auth_key).body['transfer']
new(transfer)
end
end

end
end
end
end
1 change: 1 addition & 0 deletions lib/fog/openstack/models/volume/volume.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class Volume < Fog::Model
attribute :created_at, :aliases => 'createdAt'
attribute :attachments
attribute :source_volid
attribute :tenant_id, :aliases => 'os-vol-tenant-attr:tenant_id'

def initialize(attributes)
# Old 'connection' is renamed as service and should be used instead
Expand Down
24 changes: 24 additions & 0 deletions lib/fog/openstack/requests/volume/accept_transfer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
module Fog
module Volume
class OpenStack
# no Mock needed, test coverage in RSpec

class Real
def accept_transfer(transfer_id, auth_key)
data = {
'accept' => {
'auth_key' => auth_key
}
}

request(
:body => Fog::JSON.encode(data),
:expects => [200, 202],
:method => 'POST',
:path => "os-volume-transfer/#{transfer_id}/accept"
)
end
end
end
end
end
27 changes: 27 additions & 0 deletions lib/fog/openstack/requests/volume/create_transfer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
module Fog
module Volume
class OpenStack
# no Mock needed, test coverage in RSpec

class Real
def create_transfer(volume_id, options={})
data = {
'transfer' => {
'volume_id' => volume_id
}
}
if options[:name]
data['transfer']['name'] = options[:name]
end

request(
:body => Fog::JSON.encode(data),
:expects => [200, 202],
:method => 'POST',
:path => 'os-volume-transfer'
)
end
end
end
end
end
17 changes: 17 additions & 0 deletions lib/fog/openstack/requests/volume/delete_transfer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
module Fog
module Volume
class OpenStack
# no Mock needed, test coverage in RSpec

class Real
def delete_transfer(transfer_id)
request(
:expects => 202,
:method => 'DELETE',
:path => "os-volume-transfer/#{transfer_id}"
)
end
end
end
end
end
17 changes: 17 additions & 0 deletions lib/fog/openstack/requests/volume/get_transfer_details.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
module Fog
module Volume
class OpenStack
# no Mock needed, test coverage in RSpec

class Real
def get_transfer_details(transfer_id)
request(
:expects => 200,
:method => 'GET',
:path => "os-volume-transfer/#{transfer_id}"
)
end
end
end
end
end
18 changes: 18 additions & 0 deletions lib/fog/openstack/requests/volume/list_transfers.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
module Fog
module Volume
class OpenStack
# no Mock needed, test coverage in RSpec

class Real
def list_transfers(options = {})
request(
:expects => 200,
:method => 'GET',
:path => 'os-volume-transfer',
:query => options
)
end
end
end
end
end
18 changes: 18 additions & 0 deletions lib/fog/openstack/requests/volume/list_transfers_detailed.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
module Fog
module Volume
class OpenStack
# no Mock needed, test coverage in RSpec

class Real
def list_transfers_detailed(options = {})
request(
:expects => 200,
:method => 'GET',
:path => 'os-volume-transfer/detail',
:query => options
)
end
end
end
end
end
10 changes: 10 additions & 0 deletions lib/fog/openstack/volume.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ class OpenStack < Fog::Service
model :volume_type
collection :volume_types

model :transfer
collection :transfers

request_path 'fog/openstack/requests/volume'

# Volume
Expand All @@ -36,6 +39,13 @@ class OpenStack < Fog::Service
request :get_snapshot_details
request :delete_snapshot

request :list_transfers
request :list_transfers_detailed
request :create_transfer
request :get_transfer_details
request :accept_transfer
request :delete_transfer

request :update_quota
request :get_quota
request :get_quota_defaults
Expand Down
Loading

0 comments on commit 8b68318

Please sign in to comment.