Class: Dcmgr::Models::Volume

Inherits:
AccountResource show all
Defined in:
lib/dcmgr/models/volume.rb

Defined Under Namespace

Classes: DiskError, RequestError

Constant Summary collapse

STATUS_TYPE_REGISTERING =
"registering"
STATUS_TYPE_ONLINE =
"online"
STATUS_TYPE_OFFLINE =
"offline"
STATUS_TYPE_FAILED =
"failed"
STATE_TYPE_REGISTERING =
"registering"
STATE_TYPE_CREATING =
"creating"
STATE_TYPE_AVAILABLE =
"available"
STATE_TYPE_ATTATING =
"attating"
STATE_TYPE_ATTACHED =
"attached"
STATE_TYPE_DETACHING =
"detaching"
STATE_TYPE_FAILED =
"failed"
STATE_TYPE_DEREGISTERING =
"deregistering"
STATE_TYPE_DELETING =
"deleting"
STATE_TYPE_DELETED =
"deleted"

Constants inherited from BaseNew

BaseNew::LOCK_TABLES_KEY

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from AccountResource

#account

Methods inherited from BaseNew

Proxy, dataset, install_data, install_data_hooks, lock!, unlock!

Class Method Details

.delete_volume(account_id, uuid) ⇒ Object



103
104
105
106
107
108
109
110
111
# File 'lib/dcmgr/models/volume.rb', line 103

def self.delete_volume(, uuid)
  v = self.dataset.where(:account_id=>).where(:uuid=>uuid.split('-').last).first
  if v.state.to_sym != :available
    raise RequestError, "invalid delete request"
  end
  v.state = :deregistering
  v.save_changes
  v
end

.get_list(account_id, *args) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/dcmgr/models/volume.rb', line 77

def self.get_list(, *args)
  data = args.first
  vl = self.dataset.where(:account_id=>)
  vl = vl.limit(data[:limit], data[:start]) if data[:start] && data[:limit]
  if data[:target] && data[:sort]
    vl = case data[:sort]
         when 'desc'
           vl.order(data[:target].to_sym.desc)
         when 'asc'
           vl.order(data[:target].to_sym.asc)
         end
  end
  if data[:target] && data[:filter]
    filter = case data[:target]
             when 'uuid'
               data[:filter].split('vol-').last
             else
               data[:filter]
             end
    vl = vl.grep(data[:target].to_sym, "%#{filter}%")
  end
  vl.all.map{|row|
    row.to_api_document
  }
end

Instance Method Details

#before_createObject



60
61
62
63
64
65
66
67
68
69
70
# File 'lib/dcmgr/models/volume.rb', line 60

def before_create
  # check the volume size
  sp = self.storage_pool
  volume_size = Volume.dataset.where(:storage_pool_id=> self.storage_pool_id).get{sum(:size)}
  total_size = sp.offerring_disk_space - volume_size.to_i
  if self.size > total_size
    raise DiskError, "out of disk space"
  end

  super
end

#before_saveObject



72
73
74
75
# File 'lib/dcmgr/models/volume.rb', line 72

def before_save
  self.updated_at = Time.now
  super
end

#create_snapshot(account_id) ⇒ Object



140
141
142
143
144
145
# File 'lib/dcmgr/models/volume.rb', line 140

def create_snapshot()
  vs = VolumeSnapshot.create(:account_id=>,
                             :storage_pool_id=>self.storage_pool_id,
                             :origin_volume_id=>self.canonical_uuid,
                             :size=>self.size)
end

#merge_pool_dataObject



113
114
115
116
# File 'lib/dcmgr/models/volume.rb', line 113

def merge_pool_data
  v = self.to_hash
  v.merge(:storage_pool=>storage_pool.to_hash)
end

#to_api_documentObject

Hash data for API response.



126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/dcmgr/models/volume.rb', line 126

def to_api_document
  h = {
    :id => self.canonical_uuid,
    :uuid => self.canonical_uuid,
    :size => self.size,
    :snapshot_id => self.snapshot_id,
    :created_at => self.created_at,
    :attached_at => self.attached_at,
    :state => self.state,
    :instance_id => (self.instance && self.instance.canonical_uuid),
    :deleted_at => self.deleted_at,
  }
end

#to_hashObject



118
119
120
121
122
123
# File 'lib/dcmgr/models/volume.rb', line 118

def to_hash
  h = super
  # yaml -> hash translation
  h[:transport_information]=self.transport_information
  h
end