vagrant-omnibus 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,5 +4,7 @@ AllCops:
4
4
  - bin/**
5
5
  Encoding:
6
6
  Enabled: false
7
+ ClassLength:
8
+ Enabled: false
7
9
  MethodLength:
8
- Max: 30
10
+ Enabled: false
@@ -3,6 +3,6 @@ bundler_args: --without=acceptance
3
3
  rvm:
4
4
  - 1.9.3
5
5
  - 2.0.0
6
+ - 2.1.0
6
7
  script:
7
- - rake test:unit
8
- - rake rubocop
8
+ - rake travis:ci
@@ -1,8 +1,24 @@
1
+ ## 1.3.0 (February 24, 2014)
2
+
3
+ FEATURES:
4
+
5
+ * PR [#59][], PR [#60][]: Windows guest support! ([@jarig][])([@schisamo][])
6
+
7
+ IMPROVEMENTS:
8
+
9
+ * PR [#61][]: Make detection of currently installed Chef version more robust. ([@ampedandwired][])
10
+ * Create explicit tasks for supported provider acceptance tests. ([@schisamo][])
11
+ * Add Ruby 2.1.0 to the Travis CI test matrix. ([@schisamo][])
12
+
13
+ BUG FIXES:
14
+
15
+ * Issue [#13][]: Perform config validation at action execution time. ([@schisamo][])
16
+
1
17
  ## 1.2.1 (December 17, 2013)
2
18
 
3
19
  IMPROVEMENTS:
4
20
 
5
- * Acceptance test coverage that verifies Chef is not reinstalled into a system where the desired version of Chef already exists.
21
+ * Acceptance test coverage that verifies Chef is not reinstalled into a system where the desired version of Chef already exists. ([@schisamo][])
6
22
 
7
23
  BUG FIXES:
8
24
 
@@ -18,7 +34,7 @@ IMPROVEMENTS:
18
34
 
19
35
  * PR [#48][]: Don't install Chef if `--no-provision` is specified. ([@tmatilai][])
20
36
  * PR [#50][]: Update README.md with vagrant-parallels compatibility. ([@wizonesolutions][])
21
- * PR [#56][]: Add Rubocop support.
37
+ * PR [#56][]: Add Rubocop support and fix style errors. ([@schisamo][])
22
38
 
23
39
  BUG FIXES:
24
40
 
@@ -100,6 +116,7 @@ BUG FIXES:
100
116
  [#8]: https://github.com/schisamo/vagrant-omnibus/issues/8
101
117
  [#10]: https://github.com/schisamo/vagrant-omnibus/issues/10
102
118
  [#12]: https://github.com/schisamo/vagrant-omnibus/issues/12
119
+ [#13]: https://github.com/schisamo/vagrant-omnibus/issues/13
103
120
  [#15]: https://github.com/schisamo/vagrant-omnibus/issues/15
104
121
  [#17]: https://github.com/schisamo/vagrant-omnibus/issues/17
105
122
  [#19]: https://github.com/schisamo/vagrant-omnibus/issues/19
@@ -121,7 +138,12 @@ BUG FIXES:
121
138
  [#53]: https://github.com/schisamo/vagrant-omnibus/issues/53
122
139
  [#56]: https://github.com/schisamo/vagrant-omnibus/issues/56
123
140
  [#57]: https://github.com/schisamo/vagrant-omnibus/issues/57
141
+ [#59]: https://github.com/schisamo/vagrant-omnibus/issues/59
142
+ [#60]: https://github.com/schisamo/vagrant-omnibus/issues/60
143
+ [#61]: https://github.com/schisamo/vagrant-omnibus/issues/61
144
+ [@ampedandwired]: https://github.com/ampedandwired
124
145
  [@comutt]: https://github.com/comutt
146
+ [@jarig]: https://github.com/jarig
125
147
  [@matsu911]: https://github.com/matsu911
126
148
  [@michfield]: https://github.com/michfield
127
149
  [@petecheslock]: https://github.com/petecheslock
data/Gemfile CHANGED
@@ -6,17 +6,18 @@ group :development do
6
6
  # We depend on Vagrant for development, but we don't add it as a
7
7
  # gem dependency because we expect to be installed within the
8
8
  # Vagrant environment itself using `vagrant plugin`.
9
- gem "vagrant", :git => "git://github.com/mitchellh/vagrant.git", :tag => "v1.3.5"
9
+ gem 'vagrant', git: 'git://github.com/mitchellh/vagrant.git', tag: 'v1.4.3'
10
+ gem 'vagrant-windows', '~> 1.5'
10
11
  end
11
12
 
12
13
  group :acceptance do
13
- gem "vagrant-digitalocean", "~> 0.4.0"
14
- gem "vagrant-aws", "~> 0.4.0"
15
- gem "vagrant-rackspace", "~> 0.1.4"
14
+ gem 'vagrant-digitalocean', '~> 0.5'
15
+ gem 'vagrant-aws', '~> 0.4'
16
+ gem 'vagrant-rackspace', '~> 0.1'
16
17
  end
17
18
 
18
19
  group :docs do
19
- gem "yard", "~> 0.8.5"
20
- gem "redcarpet", "~> 2.2.2"
21
- gem "github-markup", "~> 0.7.5"
20
+ gem 'yard', '~> 0.8'
21
+ gem 'redcarpet', '~> 2.2'
22
+ gem 'github-markup', '~> 0.7'
22
23
  end
data/README.md CHANGED
@@ -112,14 +112,14 @@ The test are also executed by Travis CI every time code is pushed to GitHub.
112
112
  Currently this repo ships with a set of basic acceptance tests that will:
113
113
 
114
114
  * Provision a Vagrant instance.
115
- * Attempt to install Chef 11.4.0 using this plugin.
115
+ * Attempt to install Chef using this plugin.
116
116
  * Perform a very basic chef-solo run to ensure Chef is in fact installed.
117
117
 
118
- The acceptance tests are run against the Vagrant providers mentioned above. The
119
- acceptance tests can be run with:
118
+ The acceptance tests can be run against a subset of the Vagrant providers
119
+ listed above. The acceptance tests can be run with:
120
120
 
121
121
  ```
122
- rake test:acceptance
122
+ rake test:acceptance:PROVIDER_NAME
123
123
  ```
124
124
 
125
125
  And as expected, all acceptance tests only uses provisioner-less baseboxes and
data/Rakefile CHANGED
@@ -4,49 +4,78 @@ require 'rspec/core/rake_task'
4
4
  require 'rubocop/rake_task'
5
5
  require 'yard'
6
6
 
7
- Rubocop::RakeTask.new
7
+ # rubocop:disable LineLength
8
+
9
+ def run_acceptance_tests(provider = 'virtualbox')
10
+ puts '=================================================================='
11
+ puts "Running acceptance tests against '#{provider}' provider..."
12
+ puts '=================================================================='
13
+
14
+ Dir.chdir("test/acceptance/#{provider}") do
15
+ system('vagrant destroy -f')
16
+ system("vagrant up --provider=#{provider}")
17
+ system('vagrant destroy -f')
18
+ end
19
+ end
20
+
8
21
  YARD::Rake::YardocTask.new
9
22
 
23
+ namespace :style do
24
+ require 'rubocop/rake_task'
25
+ desc 'Run Ruby style checks'
26
+ Rubocop::RakeTask.new(:ruby) do |task|
27
+ task.patterns = [
28
+ '**/*.rb',
29
+ '**/Vagrantfile',
30
+ '*.gemspec',
31
+ 'Gemfile',
32
+ 'Rakefile'
33
+ ]
34
+ end
35
+ end
36
+
10
37
  namespace :test do
