vagrant-omnibus 1.2.1 → 1.3.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.
@@ -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