summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Smith <tsmith@chef.io>2019-09-09 20:39:42 -0700
committerGitHub <noreply@github.com>2019-09-09 20:39:42 -0700
commit9aed370c712d9e064260b54e4399a9a2b86c587c (patch)
tree113cb84ba0f26516789ded657e2d25921b089072
parent73832440fbf7a202ae4a5455f688e5b4650858b4 (diff)
parent498e8aebb6791426e8915684421591e544c9fad4 (diff)
downloadchef-9aed370c712d9e064260b54e4399a9a2b86c587c.tar.gz
Merge pull request #8847 from MsysTechnologiesllc/bundle_install_with_local
Support to provide --local flag to gem installer.
-rw-r--r--lib/chef/cookbook/gem_installer.rb9
-rw-r--r--spec/unit/cookbook/gem_installer_spec.rb23
2 files changed, 29 insertions, 3 deletions
diff --git a/lib/chef/cookbook/gem_installer.rb b/lib/chef/cookbook/gem_installer.rb
index eab4b47241..cf0177d1d5 100644
--- a/lib/chef/cookbook/gem_installer.rb
+++ b/lib/chef/cookbook/gem_installer.rb
@@ -66,8 +66,13 @@ class Chef
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)
+ # Skip installation only if Chef::Config[:skip_gem_metadata_installation] option is true
+ unless Chef::Config[:skip_gem_metadata_installation]
+ # Add additional options to bundle install
+ cmd = [ "bundle", "install", Chef::Config[:gem_installer_bundler_options] ]
+ so = shell_out!(cmd, cwd: dir, env: { "PATH" => path_with_prepended_ruby_bin })
+ Chef::Log.info(so.stdout)
+ end
end
end
Gem.clear_paths
diff --git a/spec/unit/cookbook/gem_installer_spec.rb b/spec/unit/cookbook/gem_installer_spec.rb
index b7c8db514a..807e801aaf 100644
--- a/spec/unit/cookbook/gem_installer_spec.rb
+++ b/spec/unit/cookbook/gem_installer_spec.rb
@@ -59,23 +59,25 @@ describe Chef::Cookbook::GemInstaller do
expect(File).to receive(:open).and_yield(gemfile)
expect(gemfile).to receive(:path).and_return("")
expect(IO).to receive(:read).and_return("")
- expect(gem_installer).to receive(:shell_out!).and_return(shell_out)
end
it "generates a valid Gemfile" do
+ expect(gem_installer).to receive(:shell_out!).and_return(shell_out)
expect { gem_installer.install }.to_not raise_error
expect { bundler_dsl }.to_not raise_error
end
it "generate a Gemfile with all constraints" do
+ expect(gem_installer).to receive(:shell_out!).and_return(shell_out)
expect { gem_installer.install }.to_not raise_error
expect(bundler_dsl.dependencies.find { |d| d.name == "httpclient" }.requirements_list.length).to eql(2)
end
it "generates a valid Gemfile when Chef::Config[:rubygems_url] is set to a String" do
+ expect(gem_installer).to receive(:shell_out!).and_return(shell_out)
Chef::Config[:rubygems_url] = "https://www.rubygems.org"
expect { gem_installer.install }.to_not raise_error
@@ -83,10 +85,29 @@ describe Chef::Cookbook::GemInstaller do
end
it "generates a valid Gemfile when Chef::Config[:rubygems_url] is set to an Array" do
+ expect(gem_installer).to receive(:shell_out!).and_return(shell_out)
Chef::Config[:rubygems_url] = [ "https://www.rubygems.org" ]
expect { gem_installer.install }.to_not raise_error
expect(bundler_dsl.dependencies.find { |d| d.name == "httpclient" }.requirements_list.length).to eql(2)
end
+
+ it "skip metadata installation when Chef::Config[:skip_gem_metadata_installation] is set to true" do
+ Chef::Config[:skip_gem_metadata_installation] = true
+ expect(gem_installer.install).to_not receive(:shell_out!)
+ end
+
+ it "install metadata when Chef::Config[:skip_gem_metadata_installation] is not true" do
+ expect(gem_installer).to receive(:shell_out!).and_return(shell_out)
+ expect(Chef::Log).to receive(:info).and_return("")
+ expect(gem_installer.install).to be_nil
+ end
+
+ it "install from local cache when Chef::Config[:gem_installer_bundler_options] is set to local" do
+ Chef::Config[:gem_installer_bundler_options] = "--local"
+ expect(gem_installer).to receive(:shell_out!).with(["bundle", "install", "--local"], any_args).and_return(shell_out)
+ expect(Chef::Log).to receive(:info).and_return("")
+ expect(gem_installer.install).to be_nil
+ end
end