Class: Fog::Compute::Google::Disk

Inherits:
Model
  • Object
show all
Defined in:
lib/fog/compute/google/models/disk.rb

Constant Summary collapse

RUNNING_STATE =
"READY".freeze

Instance Method Summary collapse

Instance Method Details

#attached_disk_obj(opts = {}) ⇒ Object


64
65
66
67
# File 'lib/fog/compute/google/models/disk.rb', line 64

def attached_disk_obj(opts = {})
  requires :self_link
  collection.attached_disk_obj(self_link, opts)
end

#create_snapshot(snapshot_name, snapshot = {}) ⇒ Object

Raises:

  • (ArgumentError)

97
98
99
100
101
102
103
104
105
106
# File 'lib/fog/compute/google/models/disk.rb', line 97

def create_snapshot(snapshot_name, snapshot = {})
  requires :name, :zone
  raise ArgumentError, "Invalid snapshot name" unless snapshot_name

  data = service.create_disk_snapshot(snapshot_name, name, zone_name, snapshot)
  operation = Fog::Compute::Google::Operations.new(:service => service)
                                              .get(data.name, data.zone)
  operation.wait_for { !pending? }
  service.snapshots.get(snapshot_name)
end

#default_descriptionObject


21
22
23
24
25
26
27
28
29
# File 'lib/fog/compute/google/models/disk.rb', line 21

def default_description
  if !source_image.nil?
    "created from image: #{source_image}"
  elsif !source_snapshot.nil?
    "created from snapshot: #{source_snapshot}"
  else
    "created with fog"
  end
end

#destroy(async = true) ⇒ Object


50
51
52
53
54
55
56
57
58
# File 'lib/fog/compute/google/models/disk.rb', line 50

def destroy(async = true)
  requires :name, :zone

  data = service.delete_disk(name, zone_name)
  operation = Fog::Compute::Google::Operations.new(:service => service)
                                              .get(data.name, data.zone)
  operation.wait_for { ready? } unless async
  operation
end

#get_as_boot_disk(writable = true, auto_delete = false) ⇒ Object


69
70
71
72
73
74
75
76
77
# File 'lib/fog/compute/google/models/disk.rb', line 69

def get_as_boot_disk(writable = true, auto_delete = false)
  {
    :auto_delete => auto_delete,
    :boot => true,
    :source => self_link,
    :mode =>  writable ? "READ_WRITE" : "READ_ONLY",
    :type => "PERSISTENT"
  }
end

#ready?Boolean

Returns:

  • (Boolean)

79
80
81
# File 'lib/fog/compute/google/models/disk.rb', line 79

def ready?
  status == RUNNING_STATE
end

#reloadObject


83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/fog/compute/google/models/disk.rb', line 83

def reload
  requires :identity, :zone

  return unless data = begin
    collection.get(identity, zone_name)
  rescue Google::Apis::TransmissionError
    nil
  end

  new_attributes = data.attributes
  merge_attributes(new_attributes)
  self
end

#saveObject


31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/fog/compute/google/models/disk.rb', line 31

def save
  requires :name, :zone, :size_gb

  options = {
    :description => description || default_description,
    :source_image => source_image,
    :source_snapshot => source_snapshot,
    :size_gb => size_gb,
    :type => type,
    :zone => zone
  }

  data = service.insert_disk(name, zone, source_image, options)
  operation = Fog::Compute::Google::Operations.new(:service => service)
                                              .get(data.name, data.zone)
  operation.wait_for { !pending? }
  reload
end

#zone_nameObject


60
61
62
# File 'lib/fog/compute/google/models/disk.rb', line 60

def zone_name
  zone.nil? ? nil : zone.split("/")[-1]
end