vagrant-vcloud 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3c67fed2281158e2886200db7ede9d6897960497
4
- data.tar.gz: 5755cae7234f427fbc190ceb4b56a41d49450b38
3
+ metadata.gz: e1c0bf0f48d1c3e7bd352126b15f4a938ca0fc08
4
+ data.tar.gz: af36799b2352b3eeb67a302ef468c5868be973ef
5
5
  SHA512:
6
- metadata.gz: 086de3a0a7d11d6a093363599de2d2d44ed41aa6e74331ffffadb9b7f96f8c91f784090f0ed07b299afb7d44e9c1fd64ca4eabaf597a1b79a7552748619f7fbd
7
- data.tar.gz: e784aeae136758ca9f591f7403fa89155f05a66b08e01872d0dbe68c58c09f8b2a8e21eec25c346c0b956a16e36aec11d27b8832627eb080acdfe8606ea51e3d
6
+ metadata.gz: 728cc1f80d48c88fd71be8a1d0ff933c91e48d056409a7fcc70355f59b313af7667c298397d7d7accfc90a74a78bc522c9cfc08ead7c7877de90696deb831349
7
+ data.tar.gz: 3600a3156cccad0832c40da6c59e8c0a271887aa2070051e6110c3afab8f1af9ee97c98863a32d4ceb75f08d61f8dd51515ff66fc003c5d498135a24772074e5
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  [Vagrant](http://www.vagrantup.com) provider for VMware vCloud Director®
2
2
  =============
3
3
 
4
- [Version 0.4.0](../../releases/tag/v0.4.0) has been released!
4
+ [Version 0.4.1](../../releases/tag/v0.4.1) 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.
@@ -23,6 +23,15 @@ Vagrant will download all the required gems during the installation process.
23
23
 
24
24
  After the install has completed a ```vagrant up --provider=vcloud``` will trigger the newly installed provider.
25
25
 
26
+ Upgrade
27
+ -------------
28
+
29
+ If you already have vagrant-vcloud installed you can update to the latest version available by issuing:
30
+
31
+ ```vagrant plugin update vagrant-vcloud```
32
+
33
+ Vagrant will take care of the upgrade process.
34
+
26
35
  Configuration
27
36
  -------------
28
37
 
@@ -21,6 +21,7 @@ module VagrantPlugins
21
21
  b2.use ForwardPorts
22
22
  end
23
23
  end
24
+ b.use WaitForCommunicator, [:starting, :running]
24
25
  b.use Provision
25
26
  b.use SyncFolders
26
27
  end
@@ -297,7 +297,7 @@ module VagrantPlugins
297
297
  extheader = {}
298
298
  extheader['accept'] = "application/*+xml;version=#{@api_version}"
299
299
 
300
- if !content_type.nil?
300
+ unless content_type.nil?
301
301
  extheader['Content-Type'] = content_type
302
302
  end
303
303
 
@@ -331,9 +331,16 @@ module VagrantPlugins
331
331
  extheader
332
332
  )
333
333
 
334
- if !response.ok?
335
- raise "Warning: unattended code #{response.status}" +
336
- " #{response.reason}"
334
+ unless response.ok?
335
+ if response.code == 400
336
+ error_message = Nokogiri.parse(response.body)
337
+ error = error_message.css('Error')
338
+ fail Errors::InvalidRequestError,
339
+ :message => error.first['message'].to_s
340
+ else
341
+ fail Errors::UnattendedCodeError,
342
+ :message => response.status
343
+ end
337
344
  end
338
345
 
339
346
  nicexml = Nokogiri.XML(response.body)
@@ -343,7 +350,7 @@ module VagrantPlugins
343
350
  if @logger.level == 1
344
351
  ap "[#{Time.now.ctime}] <- RECV #{response.status}"
345
352
  # Just avoid the task spam.
346
- if !url.index('/task/')
353
+ unless url.index('/task/')
347
354
  ap 'RECV HEADERS'
348
355
  ap response.headers
349
356
  ap 'RECV BODY'
@@ -352,10 +359,8 @@ module VagrantPlugins
352
359
  end
353
360
 
354
361
  [Nokogiri.parse(response.body), response.headers]
