ohai で仮想化環境の種類を取得する
ohai の version は、8.0.1 です。
仮想化環境の種類は、以下のように格納されています。
{ "virtualization": { "system": "VIRTUALIZATION_TYPE" } }
当然ですが、仮想環境下でなければ "virtualization" key はありません。
chef で取る場合は、
node[:virtualization][:system]
で取れます。
ちなみに、Docker container 内で ohai を使った場合は、
{ "virtualization": { "system": "lxc" } }
となるので、
Docker container の provisioning に chef を使い、
Docker の時だけ処理を変えたい場合は、
node[:virtualization][:system] == "lxc" みたいな感じになると思います。
ただ、この方法は、LXC と Docker で同一の cookbook を使いたい場合は使えないです。
ohai/virtualization.rb at 8-stable · opscode/ohai · GitHub を見てみると、
どのように LXC(Docker) と判別しているかがわかります。
/proc/self/cgroup を parse しているようです。
Docker container 内の /proc/self/cgroup は、以下のようになっていました。
11:name=systemd:/ 10:hugetlb:/ 9:perf_event:/docker/0f963a9815788bdc17074c65112165580e449fdd4f2f71e7e888aa6cb6f21b01 8:blkio:/docker/0f963a9815788bdc17074c65112165580e449fdd4f2f71e7e888aa6cb6f21b01 7:freezer:/docker/0f963a9815788bdc17074c65112165580e449fdd4f2f71e7e888aa6cb6f21b01 6:devices:/docker/0f963a9815788bdc17074c65112165580e449fdd4f2f71e7e888aa6cb6f21b01 5:memory:/docker/0f963a9815788bdc17074c65112165580e449fdd4f2f71e7e888aa6cb6f21b01 4:cpuacct:/docker/0f963a9815788bdc17074c65112165580e449fdd4f2f71e7e888aa6cb6f21b01 3:cpu:/docker/0f963a9815788bdc17074c65112165580e449fdd4f2f71e7e888aa6cb6f21b01 2:cpuset:/
コードを見てもわかると思いますが、docker と lxc が含まれているかを見ているので、これを使えば LXC と Docker の判別ができそうです。
ohai/lib/ohai/plugins at 8-stable · opscode/ohai · GitHub 以下の、
{freebsd,linux,netbsd,openbsd,solaris2}/virtualization.rb に定義が書いてあります。
以下にOSごとに取れる値をまとめました。