From c25ee385fbcd3122855795d128a951c9c3458e6e Mon Sep 17 00:00:00 2001
From: Thomas Bellman <bellman@lysator.liu.se>
Date: Tue, 19 Dec 2017 16:29:18 +0100
Subject: [PATCH] Add support for Grub 2 in kernel_option.

This adds a new helper for bootloader::kernel_option handling the
Grub 2 case.  This also only supports removing options, though, not
setting them.
---
 manifests/grub2/kernel_option.pp | 45 ++++++++++++++++++++++++++++++++
 manifests/kernel_option.pp       |  6 +++++
 2 files changed, 51 insertions(+)
 create mode 100644 manifests/grub2/kernel_option.pp

diff --git a/manifests/grub2/kernel_option.pp b/manifests/grub2/kernel_option.pp
new file mode 100644
index 0000000..d0b13fd
--- /dev/null
+++ b/manifests/grub2/kernel_option.pp
@@ -0,0 +1,45 @@
+# Copyright © 2017   Thomas Bellman, Linköping, Sweden
+# Licensed under the GNU LGPL v3+; see the README file for more information.
+
+
+/*
+ * Internal helper for the bootloader::kernel_option definition.
+ */
+define bootloader::grub2::kernel_option($ensure, $value)
+{
+    include bootloader::grub2::rebuild_grub_cfg
+
+    $prefix = '^(GRUB_CMDLINE_LINUX="?(|.*\s))'
+    $suffix = '((|\s.*)("?))\s*$'
+    $qname = regexp_quote($name)
+
+    if ($ensure == 'absent')
+    {
+	regexp_replace_lines {
+	    "bootloader::grub2::kernel_option::${name}":
+		file => '/etc/default/grub',
+		pattern => "${prefix}${qname}(=[^ \t\"]*)?${suffix}",
+		replacement => '\1\4',
+		notify => Class['bootloader::grub2::rebuild_grub_cfg'];
+	}
+    }
+    elsif ($ensure != 'present')
+    {
+	fail("Bootloader::Grub2::Kernel_Option[${title}]: ",
+	     "Bad ensure parameter, ${ensure}")
+    }
+    elsif ($value == true or $value == false)
+    {
+	# Detecting if the option is already present is not easily done
+	# using regexps...
+	fail("Bootloader::Grub2::Kernel_option[${title}]: ",
+	     "Setting a kernel option is not yet implemented.")
+    }
+    else
+    {
+	# Detecting if the option is already present is not easily done
+	# using regexps...
+	fail("Bootloader::Grub2::Kernel_option[${title}]: ",
+	     "Setting a kernel option is not yet implemented.")
+    }
+}
diff --git a/manifests/kernel_option.pp b/manifests/kernel_option.pp
index 5c896fb..6bb1464 100644
--- a/manifests/kernel_option.pp
+++ b/manifests/kernel_option.pp
@@ -34,6 +34,12 @@ define bootloader::kernel_option($ensure='present', $value=undef)
 		    name => $name, ensure => $ensure, value => $value;
 	    }
 	}
+	'grub2': {
+	    bootloader::grub2::kernel_option {
+		$title:
+		    name => $name, ensure => $ensure, value => $value;
+	    }
+	}
 	default: {
 	    fail("Bootloader::Kernel_option[${title}]: ",
 		 "Unsupported bootloader, ${bootloader}")
-- 
GitLab