From 011f584d18d8504f3cd274e9ec71ff18473957e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Gonz=C3=A1lez?= Date: Sun, 7 Mar 2021 23:37:49 +0100 Subject: [PATCH] F #5228: add support for LXC raw section (#923) --- src/vmm_mad/remotes/lib/lxc/opennebula_vm.rb | 34 +++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/vmm_mad/remotes/lib/lxc/opennebula_vm.rb b/src/vmm_mad/remotes/lib/lxc/opennebula_vm.rb index 53c6e2aaa5..dd8a95811f 100644 --- a/src/vmm_mad/remotes/lib/lxc/opennebula_vm.rb +++ b/src/vmm_mad/remotes/lib/lxc/opennebula_vm.rb @@ -123,7 +123,8 @@ class LXCVM < OpenNebulaVM "g 0 #{@lxcrc[:id_map]} #{@lxcrc[:max_map]}"] # rubocop:enable Layout/LineLength - hash_to_lxc(lxc) + # hash_to_lxc values should prevail over raw section values + hash_to_lxc(parse_raw.merge(lxc)) end # Returns an Array of Disk objects, each one represents an OpenNebula DISK @@ -171,6 +172,37 @@ class LXCVM < OpenNebulaVM lxc end + def parse_raw + raw_map = {} + + begin + return raw_map if @xml['//RAW/TYPE'].downcase != 'lxc' + + # only add valid lxc configuration statements + regex = /^(lxc\.(?:[a-zA-Z0-9]+\.)*[a-zA-Z0-9]+\s*)=(.*)$/ + + @xml['//RAW/DATA'].each_line do |l| + l.strip! + + match = l.match(regex) + + next if match.nil? + + key = match[1].strip + value = match[2].strip + + if !raw_map[key].nil? + raw_map[key] = value + else + raw_map[key] = Array(raw_map[key]) << value + end + end + rescue StandardError + end + + raw_map + end + end # ------------------------------------------------------------------------------