summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Smith <tsmith@chef.io>2021-02-22 09:25:15 -0800
committerGitHub <noreply@github.com>2021-02-22 09:25:15 -0800
commiteb27fdc9e87f8fae9075535398d33df3e5e916a8 (patch)
tree8c50980314206b32955160a45826b84f1f3ec942
parent6453c81de7c2fcd2a8815120d2893293988988e0 (diff)
parent3b7fcce31668aebe2720ea5138cd0bc972d741f0 (diff)
downloadohai-eb27fdc9e87f8fae9075535398d33df3e5e916a8.tar.gz
Merge pull request #1624 from collinmcneese/effortless_check
Signed-off-by: Tim Smith <tsmith@chef.io>
-rw-r--r--lib/ohai/plugins/chef.rb11
-rw-r--r--spec/unit/plugins/chef_spec.rb19
2 files changed, 30 insertions, 0 deletions
diff --git a/lib/ohai/plugins/chef.rb b/lib/ohai/plugins/chef.rb
index 8a01e68c..ae027727 100644
--- a/lib/ohai/plugins/chef.rb
+++ b/lib/ohai/plugins/chef.rb
@@ -20,9 +20,19 @@
Ohai.plugin(:Chef) do
provides "chef_packages/chef"
+ def chef_effortless?
+ # Determine if client is being run as a Habitat package.
+ if Chef::CHEF_ROOT.include?("hab/pkgs/chef/chef")
+ # Determine if client is running in zero mode which would show it is using the Effortless pattern.
+ # Explicitly set response to true or nil, not false
+ ChefConfig::Config["chef_server_url"].include?("chefzero://")
+ end
+ end
+
collect_data(:default, :target) do
begin
require "chef/version"
+ require "chef-config/config" unless defined?(ChefConfig::Config)
rescue Gem::LoadError
logger.trace("Plugin Chef: Unable to load the chef gem to determine the version")
# this catches when you've done a major version bump of ohai, but
@@ -35,5 +45,6 @@ Ohai.plugin(:Chef) do
chef_packages[:chef] = Mash.new
chef_packages[:chef][:version] = Chef::VERSION
chef_packages[:chef][:chef_root] = Chef::CHEF_ROOT
+ chef_packages[:chef][:chef_effortless] = chef_effortless?
end
end
diff --git a/spec/unit/plugins/chef_spec.rb b/spec/unit/plugins/chef_spec.rb
index 2584a278..0db506fc 100644
--- a/spec/unit/plugins/chef_spec.rb
+++ b/spec/unit/plugins/chef_spec.rb
@@ -20,6 +20,8 @@
begin
require "spec_helper"
+ require "chef/version"
+ require "chef-config/config" unless defined?(ChefConfig::Config)
describe Ohai::System, "plugin chef" do
before do
@@ -31,6 +33,23 @@ begin
expect(@plugin[:chef_packages][:chef][:version]).to eq(Chef::VERSION)
end
+ it "sets [:chef_packages][:chef][:chef_root] to the current chef root directory", if: defined?(Chef) do
+ @plugin.run
+ expect(@plugin[:chef_packages][:chef][:chef_root]).to eq(Chef::CHEF_ROOT)
+ end
+
+ it "does not create [:chef_packages][:chef][:chef_effortless] by default", if: defined?(Chef) do
+ @plugin.run
+ expect(@plugin[:chef_packages][:chef][:chef_effortless]).to eq(nil)
+ end
+
+ it "sets [:chef_packages][:chef][:chef_effortless] to TRUE if executed from Habitat via CHEF_ROOT using Chef zero", if: defined?(Chef) do
+ stub_const("Chef::CHEF_ROOT", "/hab/pkgs/chef/chef-infra-client/X.X.X/XXXX/vendor/gems/chef-X.X.X/lib")
+ stub_const("ChefConfig::Config", { "chef_server_url" => "chefzero://localhost:1" })
+ @plugin.run
+ expect(@plugin[:chef_packages][:chef][:chef_effortless]).to eq(true)
+ end
+
pending "would set [:chef_packages][:chef][:version] if chef was available", unless: defined?(Chef)
end
rescue LoadError