355
- rescue SocketError
356
- raise 'Impossible to connect, verify endpoint'
357
- rescue Errno::EADDRNOTAVAIL
358
- raise 'Impossible to connect, verify endpoint'
362
+ rescue SocketError, Errno::EADDRNOTAVAIL
363
+ raise Errors::EndpointUnavailable, :endpoint => @api_url
359
364
  end
360
365
  end
361
366
 
@@ -432,8 +437,20 @@ module VagrantPlugins
432
437
  'Content-Length' => range_len.to_s
433
438
  }
434
439
 
440
+ upload_request = "#{@host_url}#{upload_url}"
441
+
442
+ # Massive debug when LOG=DEBUG
443
+ # Using awesome_print to get nice XML output for better readability
444
+ if @logger.level == 1
445
+ ap "[#{Time.now.ctime}] -> SEND PUT #{upload_request}"
446
+ ap 'SEND HEADERS'
447
+ ap extheader
448
+ ap 'SEND BODY'
449
+ ap '<data omitted>'
450
+ end
451
+
435
452
  begin
436
- upload_request = "#{@host_url}#{upload_url}"
453
+
437
454
  # FIXME: Add debug on the return status of "connection"
438
455
  # to enhance troubleshooting for this upload process.
439
456
  # (tsugliani)
@@ -129,13 +129,14 @@ module VagrantPlugins
129
129
  # Suppress SSL depth message
130
130
  clnt.ssl_config.verify_callback = proc { |ok, ctx|; true }
131
131
 
132
- url = "#{host_url}/api/versions"
132
+ uri = URI(host_url)
133
+ url = "#{uri.scheme}://#{uri.host}:#{uri.port}/api/versions"
133
134
 
134
135
  begin
135
136
  response = clnt.request('GET', url, nil, nil, nil)
136
- if !response.ok?
137
- raise "Warning: unattended code #{response.status} " +
138
- "#{response.reason}"
137
+ unless response.ok?
138
+ fail Errors::UnattendedCodeError,
139
+ :message => response.status + ' ' + response.reason
139
140
  end
140
141
 
141
142
  version_info = Nokogiri.parse(response.body)
@@ -154,10 +155,9 @@ module VagrantPlugins
154
155
 
155
156
  api_version_supported
156
157
 
157
- rescue SocketError
158
- raise Errors::HostNotFound, :message => host_url
159
- rescue Errno::EADDRNOTAVAIL
160
- raise Errors::HostNotFound, :message => host_url
158
+ rescue SocketError, Errno::EADDRNOTAVAIL
159
+ raise Errors::EndpointUnavailable,
160
+ :endpoint => "#{uri.scheme}://#{uri.host}:#{uri.port}/api"
161
161
  end
162
162
  end
163
163
  end
@@ -18,6 +18,7 @@
18
18
  require 'ruby-progressbar'
19
19
  require 'set'
20
20
  require 'netaddr'
21
+ require 'uri'
21
22
 
22
23
  module VagrantPlugins
23
24
  module VCloud
@@ -28,17 +29,17 @@ module VagrantPlugins
28
29
 
29
30
  ##
30
31
  # Init the driver with the Vagrantfile information
31
- def initialize(host, username, password, org_name)
32
+ def initialize(hostname, username, password, org_name)
32
33
  @logger = Log4r::Logger.new('vagrant::provider::vcloud::driver_5_1')
33
-
34
- @host = host
35
- @api_url = "#{host}/api"
36
- @host_url = "#{host}"
34
+ uri = URI(hostname)
35
+ @api_url = "#{uri.scheme}://#{uri.host}:#{uri.port}/api"
36
+ @host_url = "#{uri.scheme}://#{uri.host}:#{uri.port}"
37
37
  @username = username
38
38
  @password = password
39
39
  @org_name = org_name
40
40
  @api_version = '5.1'
41
41
  @id = nil
42
+
42
43
  @cached_vapp_edge_public_ips = {}
43
44
  end
44
45
 
@@ -86,7 +87,7 @@ module VagrantPlugins
86
87
 
87
88
  results = {}
88
89
  orgs.each do |org|
89
- results[org['name']] = org['href'].gsub("#{@api_url}/org/", '')
90
+ results[org['name']] = URI(org['href']).path.gsub('/api/org/', '')
90
91
  end
91
92
  results
92
93
  end
@@ -142,8 +143,8 @@ module VagrantPlugins
142
143
  response.css(
143
144
  "Link[type='application/vnd.vmware.vcloud.catalog+xml']"
144
145
  ).each do |item|
