Class: Bosh::Agent::Platform::Linux::Disk
- Includes:
- Exec
- Defined in:
- lib/bosh_agent/platform/linux/disk.rb
Direct Known Subclasses
Constant Summary collapse
- VSPHERE_DATA_DISK =
"/dev/sdb"
- DEV_PATH_TIMEOUT =
180
- DISK_RETRY_MAX_DEFAULT =
30
Instance Method Summary collapse
- #detect_block_device(disk_id) ⇒ Object
- #get_data_disk_device_name ⇒ Object
-
#initialize ⇒ Disk
constructor
A new instance of Disk.
- #lookup_disk_by_cid(cid) ⇒ Object
- #mount_persistent_disk(cid, options = {}) ⇒ Object
Constructor Details
#initialize ⇒ Disk
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_name ⇒ Object
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" 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" # 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, ={}) 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, ) end end |