Class: Fog::Compute::QingCloud::Volume

Inherits:
QingCloud::Model show all
Defined in:
lib/fog/qingcloud/models/compute/volume.rb

Instance Method Summary collapse

Methods inherited from QingCloud::Model

#changing?, inherited, #wait_for

Constructor Details

#initialize(attributes = {}) ⇒ Volume

Returns a new instance of Volume.



21
22
23
24
25
# File 'lib/fog/qingcloud/models/compute/volume.rb', line 21

def initialize(attributes = {})
  # assign server first to prevent race condition with persisted?
  self.server = attributes.delete(:server)
  super
end

Instance Method Details

#destroyObject



27
28
29
30
31
32
33
34
35
36
37
# File 'lib/fog/qingcloud/models/compute/volume.rb', line 27

def destroy
  requires :id
  if ['creating', 'detaching'].include?(transition_status)
    wait_for { ready? }
  end
  service.delete_volumes(id)
  true
rescue Fog::QingCloud::Errors::PermissionDenied => e
  raise e unless e.message =~ /has already been deleted/i
  true
end

#ready?Boolean

Returns:

  • (Boolean)


39
40
41
# File 'lib/fog/qingcloud/models/compute/volume.rb', line 39

def ready?
  status == 'available' and transition_status == ''
end

#saveObject



43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/fog/qingcloud/models/compute/volume.rb', line 43

def save
  if persisted?
    modify_attributes(name, description)
  else
    requires :size
    self.id = service.create_volumes(zone, size, 'name' => name).body['volumes'].first
    wait_for { ready? }
    if @server
      self.server = @server
    end
  end
  true
end

#serverObject



57
58
59
60
# File 'lib/fog/qingcloud/models/compute/volume.rb', line 57

def server
  requires :server_id
  service.servers.get(server_id)
end

#server=(new_server) ⇒ Object



62
63
64
65
66
67
68
# File 'lib/fog/qingcloud/models/compute/volume.rb', line 62

def server=(new_server)
  if new_server
    attach(new_server)
  else
    detach
  end
end