vagrant-berkshelf 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NzE0MzU1NWI1YjNlNTFiNGEwYjFlNGI4YzM3YTcyYWEyZmYzZTc1Yg==
5
+ data.tar.gz: !binary |-
6
+ YjBhYTE3OTU0OTc2NzZiNzhkMjJlZjJjMGE4ZGRmNzNiMjhkZTM2OA==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ ZjBlMzI2YTQzMDljZjhkOTNlMWU3YzY5ZWNlNzYyZTdjZTk3MDkxNzM0Njll
10
+ ODQzNzdmZjYyYjU2OGE2NjQ0ODgyZTA2NTljZTk1OTU5MzUwMDVjODkyYjc1
11
+ YjJlNjRkZDgyZjk0MDE3MGQ4ODY4ZmNkMzdiYzkwN2M1ZDBkMDg=
12
+ data.tar.gz: !binary |-
13
+ YTgxZmYwMGI3ZGM4NWNlYmE3OTkwMjc5OGZkYzZhN2Y0MmFhMmZmYTEzOWU2
14
+ YTlhOGUyNDEwODk4NDYzNjFlMGI5M2RiNjc4MjNlMmNhYTkzNjJlMmQwZDc1
15
+ ZmMzNWEzNGQxYWE3ZDJjYmMxNGVkZTQ4ZGZlMDdhNmM4MTJiODE=
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .rspec
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ notifications:
6
+ irc:
7
+ channels:
8
+ - "irc.freenode.org#berkshelf"
9
+ skip_join: true
10
+ use_notice: true
11
+ script: 'bundle exec thor spec:ci'
data/CHANGELOG.md ADDED
@@ -0,0 +1,18 @@
1
+ # 1.2.0
2
+ - Rename to vagrant-berkshelf
3
+ - Trigger the plugin also on `vagrant reload`
4
+ - Check Vagrant version to see if it's supported
5
+ - cookbooks uploaded via chef_client will be forced and not frozen
6
+ - Fix bug with AWS provisioner
7
+ - Respect --no-provision flag
8
+
9
+ # 1.1.2
10
+ - Support Vagrant 1.2
11
+ - Plugin defaults to enabled, if Berksfile exists.
12
+
13
+ # 1.1.0
14
+ - Plugin defaults to disabled. Set 'config.berkshelf.enabled = true' in Vagrant config
15
+
16
+ # 1.0.0
17
+ - Separated Berkshelf Vagrant plugin into it's own gem (this one)
18
+ - Support Vagrant 1.1.x
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,44 @@
1
+ # Contributing
2
+
3
+ ## Developing
4
+
5
+ If you'd like to submit a patch:
6
+
7
+ 1. Fork the project.
8
+ 2. Make your feature addition or bug fix.
9
+ 3. Add [tests](#testing) for it. This is important so that it isn't broken in a
10
+ future version unintentionally.
11
+ 4. Commit. **Do not touch any unrelated code, such as the gemspec or version.**
12
+ If you must change unrelated code, do it in a commit by itself, so that it
13
+ can be ignored.
14
+ 5. Send a pull request.
15
+
16
+ ## Testing
17
+
18
+ ### Install prerequisites
19
+
20
+ Install the latest version of [Bundler](http://gembundler.com)
21
+
22
+ $ gem install bundler
23
+
24
+ Clone the project
25
+
26
+ $ git clone git://github.com/RiotGames/vagrant-berkshelf.git
27
+
28
+ and run:
29
+
30
+ $ cd vagrant-berkshelf
31
+ $ bundle-vagrant install
32
+
33
+ Bundler will install all gems and their dependencies required for testing and developing.
34
+
35
+ ### Running unit (RSpec) tests
36
+
37
+ One-time run with Thor
38
+
39
+ $ bundle exec thor spec
40
+
41
+ Or you can setup a quick feedback loop with Guard
42
+
43
+ $ bundle exec guard start
44
+ guard> rspec
data/Gemfile ADDED
@@ -0,0 +1,35 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :development do
6
+ gem 'vagrant', github: "mitchellh/vagrant"
7
+ gem 'coolline'
8
+ gem 'guard', '>= 1.5.0'
9
+ gem 'guard-rspec'
10
+ gem 'guard-spork'
11
+ gem 'guard-yard'
12
+ gem 'redcarpet'
13
+ gem 'yard'
14
+ gem 'fuubar'
15
+
16
+ require 'rbconfig'
17
+
18
+ if RbConfig::CONFIG['target_os'] =~ /darwin/i
19
+ gem 'growl', require: false
20
+ gem 'rb-fsevent', require: false
21
+
22
+ if `uname`.strip == 'Darwin' && `sw_vers -productVersion`.strip >= '10.8'
23
+ gem 'terminal-notifier-guard', '~> 1.5.3', require: false
24
+ end rescue Errno::ENOENT
25
+
26
+ elsif RbConfig::CONFIG['target_os'] =~ /linux/i
27
+ gem 'libnotify', '~> 0.8.0', require: false
28
+ gem 'rb-inotify', require: false
29
+
30
+ elsif RbConfig::CONFIG['target_os'] =~ /mswin|mingw/i
31
+ gem 'rb-notifu', '>= 0.0.4', require: false
32
+ gem 'wdm', require: false
33
+ gem 'win32console', require: false
34
+ end
35
+ end
data/Guardfile ADDED
@@ -0,0 +1,16 @@
1
+ guard 'spork' do
2
+ watch('Gemfile')
3
+ watch('spec/spec_helper.rb') { :rspec }
4
+ end
5
+
6
+ guard 'yard', stdout: '/dev/null', stderr: '/dev/null' do
7
+ watch(%r{app/.+\.rb})
8
+ watch(%r{lib/.+\.rb})
9
+ watch(%r{ext/.+\.c})
10
+ end
11
+
12
+ guard 'rspec', cli: "--color --drb --format Fuubar", all_on_start: false, all_after_pass: false do
13
+ watch(%r{^spec/unit/.+_spec\.rb$})
14
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/unit/#{m[1]}_spec.rb" }
15
+ watch('spec/spec_helper.rb') { "spec" }
16
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,13 @@
1
+ Copyright (c) 2012-2013 Riot Games
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
data/README.md ADDED
@@ -0,0 +1,35 @@
1
+ # Berkshelf::Vagrant
2
+ [![Gem Version](https://badge.fury.io/rb/vagrant-berkshelf.png)](http://badge.fury.io/rb/vagrant-berkshelf)
3
+ [![Build Status](https://travis-ci.org/RiotGames/vagrant-berkshelf.png?branch=master)](https://travis-ci.org/RiotGames/vagrant-berkshelf)
4
+ [![Dependency Status](https://gemnasium.com/RiotGames/vagrant-berkshelf.png)](https://gemnasium.com/RiotGames/vagrant-berkshelf)
5
+ [![Code Climate](https://codeclimate.com/github/RiotGames/vagrant-berkshelf.png)](https://codeclimate.com/github/RiotGames/vagrant-berkshelf)
6
+
7
+ A Vagrant plugin to add Berkshelf integration to the Chef provisioners
8
+
9
+ ## Installation
10
+
11
+ Install Vagrant 1.1.x from the [Vagrant downloads page](http://downloads.vagrantup.com/)
12
+
13
+ Install the Berkshelf Vagrant plugin
14
+
15
+ $ vagrant plugin install vagrant-berkshelf
16
+
17
+ ## Usage
18
+
19
+ Once the Berkshelf Vagrant plugin is installed it can be enabled in your Vagrantfile
20
+
21
+
22
+ Vagrant.configure("2") do |config|
23
+ ...
24
+ config.berkshelf.enabled = true
25
+ ...
26
+ end
27
+
28
+ The plugin will look in your current working directory for your `Berksfile` by default. Just ensure that your Berksfile exists and when you run `vagrant up`, `vagrant provision`, or `vagrant destroy` the Berkshelf integration will automatically kick in!
29
+
30
+ # Authors
31
+ - Jamie Winsor (<reset@riotgames.com>)
32
+
33
+ Thank you to all of our [Contributors](https://github.com/RiotGames/vagrant-berkshelf/graphs/contributors), testers, and users.
34
+
35
+ If you'd like to contribute, please see our [contribution guidelines](https://github.com/RiotGames/vagrant-berkshelf/blob/master/CONTRIBUTING.md) first.
data/Thorfile ADDED
@@ -0,0 +1,58 @@
1
+ # encoding: utf-8
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+
4
+ require 'bundler'
5
+ require 'bundler/setup'
6
+ require 'thor/rake_compat'
7
+
8
+ require 'berkshelf/vagrant'
9
+
10
+ class Default < Thor
11
+ class Gem < Thor
12
+ include Thor::RakeCompat
13
+ Bundler::GemHelper.install_tasks
14
+
15
+ namespace :gem
16
+
17
+ desc "build", "Build vagrant-berkshelf-#{Berkshelf::Vagrant::VERSION}.gem into the pkg directory"
18
+ def build
19
+ Rake::Task["build"].execute
20
+ end
21
+
22
+ desc "release", "Create tag v#{Berkshelf::Vagrant::VERSION} and build and push vagrant-berkshelf-#{Berkshelf::Vagrant::VERSION}.gem to Rubygems"
23
+ def release
24
+ Rake::Task["release"].execute
25
+ end
26
+
27
+ desc "install", "Build and install vagrant-berkshelf-#{Berkshelf::Vagrant::VERSION}.gem into system gems"
28
+ def install
29
+ Rake::Task["install"].execute
30
+ end
31
+ end
32
+
33
+ class Spec < Thor
34
+ include Thor::Actions
35
+
36
+ namespace :spec
37
+ default_task :unit
38
+
39
+ desc "ci", "Run all possible tests on Travis-CI"
40
+ def ci
41
+ ENV['CI'] = 'true' # Travis-CI also sets this, but set it here for local testing
42
+ invoke(:unit)
43
+ end
44
+
45
+ desc "unit", "Run unit tests"
46
+ def unit
47
+ unless run_unit
48
+ exit 1
49
+ end
50
+ end
51
+
52
+ no_tasks do
53
+ def run_unit(*flags)
54
+ run "rspec --color --format=documentation #{flags.join(' ')} spec"
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,45 @@
1
+ begin
2
+ require "vagrant"
3
+ rescue LoadError
4
+ raise "The Vagrant Berkshelf plugin must be run within Vagrant."
5
+ end
6
+
7
+ require 'berkshelf'
8
+ require 'berkshelf/vagrant/version'
9
+ require 'berkshelf/vagrant/errors'
10
+ require 'tmpdir'
11
+ require 'fileutils'
12
+
13
+ module Berkshelf
14
+ # @author Jamie Winsor <reset@riotgames.com>
15
+ module Vagrant
16
+ autoload :Action, 'berkshelf/vagrant/action'
17
+ autoload :Config, 'berkshelf/vagrant/config'
18
+ autoload :Env, 'berkshelf/vagrant/env'
19
+ autoload :EnvHelpers, 'berkshelf/vagrant/env_helpers'
20
+
21
+ class << self
22
+ # The path to where shelfs are created on the host machine to be mounted in
23
+ # Vagrant guests
24
+ #
25
+ # @return [String]
26
+ def shelf_path
27
+ File.join(Berkshelf.berkshelf_path, 'vagrant')
28
+ end
29
+
30
+ # Generate a new shelf to be mounted in a Vagrant guest
31
+ #
32
+ # @return [String]
33
+ # path to the generated shelf
34
+ def mkshelf
35
+ unless File.exist?(shelf_path)
36
+ FileUtils.mkdir_p(shelf_path)
37
+ end
38
+
39
+ Dir.mktmpdir('berkshelf-', shelf_path)
40
+ end
41
+ end
42
+ end
43
+ end
44
+
45
+ require 'berkshelf/vagrant/plugin'
@@ -0,0 +1,63 @@
1
+ module Berkshelf
2
+ module Vagrant
3
+ module Action
4
+ autoload :Clean, 'berkshelf/vagrant/action/clean'
5
+ autoload :ConfigureChef, 'berkshelf/vagrant/action/configure_chef'
6
+ autoload :Install, 'berkshelf/vagrant/action/install'
7
+ autoload :LoadShelf, 'berkshelf/vagrant/action/load_shelf'
8
+ autoload :SetUI, 'berkshelf/vagrant/action/set_ui'
9
+ autoload :Upload, 'berkshelf/vagrant/action/upload'
10
+
11
+ class << self
12
+ # Return the Berkshelf install middleware stack. When placed in the action chain
13
+ # this stack will find retrieve and resolve the cookbook dependencies describe
14
+ # in your configured Berksfile.
15
+ #
16
+ # Cookbooks will installed into a temporary directory, called a Shelf, and mounted
17
+ # into the VM. This mounted path will be appended to the chef_solo.cookbooks_path value.
18
+ #
19
+ # @return [::Vagrant::Action::Builder]
20
+ def install
21
+ @install ||= ::Vagrant::Action::Builder.new.tap do |b|
22
+ b.use Berkshelf::Vagrant::Action::Install
23
+ end
24
+ end
25
+
26
+ # Return the Berkshelf upload middleware stack. When placed in the action chain
27
+ # this stack will upload cookbooks to a Chef Server if the Chef-Client provisioner
28
+ # is used. The Chef Server where the cookbooks will be uploaded to is the same Chef
29
+ # Server used in the Chef-Client provisioner.
30
+ #
31
+ # Nothing will be done if the Chef-Solo provisioner is used.
32
+ #
33
+ # @return [::Vagrant::Action::Builder]
34
+ def upload
35
+ @upload ||= ::Vagrant::Action::Builder.new.tap do |b|
36
+ b.use Berkshelf::Vagrant::Action::Upload
37
+ end
38
+ end
39
+
40
+ # Return the Berkshelf clean middleware stack. When placed in the action chain
41
+ # this stack will clean up any temporary directories or files created by the other
42
+ # middleware stacks.
43
+ #
44
+ # @return [::Vagrant::Action::Builder]
45
+ def clean
46
+ @clean ||= ::Vagrant::Action::Builder.new.tap do |b|
47
+ b.use setup
48
+ b.use Berkshelf::Vagrant::Action::Clean
49
+ end
50
+ end
51
+
52
+ def setup
53
+ @setup ||= ::Vagrant::Action::Builder.new.tap do |b|
54
+ b.use ::Vagrant::Action::Builtin::EnvSet, berkshelf: Berkshelf::Vagrant::Env.new
55
+ b.use Berkshelf::Vagrant::Action::SetUI
56
+ b.use Berkshelf::Vagrant::Action::LoadShelf
57
+ b.use Berkshelf::Vagrant::Action::ConfigureChef
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,28 @@
1
+ module Berkshelf
2
+ module Vagrant
3
+ module Action
4
+ # @author Jamie Winsor <reset@riotgames.com>
5
+ class Clean
6
+ include Berkshelf::Vagrant::EnvHelpers
7
+
8
+ def initialize(app, env)
9
+ @app = app
10
+ end
11
+
12
+ def call(env)
13
+ if env[:berkshelf].shelf && File.exist?(env[:berkshelf].shelf)
14
+ env[:berkshelf].ui.info "Cleaning Vagrant's berkshelf"
15
+
16
+ FileUtils.remove_dir(env[:berkshelf].shelf, force: true)
17
+ FileUtils.rm_f(cache_file)
18
+ env[:berkshelf].shelf = nil
19
+ end
20
+
21
+ @app.call(env)
22
+ rescue Berkshelf::BerkshelfError => e
23
+ raise Berkshelf::VagrantWrapperError.new(e)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ module Berkshelf
2
+ module Vagrant
3
+ module Action
4
+ # @author Jamie Winsor <reset@riotgames.com>
5
+ class ConfigureChef
6
+ include Berkshelf::Vagrant::EnvHelpers
7
+
8
+ def initialize(app, env)
9
+ @app = app
10
+ end
11
+
12
+ def call(env)
13
+ unless berkshelf_enabled?(env)
14
+ return @app.call(env)
15
+ end
16
+
17
+ if chef_solo?(env) && shelf = env[:berkshelf].shelf
18
+ provisioners(:chef_solo, env).each do |provisioner|
19
+ provisioner.config.cookbooks_path = provisioner.config.send(:prepare_folders_config, shelf)
20
+ end
21
+ end
22
+
23
+ @app.call(env)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end