From ad84d530aa49c60455d63166cd454356b839e384 Mon Sep 17 00:00:00 2001 From: Daniel Clavijo Coca Date: Mon, 28 Jan 2019 03:07:52 -0600 Subject: [PATCH] F #1684: Set linuxcontainers market app size to 2.5GB. LXD minor fix --- .../remotes/linuxcontainers/monitor | 2 +- src/vmm_mad/remotes/lib/lxd/mapper/qcow2.rb | 41 ++++++++++++------- src/vmm_mad/remotes/lib/lxd/mapper/raw.rb | 2 +- src/vmm_mad/remotes/lxd/poll | 1 - 4 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/market_mad/remotes/linuxcontainers/monitor b/src/market_mad/remotes/linuxcontainers/monitor index 246968045d..0d86f378a8 100755 --- a/src/market_mad/remotes/linuxcontainers/monitor +++ b/src/market_mad/remotes/linuxcontainers/monitor @@ -31,7 +31,7 @@ class LinuxContainersMarket #--------------------------------------------------------------------------- DEFAULTS = { :url => 'https://images.linuxcontainers.org', - :sizemb => 5120, + :sizemb => 2560, :fs => 'ext4', :format => 'raw', :agent => 'OpenNebula' diff --git a/src/vmm_mad/remotes/lib/lxd/mapper/qcow2.rb b/src/vmm_mad/remotes/lib/lxd/mapper/qcow2.rb index 5a3f390027..4b1bb5b7f4 100644 --- a/src/vmm_mad/remotes/lib/lxd/mapper/qcow2.rb +++ b/src/vmm_mad/remotes/lib/lxd/mapper/qcow2.rb @@ -20,7 +20,7 @@ $LOAD_PATH.unshift File.dirname(__FILE__) require 'mapper' -class Qcow2Mapper < Mapper +class Qcow2Mapper < Mapper # Max number of block devices. This should be set to the parameter used # to load the nbd kernel module (default in kernel is 16) @@ -32,18 +32,20 @@ class Qcow2Mapper < Mapper return if device.empty? dsrc = one_vm.disk_source(disk) - cmd = "#{COMMANDS[:nbd]} -c #{device} #{dsrc}" + File.chmod(0o664, dsrc) if File.symlink?(one_vm.sysds_path) - File.chmod(0664, dsrc) if File.symlink?(one_vm.sysds_path) + map = "#{COMMANDS[:nbd]} -c #{device} #{dsrc}" + rc, _out, err = Command.execute(map, false) - rc, _out, err = Command.execute(cmd, true) - - if rc != 0 + unless rc.zero? OpenNebula.log_error("#{__method__}: #{err}") return end - sleep 0.5 # TODO: improve settledown, lsblk -f fails + sleep 5 # wait for parts to come out + + partitions = lsblk(device) + show_parts(device) unless partitions[0]['type'] == 'part' device end @@ -51,7 +53,7 @@ class Qcow2Mapper < Mapper def do_unmap(device, _one_vm, _disk, _directory) cmd = "#{COMMANDS[:nbd]} -d #{device}" - rc, _out, err = Command.execute(cmd, true) + rc, _out, err = Command.execute(cmd, false) return true if rc.zero? @@ -61,21 +63,32 @@ class Qcow2Mapper < Mapper private - def nbd_device() + def show_parts(device) + get_parts = "#{COMMANDS[:kpartx]} -s -av #{device}" + + rc, _out, err = Command.execute(get_parts, false) + + unless rc.zero? + OpenNebula.log_error("#{__method__}: #{err}") + return + end + end + + def nbd_device sys_parts = lsblk('') device_id = -1 nbds = [] - sys_parts.each { |p| + sys_parts.each do |p| m = p['name'].match(/nbd(\d+)/) - next if !m + next unless m nbds << m[1].to_i - } + end - NBDS_MAX.times { |i| + NBDS_MAX.times do |i| return "/dev/nbd#{i}" unless nbds.include?(i) - } + end OpenNebula.log_error("#{__method__}: Cannot find free nbd device") diff --git a/src/vmm_mad/remotes/lib/lxd/mapper/raw.rb b/src/vmm_mad/remotes/lib/lxd/mapper/raw.rb index 0ca9621c2a..cecb386365 100644 --- a/src/vmm_mad/remotes/lib/lxd/mapper/raw.rb +++ b/src/vmm_mad/remotes/lib/lxd/mapper/raw.rb @@ -44,7 +44,7 @@ class FSRawMapper < Mapper return true if rc.zero? - OpenNebula.log_error("#{__method__}: #{err}") if rc != 0 + OpenNebula.log_error("#{__method__}: #{err}") nil end diff --git a/src/vmm_mad/remotes/lxd/poll b/src/vmm_mad/remotes/lxd/poll index a3d2b0d216..e51202a439 100755 --- a/src/vmm_mad/remotes/lxd/poll +++ b/src/vmm_mad/remotes/lxd/poll @@ -243,7 +243,6 @@ module LXD cpu = '50%' if !cpu || cpu.empty? vcpu = '1' if !vcpu || vcpu.empty? mem = '512MB' if !mem || mem.empty? - cpu = cpu.chomp('%').to_f / 100 mem = parse_memory(mem)