Now that we know the basics of how to use bundler, let’s put our new knowledge to good use by adding a gem to a project. We’ll look at how to add generate-puppetfile to a puppet Controlrepo, but you can add any gem to any project you’d like. It’s very simple.
Start by cloning your project and checking out a new branch:
[rnelson0@build02 controlrepo:production]$ git checkout -b generate-puppetfile Switched to a new branch 'generate-puppetfile'
Open up the existing Gemfile. If you don’t have one, you just need the source statement followed by one or more gems.
[rnelson0@build02 controlrepo:generate-puppetfile]$ cat Gemfile source 'https://rubygems.org' group :development, :test do gem 'json', :require => false gem 'metadata-json-lint', :require => false gem 'puppetlabs_spec_helper', :require => false gem 'puppet-lint', :require => false gem 'rake', :require => false gem 'rspec-puppet', :require => false end if puppetversion = ENV['PUPPET_GEM_VERSION'] gem 'puppet', puppetversion, :require => false else gem 'puppet', :require => false end # vim:ft=ruby
Add the gem (generate-puppetfile) to the file:
[rnelson0@build02 controlrepo:generate-puppetfile]$ cat Gemfile source 'https://rubygems.org' group :development, :test do gem 'json', :require => false gem 'metadata-json-lint', :require => false gem 'puppetlabs_spec_helper', :require => false gem 'puppet-lint', :require => false gem 'rake', :require => false gem 'rspec-puppet', :require => false gem 'generate-puppetfile' end if puppetversion = ENV['PUPPET_GEM_VERSION'] gem 'puppet', puppetversion, :require => false else gem 'puppet', :require => false end # vim:ft=ruby
Now run bundle install:
[rnelson0@build02 controlrepo:generate-puppetfile]$ bundle install --path vendor --without system_tests Fetching gem metadata from https://rubygems.org/......... Fetching version metadata from https://rubygems.org/.. Installing rake 10.4.2 Installing diff-lcs 1.2.5 Installing facter 2.4.4 Installing generate-puppetfile 0.9.6 Installing json_pure 1.8.2 Installing hiera 1.3.4 Installing json 1.8.3 with native extensions Installing metaclass 0.0.4 Installing spdx-licenses 1.0.0 Installing metadata-json-lint 0.0.11 Installing mocha 1.1.0 Installing puppet 3.7.3 Installing puppet-lint 1.1.0 Installing puppet-syntax 2.0.0 Installing rspec-core 2.99.2 Installing rspec-expectations 2.99.2 Installing rspec-mocks 2.99.4 Installing rspec 2.99.0 Installing rspec-puppet 2.2.0 Installing puppetlabs_spec_helper 0.10.3 Using bundler 1.10.6 Bundle complete! 8 Gemfile dependencies, 21 gems now installed. Gems in the group system_tests were not installed. Bundled gems are installed into ./vendor.
And now you can use the gem in your project with bundle exec, without installing it globally:
[rnelson0@build02 controlrepo:generate-puppetfile]$ bundle exec generate-puppetfile -v generate-puppetfile v0.9.6
At this point, it may be worth adding an alias to our shell:
[rnelson0@build02 controlrepo:generate-puppetfile]$ alias be alias be='bundle exec'
Enjoy!