11
38
 
12
39
  RSpec::Core::RakeTask.new(:unit) do |t|
13
- t.pattern = "test/unit/**/*_spec.rb"
40
+ t.pattern = 'test/unit/**/*_spec.rb'
14
41
  end
15
42
 
16
- desc "Run acceptance tests..these actually launch Vagrant sessions."
17
- task :acceptance, :provider do |t, args|
18
-
19
- # ensure all required dummy boxen are installed
20
- %w{ aws rackspace }.each do |provider|
21
- unless system("vagrant box list | grep 'dummy\s*(#{provider})' &>/dev/null")
22
- system("vagrant box add dummy https://github.com/mitchellh/vagrant-#{provider}/raw/master/dummy.box")
43
+ namespace :acceptance do
44
+ desc 'Run acceptance tests with AWS provider'
45
+ task :aws do
46
+ unless system("vagrant box list | grep 'dummy\s*(aws)' &>/dev/null")
47
+ system('vagrant box add dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box')
23
48
  end
49
+ run_acceptance_tests('aws')
24
50
  end
25
51
 
26
- unless system("vagrant box list | grep 'digital_ocean' &>/dev/null")
27
- system("vagrant box add digital_ocean https://github.com/smdahlen/vagrant-digitalocean/raw/master/box/digital_ocean.box")
52
+ desc 'Run acceptance tests with Digital Ocean provider'
53
+ task 'digital_ocean' do
54
+ unless system("vagrant box list | grep 'digital_ocean' &>/dev/null")
55
+ system('vagrant box add digital_ocean https://github.com/smdahlen/vagrant-digitalocean/raw/master/box/digital_ocean.box')
56
+ end
28
57
  end
