vagrant-vsphere 0.16.0 → 0.17.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 86bbc3afad22bc9be46d1ea266be3eb020251f29
4
- data.tar.gz: 576d495fee241d31b5954b1bb55886bc7438b7e4
3
+ metadata.gz: b063bf190dceeafef58aa04ce867ebc9667d5c0b
4
+ data.tar.gz: f43cc9c9d34d8a988166bd06aed7973fea7ea70c
5
5
  SHA512:
6
- metadata.gz: 8f62c938f26de6ef905bf1d97899ff095630c4c165bd328ec8c9d6f2d7a1dafad4ace951cca5b4fd23c173936b89d23c9e285917b9f5d44593704395b95d48fc
7
- data.tar.gz: f0a47dd6662ea81107f5a64761b5416933310739613dd19140de3416d37524f19c27c74a9b0b959dfee5ea1264ab11d54c854fc416763acd48e6f65f8f1e475d
6
+ metadata.gz: b947f9e482a26aebc7a723427aea0f2bb675738b4ea82114f92ac892026560dbe4e473d6d8de79d946a1a518e5d7953ca47f251d6b0c0f079080089dc2937db7
7
+ data.tar.gz: fb835079c46f46143fdb719eeca089b5fe09dcd7255c442238081a1b0e293db2e08842a1839730554a8ba57c17cecf82aa026f5fcdaf49f80a29f6d298971710
data/.bumpversion.cfg CHANGED
@@ -1,5 +1,5 @@
1
1
  [bumpversion]
2
- current_version = 0.16.0
2
+ current_version = 0.17.0
3
3
  tag = true
4
4
  commit = true
5
5
 
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ before_install:
5
+ - rvm @global do gem uninstall bundler --all --executables
6
+ - gem uninstall bundler --all --executables
7
+ - gem install bundler --version '< 1.7.0'
data/Gemfile CHANGED
@@ -11,3 +11,7 @@ ruby "2.0.0"
11
11
  gem 'vagrant', :git => 'git://github.com/mitchellh/vagrant.git', :tag => 'v1.6.3'
12
12
 
13
13
  end