145
- catalogs[item['name']] = item['href'].gsub(
146
- "#{@api_url}/catalog/", ''
146
+ catalogs[item['name']] = URI(item['href']).path.gsub(
147
+ '/api/catalog/', ''
147
148
  )
148
149
  end
149
150
 
@@ -151,8 +152,8 @@ module VagrantPlugins
151
152
  response.css(
152
153
  "Link[type='application/vnd.vmware.vcloud.vdc+xml']"
153
154
  ).each do |item|
154
- vdcs[item['name']] = item['href'].gsub(
155
- "#{@api_url}/vdc/", ''
155
+ vdcs[item['name']] = URI(item['href']).path.gsub(
156
+ '/api/vdc/', ''
156
157
  )
157
158
  end
158
159
 
@@ -160,8 +161,8 @@ module VagrantPlugins
160
161
  response.css(
161
162
  "Link[type='application/vnd.vmware.vcloud.orgNetwork+xml']"
162
163
  ).each do |item|
163
- networks[item['name']] = item['href'].gsub(
164
- "#{@api_url}/network/", ''
164
+ networks[item['name']] = URI(item['href']).path.gsub(
165
+ '/api/network/', ''
165
166
  )
166
167
  end
167
168
 
@@ -169,8 +170,8 @@ module VagrantPlugins
169
170
  response.css(
170
171
  "Link[type='application/vnd.vmware.vcloud.tasksList+xml']"
171
172
  ).each do |item|
172
- tasklists[item['name']] = item['href'].gsub(
173
- "#{@api_url}/tasksList/", ''
173
+ tasklists[item['name']] = URI(item['href']).path.gsub(
174
+ '/api/tasksList/', ''
174
175
  )
175
176
  end
176
177
 
@@ -198,8 +199,8 @@ module VagrantPlugins
198
199
  response.css(
199
200
  "CatalogItem[type='application/vnd.vmware.vcloud.catalogItem+xml']"
200
201
  ).each do |item|
201
- items[item['name']] = item['href'].gsub(
202
- "#{@api_url}/catalogItem/", ''
202
+ items[item['name']] = URI(item['href']).path.gsub(
203
+ '/api/catalogItem/', ''
203
204
  )
204
205
  end
205
206
  { :description => description, :items => items }
@@ -218,6 +219,34 @@ module VagrantPlugins
218
219
  end
219
220
  end
220
221
 
222
+ if result.nil?
223
+ # catalog not found, search in global catalogs as well
224
+ # that are not listed in organization directly
225
+ params = {
226
+ 'method' => :get,
227
+ 'command' => '/catalogs/query/',
228
+ 'cacheable' => true
229
+ }
230
+
231
+ response, _headers = send_request(params)
232
+
233
+ catalogs = {}
234
+ response.css(
235
+ 'CatalogRecord'
236
+ ).each do |item|
237
+ catalogs[item['name']] = URI(item['href']).path.gsub(
238
+ '/api/catalog/', ''
239
+ )
240
+ end
241
+
242
+ catalogs.each do |catalog|
243
+ if catalog[0].downcase == catalog_name.downcase
244
+ result = catalog[1]
245
+ end
246
+ end
247
+
248
+ end
249
+
221
250
  result
222
251
  end
223
252
 
@@ -256,8 +285,8 @@ module VagrantPlugins
256
285
  response.css(
257
286
  "ResourceEntity[type='application/vnd.vmware.vcloud.vApp+xml']"
258
287
  ).each do |item|
259
- vapps[item['name']] = item['href'].gsub(
260
- "#{@api_url}/vApp/vapp-", ''
288
+ vapps[item['name']] = URI(item['href']).path.gsub(
289
+ '/api/vApp/vapp-', ''
261
290
  )
262
291
  end
263
292
 
@@ -265,8 +294,8 @@ module VagrantPlugins
265
294
  response.css(
266
295
  "Network[type='application/vnd.vmware.vcloud.network+xml']"
267
296
  ).each do |item|
268
- networks[item['name']] = item['href'].gsub(
269
- "#{@api_url}/network/", ''
297
+ networks[item['name']] = URI(item['href']).path.gsub(
298
+ '/api/network/', ''
270
299
  )
271
300
  end
272
301
  {
@@ -324,8 +353,8 @@ module VagrantPlugins
324
353
  response.css(
325
354
  "Entity[type='application/vnd.vmware.vcloud.vAppTemplate+xml']"
326
355
  ).each do |item|
327
- items[item['name']] = item['href'].gsub(
328
- "#{@api_url}/vAppTemplate/vappTemplate-", ''
356
+ items[item['name']] = URI(item['href']).path.gsub(
357
+ '/api/vAppTemplate/vappTemplate-', ''
329
358
  )
330
359
  end
331
360
  { :description => description, :items => items }
@@ -359,7 +388,9 @@ module VagrantPlugins
359
388
  vms_hash = {}
360
389
  response.css('/VAppTemplate/Children/Vm').each do |vm_elem|
361
390
  vm_name = vm_elem['name']
362
- vm_id = vm_elem['href'].gsub("#{@api_url}/vAppTemplate/vm-", '')
391
+ vm_id = URI(vm_elem['href']).path.gsub(
392
+ '/api/vAppTemplate/vm-', ''
393
+ )
363
394
 
364
395
  # Add the VM name/id to the VMs Hash
365
396
  vms_hash[vm_name] = { :id => vm_id }
@@ -415,7 +446,7 @@ module VagrantPlugins
415
446
  vms_hash[vm['name'].to_sym] = {
416
447
  :addresses => addresses,
417
448
  :status => convert_vapp_status(vm['status']),
418
- :id => vm['href'].gsub("#{@api_url}/vApp/vm-", ''),
449
+ :id => URI(vm['href']).path.gsub('/api/vApp/vm-', ''),
419
450
  :vapp_scoped_local_id => vapp_local_id.text
420
451
  }
421
452
  end
@@ -440,7 +471,7 @@ module VagrantPlugins
440
471
  }
441
472
 
442
473
  _response, headers = send_request(params)
443
- task_id = headers['Location'].gsub("#{@api_url}/task/", '')
474
+ task_id = URI(headers['Location']).path.gsub('/api/task/', '')
444
475
  task_id
445
476
  end
446
477
 
@@ -463,7 +494,7 @@ module VagrantPlugins
463
494
  builder.to_xml,
464
495
  'application/vnd.vmware.vcloud.undeployVAppParams+xml'
465
496
  )
466
- task_id = headers['Location'].gsub("#{@api_url}/task/", '')
497
+ task_id = URI(headers['Location']).path.gsub('/api/task/', '')
467
498
  task_id
468
499
  end
469
500
 
@@ -476,7 +507,7 @@ module VagrantPlugins
476
507
  }
477
508
 
478
509
  _response, headers = send_request(params)
479
- task_id = headers['Location'].gsub("#{@api_url}/task/", '')
510
+ task_id = URI(headers['Location']).path.gsub('/api/task/', '')
480
511
  task_id
481
512
  end
482
513
 
@@ -492,7 +523,7 @@ module VagrantPlugins
492
523
  }
493
524
 
494
525
  _response, headers = send_request(params)
495
- task_id = headers['Location'].gsub("#{@api_url}/task/", '')
526
+ task_id = URI(headers['Location']).path.gsub('/api/task/', '')
496
527
  task_id
497
528
  end
498
529
 
@@ -507,7 +538,7 @@ module VagrantPlugins
507
538
  }
508
539
 
509
540
  _response, headers = send_request(params)
510
- task_id = headers['Location'].gsub("#{@api_url}/task/", '')
541
+ task_id = URI(headers['Location']).path.gsub('/api/task/', '')
511
542
  task_id
512
543
  end
513
544
 
@@ -520,7 +551,7 @@ module VagrantPlugins
520
551
  }
521
552
 
522
553
  _response, headers = send_request(params)
523
- task_id = headers['Location'].gsub("#{@api_url}/task/", '')
554
+ task_id = URI(headers['Location']).path.gsub('/api/task/', '')
524
555
  task_id
525
556
  end
526
557
 
@@ -535,7 +566,7 @@ module VagrantPlugins
535
566
  }
536
567
 
537
568
  _response, headers = send_request(params)
538
- task_id = headers['Location'].gsub("#{@api_url}/task/", '')
569
+ task_id = URI(headers['Location']).path.gsub('/api/task/', '')
539
570
  task_id
540
571
  end
541
572
 
@@ -560,7 +591,7 @@ module VagrantPlugins
560
591
  builder.to_xml,
561
592
  'application/vnd.vmware.vcloud.undeployVAppParams+xml'
562
593
  )
563
- task_id = headers['Location'].gsub("#{@api_url}/task/", '')
594
+ task_id = URI(headers['Location']).path.gsub('/api/task/', '')
564
595
  task_id
565
596
  end
566
597
 
@@ -583,7 +614,7 @@ module VagrantPlugins
583
614
  builder.to_xml,
584
615
  'application/vnd.vmware.vcloud.undeployVAppParams+xml'
585
616
  )
