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"

Instance Method Summary collapse

Instance Method Details

#create_snapshot(snapshot_name, snapshot_description = "") ⇒ Object



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/fog/compute/google/models/disk.rb', line 94

def create_snapshot(snapshot_name, snapshot_description = "")
  requires :name, :zone

  if snapshot_name.nil? || snapshot_name.empty?
    raise ArgumentError, "Invalid snapshot name"
  end

  options = {
    "name"        => snapshot_name,
    "description" => snapshot_description
  }

  data = service.insert_snapshot(name, zone_name, service.project, options)
  operation = Fog::Compute::Google::Operations.new(:service => service).get(data.body["name"], data.body["zone"])
  operation.wait_for { !pending? }
  service.snapshots.get(snapshot_name)
end

#destroy(async = true) ⇒ Object



44
45
46
47
48
49
50
51
# File 'lib/fog/compute/google/models/disk.rb', line 44

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

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

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



72
73
74
# File 'lib/fog/compute/google/models/disk.rb', line 72

def get_as_boot_disk(writable = true, auto_delete = false)
  get_object(writable, true, nil, auto_delete)
end

#get_object(writable = true, boot = false, device_name = nil, auto_delete = false) ⇒ Object

auto_delete can only be applied to disks created before instance creation. auto_delete = true will automatically delete disk upon instance termination.



59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/fog/compute/google/models/disk.rb', line 59

def get_object(writable = true, boot = false, device_name = nil, auto_delete = false)
  mode = writable ? "READ_WRITE" : "READ_ONLY"
  value = {
    "autoDelete" => auto_delete,
    "boot" => boot,
    "source" => self_link,
    "mode" => mode,
    "deviceName" => device_name,
    "type" => "PERSISTENT"
  }.select { |_k, v| !v.nil? }
  Hash[value]
end

#ready?Boolean

Returns:

  • (Boolean)


76
77
78
# File 'lib/fog/compute/google/models/disk.rb', line 76

def ready?
  status == RUNNING_STATE
end

#reloadObject



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

def reload
  requires :identity, :zone

  return unless data = begin
    collection.get(identity, zone_name)
  rescue Excon::Errors::SocketError
    nil
  end

  new_attributes = data.attributes
  merge_attributes(new_attributes)
  self
end

#saveObject



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/fog/compute/google/models/disk.rb', line 21

def save
  requires :name, :zone, :size_gb

  options = {}
  my_description = "Created with fog"
  unless source_image.nil?
    my_description = "Created from image: #{source_image}"
  end
  if source_image.nil? && !source_snapshot.nil?
    options["sourceSnapshot"] = source_snapshot
    my_description = "Created from snapshot: #{source_snapshot}"
  end

  options["sizeGb"] = size_gb
  options["description"] = description || my_description
  options["type"] = type

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

#zone_nameObject



53
54
55
# File 'lib/fog/compute/google/models/disk.rb', line 53

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