Class: Bosh::Agent::Platform::Linux::Disk

Inherits:
Object
  • Object
show all
Includes:
Exec
Defined in:
lib/bosh_agent/platform/linux/disk.rb

Direct Known Subclasses

Centos::Disk

Constant Summary collapse

VSPHERE_DATA_DISK =
"/dev/sdb"
DEV_PATH_TIMEOUT =
180
DISK_RETRY_MAX_DEFAULT =
30

Instance Method Summary collapse

Constructor Details

#initializeDisk

Returns a new instance of Disk.



11
12
13
14
15
16
17
18
19
# File 'lib/bosh_agent/platform/linux/disk.rb', line 11

def initialize
  @config   = Bosh::Agent::Config
  @platform_name = @config.platform_name
  @logger   = @config.logger
  @store_dir = File.join(@config.base_dir, 'store')
  @dev_path_timeout = DEV_PATH_TIMEOUT
  @disk_retry_timeout = DISK_RETRY_MAX_DEFAULT
  @mounter = Mounter.new(@logger)
end

Instance Method Details

#detect_block_device(disk_id) ⇒ Object



67
68
69
70
71
72
73
# File 'lib/bosh_agent/platform/linux/disk.rb', line 67

def detect_block_device(disk_id)
  device_path = "/sys/bus/scsi/devices/2:0:#{disk_id}:0/block/*"
  dirs = Dir.glob(device_path, 0)
  raise Bosh::Agent::DiskNotFoundError, "Unable to find disk #{device_path}" if dirs.empty?

  File.basename(dirs.first)
end

#get_data_disk_device_nameObject



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/bosh_agent/platform/linux/disk.rb', line 30

def get_data_disk_device_name
  case @config.infrastructure_name
    when "vsphere", "vcloud"
      VSPHERE_DATA_DISK
    when "aws", "openstack"
      settings = @config.settings
      dev_path = settings['disks']['ephemeral']
      unless dev_path
        raise Bosh::Agent::FatalError, "Unknown data or ephemeral disk" if @config.infrastructure_name == "aws"
        @logger.warn("No ephemeral disk set, using root device for BOSH agent data!!!")
        return nil
      end
      get_available_path(dev_path)
    else
      raise Bosh::Agent::FatalError, "Lookup disk failed, unsupported infrastructure #{Bosh::Agent::Config.infrastructure_name}"
  end
end

#lookup_disk_by_cid(cid) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/bosh_agent/platform/linux/disk.rb', line 48

def lookup_disk_by_cid(cid)
  disk_id = @config.settings['disks']['persistent'][cid]

  if disk_id.nil?
    raise Bosh::Agent::FatalError, "Unknown persistent disk: #{cid}"
  end

  case @config.infrastructure_name
    when "vsphere", "vcloud"
      # VSphere passes in scsi disk id
      get_available_scsi_path(disk_id)
    when "aws", "openstack"
      # AWS & OpenStack pass in the device name
      get_available_path(disk_id)
    else
      raise Bosh::Agent::FatalError, "Lookup disk failed, unsupported infrastructure #{Bosh::Agent::Config.infrastructure_name}"
  end
end

#mount_persistent_disk(cid, options = {}) ⇒ Object



21
22
23
24
25
26
27
28
# File 'lib/bosh_agent/platform/linux/disk.rb', line 21

def mount_persistent_disk(cid, options={})
  FileUtils.mkdir_p(@store_dir)
  disk = lookup_disk_by_cid(cid)
  partition = "#{disk}1"
  if File.blockdev?(partition) && !mount_exists?(partition)
    mounter.mount(partition, @store_dir, options)
  end
end