586
- task_id = headers['Location'].gsub("#{@api_url}/task/", '')
617
+ task_id = URI(headers['Location']).path.gsub('/api/task/', '')
587
618
  task_id
588
619
  end
589
620
 
@@ -599,7 +630,7 @@ module VagrantPlugins
599
630
  }
600
631
 
601
632
  _response, headers = send_request(params)
602
- task_id = headers['Location'].gsub("#{@api_url}/task/", '')
633
+ task_id = URI(headers['Location']).path.gsub('/api/task/', '')
603
634
  task_id
604
635
  end
605
636
 
@@ -614,7 +645,7 @@ module VagrantPlugins
614
645
  }
615
646
 
616
647
  _response, headers = send_request(params)
617
- task_id = headers['Location'].gsub("#{@api_url}/task/", '')
648
+ task_id = URI(headers['Location']).path.gsub('/api/task/', '')
618
649
  task_id
619
650
  end
620
651
 
@@ -627,7 +658,7 @@ module VagrantPlugins
627
658
  }
628
659
 
629
660
  _response, headers = send_request(params)
630
- task_id = headers['Location'].gsub("#{@api_url}/task/", '')
661
+ task_id = URI(headers['Location']).path.gsub('/api/task/', '')
631
662
  task_id
632
663
  end
