vagrant-berkshelf 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
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