class Fog::Compute::AWS::Volume

Public Class Methods

new(attributes = {}) click to toggle source
Calls superclass method
# File lib/fog/aws/models/compute/volume.rb, line 22
def initialize(attributes = {})
  # assign server first to prevent race condition with persisted?
  self.server = attributes.delete(:server)
  super
end

Public Instance Methods

destroy() click to toggle source
# File lib/fog/aws/models/compute/volume.rb, line 28
def destroy
  requires :id

  service.delete_volume(id)
  true
end
force_detach() click to toggle source
# File lib/fog/aws/models/compute/volume.rb, line 108
def force_detach
  detach(true)
end
modification_in_progress?() click to toggle source
# File lib/fog/aws/models/compute/volume.rb, line 39
def modification_in_progress?
  modifications.any? { |m| m['modificationState'] != 'completed' }
end
modifications() click to toggle source
# File lib/fog/aws/models/compute/volume.rb, line 43
def modifications
  requires :identity
  service.describe_volumes_modifications('volume-id' => self.identity).body['volumeModificationSet']
end
ready?() click to toggle source
# File lib/fog/aws/models/compute/volume.rb, line 35
def ready?
  state == 'available'
end
save() click to toggle source
# File lib/fog/aws/models/compute/volume.rb, line 48
def save
  if identity
    update_params = {
      'Size'       => self.size,
      'Iops'       => self.iops,
      'VolumeType' => self.type
    }

    service.modify_volume(self.identity, update_params)
    true
  else
    requires :availability_zone
    requires_one :size, :snapshot_id

    if type == 'io1'
      requires :iops
    end

    data = service.create_volume(availability_zone, size, create_params).body
    merge_attributes(data)

    if tags = self.tags
      # expect eventual consistency
      Fog.wait_for { self.reload rescue nil }
      service.create_tags(
        self.identity,
        tags
      )
    end

    if @server
      self.server = @server
    end
    true
  end
end
server() click to toggle source
# File lib/fog/aws/models/compute/volume.rb, line 85
def server
  requires :server_id
  service.servers.get(server_id)
end
server=(new_server) click to toggle source
# File lib/fog/aws/models/compute/volume.rb, line 90
def server=(new_server)
  if new_server
    attach(new_server)
  else
    detach
  end
end
snapshot(description) click to toggle source
# File lib/fog/aws/models/compute/volume.rb, line 103
def snapshot(description)
  requires :id
  service.create_snapshot(id, description)
end
snapshots() click to toggle source
# File lib/fog/aws/models/compute/volume.rb, line 98
def snapshots
  requires :id
  service.snapshots(:volume => self)
end

Private Instance Methods

attach(new_server) click to toggle source
# File lib/fog/aws/models/compute/volume.rb, line 118
def attach(new_server)
  if !persisted?
    @server = new_server
    self.availability_zone = new_server.availability_zone
  elsif new_server
    requires :device
    wait_for { ready? }
    @server = nil
    self.server_id = new_server.id
    service.attach_volume(server_id, id, device)
    reload
  end
end
attachmentSet=(new_attachment_set) click to toggle source
# File lib/fog/aws/models/compute/volume.rb, line 114
def attachmentSet=(new_attachment_set)
  merge_attributes(new_attachment_set.first || {})
end
create_params() click to toggle source
# File lib/fog/aws/models/compute/volume.rb, line 141
def create_params
  {
    'Encrypted'  => encrypted,
    'KmsKeyId'   => key_id,
    'Iops'       => iops,
    'SnapshotId' => snapshot_id,
    'VolumeType' => type
  }
end
detach(force = false) click to toggle source
# File lib/fog/aws/models/compute/volume.rb, line 132
def detach(force = false)
  @server = nil
  self.server_id = nil
  if persisted?
    service.detach_volume(id, 'Force' => force)
    reload
  end
end