633
664
 
@@ -652,13 +683,13 @@ module VagrantPlugins
652
683
  builder.to_xml,
653
684
  'application/vnd.vmware.admin.catalog+xml'
654
685
  )
655
- task_id = response.css(
656
- "AdminCatalog Tasks Task[operationName='catalogCreateCatalog']"
657
- ).first[:href].gsub("#{@api_url}/task/", '')
686
+ task_id = URI(response.css(
687
+ "AdminCatalog Tasks Task[operationName='catalogCreateCatalog']"
688
+ ).first[:href]).path.gsub('/api/task/', '')
658
689
 
659
- catalog_id = response.css(
660
- "AdminCatalog Link [type='application/vnd.vmware.vcloud.catalog+xml']"
661
- ).first[:href].gsub("#{@api_url}/catalog/", '')
690
+ catalog_id = URI(response.css(
691
+ "AdminCatalog Link [type='application/vnd.vmware.vcloud.catalog+xml']"
692
+ ).first[:href]).path.gsub('/api/catalog/', '')
662
693
 
663
694
  { :task_id => task_id, :catalog_id => catalog_id }
664
695
  end
@@ -697,13 +728,13 @@ module VagrantPlugins
697
728
  'application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml'
698
729
  )
699
730
 
700
- vapp_id = headers['Location'].gsub("#{@api_url}/vApp/vapp-", '')
731
+ vapp_id = URI(headers['Location']).path.gsub('/api/vApp/vapp-', '')
701
732
 
702
733
  task = response.css(
703
734
  "VApp Task[operationName='vdcInstantiateVapp']"
704
735
  ).first
705
736
 
706
- task_id = task['href'].gsub("#{@api_url}/task/", '')
737
+ task_id = URI(task['href']).path.gsub("/api/task/", '')
707
738
 
708
739
  { :vapp_id => vapp_id, :task_id => task_id }
709
740
  end
@@ -802,10 +833,10 @@ module VagrantPlugins
802
833
  'application/vnd.vmware.vcloud.composeVAppParams+xml'
803
834
  )
804
835
 
805
- vapp_id = headers['Location'].gsub("#{@api_url}/vApp/vapp-", '')
836
+ vapp_id = URI(headers['Location']).path.gsub("/api/vApp/vapp-", '')
806
837
 
807
838
  task = response.css("VApp Task[operationName='vdcComposeVapp']").first
