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 = {}) ⇒ Hash

Returns an attached disk configuration hash.

Compute API needs attached disks to be specified in a custom format. This provides a handy shortcut for generating a preformatted config.

Example output:

:boot=>true,
:mode=>"READ_WRITE",
:source=>"https://www.googleapis.com/compute/v1/projects/myproj/zones/us-central1-f/disks/mydisk",
:type=>"PERSISTENT"

See Instances.insert API docs for more info: cloud.google.com/compute/docs/reference/rest/v1/instances/insert

Parameters:

  • opts (Hash) (defaults to: {})

    options to attach the disk with. @option opts [Boolean] :writable The mode in which to attach this

    disk. (defaults to READ_WRITE)
    

    @option opts [Boolean] :boot Indicates whether this is a boot disk.

    (defaults to false)
    

    @option opts [String] :device_name Specifies a unique device name

    of your choice that is reflected into the /dev/disk/by-id/google-*
    tree of a Linux operating system running within the instance.
    

    @option opts [Object] :encryption_key Encrypts or decrypts a disk

    using a customer-supplied encryption key.
    

    @option opts [Object] :auto_delete Specifies whether the disk will

    be auto-deleted when the instance is deleted. (defaults to false)
    

Returns:

  • (Hash)

    Attached disk configuration hash



104
105
106
107
# File 'lib/fog/compute/google/models/disk.rb', line 104

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

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

Raises:

  • (ArgumentError)


140
141
142
143
144
145
146
147
148
149
# File 'lib/fog/compute/google/models/disk.rb', line 140

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 { ready? }
  service.snapshots.get(snapshot_name)
end

#default_descriptionObject



24
25
26
27
28
29
30
31
32
# File 'lib/fog/compute/google/models/disk.rb', line 24

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



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

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) ⇒ Hash

A legacy shorthand for attached_disk_obj

Parameters:

  • writable (Object) (defaults to: true)

    The mode in which to attach this disk. (defaults to READ_WRITE)

  • auto_delete (Object) (defaults to: false)

    Specifies whether the disk will be auto-deleted when the instance is deleted. (defaults to false)

Returns:

  • (Hash)


116
117
118
119
120
# File 'lib/fog/compute/google/models/disk.rb', line 116

def get_as_boot_disk(writable = true, auto_delete = false)
  attached_disk_obj(boot: true,
                    writable: writable,
                    auto_delete: auto_delete)
end

#ready?Boolean

Returns:

  • (Boolean)


122
123
124
# File 'lib/fog/compute/google/models/disk.rb', line 122

def ready?
  status == RUNNING_STATE
end

#reloadObject



126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/fog/compute/google/models/disk.rb', line 126

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



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/fog/compute/google/models/disk.rb', line 34

def save
  requires :name, :zone, :size_gb

  options = {
    :description => description || default_description,
    :type => type,
    :size_gb => size_gb,
    :source_image => source_image,
    :source_snapshot => source_snapshot,
    :labels => labels
  }.reject { |_, v| v.nil? }

  if options[:source_image]
    unless source_image.include?("projects/")
      options[:source_image] = service.images.get(source_image).self_link
    end
  end

  # Request needs backward compatibility so source image is specified in
  # method arguments
  data = service.insert_disk(name, zone, options[:source_image], **options)
  operation = Fog::Compute::Google::Operations.new(service: service)
                                              .get(data.name, data.zone)
  operation.wait_for { ready? }
  reload
end

#zone_nameObject



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

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