From 6883f6adfae9c70e534eb9d3d66a0a3857693602 Mon Sep 17 00:00:00 2001 From: Daniel Clavijo Coca Date: Thu, 21 Mar 2019 12:34:19 -0600 Subject: [PATCH 1/2] #3103 Update map method --- src/vmm_mad/remotes/lib/lxd/mapper/mapper.rb | 42 +++++++++++--------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/src/vmm_mad/remotes/lib/lxd/mapper/mapper.rb b/src/vmm_mad/remotes/lib/lxd/mapper/mapper.rb index 0a5a04f006f..3c4a0b9c435 100644 --- a/src/vmm_mad/remotes/lib/lxd/mapper/mapper.rb +++ b/src/vmm_mad/remotes/lib/lxd/mapper/mapper.rb @@ -137,24 +137,11 @@ def map(one_vm, disk, directory) return mount_dev(device, directory) unless %w[loop disk].include?(type) - size = disk['SIZE'].to_i if disk['SIZE'] - osize = disk['ORIGINAL_SIZE'].to_i if disk['ORIGINAL_SIZE'] - - cmd = "#{COMMANDS[:blkid]} -o export #{device}" - _rc, o, _e = Command.execute(cmd, false) - - fs_type = '' - - o.each_line {|l| - next unless (m = l.match(/TYPE=(.*)/)) + fstype = get_fstype(device) - fs_type = m[1] - break - } + return unless reset_fs_uuid(fstype, device) - reset_fs_uuid(fs_type, device) - - mount_resize_fs(device, directory, fs_type, size, osize) + mount_resize_fs(device, directory, fstype, disk) end # Unmaps a disk from a given directory @@ -455,7 +442,7 @@ def parse_fstab(partitions, path, fstab) next if %w[/ swap].include?(mount_point) - partitions.each { |p| + partitions.each {|p| next if p[key] != value return false unless mount_dev(p['path'], path + mount_point) @@ -471,7 +458,10 @@ def parse_fstab(partitions, path, fstab) # @param fs_type [String] # @param size, osize [Integer] disk size and original size # @return true if success - def mount_resize_fs(device, directory, fs_type, size, osize) + def mount_resize_fs(device, directory, fs_type, disk) + size = disk['SIZE'].to_i if disk['SIZE'] + osize = disk['ORIGINAL_SIZE'].to_i if disk['ORIGINAL_SIZE'] + # TODO: osize is always < size after 1st resize during deployment return mount_dev(device, directory) unless size > osize @@ -523,4 +513,20 @@ def reset_fs_uuid(fs_type, device) OpenNebula.log_error "#{__method__}: failed to change UUID: #{e}\n" end + def get_fstype(device) + cmd = "#{COMMANDS[:blkid]} -o export #{device}" + _rc, o, _e = Command.execute(cmd, false) + + fstype = '' + + o.each_line {|l| + next unless (m = l.match(/TYPE=(.*)/)) + + fstype = m[1] + break + } + + fstype + end + end From b3f7d78ef01313b46a1c5d0f1910e36268f3ac05 Mon Sep 17 00:00:00 2001 From: Daniel Clavijo Coca Date: Thu, 21 Mar 2019 17:07:47 -0600 Subject: [PATCH 2/2] #3103 Fix ext4 uuidgen. --- src/vmm_mad/remotes/lib/lxd/mapper/mapper.rb | 28 +++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/vmm_mad/remotes/lib/lxd/mapper/mapper.rb b/src/vmm_mad/remotes/lib/lxd/mapper/mapper.rb index 3c4a0b9c435..f8869fa2e53 100644 --- a/src/vmm_mad/remotes/lib/lxd/mapper/mapper.rb +++ b/src/vmm_mad/remotes/lib/lxd/mapper/mapper.rb @@ -474,13 +474,21 @@ def mount_resize_fs(device, directory, fs_type, disk) Command.execute("#{COMMANDS[:xfs_growfs]} -d #{directory}", false) when /ext/ - _rc, o, e = Command.execute("#{COMMANDS[:e2fsck]} -f -y #{device}", false) + err = "#{__method__}: failed to resize #{device}\n" + + _rc, o, e = check_ext4(device) if o.empty? - err = "#{__method__}: failed to resize #{device}\n#{e}" - OpenNebula.log_error err + OpenNebula.log_error("#{err}#{e}") + return else - Command.execute("#{COMMANDS[:resize2fs]} #{device}", false) + cmd = "#{COMMANDS[:resize2fs]} #{device}" + rc, _o, e = Command.execute(cmd, false) + + if rc != 0 + OpenNebula.log_error("#{err}#{e}") + return + end end rc = mount_dev(device, directory) @@ -502,15 +510,17 @@ def reset_fs_uuid(fs_type, device) when /xfs/ cmd = "#{COMMANDS[:xfs_admin]} -U generate #{device}" when /ext/ - cmd = "#{COMMANDS[:tune2fs]} tune2fs -U random #{device}" + check_ext4(device) + cmd = "#{COMMANDS[:tune2fs]} -U random #{device}" else return true end - rc, _o, e = Command.execute(cmd, false) + rc, o, e = Command.execute(cmd, false) return true if rc.zero? - OpenNebula.log_error "#{__method__}: failed to change UUID: #{e}\n" + OpenNebula.log_error "#{__method__}: error changing UUID: #{o}\n#{e}\n" + nil end def get_fstype(device) @@ -529,4 +539,8 @@ def get_fstype(device) fstype end + def check_ext4(part) + Command.execute("#{COMMANDS[:e2fsck]} -f -y #{part}", false) + end + end