29
58
 
30
- all_providers = Dir["test/acceptance/*"].map{|dir| File.basename(File.expand_path(dir))}
31
-
32
- # If a provider wasn't passed to the task run acceptance tests against
33
- # ALL THE PROVIDERS!
34
- providers = if args[:provider] && all_providers.include?(args[:provider])
35
- [args[:provider]]
36
- else
37
- all_providers
38
- end
39
-
40
- providers.each do |provider|
41
- puts "=================================================================="
42
- puts "Running acceptance tests against '#{provider}' provider..."
43
- puts "=================================================================="
44
-
45
- Dir.chdir("test/acceptance/#{provider}") do
46
- system("vagrant destroy -f")
47
- system("vagrant up --provider=#{provider}")
48
- system("vagrant destroy -f")
59
+ desc 'Run acceptance tests with Rackspace provider'
60
+ task :rackspace do
61
+ unless system("vagrant box list | grep 'dummy\s*(rackspace)' &>/dev/null")
62
+ system('vagrant box add dummy https://github.com/mitchellh/vagrant-rackspace/raw/master/dummy.box')
49
63
  end
64
+ run_acceptance_tests('aws')
65
+ end
66
+
67
+ desc 'Run acceptance tests with VirtualBox provider'
68
+ task :virtualbox do
69
+ run_acceptance_tests('virtualbox')
50
70
  end
51
71
  end
52
72
  end
73
+
74
+ # We cannot run Test Kitchen on Travis CI yet...
75
+ namespace :travis do
76
+ desc 'Run tests on Travis'
77
+ task ci: ['style:ruby', 'test:unit']
78
+ end
79
+
80
+ # The default rake task should just run it all
81
+ task default: ['style:ruby', 'test:unit', 'test:acceptance:virtualbox']
@@ -26,24 +26,21 @@ module VagrantPlugins
26
26
  #
27
27
  # This action installs Chef Omnibus packages at the desired version.
28
28
  class InstallChef
29
- INSTALL_SH = "#{ENV['OMNIBUS_INSTALL_URL'] ||
30
- 'https://www.opscode.com/chef/install.sh'}"
31
-
32
29
  def initialize(app, env)
33
30
  @app = app
34
31
  @logger =
35
32
  Log4r::Logger.new('vagrantplugins::omnibus::action::installchef')
36
33
  @machine = env[:machine]
37
- # Config#finalize! SHOULD be called automatically
38
- @machine.config.omnibus.finalize!
34
+ @install_script = find_install_script
39
35
  end
40
36
 
41
37
  def call(env)
42
38
  @app.call(env)
43
39
 
44
- return if !@machine.communicate.ready? ||
45
- !provision_enabled?(env) ||
46
- windows_guest?(env)
40
+ return unless @machine.communicate.ready? && provision_enabled?(env)
41
+
42
+ # Perform delayed validation
43
+ @machine.config.omnibus.validate!(@machine)
47
44
 
48
45
  desired_version = @machine.config.omnibus.chef_version
49
46
  unless desired_version.nil?
@@ -53,7 +50,7 @@ module VagrantPlugins
53
50
  version: desired_version
54
51
  )
55
52
  else