808
- task_id = task['href'].gsub("#{@api_url}/task/", '')
839
+ task_id = URI(task['href']).path.gsub('/api/task/', '')
809
840
 
810
841
  { :vapp_id => vapp_id, :task_id => task_id }
811
842
  end
@@ -865,10 +896,10 @@ module VagrantPlugins
865
896
  'application/vnd.vmware.vcloud.recomposeVAppParams+xml'
866
897
  )
867
898
 
868
- vapp_id = headers['Location'].gsub("#{@api_url}/vApp/vapp-", '')
899
+ vapp_id = URI(headers['Location']).path.gsub('/api/vApp/vapp-', '')
869
900
 
870
901
  task = response.css("Task [operationName='vdcRecomposeVapp']").first
871
- task_id = task['href'].gsub("#{@api_url}/task/", '')
902
+ task_id = URI(task['href']).path.gsub('/api/task/', '')
872
903
 
873
904
  { :vapp_id => vapp_id, :task_id => task_id }
874
905
  end
@@ -904,7 +935,7 @@ module VagrantPlugins
904
935
 
905
936
  vms.each do |vm|
906
937
  vms_hash[vm['name']] = {
907
- :id => vm['href'].gsub("#{@api_url}/vAppTemplate/vm-", '')
938
+ :id => URI(vm['href']).path.gsub('/api/vAppTemplate/vm-', '')
908
939
  }
909
940
  end
910
941
 
@@ -962,7 +993,7 @@ module VagrantPlugins
962
993
  'application/vnd.vmware.vcloud.networkConfigSection+xml'
963
994
  )
964
995
 
965
- task_id = headers['Location'].gsub("#{@api_url}/task/", '')
996
+ task_id = URI(headers['Location']).path.gsub("/api/task/", '')
966
997
  task_id
967
998
  end
968
999
 
@@ -1029,7 +1060,7 @@ module VagrantPlugins
1029
1060
  'application/vnd.vmware.vcloud.networkConfigSection+xml'
1030
1061
  )
1031
1062
 
1032
- task_id = headers['Location'].gsub("#{@api_url}/task/", '')
1063
+ task_id = URI(headers['Location']).path.gsub('/api/task/', '')
1033
1064
  task_id
1034
1065
  end
1035
1066
  ##
@@ -1099,8 +1130,8 @@ module VagrantPlugins
1099
1130
  edge_gateway = response.css('EdgeGatewayRecord').first
1100
1131
 
1101
1132
  if edge_gateway
1102
- return edge_gateway['href'].gsub(
1103
- "#{@api_url}/admin/edgeGateway/", ''
1133
+ return URI(edge_gateway['href']).path.gsub(
1134
+ '/api/admin/edgeGateway/', ''
1104
1135
  )
1105
1136
  else
1106
1137
  return nil
@@ -1119,7 +1150,7 @@ module VagrantPlugins
1119
1150
  }
1120
1151
 
1121
1152
  _response, headers = send_request(params)
1122
- task_id = headers['Location'].gsub("#{@api_url}/task/", '')
1153
+ task_id = URI(headers['Location']).path.gsub('/api/task/', '')
1123
1154
  task_id
1124
1155
  end
1125
1156
 
@@ -1145,8 +1176,8 @@ module VagrantPlugins
1145
1176
  edge_gateway = response.css('EdgeGatewayRecord').first
1146
1177
 
1147
1178
  if edge_gateway
1148
- edge_gateway_id = edge_gateway['href'].gsub(
1149
- "#{@api_url}/admin/edgeGateway/", ''
1179
+ edge_gateway_id = URI(edge_gateway['href']).path.gsub(
1180
+ '/api/admin/edgeGateway/', ''
1150
1181
  )
1151
1182
  end
1152
1183
 
@@ -1312,7 +1343,7 @@ module VagrantPlugins
1312
1343
  'application/vnd.vmware.admin.edgeGatewayServiceConfiguration+xml'
1313
1344
  )
1314
1345
 
1315
- task_id = headers['Location'].gsub("#{@api_url}/task/", '')
1346
+ task_id = URI(headers['Location']).path.gsub('/api/task/', '')
1316
1347
  task_id
1317
1348
  end
1318
1349
 
@@ -1450,7 +1481,7 @@ module VagrantPlugins
1450
1481
  'application/vnd.vmware.admin.edgeGatewayServiceConfiguration+xml'
