Class: Chef::Cookbook::GemInstaller
- Inherits:
-
Object
- Object
- Chef::Cookbook::GemInstaller
- Includes:
- Mixin::ShellOut
- Defined in:
- lib/chef/cookbook/gem_installer.rb
Instance Attribute Summary collapse
-
#cookbook_collection ⇒ Chef::CookbookCollection
The cookbook collection.
-
#events ⇒ Chef::EventDispatch::Dispatcher
The client event dispatcher.
Instance Method Summary collapse
-
#initialize(cookbook_collection, events) ⇒ GemInstaller
constructor
A new instance of GemInstaller.
-
#install ⇒ Object
Installs the gems into the omnibus gemset.
Methods included from Mixin::ShellOut
#a_to_s, #clean_array, #shell_out, #shell_out!, #shell_out_compact, #shell_out_compact!, #shell_out_compact_timeout, #shell_out_compact_timeout!, #shell_out_with_systems_locale, #shell_out_with_systems_locale!
Methods included from Mixin::PathSanity
#enforce_path_sanity, #sanitized_path
Constructor Details
#initialize(cookbook_collection, events) ⇒ GemInstaller
31 32 33 34 |
# File 'lib/chef/cookbook/gem_installer.rb', line 31 def initialize(cookbook_collection, events) @cookbook_collection = cookbook_collection @events = events end |
Instance Attribute Details
#cookbook_collection ⇒ Chef::CookbookCollection
29 30 31 |
# File 'lib/chef/cookbook/gem_installer.rb', line 29 def cookbook_collection @cookbook_collection end |
#events ⇒ Chef::EventDispatch::Dispatcher
27 28 29 |
# File 'lib/chef/cookbook/gem_installer.rb', line 27 def events @events end |
Instance Method Details
#install ⇒ Object
Installs the gems into the omnibus gemset.
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/chef/cookbook/gem_installer.rb', line 38 def install cookbook_gems = Hash.new { |h, k| h[k] = [] } cookbook_collection.each_value do |cookbook_version| cookbook_version..gems.each do |args| cookbook_gems[args.first] += args[1..-1] end end events.cookbook_gem_start(cookbook_gems) unless cookbook_gems.empty? begin Dir.mktmpdir("chef-gem-bundle") do |dir| File.open("#{dir}/Gemfile", "w+") do |tf| Array(Chef::Config[:rubygems_url] || "https://www.rubygems.org").each do |s| tf.puts "source '#{s}'" end cookbook_gems.each do |gem_name, args| tf.puts "gem(*#{([gem_name] + args).inspect})" end tf.close Chef::Log.trace("generated Gemfile contents:") Chef::Log.trace(IO.read(tf.path)) so = shell_out!("bundle install", cwd: dir, env: { "PATH" => path_with_prepended_ruby_bin }) Chef::Log.info(so.stdout) end end Gem.clear_paths rescue Exception => e events.cookbook_gem_failed(e) raise end end events.cookbook_gem_finished end |