Sha256: f9ed290d4aacdd747118a72349085b605a9112017d4e9ee25712eb95a73cec62

Contents?: true

Size: 1.77 KB

Versions: 108

Compression:

Stored size: 1.77 KB

Contents

require 'fog/core/model'

module Fog
  module Compute
    class Linode
      class Disk < Fog::Model
        identity :id
        attribute :name
        attribute :type

        def save
          requires :server
          raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if persisted?
          @type, @image, @stack_script, @name, @password, @size =
            attributes.values_at :type, :image, :stack_script, :name, :password, :size
          create_disk
        end

        def destroy
          requires :identity, :server
          service.linode_disk_delete server.id, id
        end

        def server
          @server
        end

        private
        def server=(server)
          @server = server
        end

        def create_disk
          case
          when @image && @stack_script then create_disk_from_stack_script
          when @image then create_disk_from_image
          when @type then create_disk_type
          else raise 'disk cannot be created'
          end
        end

        def create_disk_type
          self.id = service.linode_disk_create(server.id, "#{@name}_#{@type}", @type, @size).body['DATA']['DiskID']
          reload
        end

        def create_disk_from_image
          disk = service.linode_disk_createfromdistribution server.id, @image.id, "#{@name}_main", @size, @password
          self.id = disk.body['DATA']['DiskID']
          reload
        end

        def create_disk_from_stack_script
          disk = service.linode_disk_createfromstackscript(server.id, @stack_script.id, @image.id,
                                                              "#{@name}_main", @size, @password, @stack_script.options)
          self.id = disk.body['DATA']['DiskID']
          reload
        end
      end
    end
  end
end

Version data entries

108 entries across 106 versions & 11 rubygems

Version Path
fog-2.3.0 lib/fog/linode/models/compute/disk.rb
fog-ifeel-2.2.0 lib/fog/linode/models/compute/disk.rb
fog-2.2.0 lib/fog/linode/models/compute/disk.rb
fog-2.1.0 lib/fog/linode/models/compute/disk.rb
vagrant-packet-0.1.1 vendor/bundle/ruby/2.5.0/gems/fog-1.42.1/lib/fog/linode/models/compute/disk.rb
vagrant-packet-0.1.1 vendor/bundle/ruby/2.3.0/gems/fog-1.42.1/lib/fog/linode/models/compute/disk.rb
vagrant-packet-0.1.1 vendor/bundle/ruby/2.4.0/gems/fog-1.42.1/lib/fog/linode/models/compute/disk.rb
fog-1.42.1 lib/fog/linode/models/compute/disk.rb
fog-2.0.0 lib/fog/linode/models/compute/disk.rb
fog-1.42.0 lib/fog/linode/models/compute/disk.rb
fog-1.41.0 lib/fog/linode/models/compute/disk.rb
fog-1.40.0 lib/fog/linode/models/compute/disk.rb
fog-1.39.0 lib/fog/linode/models/compute/disk.rb
fog-1.38.0 lib/fog/linode/models/compute/disk.rb
fog-1.37.0 lib/fog/linode/models/compute/disk.rb
fog-1.36.0 lib/fog/linode/models/compute/disk.rb
fog-1.35.0 lib/fog/linode/models/compute/disk.rb
fog-2.0.0.pre.0 lib/fog/linode/models/compute/disk.rb
vagrant-cloudstack-1.2.0 vendor/bundle/gems/fog-1.32.0/lib/fog/linode/models/compute/disk.rb
fog-1.34.0 lib/fog/linode/models/compute/disk.rb