Sha256: 737d338f4169f35ba5027570f504db04767f092493ec33cb4feeecf397e13b4c

Contents?: true

Size: 1.33 KB

Versions: 1

Compression:

Stored size: 1.33 KB

Contents

class Volume < ActiveRecord::Base

  belongs_to :server, inverse_of: :volumes
  belongs_to :availability_zone, inverse_of: :volumes

  has_many :tags, as: :taggable

  before_validation :set_hourly_rate

  def self.import(aws_volume)
    volume = Volume.where(remote_id: aws_volume.id).first || Volume.new(remote_id: aws_volume.id)
    volume.attributes = {
      name: aws_volume.tags["Name"],
      remote_id: aws_volume.id,
      state: aws_volume.state,
      volume_type: aws_volume.type,
      iops: aws_volume.iops,
      size: aws_volume.size,
      server: Server.where(remote_id: aws_volume.server_id).first,
      availability_zone: AvailabilityZone.find_or_create_by(name: aws_volume.availability_zone),
      created_at: aws_volume.created_at,
      deleted_at: null
    }

    volume.save!

    aws_volume.tags.each do |key, value| 
      volume.tags.find_or_create_by(name: key.downcase).update_attributes(value: value.downcase)
    end

    volume
  end

  def set_hourly_rate
    self.hourly_rate = if volume_type == "standard"
                         (0.10 * self.size) / 720
                       elsif volume_type == "io1"
                         ((0.125 * self.size) + (0.10 * self.iops)) / 720
                       else
                         raise "Unknown volume_type : #{self.volume_type}"
                       end
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
crop-duster-0.0.10 lib/models/volume.rb