1451
1482
  )
1452
1483
 
1453
- task_id = headers['Location'].gsub("#{@api_url}/task/", '')
1484
+ task_id = URI(headers['Location']).path.gsub('/api/task/', '')
1454
1485
  task_id
1455
1486
  end
1456
1487
 
@@ -1545,14 +1576,14 @@ module VagrantPlugins
1545
1576
  )
1546
1577
 
1547
1578
  # Get vAppTemplate Link from location
1548
- vapp_template = headers['Location'].gsub(
1549
- "#{@api_url}/vAppTemplate/vappTemplate-", ''
1579
+ vapp_template = URI(headers['Location']).path.gsub(
1580
+ '/api/vAppTemplate/vappTemplate-', ''
1550
1581
  )
1551
1582
 
1552
1583
  @logger.debug("Getting vAppTemplate ID: #{vapp_template}")
1553
- descriptor_upload = response.css(
1584
+ descriptor_upload = URI(response.css(
1554
1585
  "Files Link [rel='upload:default']"
1555
- ).first[:href].gsub("#{@host_url}/transfer/", '')
1586
+ ).first[:href]).path.gsub('/transfer/', '')
1556
1587
  transfer_guid = descriptor_upload.gsub('/descriptor.ovf', '')
1557
1588
 
1558
1589
  ovf_file_basename = File.basename(ovf_file, '.ovf')
@@ -1581,7 +1612,7 @@ module VagrantPlugins
1581
1612
  task = response.css(
1582
1613
  "VAppTemplate Task[operationName='vdcUploadOvfContents']"
1583
1614
  ).first
1584
- task_id = task['href'].gsub("#{@api_url}/task/", '')
1615
+ task_id = URI(task['href']).path.gsub('/api/task/', '')
1585
1616
 
1586
1617
  # Loop to wait for the upload links to show up in the vAppTemplate
1587
1618
  # we just created
@@ -1616,9 +1647,7 @@ module VagrantPlugins
1616
1647
  response.css(
1617
1648
  "Files File [bytesTransferred='0'] Link [rel='upload:default']"
1618
1649
  ).each do |file|
1619
- file_name = file[:href].gsub(
1620
- "#{@host_url}/transfer/#{transfer_guid}/", ''
1621
- )
1650
+ file_name = URI(file[:href]).path.gsub("/transfer/#{transfer_guid}/", '')
1622
1651
  upload_filename = "#{ovf_dir}/#{file_name}"
1623
1652
  upload_url = "/transfer/#{transfer_guid}/#{file_name}"
1624
1653
  upload_file(
@@ -1670,9 +1699,9 @@ module VagrantPlugins
1670
1699
  response, _headers = send_request(params)
1671
1700
 
1672
1701
  # Cancel Task
1673
- cancel_hook = response.css(
1702
+ cancel_hook = URI(response.css(
1674
1703
  "Tasks Task Link [rel='task:cancel']"
1675
- ).first[:href].gsub("#{@api_url}", '')
1704
+ ).first[:href]).path.gsub('/api', '')
1676
1705
 
1677
1706
  params = {
1678
1707
  'method' => :post,
@@ -1769,7 +1798,7 @@ module VagrantPlugins
1769
1798
  'application/vnd.vmware.vcloud.networkConfigSection+xml'
1770
1799
  )
1771
1800
 
1772
- task_id = headers['Location'].gsub("#{@api_url}/task/", '')
1801
+ task_id = URI(headers['Location']).path.gsub('/api/task/', '')
1773
1802
  task_id
1774
1803
  end
1775
1804
 
@@ -1805,7 +1834,7 @@ module VagrantPlugins
1805
1834
  'application/vnd.vmware.vcloud.networkConnectionSection+xml'
1806
1835
  )
1807
1836
 
1808
- task_id = headers['Location'].gsub("#{@api_url}/task/", '')
1837
+ task_id = URI(headers['Location']).path.gsub('/api/task/', '')
1809
1838
  task_id
1810
1839
  end
1811
1840
 
@@ -1834,7 +1863,7 @@ module VagrantPlugins
1834
1863
  builder.to_xml,
1835
1864
  'application/vnd.vmware.vcloud.guestCustomizationSection+xml'
1836
1865
  )
