Skip to content

Instantly share code, notes, and snippets.

@sawanoboly
Last active August 29, 2015 14:01
Show Gist options
  • Save sawanoboly/a07a5e33cd12ebad7c7f to your computer and use it in GitHub Desktop.
Save sawanoboly/a07a5e33cd12ebad7c7f to your computer and use it in GitHub Desktop.
Ohai6のプラグインをOhai7のSyntaxに書き直す ref: http://qiita.com/sawanoboly/items/ca225effa6d28912624d
Ohai.plugin(:Joyent) do
%w{ sm_uuid sm_id sm_image sm_image_id sm_image_ver sm_baseimage sm_baseimage_id sm_baseimage_ver sm_pkgsrc }.each do |info|
provides "joyent/#{info}"
end
provides 'virtualization/guest_id'
depends 'os', 'platform', 'virtualization'
def collect_solaris_guestid
command = '/usr/sbin/zoneadm list -p'
so = shell_out(command)
so.stdout.split(':').first
end
def collect_product_file
lines = []
if ::File.exists?("/etc/product")
::File.open("/etc/product") do |file|
while line = file.gets
lines << line
end
end
end
lines
end
def collect_pkgsrc
if File.exist?('/opt/local/etc/pkg_install.conf')
sm_pkgsrc = ::File.read("/opt/local/etc/pkg_install.conf").split("=")
sm_pkgsrc[1].chomp
else
nil
end
end
def is_smartos?
platform == 'smartos'
end
collect_data do
if is_smartos?
joyent Mash.new
# copy uuid
joyent[:sm_uuid] = virtualization[:guest_uuid]
# get zone id unless globalzone
unless joyent[:sm_uuid] == "global"
virtualization[:guest_id] = collect_solaris_guestid
joyent[:sm_id] = virtualization[:guest_id]
end
# retrieve image name and pkgsrc
collect_product_file.each do |line|
case line
when /^Image/
sm_image = line.split(" ")
joyent[:sm_image_id] = sm_image[1]
joyent[:sm_image_ver] = sm_image[2]
when /^Base Image/
sm_baseimage = line.split(" ")
joyent[:sm_baseimage_id] = sm_baseimage[2]
joyent[:sm_baseimage_ver] = sm_baseimage[3]
end
end
## retrieve pkgsrc
joyent[:sm_pkgsrc] = collect_pkgsrc if collect_pkgsrc
end
end
end
require 'spec_helper'
describe Ohai::System, "plugin joyent" do
before(:each) do
@plugin = get_plugin('joyent')
end
describe "without joyent" do
before(:each) do
@plugin.stub(:is_smartos?).and_return(false)
end
it "should NOT create joyent" do
@plugin.run
@plugin[:joyent].should be_nil
end
end
describe "with joyent" do
before(:each) do
@plugin.stub(:is_smartos?).and_return(true)
@plugin[:virtualization] = Mash.new
@plugin[:virtualization][:guest_uuid] = "global"
end
it "should create joyent" do
@plugin.run
@plugin[:joyent].should_not be_nil
end
describe "under global zone" do
before(:each) do
@plugin.run
end
it "should ditect global zone" do
@plugin[:joyent][:sm_uuid].should eql 'global'
end
it "should NOT create sm_id" do
@plugin[:joyent][:sm_id].should be_nil
end
end
describe "under smartmachine" do
before(:each) do
@plugin[:virtualization][:guest_uuid] = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx'
@plugin.stub(:collect_solaris_guestid).and_return('30')
@plugin.stub(:collect_product_file).and_return(["Name: Joyent Instance", "Image: base64 13.4.2", "Documentation: http://wiki.joyent.com/jpc2/SmartMachine+Base"])
@plugin.stub(:collect_pkgsrc).and_return('http://pkgsrc.joyent.com/packages/SmartOS/2013Q4/x86_64/All')
@plugin.run
end
it "should retrive zone uuid" do
@plugin[:joyent][:sm_uuid].should eql 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx'
end
it "should collect sm_id" do
@plugin[:joyent][:sm_id].should eql '30'
end
it "should collect images" do
@plugin[:joyent][:sm_image].should_not nil
@plugin[:joyent][:sm_image_id].should_not nil
@plugin[:joyent][:sm_image_ver].should_not nil
end
it "should collect pkgsrc" do
@plugin[:joyent][:sm_pkgsrc].should eql 'http://pkgsrc.joyent.com/packages/SmartOS/2013Q4/x86_64/All'
end
end
end
end
Ohai::System plugin joyent
without joyent
should NOT create joyent
with joyent
should create joyent
under global zone
should ditect global zone
should NOT create sm_id
under smartmachine
should retrive zone uuid
should collect sm_id
should collect images
should collect pkgsrc
Finished in 0.01159 seconds
8 examples, 0 failures
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment