vagrant-vcloud 0.1.2 → 0.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 +4 -4
- data/.gitignore +3 -0
- data/.rubocop.yml +34 -0
- data/README.md +19 -2
- data/Rakefile +1 -1
- data/lib/vagrant-vcloud.rb +11 -13
- data/lib/vagrant-vcloud/action.rb +74 -47
- data/lib/vagrant-vcloud/action/announce_ssh_exec.rb +4 -2
- data/lib/vagrant-vcloud/action/build_vapp.rb +134 -110
- data/lib/vagrant-vcloud/action/connect_vcloud.rb +31 -42
- data/lib/vagrant-vcloud/action/destroy.rb +34 -29
- data/lib/vagrant-vcloud/action/disconnect_vcloud.rb +7 -5
- data/lib/vagrant-vcloud/action/forward_ports.rb +42 -35
- data/lib/vagrant-vcloud/action/handle_nat_port_collisions.rb +26 -22
- data/lib/vagrant-vcloud/action/inventory_check.rb +79 -52
- data/lib/vagrant-vcloud/action/is_bridged.rb +30 -0
- data/lib/vagrant-vcloud/action/is_created.rb +13 -14
- data/lib/vagrant-vcloud/action/is_paused.rb +0 -2
- data/lib/vagrant-vcloud/action/is_running.rb +0 -2
- data/lib/vagrant-vcloud/action/message_already_running.rb +1 -1
- data/lib/vagrant-vcloud/action/message_cannot_suspend.rb +1 -1
- data/lib/vagrant-vcloud/action/message_not_created.rb +1 -1
- data/lib/vagrant-vcloud/action/message_will_not_destroy.rb +6 -1
- data/lib/vagrant-vcloud/action/power_off.rb +16 -21
- data/lib/vagrant-vcloud/action/power_on.rb +64 -28
- data/lib/vagrant-vcloud/action/read_ssh_info.rb +44 -28
- data/lib/vagrant-vcloud/action/read_state.rb +16 -23
- data/lib/vagrant-vcloud/action/resume.rb +5 -13
- data/lib/vagrant-vcloud/action/suspend.rb +5 -13
- data/lib/vagrant-vcloud/action/sync_folders.rb +82 -48
- data/lib/vagrant-vcloud/action/unmap_port_forwardings.rb +27 -29
- data/lib/vagrant-vcloud/command.rb +186 -0
- data/lib/vagrant-vcloud/config.rb +41 -20
- data/lib/vagrant-vcloud/driver/base.rb +170 -121
- data/lib/vagrant-vcloud/driver/meta.rb +64 -70
- data/lib/vagrant-vcloud/driver/version_5_1.rb +1038 -716
- data/lib/vagrant-vcloud/errors.rb +4 -4
- data/lib/vagrant-vcloud/model/forwarded_port.rb +4 -2
- data/lib/vagrant-vcloud/plugin.rb +30 -20
- data/lib/vagrant-vcloud/provider.rb +6 -6
- data/lib/vagrant-vcloud/util/compile_forwarded_ports.rb +1 -1
- data/lib/vagrant-vcloud/version.rb +1 -1
- data/locales/en.yml +6 -5
- data/vagrant-vcloud.gemspec +10 -7
- metadata +35 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: beb3fb2a8c171a33da931289fe566246e416f1bb
|
4
|
+
data.tar.gz: 2fbee46af8c1f58713c1279356bdf46ef81f05a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 539d00b06ce68283799b8a41208229649c6067eaa5ad4861e4cd8d4099045133e89fde9c22a71c5f64732e09661eb3471bac2c93f68a4488a52df595b9ec76e6
|
7
|
+
data.tar.gz: 49afaa371cc4fc39b3c198d611790f2b1eadc26346ebfcd6a8330690f55e24bd6cb62b4a0f81816dd640ae12bcc5337c98b6f6a1154ff06790958c211a68d1c0
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
MethodLength:
|
2
|
+
CountComments: false # count full line comments?
|
3
|
+
Enabled: false
|
4
|
+
|
5
|
+
MethodName:
|
6
|
+
EnforcedStyle: snake_case
|
7
|
+
|
8
|
+
AccessorMethodName:
|
9
|
+
Description: Check the naming of accessor methods for get_/set_.
|
10
|
+
Enabled: false
|
11
|
+
|
12
|
+
Encoding:
|
13
|
+
Description: 'Use UTF-8 as the source file encoding.'
|
14
|
+
Enabled: true
|
15
|
+
|
16
|
+
HashSyntax:
|
17
|
+
Description: >-
|
18
|
+
Prefer Ruby 1.9 hash syntax { a: 1, b: 2 } over 1.8 syntax
|
19
|
+
{ :a => 1, :b => 2 }.
|
20
|
+
Enabled: false
|
21
|
+
EnforcedStyle: hash_rockets
|
22
|
+
|
23
|
+
LineEndConcatenation:
|
24
|
+
Description: 'Use \\ instead of + to concatenate two string literals at line end.'
|
25
|
+
Enabled: true
|
26
|
+
|
27
|
+
LineLength:
|
28
|
+
Description: 'Limit lines to 80 characters.'
|
29
|
+
Enabled: true
|
30
|
+
Max: 80
|
31
|
+
|
32
|
+
CyclomaticComplexity:
|
33
|
+
Description: 'Avoid complex methods.'
|
34
|
+
Enabled: false
|
data/README.md
CHANGED
@@ -1,13 +1,30 @@
|
|
1
1
|
[Vagrant](http://www.vagrantup.com) provider for VMware vCloud Director®
|
2
2
|
=============
|
3
3
|
|
4
|
-
[Version 0.
|
4
|
+
[Version 0.2.0](https://github.com/frapposelli/vagrant-vcloud/releases/tag/v0.2.0) has been released!
|
5
5
|
-------------
|
6
6
|
|
7
7
|
Please note that this software is still Alpha/Beta quality and is not recommended for production usage.
|
8
8
|
|
9
9
|
Right now a [Precise32](http://vagrant.tsugliani.fr/precise32.box) is available for use, or you can roll your own as you please, make sure to install VMware tools in it.
|
10
10
|
|
11
|
+
Features of Version 0.2.0 are:
|
12
|
+
|
13
|
+
- It's now possible to connect to an existing VDC network without creating a vShield Edge [ISSUE #23].
|
14
|
+
- Added a ```upload_chunksize``` parameter to specify the chunk dimension during box uploads [ISSUE #21].
|
15
|
+
- Added support for [vCloud® Hybrid Service™](http://www.vmware.com/products/vcloud-hybrid-service) API version 5.7.
|
16
|
+
- Added a new command to vagrant called ```vcloud-status``` that shows the current status of the vCloud instance relative to the Vagrant deployment. *experimental*
|
17
|
+
- General code cleanup, code should be more readable and there's a rubocop file for our code conventions.
|
18
|
+
- Passwords are now hidden when running in DEBUG mode.
|
19
|
+
- Initial support for Vagrant 1.5 (currently not supporting the new "share" features).
|
20
|
+
- Lowered Nokogiri requirement to 1.5.5 (you may need to remove a later version if installed).
|
21
|
+
- Fixed the Edge Gateway NAT rules creation / deletion.
|
22
|
+
- Added debug capabilities down to XML traffic exchanged during the REST calls.
|
23
|
+
|
24
|
+
Features of Version 0.1.2 are:
|
25
|
+
|
26
|
+
- Fix ssh_key array for the sync_folder [ISSUE #30 thanks @JMG-OICR]
|
27
|
+
|
11
28
|
Features of Version 0.1.1 are:
|
12
29
|
|
13
30
|
- bugfix multiple sub allocation pools ranges [ISSUE #24]
|
@@ -101,4 +118,4 @@ Vagrant.configure("2") do |config|
|
|
101
118
|
end
|
102
119
|
```
|
103
120
|
|
104
|
-
[](https://bitdeli.com/free "Bitdeli Badge")
|
121
|
+
[](https://bitdeli.com/free "Bitdeli Badge")
|
data/Rakefile
CHANGED
data/lib/vagrant-vcloud.rb
CHANGED
@@ -1,24 +1,23 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'pathname'
|
2
|
+
require 'vagrant-vcloud/plugin'
|
3
3
|
|
4
4
|
module VagrantPlugins
|
5
5
|
module VCloud
|
6
|
-
lib_path = Pathname.new(File.expand_path(
|
7
|
-
autoload :Action, lib_path.join(
|
8
|
-
autoload :Errors, lib_path.join(
|
6
|
+
lib_path = Pathname.new(File.expand_path('../vagrant-vcloud', __FILE__))
|
7
|
+
autoload :Action, lib_path.join('action')
|
8
|
+
autoload :Errors, lib_path.join('errors')
|
9
9
|
|
10
10
|
# This returns the path to the source of this plugin.
|
11
11
|
#
|
12
12
|
# @return [Pathname]
|
13
13
|
def self.source_root
|
14
|
-
@source_root ||= Pathname.new(File.expand_path(
|
14
|
+
@source_root ||= Pathname.new(File.expand_path('../../', __FILE__))
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
19
|
module Vagrant
|
20
20
|
class Machine
|
21
|
-
|
22
21
|
attr_reader :vappid
|
23
22
|
|
24
23
|
def vappid=(value)
|
@@ -27,13 +26,13 @@ module Vagrant
|
|
27
26
|
# The file that will store the id if we have one. This allows the
|
28
27
|
# ID to persist across Vagrant runs.
|
29
28
|
|
30
|
-
id_file = @data_dir.join(
|
29
|
+
id_file = @data_dir.join('../../../vcloud_vappid')
|
31
30
|
|
32
31
|
### this should be ./.vagrant/vcloud_vappid
|
33
32
|
|
34
33
|
if value
|
35
34
|
# Write the "id" file with the id given.
|
36
|
-
id_file.open(
|
35
|
+
id_file.open('w+') do |f|
|
37
36
|
f.write(value)
|
38
37
|
end
|
39
38
|
else
|
@@ -46,20 +45,19 @@ module Vagrant
|
|
46
45
|
|
47
46
|
# Notify the provider that the ID changed in case it needs to do
|
48
47
|
# any accounting from it.
|
49
|
-
|
48
|
+
# @provider.machine_id_changed
|
50
49
|
end
|
51
50
|
|
52
51
|
# This returns the vCloud Director vApp ID.
|
53
52
|
#
|
54
53
|
# @return [vAppId]
|
55
54
|
def get_vapp_id
|
56
|
-
vappid_file = @data_dir.join(
|
55
|
+
vappid_file = @data_dir.join('../../../vcloud_vappid')
|
57
56
|
if vappid_file.file?
|
58
57
|
@vappid = vappid_file.read
|
59
58
|
else
|
60
59
|
nil
|
61
60
|
end
|
62
61
|
end
|
63
|
-
|
64
62
|
end
|
65
|
-
end
|
63
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'pathname'
|
2
|
+
require 'vagrant/action/builder'
|
3
3
|
|
4
4
|
module VagrantPlugins
|
5
5
|
module VCloud
|
@@ -11,9 +11,14 @@ module VagrantPlugins
|
|
11
11
|
# a bootup (i.e. not saved).
|
12
12
|
def self.action_boot
|
13
13
|
Vagrant::Action::Builder.new.tap do |b|
|
14
|
+
b.use ConfigValidate
|
14
15
|
b.use PowerOn
|
15
|
-
b.use
|
16
|
-
|
16
|
+
b.use Call, IsCreated do |env, b2|
|
17
|
+
unless env[:bridged_network]
|
18
|
+
b2.use HandleNATPortCollisions
|
19
|
+
b2.use ForwardPorts
|
20
|
+
end
|
21
|
+
end
|
17
22
|
b.use Provision
|
18
23
|
b.use SyncFolders
|
19
24
|
end
|
@@ -23,7 +28,7 @@ module VagrantPlugins
|
|
23
28
|
Vagrant::Action::Builder.new.tap do |b|
|
24
29
|
b.use ConfigValidate
|
25
30
|
b.use Call, IsCreated do |env, b2|
|
26
|
-
|
31
|
+
unless env[:result]
|
27
32
|
b2.use MessageNotCreated
|
28
33
|
next
|
29
34
|
end
|
@@ -59,14 +64,15 @@ module VagrantPlugins
|
|
59
64
|
|
60
65
|
def self.action_halt
|
61
66
|
Vagrant::Action::Builder.new.tap do |b|
|
67
|
+
b.use ConfigValidate
|
62
68
|
b.use ConnectVCloud
|
63
69
|
b.use Call, IsPaused do |env, b2|
|
64
|
-
if env[:result]
|
65
|
-
b2.use Resume
|
66
|
-
end
|
67
|
-
b2.use UnmapPortForwardings
|
68
|
-
b2.use PowerOff
|
70
|
+
b2.use Resume if env[:result]
|
69
71
|
end
|
72
|
+
b.use Call, IsBridged do |env, b2|
|
73
|
+
b2.use UnmapPortForwardings unless env[:bridged_network]
|
74
|
+
end
|
75
|
+
b.use PowerOff
|
70
76
|
end
|
71
77
|
end
|
72
78
|
|
@@ -99,11 +105,9 @@ module VagrantPlugins
|
|
99
105
|
b2.use ConnectVCloud
|
100
106
|
b2.use Call, IsRunning do |env2, b3|
|
101
107
|
# If the VM is running, must power off
|
102
|
-
if env2[:result]
|
103
|
-
b3.use action_halt
|
104
|
-
end
|
108
|
+
b3.use action_halt if env2[:result]
|
105
109
|
b3.use Destroy
|
106
|
-
end
|
110
|
+
end
|
107
111
|
else
|
108
112
|
b2.use MessageWillNotDestroy
|
109
113
|
end
|
@@ -115,7 +119,7 @@ module VagrantPlugins
|
|
115
119
|
Vagrant::Action::Builder.new.tap do |b|
|
116
120
|
b.use ConfigValidate
|
117
121
|
b.use Call, IsCreated do |env, b2|
|
118
|
-
|
122
|
+
unless env[:result]
|
119
123
|
b2.use MessageNotCreated
|
120
124
|
next
|
121
125
|
end
|
@@ -151,12 +155,12 @@ module VagrantPlugins
|
|
151
155
|
Vagrant::Action::Builder.new.tap do |b|
|
152
156
|
b.use ConfigValidate
|
153
157
|
b.use Call, IsCreated do |env, b2|
|
154
|
-
|
158
|
+
unless env[:result]
|
155
159
|
b2.use MessageNotCreated
|
156
160
|
next
|
157
161
|
end
|
158
162
|
# This calls our helper that announces the IP used to connect
|
159
|
-
# to the VM, either directly to the vApp vShield or to the Org Edge
|
163
|
+
# to the VM, either directly to the vApp vShield or to the Org Edge
|
160
164
|
b2.use AnnounceSSHExec
|
161
165
|
end
|
162
166
|
end
|
@@ -166,7 +170,7 @@ module VagrantPlugins
|
|
166
170
|
Vagrant::Action::Builder.new.tap do |b|
|
167
171
|
b.use ConfigValidate
|
168
172
|
b.use Call, IsCreated do |env, b2|
|
169
|
-
|
173
|
+
unless env[:result]
|
170
174
|
b2.use MessageNotCreated
|
171
175
|
next
|
172
176
|
end
|
@@ -180,13 +184,11 @@ module VagrantPlugins
|
|
180
184
|
Vagrant::Action::Builder.new.tap do |b|
|
181
185
|
b.use ConfigValidate
|
182
186
|
b.use Call, IsCreated do |env, b2|
|
183
|
-
|
184
|
-
b2.use HandleBoxUrl
|
185
|
-
end
|
187
|
+
b2.use HandleBox unless env[:result]
|
186
188
|
end
|
187
189
|
b.use ConnectVCloud
|
188
190
|
b.use Call, IsCreated do |env, b2|
|
189
|
-
|
191
|
+
unless env[:result]
|
190
192
|
b2.use InventoryCheck
|
191
193
|
b2.use BuildVApp
|
192
194
|
end
|
@@ -197,30 +199,55 @@ module VagrantPlugins
|
|
197
199
|
end
|
198
200
|
|
199
201
|
# The autoload farm
|
200
|
-
action_root = Pathname.new(File.expand_path(
|
201
|
-
autoload :AnnounceSSHExec,
|
202
|
-
|
203
|
-
autoload :
|
204
|
-
|
205
|
-
autoload :
|
206
|
-
|
207
|
-
autoload :
|
208
|
-
|
209
|
-
autoload :
|
210
|
-
|
211
|
-
autoload :
|
212
|
-
|
213
|
-
autoload :
|
214
|
-
|
215
|
-
autoload :
|
216
|
-
|
217
|
-
autoload :
|
218
|
-
|
219
|
-
autoload :
|
220
|
-
|
221
|
-
autoload :
|
222
|
-
|
223
|
-
autoload :
|
202
|
+
action_root = Pathname.new(File.expand_path('../action', __FILE__))
|
203
|
+
autoload :AnnounceSSHExec,
|
204
|
+
action_root.join('announce_ssh_exec')
|
205
|
+
autoload :BuildVApp,
|
206
|
+
action_root.join('build_vapp')
|
207
|
+
autoload :ConnectVCloud,
|
208
|
+
action_root.join('connect_vcloud')
|
209
|
+
autoload :Destroy,
|
210
|
+
action_root.join('destroy')
|
211
|
+
autoload :DisconnectVCloud,
|
212
|
+
action_root.join('disconnect_vcloud')
|
213
|
+
autoload :ForwardPorts,
|
214
|
+
action_root.join('forward_ports')
|
215
|
+
autoload :HandleNATPortCollisions,
|
216
|
+
action_root.join('handle_nat_port_collisions')
|
217
|
+
autoload :InventoryCheck,
|
218
|
+
action_root.join('inventory_check')
|
219
|
+
autoload :IsCreated,
|
220
|
+
action_root.join('is_created')
|
221
|
+
autoload :IsBridged,
|
222
|
+
action_root.join('is_bridged')
|
223
|
+
autoload :IsPaused,
|
224
|
+
action_root.join('is_paused')
|
225
|
+
autoload :IsRunning,
|
226
|
+
action_root.join('is_running')
|
227
|
+
autoload :MessageAlreadyRunning,
|
228
|
+
action_root.join('message_already_running')
|
229
|
+
autoload :MessageCannotSuspend,
|
230
|
+
action_root.join('message_cannot_suspend')
|
231
|
+
autoload :MessageNotCreated,
|
232
|
+
action_root.join('message_not_created')
|
233
|
+
autoload :MessageWillNotDestroy,
|
234
|
+
action_root.join('message_will_not_destroy')
|
235
|
+
autoload :PowerOff,
|
236
|
+
action_root.join('power_off')
|
237
|
+
autoload :PowerOn,
|
238
|
+
action_root.join('power_on')
|
239
|
+
autoload :ReadSSHInfo,
|
240
|
+
action_root.join('read_ssh_info')
|
241
|
+
autoload :ReadState,
|
242
|
+
action_root.join('read_state')
|
243
|
+
autoload :Resume,
|
244
|
+
action_root.join('resume')
|
245
|
+
autoload :Suspend,
|
246
|
+
action_root.join('suspend')
|
247
|
+
autoload :SyncFolders,
|
248
|
+
action_root.join('sync_folders')
|
249
|
+
autoload :UnmapPortForwardings,
|
250
|
+
action_root.join('unmap_port_forwardings')
|
224
251
|
end
|
225
252
|
end
|
226
|
-
end
|
253
|
+
end
|
@@ -7,8 +7,10 @@ module VagrantPlugins
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def call(env)
|
10
|
-
|
11
|
-
env[:ui].success(
|
10
|
+
ssh_info = env[:machine].ssh_info
|
11
|
+
env[:ui].success(
|
12
|
+
"External IP for #{env[:machine].name}: #{ssh_info[:host]}"
|
13
|
+
)
|
12
14
|
super
|
13
15
|
end
|
14
16
|
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require 'securerandom'
|
2
|
+
require 'etc'
|
3
|
+
require 'netaddr'
|
4
4
|
|
5
5
|
module VagrantPlugins
|
6
6
|
module VCloud
|
@@ -8,28 +8,26 @@ module VagrantPlugins
|
|
8
8
|
class BuildVApp
|
9
9
|
def initialize(app, env)
|
10
10
|
@app = app
|
11
|
-
@logger = Log4r::Logger.new(
|
11
|
+
@logger = Log4r::Logger.new('vagrant_vcloud::action::build_vapp')
|
12
12
|
end
|
13
13
|
|
14
14
|
def call(env)
|
15
|
-
|
16
|
-
# FIXME: we need to find a way to clean things up when a SIGINT get
|
15
|
+
# FIXME: we need to find a way to clean things up when a SIGINT get
|
17
16
|
# called... see env[:interrupted] in the vagrant code
|
18
17
|
|
19
18
|
cfg = env[:machine].provider_config
|
20
19
|
cnx = cfg.vcloud_cnx.driver
|
21
|
-
|
20
|
+
vm_name = env[:machine].name
|
22
21
|
|
23
22
|
if cfg.ip_dns.nil?
|
24
|
-
|
25
|
-
|
23
|
+
dns_address1 = '8.8.8.8'
|
24
|
+
dns_address2 = '8.8.4.4'
|
26
25
|
else
|
27
|
-
|
28
|
-
|
26
|
+
dns_address1 = cfg.ip_dns.shift
|
27
|
+
dns_address2 = cfg.ip_dns.shift
|
29
28
|
end
|
30
29
|
|
31
30
|
if !cfg.ip_subnet.nil?
|
32
|
-
|
33
31
|
@logger.debug("Input address: #{cfg.ip_subnet}")
|
34
32
|
|
35
33
|
begin
|
@@ -37,159 +35,185 @@ module VagrantPlugins
|
|
37
35
|
rescue NetAddr::ValidationError
|
38
36
|
raise Errors::InvalidSubnet, :message => cfg.ip_subnet
|
39
37
|
end
|
40
|
-
if cidr.bits > 30
|
41
|
-
@logger.debug("Subnet too small!")
|
42
|
-
raise Errors::SubnetTooSmall, :message => cfg.ip_subnet
|
43
|
-
end
|
44
38
|
|
45
|
-
|
39
|
+
if cidr.bits > 30
|
40
|
+
@logger.debug('Subnet too small!')
|
41
|
+
raise Errors::SubnetTooSmall, :message => cfg.ip_subnet
|
42
|
+
end
|
43
|
+
|
44
|
+
range_addresses = cidr.range(0)
|
46
45
|
|
47
|
-
@logger.debug("Range: #{
|
46
|
+
@logger.debug("Range: #{range_addresses}")
|
48
47
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
48
|
+
# Delete the "network" address from the range.
|
49
|
+
range_addresses.shift
|
50
|
+
# Retrieve the first usable IP, to be used as a gateway.
|
51
|
+
gateway_ip = range_addresses.shift
|
52
|
+
# Reverse the array in place.
|
53
|
+
range_addresses.reverse!
|
54
|
+
# Delete the "broadcast" address from the range.
|
55
|
+
range_addresses.shift
|
56
|
+
# Reverse back the array.
|
57
|
+
range_addresses.reverse!
|
54
58
|
|
55
|
-
@logger.debug("Gateway IP: #{
|
59
|
+
@logger.debug("Gateway IP: #{gateway_ip.to_s}")
|
56
60
|
@logger.debug("Netmask: #{cidr.wildcard_mask}")
|
57
|
-
@logger.debug(
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
:
|
64
|
-
:
|
65
|
-
:
|
66
|
-
:
|
67
|
-
:
|
68
|
-
:
|
69
|
-
:
|
70
|
-
:
|
71
|
-
:
|
72
|
-
:
|
61
|
+
@logger.debug(
|
62
|
+
"IP Pool: #{range_addresses.first}-#{range_addresses.last}"
|
63
|
+
)
|
64
|
+
@logger.debug("DNS1: #{dns_address1} DNS2: #{dns_address2}")
|
65
|
+
|
66
|
+
network_options = {
|
67
|
+
:name => 'Vagrant-vApp-Net',
|
68
|
+
:gateway => gateway_ip.to_s,
|
69
|
+
:netmask => cidr.wildcard_mask,
|
70
|
+
:start_address => range_addresses.first,
|
71
|
+
:end_address => range_addresses.last,
|
72
|
+
:fence_mode => 'natRouted',
|
73
|
+
:ip_allocation_mode => 'POOL',
|
74
|
+
:parent_network => cfg.vdc_network_id,
|
75
|
+
:enable_firewall => 'false',
|
76
|
+
:dns1 => dns_address1,
|
77
|
+
:dns2 => dns_address2
|
73
78
|
}
|
74
79
|
|
80
|
+
elsif !cfg.network_bridge.nil?
|
81
|
+
# Bridged mode, avoid deploying a vShield Edge altogether.
|
82
|
+
network_options = {
|
83
|
+
:name => 'Vagrant-vApp-Net',
|
84
|
+
:fence_mode => 'bridged',
|
85
|
+
:ip_allocation_mode => 'POOL',
|
86
|
+
:parent_network => cfg.vdc_network_id
|
87
|
+
}
|
88
|
+
|
89
|
+
env[:bridged_network] = true
|
90
|
+
|
75
91
|
else
|
76
92
|
|
77
|
-
@logger.debug("DNS1: #{
|
93
|
+
@logger.debug("DNS1: #{dns_address1} DNS2: #{dns_address2}")
|
78
94
|
# No IP subnet specified, reverting to defaults
|
79
|
-
network_options = {
|
80
|
-
:name
|
81
|
-
:gateway
|
82
|
-
:netmask
|
83
|
-
:start_address
|
84
|
-
:end_address
|
85
|
-
:fence_mode
|
86
|
-
:ip_allocation_mode =>
|
87
|
-
:parent_network
|
88
|
-
:enable_firewall
|
89
|
-
:dns1
|
90
|
-
:dns2
|
95
|
+
network_options = {
|
96
|
+
:name => 'Vagrant-vApp-Net',
|
97
|
+
:gateway => '10.1.1.1',
|
98
|
+
:netmask => '255.255.255.0',
|
99
|
+
:start_address => '10.1.1.2',
|
100
|
+
:end_address => '10.1.1.254',
|
101
|
+
:fence_mode => 'natRouted',
|
102
|
+
:ip_allocation_mode => 'POOL',
|
103
|
+
:parent_network => cfg.vdc_network_id,
|
104
|
+
:enable_firewall => 'false',
|
105
|
+
:dns1 => dns_address1,
|
106
|
+
:dns2 => dns_address2
|
91
107
|
}
|
92
108
|
|
93
109
|
end
|
94
110
|
|
95
111
|
if env[:machine].get_vapp_id.nil?
|
96
|
-
|
97
|
-
env[:ui].info("Building vApp...")
|
112
|
+
env[:ui].info('Building vApp...')
|
98
113
|
|
99
114
|
compose = cnx.compose_vapp_from_vm(
|
100
|
-
cfg.vdc_id,
|
101
|
-
"Vagrant-#{Etc.getlogin}-#{Socket.gethostname.downcase}
|
102
|
-
"
|
103
|
-
{
|
104
|
-
|
105
|
-
},
|
115
|
+
cfg.vdc_id,
|
116
|
+
"Vagrant-#{Etc.getlogin}-#{Socket.gethostname.downcase}-" +
|
117
|
+
"#{SecureRandom.hex(4)}",
|
118
|
+
"vApp created by #{Etc.getlogin} running on " +
|
119
|
+
"#{Socket.gethostname.downcase} using vagrant-vcloud on " +
|
120
|
+
"#{Time.now.strftime("%B %d, %Y")}",
|
121
|
+
{
|
122
|
+
vm_name => cfg.catalog_item[:vms_hash][env[:machine].box.name.to_s][:id]
|
123
|
+
},
|
106
124
|
network_options
|
107
125
|
)
|
108
|
-
@logger.debug(
|
126
|
+
@logger.debug('Launch Compose vApp...')
|
109
127
|
# Wait for the task to finish.
|
110
128
|
wait = cnx.wait_task_completion(compose[:task_id])
|
111
129
|
|
112
|
-
|
113
|
-
|
130
|
+
unless wait[:errormsg].nil?
|
131
|
+
fail Errors::ComposeVAppError, :message => wait[:errormsg]
|
114
132
|
end
|
115
133
|
|
116
|
-
|
117
134
|
# Fetch thenewly created vApp ID
|
118
|
-
|
135
|
+
vapp_id = compose[:vapp_id]
|
119
136
|
|
120
137
|
# putting the vApp Id in a globally reachable var and file.
|
121
|
-
env[:machine].vappid =
|
138
|
+
env[:machine].vappid = vapp_id
|
122
139
|
|
123
140
|
# Fetching new vApp object to check stuff.
|
124
|
-
|
141
|
+
new_vapp = cnx.get_vapp(vapp_id)
|
125
142
|
|
126
143
|
# FIXME: Add a lot of error handling for each step here !
|
127
|
-
|
128
|
-
|
129
|
-
env[:ui].success("vApp #{newVApp[:name]} successfully created.")
|
144
|
+
if new_vapp
|
145
|
+
env[:ui].success("vApp #{new_vapp[:name]} successfully created.")
|
130
146
|
|
131
147
|
# Add the vm id as machine.id
|
132
|
-
|
133
|
-
env[:machine].id =
|
148
|
+
new_vm_properties = new_vapp[:vms_hash].fetch(vm_name)
|
149
|
+
env[:machine].id = new_vm_properties[:id]
|
134
150
|
|
135
151
|
### SET GUEST CONFIG
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
152
|
+
@logger.info(
|
153
|
+
"Setting Guest Customization on ID: [#{vm_name}] " +
|
154
|
+
"of vApp [#{new_vapp[:name]}]"
|
155
|
+
)
|
156
|
+
|
157
|
+
set_custom = cnx.set_vm_guest_customization(
|
158
|
+
new_vm_properties[:id],
|
159
|
+
vm_name,
|
160
|
+
{
|
161
|
+
:enabled => true,
|
162
|
+
:admin_passwd_enabled => false
|
163
|
+
}
|
164
|
+
)
|
165
|
+
cnx.wait_task_completion(set_custom)
|
144
166
|
|
145
167
|
else
|
146
|
-
env[:ui].error("vApp #{
|
168
|
+
env[:ui].error("vApp #{new_vapp[:name]} creation failed!")
|
147
169
|
raise # FIXME: error handling missing.
|
148
|
-
|
170
|
+
end
|
171
|
+
|
149
172
|
else
|
150
|
-
env[:ui].info(
|
151
|
-
|
173
|
+
env[:ui].info('Adding VM to existing vApp...')
|
174
|
+
|
152
175
|
recompose = cnx.recompose_vapp_from_vm(
|
153
|
-
env[:machine].get_vapp_id,
|
154
|
-
{
|
155
|
-
|
156
|
-
},
|
176
|
+
env[:machine].get_vapp_id,
|
177
|
+
{
|
178
|
+
vm_name => cfg.catalog_item[:vms_hash][env[:machine].box.name.to_s][:id]
|
179
|
+
},
|
157
180
|
network_options
|
158
181
|
)
|
159
182
|
|
160
|
-
@logger.info(
|
183
|
+
@logger.info('Waiting for the recompose task to complete ...')
|
161
184
|
|
162
185
|
# Wait for the task to finish.
|
163
|
-
|
164
|
-
|
165
|
-
newVApp = cnx.get_vapp(env[:machine].get_vapp_id)
|
186
|
+
cnx.wait_task_completion(recompose[:task_id])
|
166
187
|
|
188
|
+
new_vapp = cnx.get_vapp(env[:machine].get_vapp_id)
|
167
189
|
# FIXME: Add a lot of error handling for each step here !
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
newVMProperties = newVApp[:vms_hash].fetch(vmName)
|
172
|
-
env[:machine].id = newVMProperties[:id]
|
190
|
+
if new_vapp
|
191
|
+
new_vm_properties = new_vapp[:vms_hash].fetch(vm_name)
|
192
|
+
env[:machine].id = new_vm_properties[:id]
|
173
193
|
|
174
194
|
### SET GUEST CONFIG
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
195
|
+
@logger.info(
|
196
|
+
'Setting Guest Customization on ID: ' +
|
197
|
+
"[#{new_vm_properties[:id]}] of vApp [#{new_vapp[:name]}]"
|
198
|
+
)
|
199
|
+
|
200
|
+
set_custom = cnx.set_vm_guest_customization(
|
201
|
+
new_vm_properties[:id],
|
202
|
+
vm_name,
|
203
|
+
{
|
204
|
+
:enabled => true,
|
205
|
+
:admin_passwd_enabled => false
|
206
|
+
}
|
207
|
+
)
|
208
|
+
cnx.wait_task_completion(set_custom)
|
183
209
|
|
184
210
|
else
|
185
|
-
|
186
|
-
env[:ui].error("VM #{vmName} add to #{newVApp[:name]} failed!")
|
211
|
+
env[:ui].error("VM #{vm_name} add to #{new_vapp[:name]} failed!")
|
187
212
|
raise
|
188
|
-
end
|
213
|
+
end
|
189
214
|
end
|
190
215
|
|
191
216
|
@app.call env
|
192
|
-
|
193
217
|
end
|
194
218
|
end
|
195
219
|
end
|