Class: Dcmgr::Models::Volume
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
#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(account_id, uuid)
v = self.dataset.where(:account_id=>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(account_id, *args)
data = args.first
vl = self.dataset.where(:account_id=>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_create ⇒ Object
60
61
62
63
64
65
66
67
68
69
70
|
# File 'lib/dcmgr/models/volume.rb', line 60
def before_create
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_save ⇒ Object
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(account_id)
vs = VolumeSnapshot.create(:account_id=>account_id,
:storage_pool_id=>self.storage_pool_id,
:origin_volume_id=>self.canonical_uuid,
:size=>self.size)
end
|
#merge_pool_data ⇒ Object
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_document ⇒ Object
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_hash ⇒ Object
118
119
120
121
122
123
|
# File 'lib/dcmgr/models/volume.rb', line 118
def to_hash
h = super
h[:transport_information]=self.transport_information
h
end
|