summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Smith <tsmith@chef.io>2017-09-08 19:02:27 -0700
committerGitHub <noreply@github.com>2017-09-08 19:02:27 -0700
commitc749a1f2ed714f2babd3df68fa515d475947b2ca (patch)
tree7859e97705397ea642bcc1444fc81e3777d177df
parent1faa4ba02326914e6e81506f090ebce14fea291e (diff)
parentfce6fcb3e9f0283e9b4735895e4eb448943c4ebf (diff)
downloadohai-c749a1f2ed714f2babd3df68fa515d475947b2ca.tar.gz
Merge pull request #1055 from jeunito/bug/833
Detect LXC if LXC and Docker are on the same host
-rw-r--r--lib/ohai/plugins/linux/virtualization.rb5
-rw-r--r--spec/unit/plugins/linux/virtualization_spec.rb11
2 files changed, 16 insertions, 0 deletions
diff --git a/lib/ohai/plugins/linux/virtualization.rb b/lib/ohai/plugins/linux/virtualization.rb
index 9a484680..db8a1eb3 100644
--- a/lib/ohai/plugins/linux/virtualization.rb
+++ b/lib/ohai/plugins/linux/virtualization.rb
@@ -185,6 +185,11 @@ Ohai.plugin(:Virtualization) do
virtualization[:system] = $1
virtualization[:role] = "guest"
virtualization[:systems][$1.to_sym] = "guest"
+ elsif File.read("/proc/1/environ") =~ /container=lxc/
+ Ohai::Log.debug("Plugin Virtualization: /proc/1/environ indicates lxc container. Detecting as lxc guest")
+ virtualization[:system] = "lxc"
+ virtualization[:role] = "guest"
+ virtualization[:systems][:lxc] = "guest"
elsif lxc_version_exists? && File.read("/proc/self/cgroup") =~ %r{\d:[^:]+:/$}
# lxc-version shouldn't be installed by default
# Even so, it is likely we are on an LXC capable host that is not being used as such
diff --git a/spec/unit/plugins/linux/virtualization_spec.rb b/spec/unit/plugins/linux/virtualization_spec.rb
index 481c0f6f..ab236a4d 100644
--- a/spec/unit/plugins/linux/virtualization_spec.rb
+++ b/spec/unit/plugins/linux/virtualization_spec.rb
@@ -552,6 +552,7 @@ CGROUP
2:cpu:/Charlie
1:cpuset:/Charlie
CGROUP
+ allow(File).to receive(:read).with("/proc/1/environ").and_return("")
expect(File).to receive(:exist?).with("/proc/self/cgroup").and_return(true)
allow(File).to receive(:read).with("/proc/self/cgroup").and_return(self_cgroup)
plugin.run
@@ -572,6 +573,7 @@ CGROUP
CGROUP
expect(File).to receive(:exist?).with("/proc/self/cgroup").and_return(true)
allow(File).to receive(:read).with("/proc/self/cgroup").and_return(self_cgroup)
+ allow(File).to receive(:read).with("/proc/1/environ").and_return("")
end
it "sets lxc host if lxc-version exists" do
@@ -600,6 +602,14 @@ CGROUP
expect(plugin[:virtualization]).to eq({ "systems" => {} })
end
+ it "sets lxc guest if /proc/1/environ has lxccontainer string in it" do
+ one_environ = "container=lxccontainer_ttys=/dev/pts/0 /dev/pts/1 /dev/pts/2 /dev/pts/3".chomp
+ allow(File).to receive(:read).with("/proc/1/environ").and_return(one_environ)
+ plugin.run
+ expect(plugin[:virtualization][:system]).to eq("lxc")
+ expect(plugin[:virtualization][:role]).to eq("guest")
+ end
+
end
it "does not set virtualization if /proc/self/cgroup isn't there" do
@@ -682,6 +692,7 @@ CGROUP
CGROUP
allow(File).to receive(:exist?).with("/proc/self/cgroup").and_return(true)
allow(File).to receive(:read).with("/proc/self/cgroup").and_return(self_cgroup)
+ allow(File).to receive(:read).with("/proc/1/environ").and_return("")
plugin.run
expect(plugin[:virtualization]).to eq({ "systems" => {} })
end