mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
87 lines
2 KiB
Ruby
87 lines
2 KiB
Ruby
require 'fog/core/model'
|
|
require 'fog/virtual_box/models/compute/medium_format'
|
|
|
|
module Fog
|
|
module Compute
|
|
class VirtualBox
|
|
|
|
class Medium < Fog::Model
|
|
|
|
identity :id
|
|
|
|
attribute :auto_reset
|
|
attribute :base
|
|
attribute :children
|
|
attribute :description
|
|
attribute :device_type
|
|
attribute :format
|
|
attribute :host_drive
|
|
attribute :id
|
|
attribute :last_access_error
|
|
attribute :location
|
|
attribute :logical_size
|
|
attribute :machine_ids
|
|
attribute :medium_format
|
|
attribute :name
|
|
attribute :parent
|
|
attribute :read_only
|
|
attribute :size
|
|
attribute :state
|
|
attribute :type
|
|
attribute :variant
|
|
|
|
def destroy
|
|
requires :raw
|
|
raw.close
|
|
true
|
|
end
|
|
|
|
undef_method :medium_format
|
|
def medium_format
|
|
Fog::Compute::VirtualBox::MediumFormat.new(
|
|
:connection => connection,
|
|
:raw => raw.medium_format
|
|
)
|
|
end
|
|
|
|
def save
|
|
requires :device_type, :location, :read_only
|
|
|
|
if File.exists?(location)
|
|
|
|
access_mode = if read_only
|
|
:access_mode_read_only
|
|
else
|
|
:access_mode_read_write
|
|
end
|
|
|
|
self.raw = connection.open_medium(location, device_type, access_mode)
|
|
|
|
else
|
|
|
|
raise Fog::Errors::Error.new('Creating a new medium is not yet implemented. Contributions welcome!')
|
|
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def raw
|
|
@raw
|
|
end
|
|
|
|
def raw=(new_raw)
|
|
@raw = new_raw
|
|
raw_attributes = {}
|
|
for key in [:auto_reset, :base, :children, :description, :device_type, :format, :host_drive, :id, :last_access_error, :location, :logical_size, :machine_ids, :medium_format, :name, :parent, :read_only, :size, :state, :type, :variant]
|
|
raw_attributes[key] = @raw.send(key)
|
|
end
|
|
merge_attributes(raw_attributes)
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
end
|