Определение операционной системы в библиотеке Chef - PullRequest
0 голосов
/ 09 ноября 2018

Нет доступа к 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

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

использование ohai ...

установите его, используя ресурс gem_package, а затем используйте ohai:

require 'ohai'
ohai = Ohai::System.new
ohai.all_plugins
os = ohai[:kernel][:os].downcase
0 голосов
/ 09 ноября 2018

Я немного изменил подход вместо того, чтобы пытаться получить доступ к объекту os напрямую, я вместо этого использовал объект node через 'mixin'.

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)
...