Sha256: f7db1acf395e02747db8ef82a86cb71bf97f07c3a9788da5293b25328d3de857

Contents?: true

Size: 1.89 KB

Versions: 42

Compression:

Stored size: 1.89 KB

Contents

module Fog
  module Compute
    class Vsphere
      class Cdrom < Fog::Model
        identity :key

        attribute :filename
        attribute :name, :default => "CD-/DVD-ROM Drive"
        attribute :controller_key
        attribute :unit_number
        attribute :start_connected
        attribute :allow_guest_control
        attribute :connected

        has_one_identity :server, :servers, :aliases => :instance_uuid

        def to_s
          name
        end

        def destroy
          requires :instance_uuid, :key, :unit_number

          service.destroy_vm_cdrom(self)
          true
        end

        def save
          requires :instance_uuid

          if unit_number.nil?
            used_unit_numbers = server.cdroms.map { |cdrom| cdrom.unit_number }
            max_unit_number = used_unit_numbers.max

            if max_unit_number > server.cdroms.size
              # If the max ID exceeds the number of cdroms, there must be a hole in the range. Find a hole and use it.
              self.unit_number = max_unit_number.times.to_a.find { |i| used_unit_numbers.exclude?(i) }
            else
              self.unit_number = max_unit_number + 1
            end
          else
            if server.cdroms.any? { |cdrom| cdrom.unit_number == self.unit_number && cdrom.id != self.id }
              raise "A cdrom already exists with that unit_number, so we can't save the new cdrom"
            end
          end

          data = service.add_vm_cdrom(self)

          if data['task_state'] == 'success'
            # We have to query vSphere to get the cdrom attributes since the task handle doesn't include that info.
            created = server.cdroms.get(unit_number)

            self.key = created.key
            self.filename = created.filename
            self.unit_number = created.unit_number

            true
          else
            false
          end
        end
      end
    end
  end
end

Version data entries

42 entries across 42 versions & 1 rubygems

Version Path
fog-vsphere-1.7.0.1 lib/fog/vsphere/models/compute/cdrom.rb
fog-vsphere-2.1.1 lib/fog/vsphere/models/compute/cdrom.rb
fog-vsphere-2.1.0 lib/fog/vsphere/models/compute/cdrom.rb
fog-vsphere-2.0.1 lib/fog/vsphere/models/compute/cdrom.rb
fog-vsphere-2.0.0 lib/fog/vsphere/models/compute/cdrom.rb
fog-vsphere-1.13.1 lib/fog/vsphere/models/compute/cdrom.rb
fog-vsphere-1.13.0 lib/fog/vsphere/models/compute/cdrom.rb
fog-vsphere-1.12.0 lib/fog/vsphere/models/compute/cdrom.rb
fog-vsphere-1.11.3 lib/fog/vsphere/models/compute/cdrom.rb
fog-vsphere-1.11.2 lib/fog/vsphere/models/compute/cdrom.rb
fog-vsphere-1.11.1 lib/fog/vsphere/models/compute/cdrom.rb
fog-vsphere-1.11.0 lib/fog/vsphere/models/compute/cdrom.rb
fog-vsphere-1.10.0 lib/fog/vsphere/models/compute/cdrom.rb
fog-vsphere-1.9.2 lib/fog/vsphere/models/compute/cdrom.rb
fog-vsphere-1.9.1 lib/fog/vsphere/models/compute/cdrom.rb
fog-vsphere-1.9.0 lib/fog/vsphere/models/compute/cdrom.rb
fog-vsphere-1.8.0 lib/fog/vsphere/models/compute/cdrom.rb
fog-vsphere-1.7.1 lib/fog/vsphere/models/compute/cdrom.rb
fog-vsphere-1.7.0 lib/fog/vsphere/models/compute/cdrom.rb
fog-vsphere-1.6.0 lib/fog/vsphere/models/compute/cdrom.rb