1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00
fog--fog/lib/fog/cloudstack/models/compute/volume.rb

121 lines
4.1 KiB
Ruby

module Fog
module Compute
class Cloudstack
class Volume < Fog::Model
identity :id, :aliases => 'id'
attribute :name, :aliases => 'name'
attribute :zone_id, :aliases => 'zoneid'
attribute :zone_name, :aliases => 'zonename'
attribute :type, :aliases => 'type'
attribute :size, :aliases => 'size'
attribute :created, :aliases => 'created'
attribute :state, :aliases => 'state'
attribute :account, :aliases => 'account'
attribute :domain_id, :aliases => 'domainid'
attribute :domain, :aliases => 'domain'
attribute :storage_type, :aliases => 'storagetype'
attribute :hypervisor, :aliases => 'hypervisor'
attribute :disk_offering_id, :aliases => 'diskofferingid'
attribute :disk_offering_name, :aliases => 'diskofferingname'
attribute :disk_offering_display_text, :aliases => 'diskofferingdisplaytext'
attribute :storage, :aliases => 'storage'
attribute :destroyed, :aliases => 'destroyed'
attribute :is_extractable, :aliases => 'isextractable', :type => :boolean
attribute :server_id, :aliases => 'virtualmachineid'
attribute :server_name, :aliases => 'vmname'
attribute :server_display_name, :aliases => 'vmdisplayname'
attribute :job_id, :aliases => 'jobid' # only on create
attr_accessor :snapshot_id, :project_id
def save
requires :name, :disk_offering_id, :zone_id
options = {
'size' => size,
'name' => name,
'diskofferingid' => disk_offering_id,
'zoneid' => zone_id,
'snapshotid' => snapshot_id,
'projectid' => project_id
}
data = service.create_volume(options)
merge_attributes(data['createvolumeresponse'])
end
def ready?
state == 'Allocated' || state == 'Ready'
end
def flavor
service.disk_offerings.get(self.disk_offering_id)
end
alias_method :disk_offering, :flavor
def server
if server_id
service.servers.get(server_id)
end
end
def snapshots
requires :id
service.snapshots.all('volumeid' => id)
end
def reload
requires :identity
return unless data = begin
collection.get(identity)
rescue Excon::Errors::SocketError
nil
end
new_attributes = {
'virtualmachineid' => nil,
'vmname' => nil,
'vmdisplayname' => nil
}.merge(data.attributes)
merge_attributes(new_attributes)
self
end
def attach(instance_or_id, mountpoint=nil)
requires :id
instance_id = instance_or_id.is_a?(Server) ? instance_or_id.id : instance_or_id
unless instance_id
raise ArgumentError, "Missing required argument: instance_or_id"
end
options = {
'id' => id,
'virtualmachineid' => instance_id,
}
options.merge!('deviceid' => mountpoint) if mountpoint
data = service.attach_volume(options)
service.jobs.new(data["attachvolumeresponse"])
end
def detach
requires :id
data = service.detach_volume('id' => id)
service.jobs.new(data["detachvolumeresponse"])
end
def destroy
requires :id
service.delete_volume('id' => id)
true
end
end # Volume
end # Cloudstack
end # Compute
end # Fog