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