diff options
author | Davide Cavalca <dcavalca@fb.com> | 2020-12-04 13:36:17 -0800 |
---|---|---|
committer | Davide Cavalca <dcavalca@fb.com> | 2020-12-04 14:54:04 -0800 |
commit | 6df8966707bf8a2436188c95e61bea7afe838b9c (patch) | |
tree | 8c413a2c127dc215b40ca8396fb2f08014b486f8 | |
parent | 876839a6324a635f15db4118366c938bdd3d675b (diff) | |
download | ohai-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.rb | 40 | ||||
-rw-r--r-- | spec/unit/plugins/grub2_spec.rb | 51 |
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 |