14
+
15
+ group :plugins do
16
+ gem 'vagrant-vsphere', path: '.'
17
+ end
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Build Status](https://travis-ci.org/nsidc/vagrant-vsphere.svg?branch=master)](https://travis-ci.org/nsidc/vagrant-vsphere)
2
+
1
3
  # Vagrant vSphere Provider
2
4
 
3
5
  This is a [Vagrant](http://www.vagrantup.com) 1.6.3+ plugin that adds a [vSphere](http://pubs.vmware.com/vsphere-50/index.jsp?topic=%2Fcom.vmware.wssdk.apiref.doc_50%2Fright-pane.html)
@@ -12,9 +14,9 @@ This provider is built on top of the [RbVmomi](https://github.com/vmware/rbvmomi
12
14
  * libxml2, libxml2-dev, libxslt, libxslt-dev
13
15
 
14
16
  ## Current Version
15
- **version: 0.16.0**
17
+ **version: 0.17.0**
16
18
 
17
- vagrant-vsphere (**version: 0.16.0**) is available from [RubyGems.org](https://rubygems.org/gems/vagrant-vsphere)
19
+ vagrant-vsphere (**version: 0.17.0**) is available from [RubyGems.org](https://rubygems.org/gems/vagrant-vsphere)
18
20
 
19
21
  ## Installation
20
22
 
@@ -87,7 +89,9 @@ This provider has the following settings, all are required unless noted:
87
89
  * `host` - IP or name for the vSphere API
88
90
  * `insecure` - _Optional_ verify SSL certificate from the host
89
91
  * `user` - user name for connecting to vSphere
90
- * `password` - password for connecting to vSphere
92
+ * `password` - password for connecting to vSphere. If no value is given, or the
93
+ value is set to `:ask`, the user will be prompted to enter the password on
94
+ each invocation.
91
95
  * `data_center_name` - _Optional_ datacenter containing the computed resource, the template and where the new VM will be created, if not specified the first datacenter found will be used
92
96
  * `compute_resource_name` - _Required if cloning from template_ the name of the host containing the resource pool for the new VM
93
97
  * `resource_pool_name` - the resource pool for the new VM. If not supplied, and cloning from a template, uses the root resource pool
@@ -102,6 +106,7 @@ This provider has the following settings, all are required unless noted:
102
106
  * `proxy_port` - _Optional_ proxy port number for connecting to vSphere via proxy
103
107
  * `vlan` - _Optional_ vlan to connect the first NIC to
104
108
  * `memory_mb` - _Optional_ Configure the amount of memory (in MB) for the new VM
109
+ * `cpu_count` - _Optional_ Configure the number of CPUs for the new VM
105
110
 
106
111
  ### Cloning from a VM rather than a template
107
112
 
@@ -194,7 +199,17 @@ This is useful if running Vagrant from multiple directories or if multiple machi
194
199
  * If the VM is powered off, it is just destroyed.
195
200
  * If the VM is suspended, it is powered on, then powered off, then destroyed.
196
201
  * 0.16.0 Add ability to configure amount of memory the new cloned VM will have [#94 rylarson:add-memory-configuration](https://github.com/nsidc/vagrant-vsphere/pull/94).
197
-
202
+ * 0.17.0
203
+ * Add ability to configure the CPU Count
204
+ [#96 rylarson:add-cpu-configuration](https://github.com/nsidc/vagrant-vsphere/pull/96).
205
+ * Prompt the user to enter a password if none is given, or the configuration
206
+ value is set to `:ask`
207
+ [#97 topmedia:password-prompt](https://github.com/nsidc/vagrant-vsphere/pull/97).
208
+ * Add support for `vagrant reload`
209
+ [#105 clintoncwolfe:add-reload-action](https://github.com/nsidc/vagrant-vsphere/pull/105).
210
+ * Fix compatibility with Vagrant 1.7 to use vSphere connection info from a base
211
+ box
212
+ [#111 mkuzmin:get-state](https://github.com/nsidc/vagrant-vsphere/pull/111).
198
213
 
199
214
  ## Versioning
200
215
 
@@ -216,7 +231,33 @@ If you want a quick merge, write a spec that fails before your changes are appli
216
231
 
217
232
  If you don't have rake installed, first install [bundler](http://bundler.io/) and run `bundle install`.
218
233
 
234
+ ### Development Without Building the Plugin
235
+
236
+ To test your changes when developing the plugin, you have two main
237
+ options. First, you can build and install the plugin from source every time you
238
+ make a change:
239
+
240
+ 1. Make changes
241
+ 2. `rake build`
242
+ 3. `vagrant plugin install ./pkg/vagrant-vsphere-$VERSION.gem`
243
+ 4. `vagrant up --provider=vsphere`
244
+
245
+ Second, you can use Bundler and the Vagrant gem to execute vagrant commands,
246
+ saving time as you never have to wait for the plugin to build and install:
247
+
248
+ 1. Make changes
249
+ 2. `bundle exec vagrant up --provider=vsphere`
250
+
251
+ This method uses the version of Vagrant specified in
252
+ [`Gemfile`](https://github.com/nsidc/vagrant-vsphere/blob/master/Gemfile). It
253
+ will also cause Bundler and Vagrant to output warnings every time you run
254
+ `bundle exec vagrant`, because `Gemfile` lists **vagrant-vsphere** twice (once
255
+ with `gemspec` and another time in the `group :plugins` block), and Vagrant
256
+ prefers to be run from the official installer rather than through the gem.
219
257
 
258
+ Despite those warning messages, this is the
259
+ [officially recommended](https://docs.vagrantup.com/v2/plugins/development-basics.html)
260
+ method for Vagrant plugin development.
220
261
 
221
262
  ## License
222
263
 
@@ -133,9 +133,24 @@ module VagrantPlugins
133
133
  end
134
134
  end
135
135
 
136
+ def self.action_reload
137
+ Vagrant::Action::Builder.new.tap do |b|
138
+ b.use ConnectVSphere
139
+ b.use Call, IsCreated do |env, b2|
140
+ if !env[:result]
141
+ b2.use MessageNotCreated
142
+ next
143
+ end
144
+ b2.use action_halt
145
+ b2.use action_up
146
+ end
147
+ end
148
+ end
149
+
136
150
  #vSphere specific actions
137
151
  def self.action_get_state
138
152
  Vagrant::Action::Builder.new.tap do |b|
153
+ b.use HandleBox
139
154
  b.use ConfigValidate
140
155
  b.use ConnectVSphere
141
156
  b.use GetState
@@ -34,6 +34,7 @@ module VagrantPlugins
34
34
  spec[:customization] = get_customization_spec(machine, customization_info) unless customization_info.nil?
35
35
  add_custom_vlan(template, dc, spec, config.vlan) unless config.vlan.nil?
36
36
  add_custom_memory(spec, config.memory_mb) unless config.memory_mb.nil?
37
+ add_custom_cpu(spec, config.cpu_count) unless config.cpu_count.nil?
37
38
 
38
39
  env[:ui].info I18n.t('vsphere.creating_cloned_vm')
39
40
  env[:ui].info " -- #{config.clone_from_vm ? "Source" : "Template"} VM: #{template.pretty_path}"
@@ -157,6 +158,10 @@ module VagrantPlugins
157
158
  def add_custom_memory(spec, memory_mb)
158
159
  spec[:config][:memoryMB] = Integer(memory_mb)
159
160
  end
161
+
162
+ def add_custom_cpu(spec, cpu_count)
163
+ spec[:config][:numCPUs] = Integer(cpu_count)
164
+ end
160
165
  end
161
166
  end
162
167
  end
@@ -3,7 +3,7 @@ require 'i18n'
3
3
  module VagrantPlugins
4
4
  module VSphere
5
5
  module Action
6
- class MessageAlreadyCreated
6
+ class MessageNotCreated
7
7
  def initialize(app, env)
8
8
  @app = app
9
9
  end
@@ -15,4 +15,4 @@ module VagrantPlugins
15
15
  end
16
16
  end
17
17
  end
18
- end
18
+ end
@@ -21,10 +21,15 @@ module VagrantPlugins
21
21
  attr_accessor :proxy_port
22
22
  attr_accessor :vlan
23
23
  attr_accessor :memory_mb
24
+ attr_accessor :cpu_count
24
25
 
25
26
  def validate(machine)
26
27
  errors = _detected_errors
27
28
 
29
+ if password == :ask || password.nil?
30
+ self.password = machine.ui.ask("vSphere Password (will be hidden): ", echo: false)
31
+ end
32
+
28
33
  # TODO: add blank?
29
34
  errors << I18n.t('vsphere.config.host') if host.nil?
30
35
  errors << I18n.t('vsphere.config.user') if user.nil?
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module VSphere
3
- VERSION = '0.16.0'
3
+ VERSION = '0.17.0'
4
4
  end
5
5
  end
data/spec/action_spec.rb CHANGED
@@ -5,7 +5,7 @@ describe VagrantPlugins::VSphere::Action do
5
5
  def run(action)
6
6
  Vagrant::Action::Runner.new.run described_class.send("action_#{action}"), @env
7
7
  end
8
-
8
+
9
9
  before :each do
10
10
  @machine.stub(:id).and_return(EXISTING_UUID)
11
11
  end
@@ -71,7 +71,7 @@ describe VagrantPlugins::VSphere::Action do
71
71
  describe 'halt' do
72
72
  it 'should power off the VM' do
73
73
  @machine.state.stub(:id).and_return(:running)
74
-
74
+
75
75
  VagrantPlugins::VSphere::Action::PowerOff.any_instance.should_receive(:call)
76
76
 
77
77
  run :halt
@@ -94,6 +94,12 @@ describe VagrantPlugins::VSphere::Action do
94
94
 
95
95
  run_get_state
96
96
  end
97
+
98
+ it 'should handle the values in a base vagrant box' do
99
+ Vagrant::Action::Builtin::HandleBox.any_instance.should_receive(:call)
100
+
101
+ run_get_state
102
+ end
97
103
  end
98
104
 
99
105
  describe 'get ssh info' do
@@ -113,4 +119,38 @@ describe VagrantPlugins::VSphere::Action do
113
119
  run_get_ssh_info
114
120
  end
115
121
  end
122
+
123
+ describe 'reload' do
124
+ after :each do
125
+ run :reload
126
+ end
127
+
128
+ it 'should power off the VM' do
129
+ @machine.state.stub(:id).and_return(:running)
130
+
131
+ VagrantPlugins::VSphere::Action::PowerOff.any_instance.should_receive(:call)
132
+ end
133
+
134
+ it 'should connect to vSphere' do
135
+ VagrantPlugins::VSphere::Action::ConnectVSphere.any_instance.should_receive(:call)
136
+ end
137
+
138
+ it 'should check if the VM exits' do
139
+ VagrantPlugins::VSphere::Action::IsCreated.any_instance.should_receive(:call)
140
+ end
141
+
142
+ it 'should not create the VM when the VM does already not exist' do
143
+ @machine.state.stub(:id).and_return(:not_created)
144
+
145
+ VagrantPlugins::VSphere::Action::Clone.any_instance.should_not_receive(:call)
146
+ VagrantPlugins::VSphere::Action::MessageNotCreated.any_instance.should_receive(:call)
147
+ end
148
+
149
+ it 'should not create the VM when the VM already exists' do
150
+ @machine.state.stub(:id).and_return(:running)
151
+
152
+ VagrantPlugins::VSphere::Action::Clone.any_instance.should_not_receive(:call)
153
+ VagrantPlugins::VSphere::Action::MessageAlreadyCreated.any_instance.should_receive(:call)
154
+ end
155
+ end
116
156
  end
data/spec/clone_spec.rb CHANGED
@@ -73,6 +73,18 @@ describe VagrantPlugins::VSphere::Action::Clone do
73
73
  })
74
74
  end
75
75
 
76
+
77
+ it 'should create a CloneVM spec with configured number of cpus' do
78
+ @machine.provider_config.stub(:cpu_count).and_return(4)
79
+ call
80
+ expect(@template).to have_received(:CloneVM_Task).with({
81
+ :folder => @data_center,
82
+ :name => NAME,
83
+ :spec => {:location => {:pool => @child_resource_pool},
84
+ :config => RbVmomi::VIM.VirtualMachineConfigSpec(:numCPUs => 4) },
85
+ })
86
+ end
87
+
76
88
  it 'should set static IP when given config spec' do
77
89
  @machine.provider_config.stub(:customization_spec_name).and_return('spec')
78
90
  call
data/spec/spec_helper.rb CHANGED
@@ -54,7 +54,8 @@ RSpec.configure do |config|
54
54
  :proxy_host => nil,
55
55
  :proxy_port => nil,
56
56
  :vlan => nil,
57
- :memory_mb => nil)
57
+ :memory_mb => nil,
58
+ :cpu_count => nil)
58
59
  vm_config = double(
59
60
  :vm => double('config_vm',
60
61
  :box => nil,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-vsphere
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.0
4
+ version: 0.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Grauch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-01 00:00:00.000000000 Z
11
+ date: 2014-12-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -117,6 +117,7 @@ extra_rdoc_files: []
117
117
  files:
118
118
  - .bumpversion.cfg
119
119
  - .gitignore
120
+ - .travis.yml
120
121
  - Gemfile
121
122
  - LICENSE.txt
122
123
  - README.md
@@ -176,7 +177,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
176
177
  version: '0'
177
178
  requirements: []
178
179
  rubyforge_project:
179
- rubygems_version: 2.2.2
180
+ rubygems_version: 2.0.14
180
181
  signing_key:
181
182
  specification_version: 4
182
183
  summary: VMWare vSphere provider