Class: Fog::Compute::Google::Disk
- Inherits:
-
Model
- Object
- Model
- Fog::Compute::Google::Disk
- Defined in:
- lib/fog/compute/google/models/disk.rb
Constant Summary collapse
- RUNNING_STATE =
"READY"
Instance Method Summary collapse
- #create_snapshot(snapshot_name, snapshot_description = "") ⇒ Object
- #destroy(async = true) ⇒ Object
- #get_as_boot_disk(writable = true, auto_delete = false) ⇒ Object
-
#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.
- #ready? ⇒ Boolean
- #reload ⇒ Object
- #save ⇒ Object
- #zone_name ⇒ Object
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 = { "name" => snapshot_name, "description" => snapshot_description } data = service.insert_snapshot(name, zone_name, service.project, ) 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
76 77 78 |
# File 'lib/fog/compute/google/models/disk.rb', line 76 def ready? status == RUNNING_STATE end |
#reload ⇒ Object
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 |
#save ⇒ Object
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 = {} my_description = "Created with fog" unless source_image.nil? my_description = "Created from image: #{source_image}" end if source_image.nil? && !source_snapshot.nil? ["sourceSnapshot"] = source_snapshot my_description = "Created from snapshot: #{source_snapshot}" end ["sizeGb"] = size_gb ["description"] = description || my_description ["type"] = type data = service.insert_disk(name, zone, source_image, ) operation = Fog::Compute::Google::Operations.new(:service => service).get(data.body["name"], data.body["zone"]) operation.wait_for { !pending? } reload end |
#zone_name ⇒ Object
53 54 55 |
# File 'lib/fog/compute/google/models/disk.rb', line 53 def zone_name zone.nil? ? nil : zone.split("/")[-1] end |