summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavide Cavalca <dcavalca@fb.com>2020-12-04 13:36:17 -0800
committerDavide Cavalca <dcavalca@fb.com>2020-12-04 14:54:04 -0800
commit6df8966707bf8a2436188c95e61bea7afe838b9c (patch)
tree8c413a2c127dc215b40ca8396fb2f08014b486f8
parent876839a6324a635f15db4118366c938bdd3d675b (diff)
downloadohai-6df8966707bf8a2436188c95e61bea7afe838b9c.tar.gz
grub2: add plugin to expose GRUB2 environment variables
Signed-off-by: Davide Cavalca <dcavalca@fb.com>
-rw-r--r--lib/ohai/plugins/grub2.rb40
-rw-r--r--spec/unit/plugins/grub2_spec.rb51
2 files changed, 91 insertions, 0 deletions
diff --git a/lib/ohai/plugins/grub2.rb b/lib/ohai/plugins/grub2.rb
new file mode 100644
index 00000000..02b14e26
--- /dev/null
+++ b/lib/ohai/plugins/grub2.rb
@@ -0,0 +1,40 @@
+# frozen_string_literal: true
+#
+# Author:: Davide Cavalca <dcavalca@fb.com>
+# Copyright:: Copyright (c) 2020 Facebook
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+Ohai.plugin(:Grub2) do
+ provides "grub2/environment"
+ optional true
+
+ collect_data(:dragonflybsd, :freebsd, :linux, :netbsd) do
+ editenv_path = which("grub2-editenv")
+ if editenv_path
+ editenv_out = shell_out("#{editenv_path} list")
+
+ grub2 Mash.new unless grub2
+ grub2[:environment] ||= Mash.new
+
+ editenv_out.stdout.each_line do |line|
+ key, val = line.split("=", 2)
+ grub2[:environment][key] = val.strip
+ end
+ else
+ logger.trace("Plugin Grub2: Could not find grub2-editenv. Skipping plugin.")
+ end
+ end
+end
diff --git a/spec/unit/plugins/grub2_spec.rb b/spec/unit/plugins/grub2_spec.rb
new file mode 100644
index 00000000..03fae9cd
--- /dev/null
+++ b/spec/unit/plugins/grub2_spec.rb
@@ -0,0 +1,51 @@
+#
+# Author:: Davide Cavalca <dcavalca@fb.com>
+# Copyright:: Copyright (c) 2020 Facebook
+# License:: Apache License, Version 2.0
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+require "spec_helper"
+
+describe Ohai::System, "grub2 plugin" do
+ let(:plugin) { get_plugin("grub2") }
+
+ before do
+ allow(plugin).to receive(:collect_os).and_return(:linux)
+ end
+
+ it "populates grub2 if grub2-editenv is found" do
+ editenv_out = <<-EDITENV_OUT
+saved_entry=f4fd6be6243646e1a76a42d50f219818-5.2.9-229
+boot_success=1
+kernelopts=root=UUID=6db0ffcd-70ec-4333-86c3-873a9e2a0d77 ro
+ EDITENV_OUT
+ allow(plugin).to receive(:which).with("grub2-editenv").and_return("/bin/grub2-editenv")
+ allow(plugin).to receive(:shell_out).with("/bin/grub2-editenv list").and_return(mock_shell_out(0, editenv_out, ""))
+ plugin.run
+ expect(plugin[:grub2].to_hash).to eq({
+ "environment" => {
+ "saved_entry" => "f4fd6be6243646e1a76a42d50f219818-5.2.9-229",
+ "boot_success" => "1",
+ "kernelopts" => "root=UUID=6db0ffcd-70ec-4333-86c3-873a9e2a0d77 ro",
+ },
+ })
+ end
+
+ it "does not populate grub2 if grub2-editenv is not found" do
+ allow(plugin).to receive(:which).with("grub2-editenv").and_return(false)
+ plugin.run
+ expect(plugin[:grub2]).to be(nil)
+ end
+end