modules/mu/master.rb in cloud-mu-3.4.0 vs modules/mu/master.rb in cloud-mu-3.5.0
- old
+ new
@@ -193,13 +193,16 @@
# @param ramdisk [String]: The name of a ramdisk to use when mounting encrypted disks
def self.disk(device, path, size = 50, cryptfile = nil, ramdisk = "ram7")
temp_dev = "/dev/#{ramdisk}"
if !File.open("/etc/mtab").read.match(/ #{path} /)
- realdevice = device.dup
- if MU::Cloud::Google.hosted?
- realdevice = "/dev/disk/by-id/google-"+device.gsub(/.*?\/([^\/]+)$/, '\1')
+ realdevice = if MU::Cloud::Google.hosted?
+ "/dev/disk/by-id/google-"+device.gsub(/.*?\/([^\/]+)$/, '\1')
+ elsif MU::Cloud::AWS.hosted?
+ MU::Cloud::AWS.realDevicePath(device.dup)
+ else
+ device.dup
end
alias_device = cryptfile ? "/dev/mapper/"+path.gsub(/[^0-9a-z_\-]/i, "_") : realdevice
if !File.exist?(realdevice)
MU.log "Creating #{path} volume"
@@ -214,10 +217,13 @@
MU.myInstanceId,
device: device,
tag_name: "Name",
tag_value: "#{$MU_CFG['hostname']} #{path}"
)
+ # the device might be on some arbitrary NVMe slot
+ realdevice = MU::Cloud::AWS.realDevicePath(realdevice)
+ alias_device = cryptfile ? "/dev/mapper/"+path.gsub(/[^0-9a-z_\-]/i, "_") : realdevice
elsif MU::Cloud::Google.hosted?
dummy_svr = MU::Cloud::Google::Server.new(
mu_name: "MU-MASTER",
cloud_id: MU.myInstanceId,
kitten_cfg: { 'project' => MU::Cloud::Google.myProject, 'availability_zone' => MU.myAZ }
@@ -898,8 +904,48 @@
}
}
addpath.call("", srcdir)
}
end
+
+ # Just list our block devices
+ # @return [Array<String>]
+ def self.listBlockDevices
+ if File.executable?("/bin/lsblk")
+ %x{/bin/lsblk -i -p -r -n | egrep ' disk( |$)'}.each_line.map { |l|
+ l.chomp.sub(/ .*/, '')
+ }
+ else
+ # XXX something dumber
+ nil
+ end
+ end
+
+
+ # Retrieve the UUID of a block device, if available
+ # @param dev [String]
+ def self.diskUUID(dev)
+ realdev = if MU::Cloud::Google.hosted?
+ "/dev/disk/by-id/google-"+dev.gsub(/.*?\/([^\/]+)$/, '\1')
+ elsif MU::Cloud::AWS.hosted?
+ MU::Cloud::AWS.realDevicePath(dev)
+ else
+ dev
+ end
+ %x{/sbin/blkid #{realdev} -o export | grep ^UUID=}.chomp
+ end
+
+ # Determine whether we're running in an NVMe-enabled environment
+ def self.nvme?
+ if File.executable?("/bin/lsblk")
+ %x{/bin/lsblk -i -p -r -n}.each_line { |l|
+ return true if l =~ /^\/dev\/nvme\d/
+ }
+ else
+ return true if File.exists?("/dev/nvme0n1")
+ end
+ false
+ end
+
end
end