56
- fetch_install_sh(env)
53
+ fetch_or_create_install_script(env)
57
54
  env[:ui].info I18n.t(
58
55
  'vagrant-omnibus.action.installing',
59
56
  version: desired_version
@@ -66,8 +63,28 @@ module VagrantPlugins
66
63
 
67
64
  private
68
65
 
69
- def windows_guest?(env)
70
- env[:machine].config.vm.guest.eql?(:windows)
66
+ # Determines what flavor of install script should be used to
67
+ # install Omnibus Chef package.
68
+ def find_install_script
69
+ if !ENV['OMNIBUS_INSTALL_URL'].nil?
70
+ ENV['OMNIBUS_INSTALL_URL']
71
+ elsif windows_guest?
72
+ 'http://www.getchef.com/chef/install.msi'
73
+ else
74
+ 'https://www.getchef.com/chef/install.sh'
75
+ end
76
+ end
77
+
78
+ def install_script_name
79
+ if windows_guest?
80
+ 'install.bat'
81
+ else
82
+ 'install.sh'
83
+ end
84
+ end
85
+
86
+ def windows_guest?
87
+ @machine.config.vm.guest.eql?(:windows)
71
88
  end
72
89
 
73
90
  def provision_enabled?(env)
@@ -76,26 +93,38 @@ module VagrantPlugins
76
93
 
77
94
  def installed_version
78
95
  version = nil
79
- command = 'echo $(chef-solo -v)'
80
- @machine.communicate.sudo(command) do |type, data|
96
+ opts = nil
97
+ if windows_guest?
98
+ command = 'cmd.exe /c chef-solo -v 2>&0'
99
+ opts = { shell: :cmd, error_check: false }
100
+ else
101
+ command = 'echo $(chef-solo -v)'
102
+ end
103
+ @machine.communicate.sudo(command, opts) do |type, data|
81
104
  if [:stderr, :stdout].include?(type)
82
- next if data =~ /stdin: is not a tty/
83
- v = data.chomp
84
- version ||= v.split[1] unless v.empty?
105
+ version_match = data.match(/^Chef: (.+)/)
106
+ version = version_match.captures[0].strip if version_match
85
107
  end
86
108
  end
87
109
  version
88
110
  end
89
111
 
90
- # Uploads install.sh from Host's Vagrant TMP directory to guest
112
+ #
113
+ # Upload install script from Host's Vagrant TMP directory to guest
91
114
  # and executes.
115
+ #
92
116
  def install(version, env)
93
117
  shell_escaped_version = Shellwords.escape(version)
94
118
 
95
119
  @machine.communicate.tap do |comm|
96
- comm.upload(@install_sh_temp_path, 'install.sh')
97
- # TODO: Execute with `sh` once install.sh removes it's bash-isms.
98
- install_cmd = "bash install.sh -v #{shell_escaped_version} 2>&1"
120
+ comm.upload(@script_tmp_path, install_script_name)
121
+ if windows_guest?
122
+ install_cmd = "cmd.exe /c #{install_script_name} #{version}"
123
+ else
124
+ # TODO: Execute with `sh` once install.sh removes it's bash-isms.
125
+ install_cmd =
126
+ "bash #{install_script_name} -v #{shell_escaped_version} 2>&1"
127
+ end
99
128
  comm.sudo(install_cmd) do |type, data|
100
129
  if [:stderr, :stdout].include?(type)
101
130
  next if data =~ /stdin: is not a tty/
@@ -105,18 +134,18 @@ module VagrantPlugins
105
134
  end
106
135
  end
107
136
 
108
- # Fetches install.sh file to the Host's Vagrant TMP directory.
109
- #
110
- # Mostly lifted from:
111
137
  #
112
- # mitchellh/vagrant/blob/master/lib/vagrant/action/builtin/box_add.rb
138
+ # Fetches or creates a platform specific install script to the Host's
139
+ # Vagrant TMP directory.
113
140
  #
114
- def fetch_install_sh(env)
115
- @install_sh_temp_path =
116
- env[:tmp_path].join(Time.now.to_i.to_s + '-install.sh')
117
- @logger.info("Downloading install.sh to: #{@install_sh_temp_path}")
141
+ def fetch_or_create_install_script(env)
142
+ @script_tmp_path =
143
+ env[:tmp_path].join("#{Time.now.to_i.to_s}-#{install_script_name}")
144
+
145
+ @logger.info("Generating install script at: #{@script_tmp_path}")
146
+
147
+ url = @install_script
118
148
 
119
- url = INSTALL_SH
120
149
  if File.file?(url) || url !~ /^[a-z0-9]+:.*$/i
121
150
  @logger.info('Assuming URL is a file.')
122
151
  file_path = File.expand_path(url)
@@ -124,18 +153,37 @@ module VagrantPlugins
124
153
  url = "file:#{file_path}"
125
154
  end
126
155
 
127
- downloader_options = {}
128
- # downloader_options[:insecure] = env[:box_download_insecure]
129
- # downloader_options[:ui] = env[:ui]
130
-
131
- # Download the install.sh file to a temporary path. We store
132
- # the temporary path as an instance variable so that the
133
- # `#recover` method can access it.
156
+ # Download the install.sh or create install.bat file to a temporary
157
+ # path. We store the temporary path as an instance variable so that
158
+ # the `#recover` method can access it.
134
159
  begin
135
- downloader = Vagrant::Util::Downloader.new(url,
136
- @install_sh_temp_path,
137
- downloader_options)
138
- downloader.download!
160
+ if windows_guest?
161
+ # generate a install.bat file at the `@script_tmp_path` location
162
+ #
163
+ # We'll also disable Rubocop for this embedded PowerShell code:
164
+ #
165
+ # rubocop:disable LineLength, SpaceAroundBlockBraces
166
+ #
167
+ File.open(@script_tmp_path, 'w') do |f|
168
+ f.puts <<-EOH.gsub(/^\s{18}/, '')
169
+ @echo off
170
+ set version=%1
171
+ set dest=%~dp0chef-client-%version%-1.windows.msi
172
+ echo Downloading Chef %version% for Windows...
173
+ powershell -command "(New-Object System.Net.WebClient).DownloadFile('#{url}?v=%version%', '%dest%')"
174
+ echo Installing Chef %version%
175
+ msiexec /q /i %dest%
176
+ EOH
177
+ end
178
+ # rubocop:enable LineLength, SpaceAroundBlockBraces
179
+ else
180
+ downloader = Vagrant::Util::Downloader.new(
181
+ url,
182
+ @script_tmp_path,
183
+ {}
184
+ )
185
+ downloader.download!
186
+ end
139
187
  rescue Vagrant::Errors::DownloaderInterrupted
140
188
  # The downloader was interrupted, so just return, because that
141
189
  # means we were interrupted as well.
@@ -145,8 +193,8 @@ module VagrantPlugins
145
193
  end
146
194
 
147
195
  def recover(env)
148
- if @install_sh_temp_path && File.exist?(@install_sh_temp_path)
149
- File.unlink(@install_sh_temp_path)
196
+ if @script_tmp_path && File.exist?(@script_tmp_path)
197
+ File.unlink(@script_tmp_path)
150
198
  end
151
199
  end
152
200
  end
@@ -17,6 +17,8 @@
17
17
  require 'rubygems/dependency'
18
18
  require 'rubygems/dependency_installer'
19
19
  require 'vagrant'
20
+ require 'vagrant/errors'
21
+ require 'vagrant/util/template_renderer'
20
22
 
21
23
  module VagrantPlugins
22
24
  #
@@ -41,19 +43,33 @@ module VagrantPlugins
41
43
  end
42
44
  end
43
45
 
44
- def validate(machine)
46
+ #
47
+ # Performs validation and immediately raises an exception for any
48
+ # detected errors.
49
+ #
50
+ # @raise [Vagrant::Errors::ConfigInvalid]
51
+ # if validation fails
52
+ #
53
+ def validate!(machine)
54
+ finalize!
45
55
  errors = []
46
56
 
47
57
  unless valid_chef_version?(chef_version)
48
58
  msg = <<-EOH
49
- '#{chef_version}' is not a valid version of Chef.
59
+ '#{ chef_version }' is not a valid version of Chef.
50
60
 
51
61
  A list of valid versions can be found at: http://www.opscode.com/chef/install/
52
62
  EOH
53
63
  errors << msg
54
64
  end
55
65
 
56
- { 'Omnibus Plugin' => errors }
66
+ if errors.any?
67
+ rendered_errors = Vagrant::Util::TemplateRenderer.render(
68
+ 'config/validation_failed',
69
+ errors: { 'vagrant-omnibus' => errors }
70
+ )
71
+ fail Vagrant::Errors::ConfigInvalid, errors: rendered_errors
72
+ end
57
73
  end
58
74
 
59
75
  private
@@ -17,6 +17,6 @@
17
17
  module VagrantPlugins
18
18
  #
19
19
  module Omnibus
20
- VERSION = '1.2.1'
20
+ VERSION = '1.3.0'
21
21
  end
22
22
  end
@@ -5,24 +5,25 @@
5
5
  require 'vagrant-omnibus'
6
6
  require 'vagrant-aws'
7
7
 
8
- Vagrant.configure("2") do |config|
9
- config.omnibus.chef_version = "11.4.0"
8
+ Vagrant.configure('2') do |config|
9
+ config.omnibus.chef_version = '11.4.0'
10
10
 
11
- config.vm.box = "dummy"
11
+ config.vm.box = 'dummy'
12
12
  config.vm.provider :aws do |aws, override|
13
13
  aws.access_key_id = ENV['DEV_AWS_ACCESS_KEY_ID']
14
14
  aws.secret_access_key = ENV['DEV_AWS_SECRET_ACCESS_KEY']
15
15
  aws.keypair_name = ENV['USER']
16
16
 
17
- aws.instance_type = "m1.large"
18
- aws.ami = "ami-2efa9d47" # Ubuntu 12.04 LTS 64-bit instance root store
17
+ aws.instance_type = 'm1.large'
18
+ aws.ami = 'ami-2efa9d47' # Ubuntu 12.04 LTS 64-bit instance root store
19
19
 
20
- override.ssh.username = "ubuntu"
21
- override.ssh.private_key_path = "~/.ssh/id_rsa"
20
+ override.ssh.username = 'ubuntu'
21
+ override.ssh.private_key_path = '~/.ssh/id_rsa'
22
22
  end
23
23
 
24
24
  config.vm.provision :chef_solo do |chef|
25
- chef.cookbooks_path = File.expand_path("../../../support/cookbooks", __FILE__)
26
- chef.add_recipe "chef-inator"
25
+ chef.cookbooks_path =
26
+ File.expand_path('../../../support/cookbooks', __FILE__)
27
+ chef.add_recipe 'chef-inator'
27
28
  end
28
29
  end
@@ -5,7 +5,7 @@ Vagrant.configure('2') do |config|
5
5
  config.omnibus.chef_version = :latest
6
6
 
7
7
  config.vm.box = 'digital_ocean'
8
- config.vm.synced_folder '.', '/vagrant', :disabled => true
8
+ config.vm.synced_folder '.', '/vagrant', disabled: true
9
9
 
10
10
  config.vm.provider :digital_ocean do |provider, override|
11
11
  provider.client_id = ENV['DO_CLIENT_ID']
@@ -17,7 +17,8 @@ Vagrant.configure('2') do |config|
17
17
  end
18
18
 
19
19
  config.vm.provision :chef_solo do |chef|
20
- chef.cookbooks_path = File.expand_path("../../../support/cookbooks", __FILE__)
21
- chef.add_recipe "chef-inator"
20
+ chef.cookbooks_path =
21
+ File.expand_path('../../../support/cookbooks', __FILE__)
22
+ chef.add_recipe 'chef-inator'
22
23
  end
23
24
  end
@@ -5,23 +5,24 @@
5
5
  require 'vagrant-omnibus'
6
6
  require 'vagrant-rackspace'
7
7
 
8
- Vagrant.configure("2") do |config|
8
+ Vagrant.configure('2') do |config|
9
9
  config.omnibus.chef_version = '11.4.0'
10
10
 
11
- config.vm.box = "dummy"
11
+ config.vm.box = 'dummy'
12
12
  config.vm.provider :rackspace do |rackspace|
13
13
  rackspace.username = ENV['DEV_RACKSPACE_USERNAME']
14
14
  rackspace.api_key = ENV['DEV_RACKSPACE_API_KEY']
15
15
  rackspace.flavor = /512MB/
16
16
  rackspace.image = /Ubuntu 12.04/
17
- rackspace.public_key_path = "~/.ssh/id_rsa.pub"
18
- # TODO - switch this to the `override.ssh.private_key_path` syntax once
17
+ rackspace.public_key_path = '~/.ssh/id_rsa.pub'
18
+ # TODO: switch this to the `override.ssh.private_key_path` syntax once
19
19
  # `vagrant-rackspace` is updated.
20
- config.ssh.private_key_path = "~/.ssh/id_rsa"
20
+ config.ssh.private_key_path = '~/.ssh/id_rsa'
21
21
  end
22
22
 
23
23
  config.vm.provision :chef_solo do |chef|
24
- chef.cookbooks_path = File.expand_path("../../../support/cookbooks", __FILE__)
25
- chef.add_recipe "chef-inator"
24
+ chef.cookbooks_path =
25
+ File.expand_path('../../../support/cookbooks', __FILE__)
26
+ chef.add_recipe 'chef-inator'
26
27
  end
27
28
  end
@@ -1,32 +1,35 @@
1
1
  # -*- mode: ruby -*-
2
2
  # vi: set ft=ruby :
3
3
 
4
+ # rubocop:disable LineLength
5
+
4
6
  # plugins don't seem to be auto-loaded from the bundle
5
7
  require 'vagrant-omnibus'
8
+ require 'vagrant-windows'
6
9
 
7
- Vagrant.configure("2") do |config|
10
+ Vagrant.configure('2') do |config|
8
11
 
9
12
  config.vm.define :new_chef do |new_chef_config|
10
- new_chef_config.vm.box = "opscode-ubuntu-12.04"
11
- new_chef_config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_ubuntu-12.04_chef-provisionerless.box"
13
+ new_chef_config.vm.box = 'opscode-ubuntu-12.04'
14
+ new_chef_config.vm.box_url = 'http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_ubuntu-12.04_chef-provisionerless.box'
12
15
 
13
16
  new_chef_config.omnibus.chef_version = :latest
14
17
 
15
18
  new_chef_config.vm.provision :chef_solo do |chef|
16
- chef.cookbooks_path = File.expand_path("../../../support/cookbooks", __FILE__)
17
- chef.add_recipe "chef-inator"
19
+ chef.cookbooks_path = File.expand_path('../../../support/cookbooks', __FILE__)
20
+ chef.add_recipe 'chef-inator'
18
21
  end
19
22
  end
20
23
 
21
24
  config.vm.define :old_chef do |old_chef_config|
22
- old_chef_config.vm.box = "opscode-centos-6.5"
23
- old_chef_config.vm.box_url = "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-6.5_chef-provisionerless.box"
25
+ old_chef_config.vm.box = 'opscode-centos-6.5'
26
+ old_chef_config.vm.box_url = 'http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-6.5_chef-provisionerless.box'
24
27
 
25
28
  old_chef_config.omnibus.chef_version = '10.24.0'
26
29
 
27
30
  old_chef_config.vm.provision :chef_solo do |chef|
28
- chef.cookbooks_path = File.expand_path("../../../support/cookbooks", __FILE__)
29
- chef.add_recipe "chef-inator"
31
+ chef.cookbooks_path = File.expand_path('../../../support/cookbooks', __FILE__)
32
+ chef.add_recipe 'chef-inator'
30
33
  end
31
34
  end
32
35
 
@@ -37,8 +40,27 @@ Vagrant.configure("2") do |config|
37
40
  installed_config.omnibus.chef_version = '11.4.4'
38
41
 
39
42
  installed_config.vm.provision :chef_solo do |chef|
40
- chef.cookbooks_path = File.expand_path("../../../support/cookbooks", __FILE__)
41
- chef.add_recipe "chef-inator"
43
+ chef.cookbooks_path = File.expand_path('../../../support/cookbooks', __FILE__)
44
+ chef.add_recipe 'chef-inator'
45
+ end
46
+ end
47
+
48
+ config.vm.define :chef_on_windows do |win_config|
49
+ win_config.vm.box = 'opscode-windows-6.1'
50
+ win_config.vm.box_url = 'http://opscode-vm.s3.amazonaws.com/vagrant/boxes/opscode-windows-6.1.box'
51
+ win_config.vm.boot_timeout = 500
52
+
53
+ win_config.omnibus.chef_version = :latest
54
+
55
+ win_config.vm.network :forwarded_port, guest: 3389, host: 3389
56
+ win_config.vm.network :forwarded_port, guest: 5985, host: 5985
57
+
58
+ win_config.vm.guest = :windows
59
+ win_config.winrm.timeout = 500
60
+
61
+ win_config.vm.provision :chef_solo do |chef|
62
+ chef.cookbooks_path = File.expand_path('../../../support/cookbooks', __FILE__)
63
+ chef.add_recipe 'chef-inator'
42
64
  end
43
65
  end
44
66
  end
@@ -6,7 +6,10 @@
6
6
  #
7
7
  require_relative '../spec_helper'
8
8
 
9
+ # rubocop:disable LineLength
10
+
9
11
  describe VagrantPlugins::Omnibus::Config do
12
+ let(:machine) { double('machine') }
10
13
  let(:instance) { described_class.new }
11
14
 
12
15
  subject(:config) do
@@ -26,17 +29,13 @@ describe VagrantPlugins::Omnibus::Config do
26
29
  its(:chef_version) { should match(/\d*\.\d*\.\d*/) }
27
30
  end
28
31
 
29
- describe '#validate' do
30
- let(:machine) { double('machine') }
31
- let(:error_hash_key) { 'Omnibus Plugin' }
32
- let(:result) { subject.validate(machine) }
33
- let(:errors) { result[error_hash_key] }
34
-
35
- it 'returns a Hash with an `Omnibus Plugin` key' do
36
- result.should be_a(Hash)
37
- result.should have_key(error_hash_key)
32
+ describe 'validate' do
33
+ it 'should be no-op' do
34
+ expect(subject.validate(machine)).to eq('VagrantPlugins::Omnibus::Config' => [])
38
35
  end
36
+ end
39
37
 
38
+ describe '#validate!' do
40
39
  describe 'chef_version validation' do
41
40
  {
42
41
  '11.4.0' => {
@@ -56,11 +55,11 @@ describe VagrantPlugins::Omnibus::Config do
56
55
  let(:chef_version) { version_string }
57
56
  if opts[:valid]
58
57
  it 'passes' do
59
- errors.should be_empty
58
+ expect { subject.validate!(machine) }.to_not raise_error
60
59
  end
61
60
  else
62
61
  it 'fails' do
63
- errors.should_not be_empty
62
+ expect { subject.validate!(machine) }.to raise_error(Vagrant::Errors::ConfigInvalid)
64
63
  end
65
64
  end
66
65
  end
@@ -4,22 +4,24 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'vagrant-omnibus/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "vagrant-omnibus"
7
+ spec.name = 'vagrant-omnibus'
8
8
  spec.version = VagrantPlugins::Omnibus::VERSION
9
- spec.authors = ["Seth Chisamore"]
10
- spec.email = ["schisamo@opscode.com"]
11
- spec.description = %q{A Vagrant plugin that ensures the desired version of Chef is installed via the platform-specific Omnibus packages.}
9
+ spec.authors = ['Seth Chisamore']
10
+ spec.email = ['schisamo@opscode.com']
11
+ spec.description = 'A Vagrant plugin that ensures the desired version of' \
12
+ ' Chef is installed via the platform-specific Omnibus' \
13
+ ' packages.'
12
14
  spec.summary = spec.description
13
- spec.homepage = "https://github.com/schisamo/vagrant-omnibus"
14
- spec.license = "Apache 2.0"
15
+ spec.homepage = 'https://github.com/schisamo/vagrant-omnibus'
16
+ spec.license = 'Apache 2.0'
15
17
 
16
- spec.files = `git ls-files`.split($/)
17
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
18
+ spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
19
+ spec.executables = spec.files.grep(/^bin\//) { |f| File.basename(f) }
20
+ spec.test_files = spec.files.grep(/^(test|spec|features)\//)
21
+ spec.require_paths = ['lib']
20
22
 
21
- spec.add_development_dependency "bundler", "~> 1.3"
22
- spec.add_development_dependency "rake"
23
- spec.add_development_dependency "rspec"
24
- spec.add_development_dependency 'rubocop', '~> 0.15.0'
23
+ spec.add_development_dependency 'bundler', '~> 1.3'
24
+ spec.add_development_dependency 'rake'
25
+ spec.add_development_dependency 'rspec'
26
+ spec.add_development_dependency 'rubocop'
25
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-omnibus
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-12-18 00:00:00.000000000 Z
12
+ date: 2014-02-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -64,17 +64,17 @@ dependencies:
64
64
  requirement: !ruby/object:Gem::Requirement
65
65
  none: false
66
66
  requirements:
67
- - - ~>
67
+ - - ! '>='
68
68
  - !ruby/object:Gem::Version
69
- version: 0.15.0
69
+ version: '0'
70
70
  type: :development
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
- - - ~>
75
+ - - ! '>='
76
76
  - !ruby/object:Gem::Version
77
- version: 0.15.0
77
+ version: '0'
78
78
  description: A Vagrant plugin that ensures the desired version of Chef is installed
79
79
  via the platform-specific Omnibus packages.
80
80
  email:
@@ -125,7 +125,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
125
125
  version: '0'
126
126
  segments:
127
127
  - 0
128
- hash: -2839676175019097960
128
+ hash: 128509343253395990
129
129
  required_rubygems_version: !ruby/object:Gem::Requirement
130
130
  none: false
131
131
  requirements:
@@ -134,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
134
  version: '0'
135
135
  segments:
136
136
  - 0
137
- hash: -2839676175019097960
137
+ hash: 128509343253395990
138
138
  requirements: []
139
139
  rubyforge_project:
140
140
  rubygems_version: 1.8.23