在厨师库中无法访问os.windows?
,而在食谱中则可以使用。我认为有可能通过在我的图书馆中添加require 'os'
行使其可用而获得它。
require 'os'
module Project
module Helper
# ...
def serviceExists?(service_name)
if os.windows?
puts 'Windows detected'
# ... etc ...
else
raise 'Unimplemented..'
end
end
# ...
end
end
这没有用。相反,我收到一个错误:
LoadError
---------
cannot load such file -- os
是否可以在不将os
作为参数传递给方法的情况下访问os
变量或确定库中的操作系统?我希望处理库中的操作系统复杂性,以使配方更整洁。
我正在通过以下not_if
语句调用代码。
batch "Install #{service_name} service" do
extend Project::Helper
cwd install_home
code <<-EOH
@echo off
call \"installSvc.cmd\"
EOH
not_if { serviceExists?(service_name) }
end
答案 0 :(得分:0)
我稍微改变了方法,而不是尝试直接访问os
对象,而是通过'mixin'使用node
对象。
require 'win32/service'
module Project
module Helper
def serviceExists?(service_name)
if node['os'].include?('windows')
Win32::Service.exists?(service_name)
else
raise 'Checking for services under this platform is not implemented yet.'
end
end
end
end
Chef::Recipe.send(:include, Project::Helper)
Chef::Resource.send(:include, Project::Helper)
答案 1 :(得分:0)
使用ohai
...
使用gem_package
资源进行安装,然后利用ohai:
require 'ohai'
ohai = Ohai::System.new
ohai.all_plugins
os = ohai[:kernel][:os].downcase