1837
- task_id = headers['Location'].gsub("#{@api_url}/task/", '')
1866
+ task_id = URI(headers['Location']).path.gsub('/api/task/', '')
1838
1867
  task_id
1839
1868
  end
1840
1869
 
@@ -1847,7 +1876,7 @@ module VagrantPlugins
1847
1876
  }
1848
1877
 
1849
1878
  _response, headers = send_request(params)
1850
- task_id = headers['Location'].gsub("#{@api_url}/task/", '')
1879
+ task_id = URI(headers['Location']).path.gsub('/api/task/', '')
1851
1880
  task_id
1852
1881
  end
1853
1882
 
@@ -1898,7 +1927,7 @@ module VagrantPlugins
1898
1927
  'application/vnd.vmware.vcloud.virtualhardwaresection+xml'
1899
1928
  )
1900
1929
 
1901
- task_id = headers['Location'].gsub("#{@api_url}/task/", '')
1930
+ task_id = URI(headers['Location']).path.gsub('/api/task/', '')
1902
1931
  task_id
1903
1932
  else
1904
1933
  return nil
@@ -9,7 +9,6 @@ module VagrantPlugins
9
9
  class RsyncError < VCloudError
10
10
  error_key(:rsync_error)
11
11
  end
12
-
13
12
  class MkdirError < VCloudError
14
13
  error_key(:mkdir_error)
15
14
  end
@@ -19,12 +18,6 @@ module VagrantPlugins
19
18
  class CatalogAddError < VCloudError
20
19
  error_key(:catalog_add_error)
21
20
  end
22
- class HostNotFound < VCloudError
23
- error_key(:host_not_found)
24
- end
25
- class HostRedirect < VCloudError
26
- error_key(:host_redirect)
27
- end
28
21
  class UnauthorizedAccess < VCloudError
29
22
  error_key(:unauthorized_access)
30
23
  end
@@ -61,6 +54,15 @@ module VagrantPlugins
61
54
  class InvalidStateError < RestError
62
55
  error_key(:invalid_state_error)
63
56
  end
57
+ class InvalidRequestError < RestError
58
+ error_key(:invalid_request_error)
59
+ end
60
+ class UnattendedCodeError < RestError
61
+ error_key(:unattended_code_error)
62
+ end
63
+ class EndpointUnavailable < RestError
64
+ error_key(:endpoint_unavailable)
65
+ end
64
66
  class SyncError < VCloudError
65
67
  error_key(:sync_error)
66
68
  end
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module VCloud
3
- VERSION = '0.4.0'
3
+ VERSION = '0.4.1'
4
4
  end
5
5
  end
data/locales/en.yml CHANGED
@@ -30,8 +30,6 @@ en:
30
30
  missing_resource_pool: "Configured resource pool not found"
31
31
  missing_template: "Configured template VM could not be found"
32
32
  vcloud_old_version: "Sorry, VMware vCloud Director API version %{version} is not supported"
33
- host_not_found: "VMware vCloud Endpoint not found: %{message}"
34
- host_redirect: "VMware vCloud Endpoint not found, received an HTTP 302 message back, are you sure you're using the right protocol? (https)"
35
33
  unauthorized_access: "Access not authorized, please verify the username and password in your Vagrantfile"
36
34
  catalog_add_error: "Impossible to add Box to Catalog, error: %{message}"
37
35
  invalid_network_specification: "Wrong Network specification in the Vagrantfile, make sure you have access to the specified network."
@@ -42,6 +40,9 @@ en:
42
40
  object_not_found: "Object not found in vCloud Director"
43
41
  invalid_config_error: "Invalid Guest Customization Specified"
44
42
  invalid_state_error: "Invalid vApp State %{message}"
43
+ invalid_request_error: "Invalid request %{message}"
44
+ unattended_code_error: "Unattended code received %{message}"
45
+ endpoint_unavailable: "Can't connect to the specified endpoint %{endpoint}, please verify connectivity."
45
46
  subnet_errors:
46
47
  invalid_subnet: "The specified subnet is invalid: %{message}"
47
48
  subnet_too_small: "The specified subnet is too small: %{message}, must contain at least 2 usable IPs (/30 or 255.255.255.252)"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-vcloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fabio Rapposelli
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-06-16 00:00:00.000000000 Z
12
+ date: 2014-08-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: i18n