vagrant-cloudstack 1.4.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -1
  3. data/.travis.yml +13 -9
  4. data/CHANGELOG.md +30 -0
  5. data/Docker/Dockerfile +5 -8
  6. data/Docker/Dockerfile.chefdk_0_17 +2 -2
  7. data/Docker/Dockerfile.latest_dependencies +2 -2
  8. data/Docker/README.md +63 -35
  9. data/Gemfile +2 -2
  10. data/Gemfile.lock +307 -0
  11. data/README.md +3 -3
  12. data/Rakefile +2 -2
  13. data/build_rpm.sh +1 -1
  14. data/functional-tests/rsync/Vagrantfile.advanced_networking +1 -0
  15. data/functional-tests/vmlifecycle/Vagrantfile.advanced_networking +5 -7
  16. data/functional-tests/vmlifecycle/vmlifecycle_spec.rb +14 -2
  17. data/lib/vagrant-cloudstack/action/read_rdp_info.rb +9 -43
  18. data/lib/vagrant-cloudstack/action/read_ssh_info.rb +10 -44
  19. data/lib/vagrant-cloudstack/action/read_transport_info.rb +59 -0
  20. data/lib/vagrant-cloudstack/action/read_winrm_info.rb +10 -44
  21. data/lib/vagrant-cloudstack/action/run_instance.rb +607 -498
  22. data/lib/vagrant-cloudstack/action/terminate_instance.rb +17 -41
  23. data/lib/vagrant-cloudstack/config.rb +41 -166
  24. data/lib/vagrant-cloudstack/exceptions/exceptions.rb +7 -2
  25. data/lib/vagrant-cloudstack/service/cloudstack_resource_service.rb +17 -5
  26. data/lib/vagrant-cloudstack/version.rb +1 -1
  27. data/spec/spec_helper.rb +45 -0
  28. data/spec/vagrant-cloudstack/action/retrieve_public_ip_port_spec.rb +94 -0
  29. data/spec/vagrant-cloudstack/action/run_instance_spec.rb +609 -0
  30. data/spec/vagrant-cloudstack/action/terminate_instance_spec.rb +248 -0
  31. data/spec/vagrant-cloudstack/config_spec.rb +7 -7
  32. data/vagrant-cloudstack.gemspec +2 -1
  33. metadata +22 -10
  34. data/bootstrap.key +0 -27
@@ -37,15 +37,7 @@ module VagrantPlugins
37
37
  options['expunge'] = expunge_on_destroy
38
38
 
39
39
  job = server.destroy(options)
40
- while true
41
- response = env[:cloudstack_compute].query_async_job_result({:jobid => job.id})
42
- if response['queryasyncjobresultresponse']['jobstatus'] != 0
43
- break
44
- else
45
- env[:ui].info('Waiting for instance to be deleted')
46
- sleep 2
47
- end
48
- end
40
+ wait_for_job_ready(env, job.id, 'Waiting for instance to be deleted')
49
41
  end
50
42
 
51
43
  remove_volumes(env)
@@ -73,14 +65,7 @@ module VagrantPlugins
73
65
  begin
74
66
  resp = env[:cloudstack_compute].detach_volume({:id => volume_id})
75
67
  job_id = resp['detachvolumeresponse']['jobid']
76
- while true
77
- response = env[:cloudstack_compute].query_async_job_result({:jobid => job_id})
78
- if response['queryasyncjobresultresponse']['jobstatus'] != 0
79
- break
80
- else
81
- sleep 2
82
- end
83
- end
68
+ wait_for_job_ready(env, job_id)
84
69
  rescue Fog::Compute::Cloudstack::Error => e
85
70
  if e.message =~ /Unable to execute API command detachvolume.*entity does not exist/
86
71
  env[:ui].warn(I18n.t('vagrant_cloudstack.detach_volume_failed', message: e.message))
@@ -163,14 +148,7 @@ module VagrantPlugins
163
148
  begin
164
149
  resp = env[:cloudstack_compute].delete_port_forwarding_rule({:id => rule_id})
165
150
  job_id = resp['deleteportforwardingruleresponse']['jobid']
166
- while true
167
- response = env[:cloudstack_compute].query_async_job_result({:jobid => job_id})
168
- if response['queryasyncjobresultresponse']['jobstatus'] != 0
169
- break
170
- else
171
- sleep 2
172
- end
173
- end
151
+ wait_for_job_ready(env, job_id)
174
152
  rescue Fog::Compute::Cloudstack::Error => e
175
153
  if e.message =~ /Unable to execute API command deleteportforwardingrule.*entity does not exist/
176
154
  env[:ui].warn(" -- Failed to delete portforwarding rule: #{e.message}")
@@ -204,14 +182,7 @@ module VagrantPlugins
204
182
  }
205
183
  resp = env[:cloudstack_compute].request(options)
206
184
  job_id = resp['disablestaticnatresponse']['jobid']
207
- while true
208
- response = env[:cloudstack_compute].query_async_job_result({:jobid => job_id})
209
- if response['queryasyncjobresultresponse']['jobstatus'] != 0
210
- break
211
- else
212
- sleep 2
213
- end
214
- end
185
+ wait_for_job_ready(env, job_id)
215
186
  rescue Fog::Compute::Cloudstack::Error => e
216
187
  raise Errors::FogError, :message => e.message
217
188
  end
@@ -244,14 +215,7 @@ module VagrantPlugins
244
215
  }
245
216
  resp = env[:cloudstack_compute].request(options)
246
217
  job_id = resp[response_string]['jobid']
247
- while true
248
- response = env[:cloudstack_compute].query_async_job_result({:jobid => job_id})
249
- if response['queryasyncjobresultresponse']['jobstatus'] != 0
250
- break
251
- else
252
- sleep 2
253
- end
254
- end
218
+ wait_for_job_ready(env, job_id)
255
219
  rescue Fog::Compute::Cloudstack::Error => e
256
220
  if e.message =~ /Unable to execute API command deletefirewallrule.*entity does not exist/
257
221
  env[:ui].warn(" -- Failed to delete #{type_string}: #{e.message}")
@@ -263,6 +227,18 @@ module VagrantPlugins
263
227
  firewall_file.delete
264
228
  end
265
229
  end
230
+
231
+ def wait_for_job_ready(env, job_id, message=nil)
232
+ while true
233
+ response = env[:cloudstack_compute].query_async_job_result({:jobid => job_id})
234
+ if response['queryasyncjobresultresponse']['jobstatus'] != 0
235
+ break
236
+ else
237
+ env[:ui].info(message) if message
238
+ sleep 2
239
+ end
240
+ end
241
+ end
266
242
  end
267
243
  end
268
244
  end
@@ -3,6 +3,12 @@ require "vagrant"
3
3
  module VagrantPlugins
4
4
  module Cloudstack
5
5
  class Config < Vagrant.plugin("2", :config)
6
+ INSTANCE_VAR_DEFAULT_NIL = %w(host name path port domain_id network_id network_name project_id service_offering_id service_offering_name
7
+ template_id template_name zone_id zone_name keypair pf_ip_address_id pf_ip_address pf_public_port
8
+ pf_public_rdp_port pf_private_port pf_trusted_networks display_name group user_data ssh_key ssh_user
9
+ ssh_network_id ssh_network_name vm_user vm_password private_ip_address).freeze
10
+ INSTANCE_VAR_DEFAULT_EMPTY_ARRAY = %w(static_nat port_forwarding_rules firewall_rules security_group_ids security_group_names security_groups).freeze
11
+
6
12
  # Cloudstack api host.
7
13
  #
8
14
  # @return [String]
@@ -252,53 +258,25 @@ module VagrantPlugins
252
258
  # @return [Boolean]
253
259
  attr_accessor :expunge_on_destroy
254
260
 
255
- def initialize(domain_specific=false)
256
- @host = UNSET_VALUE
257
- @name = UNSET_VALUE
258
- @path = UNSET_VALUE
259
- @port = UNSET_VALUE
260
- @scheme = UNSET_VALUE
261
- @api_key = UNSET_VALUE
262
- @secret_key = UNSET_VALUE
263
- @instance_ready_timeout = UNSET_VALUE
264
- @domain_id = UNSET_VALUE
265
- @network_id = UNSET_VALUE
266
- @network_name = UNSET_VALUE
267
- @network_type = UNSET_VALUE
268
- @project_id = UNSET_VALUE
269
- @service_offering_id = UNSET_VALUE
270
- @service_offering_name = UNSET_VALUE
271
- @template_id = UNSET_VALUE
272
- @template_name = UNSET_VALUE
273
- @zone_id = UNSET_VALUE
274
- @zone_name = UNSET_VALUE
275
- @keypair = UNSET_VALUE
276
- @static_nat = UNSET_VALUE
277
- @pf_ip_address_id = UNSET_VALUE
278
- @pf_ip_address = UNSET_VALUE
279
- @pf_public_port = UNSET_VALUE
280
- @pf_public_rdp_port = UNSET_VALUE
281
- @pf_private_rdp_port = UNSET_VALUE
282
- @pf_public_port_randomrange= UNSET_VALUE
283
- @pf_private_port = UNSET_VALUE
284
- @pf_open_firewall = UNSET_VALUE
285
- @pf_trusted_networks = UNSET_VALUE
286
- @port_forwarding_rules = UNSET_VALUE
287
- @firewall_rules = UNSET_VALUE
288
- @security_group_ids = UNSET_VALUE
289
- @display_name = UNSET_VALUE
290
- @group = UNSET_VALUE
291
- @security_group_names = UNSET_VALUE
292
- @security_groups = UNSET_VALUE
293
- @user_data = UNSET_VALUE
294
- @ssh_key = UNSET_VALUE
295
- @ssh_user = UNSET_VALUE
296
- @ssh_network_id = UNSET_VALUE
297
- @ssh_network_name = UNSET_VALUE
298
- @vm_user = UNSET_VALUE
299
- @vm_password = UNSET_VALUE
300
- @private_ip_address = UNSET_VALUE
301
- @expunge_on_destroy = UNSET_VALUE
261
+ def initialize(domain_specific = false)
262
+ # Initialize groups in bulk, re-use these groups to set defaults in bulk
263
+ INSTANCE_VAR_DEFAULT_NIL.each do |instance_variable|
264
+ instance_variable_set("@#{instance_variable}", UNSET_VALUE)
265
+ end
266
+ # Initialize groups in bulk, re-use these groups to set defaults in bulk
267
+ INSTANCE_VAR_DEFAULT_EMPTY_ARRAY.each do |instance_variable|
268
+ instance_variable_set("@#{instance_variable}", UNSET_VALUE)
269
+ end
270
+
271
+ @scheme = UNSET_VALUE
272
+ @api_key = UNSET_VALUE
273
+ @secret_key = UNSET_VALUE
274
+ @instance_ready_timeout = UNSET_VALUE
275
+ @network_type = UNSET_VALUE
276
+ @pf_private_rdp_port = UNSET_VALUE
277
+ @pf_public_port_randomrange = UNSET_VALUE
278
+ @pf_open_firewall = UNSET_VALUE
279
+ @expunge_on_destroy = UNSET_VALUE
302
280
 
303
281
  # Internal state (prefix with __ so they aren't automatically
304
282
  # merged)
@@ -369,17 +347,17 @@ module VagrantPlugins
369
347
  end
370
348
 
371
349
  def finalize!
372
- # Host must be nil, since we can't default that
373
- @host = nil if @host == UNSET_VALUE
374
-
375
- # Name must be nil, since we can't default that
376
- @name = nil if @name == UNSET_VALUE
377
-
378
- # Path must be nil, since we can't default that
379
- @path = nil if @path == UNSET_VALUE
350
+ INSTANCE_VAR_DEFAULT_NIL.each do |instance_variable|
351
+ # ... must be nil, since we can't default that
352
+ instance_variable_set("@#{instance_variable}", nil) if
353
+ instance_variable_get("@#{instance_variable}") == UNSET_VALUE
354
+ end
380
355
 
381
- # Port must be nil, since we can't default that
382
- @port = nil if @port == UNSET_VALUE
356
+ INSTANCE_VAR_DEFAULT_EMPTY_ARRAY.each do |instance_variable|
357
+ # ... must be empty array
358
+ instance_variable_set("@#{instance_variable}", []) if
359
+ instance_variable_get("@#{instance_variable}") == UNSET_VALUE
360
+ end
383
361
 
384
362
  # We default the scheme to whatever the user has specifid in the .fog file
385
363
  # *OR* whatever is default for the provider in the fog library
@@ -393,131 +371,31 @@ module VagrantPlugins
393
371
  # Set the default timeout for waiting for an instance to be ready
394
372
  @instance_ready_timeout = 120 if @instance_ready_timeout == UNSET_VALUE
395
373
 
396
- # Domain id must be nil, since we can't default that
397
- @domain_id = nil if @domain_id == UNSET_VALUE
398
-
399
- # Network uuid must be nil, since we can't default that
400
- @network_id = nil if @network_id == UNSET_VALUE
401
-
402
- # Network uuid must be nil, since we can't default that
403
- @network_name = nil if @network_name == UNSET_VALUE
404
-
405
374
  # NetworkType is 'Advanced' by default
406
375
  @network_type = "Advanced" if @network_type == UNSET_VALUE
407
376
 
408
- # Project uuid must be nil, since we can't default that
409
- @project_id = nil if @project_id == UNSET_VALUE
410
-
411
- # Service offering uuid must be nil, since we can't default that
412
- @service_offering_id = nil if @service_offering_id == UNSET_VALUE
413
-
414
- # Service offering name must be nil, since we can't default that
415
- @service_offering_name = nil if @service_offering_name == UNSET_VALUE
416
-
417
- # Template uuid must be nil, since we can't default that
418
- @template_id = nil if @template_id == UNSET_VALUE
419
-
420
- # Template name must be nil, since we can't default that
421
- @template_name = nil if @template_name == UNSET_VALUE
422
-
423
- # Zone uuid must be nil, since we can't default that
424
- @zone_id = nil if @zone_id == UNSET_VALUE
425
-
426
- # Zone uuid must be nil, since we can't default that
427
- @zone_name = nil if @zone_name == UNSET_VALUE
428
-
429
- # Keypair defaults to nil
430
- @keypair = nil if @keypair == UNSET_VALUE
431
-
432
- # Static NAT must be empty array
433
- @static_nat = [] if @static_nat == UNSET_VALUE
434
-
435
- # IP address id must be nil, since we can't default that
436
- @pf_ip_address_id = nil if @pf_ip_address_id == UNSET_VALUE
437
-
438
- # IP address must be nil, since we can't default that
439
- @pf_ip_address = nil if @pf_ip_address == UNSET_VALUE
440
-
441
- # Public port must be nil, since we can't default that
442
- @pf_public_port = nil if @pf_public_port == UNSET_VALUE
443
-
444
- # Public port must be nil, since we can't default that
445
- @pf_public_rdp_port = nil if @pf_public_rdp_port == UNSET_VALUE
446
-
447
377
  # Private rdp port defaults to 3389
448
378
  @pf_private_rdp_port = 3389 if @pf_private_rdp_port == UNSET_VALUE
449
379
 
450
380
  # Public port random-range, default to rfc6335 'Dynamic Ports'; "(never assigned)"
451
- @pf_public_port_randomrange = {:start=>49160, :end=>49200} if @pf_public_port_randomrange == UNSET_VALUE
452
-
453
- # Private port must be nil, since we can't default that
454
- @pf_private_port = nil if @pf_private_port == UNSET_VALUE
381
+ @pf_public_port_randomrange = {:start=>49152, :end=>65535} if @pf_public_port_randomrange == UNSET_VALUE
455
382
 
456
383
  # Open firewall is true by default (for backwards compatibility)
457
384
  @pf_open_firewall = true if @pf_open_firewall == UNSET_VALUE
458
385
 
459
- # Trusted networks must be nil, since we can't default that
460
- @pf_trusted_networks = nil if @pf_trusted_networks == UNSET_VALUE
461
-
462
- # Port forwarding rules must be empty array
463
- @port_forwarding_rules = [] if @port_forwarding_rules == UNSET_VALUE
464
-
465
- # Firewall rules must be empty array
466
- @firewall_rules = [] if @firewall_rules == UNSET_VALUE
467
-
468
- # Security Group IDs must be nil, since we can't default that
469
- @security_group_ids = [] if @security_group_ids == UNSET_VALUE
470
-
471
- # Security Group Names must be nil, since we can't default that
472
- @security_group_names = [] if @security_group_names == UNSET_VALUE
473
-
474
- # Security Groups must be nil, since we can't default that
475
- @security_groups = [] if @security_groups == UNSET_VALUE
476
-
477
- # Display name must be nil, since we can't default that
478
- @display_name = nil if @display_name == UNSET_VALUE
479
-
480
- # Group must be nil, since we can't default that
481
- @group = nil if @group == UNSET_VALUE
482
-
483
- # User Data is nil by default
484
- @user_data = nil if @user_data == UNSET_VALUE
485
-
486
- # ssh key is nil by default
487
- @ssh_key = nil if @ssh_key == UNSET_VALUE
488
-
489
- # ssh user is nil by default
490
- @ssh_user = nil if @ssh_user == UNSET_VALUE
491
-
492
- # ssh network_id is nil by default
493
- @ssh_network_id = nil if @ssh_network_id == UNSET_VALUE
494
-
495
- # ssh network_name is nil by default
496
- @ssh_network_name = nil if @ssh_network_name == UNSET_VALUE
497
-
498
- # vm user is nil by default
499
- @vm_user = nil if @vm_user == UNSET_VALUE
500
-
501
- # vm password is nil by default
502
- @vm_password = nil if @vm_password == UNSET_VALUE
503
-
504
- # private ip is nil by default
505
- @private_ip_address = nil if @private_ip_address == UNSET_VALUE
506
-
507
386
  # expunge on destroy is nil by default
508
387
  @expunge_on_destroy = false if @expunge_on_destroy == UNSET_VALUE
509
388
 
510
389
  # Compile our domain specific configurations only within
511
390
  # NON-DOMAIN-SPECIFIC configurations.
512
- if !@__domain_specific
391
+ unless @__domain_specific
513
392
  @__domain_config.each do |domain, blocks|
514
393
  config = self.class.new(true).merge(self)
515
394
 
516
395
  # Execute the configuration for each block
517
396
  blocks.each { |b| b.call(config) }
518
397
 
519
- # The domain name of the configuration always equals the
520
- # domain config name:
398
+ # The domain name of the configuration always equals the domain config name:
521
399
  config.domain = domain
522
400
 
523
401
  # Finalize the configuration
@@ -536,11 +414,10 @@ module VagrantPlugins
536
414
  errors = []
537
415
 
538
416
  if @domain
539
- # Get the configuration for the domain we're using and validate only
540
- # that domain.
417
+ # Get the configuration for the domain we're using and validate only that domain.
541
418
  config = get_domain_config(@domain)
542
419
 
543
- if !config.use_fog_profile
420
+ unless config.use_fog_profile
544
421
  errors << I18n.t("vagrant_cloudstack.config.api_key_required") if \
545
422
  config.access_key_id.nil?
546
423
  errors << I18n.t("vagrant_cloudstack.config.secret_key_required") if \
@@ -554,9 +431,7 @@ module VagrantPlugins
554
431
  # This gets the configuration for a specific domain. It shouldn't
555
432
  # be called by the general public and is only used internally.
556
433
  def get_domain_config(name)
557
- if !@__finalized
558
- raise "Configuration must be finalized before calling this method."
559
- end
434
+ raise 'Configuration must be finalized before calling this method.' unless @__finalized
560
435
 
561
436
  # Return the compiled domain config
562
437
  @__compiled_domain_configs[name] || self
@@ -1,9 +1,14 @@
1
1
  module VagrantPlugins
2
2
  module Cloudstack
3
3
  module Exceptions
4
- class IpNotFoundException < Exception
4
+ class IpNotFoundException < StandardError
5
5
  end
6
- class DuplicatePFRule < Exception
6
+ class DuplicatePFRule < StandardError
7
+ end
8
+ class CloudstackResourceNotFound < StandardError
9
+ def initialize(msg='Resource not found in cloudstack')
10
+ super
11
+ end
7
12
  end
8
13
  end
9
14
  end
@@ -1,7 +1,11 @@
1
+ require 'vagrant-cloudstack/exceptions/exceptions'
2
+
1
3
  module VagrantPlugins
2
4
  module Cloudstack
3
5
  module Service
4
6
  class CloudstackResourceService
7
+ include VagrantPlugins::Cloudstack::Exceptions
8
+
5
9
  def initialize(cloudstack_compute, ui)
6
10
  @cloudstack_compute = cloudstack_compute
7
11
  @ui = ui
@@ -9,13 +13,13 @@ module VagrantPlugins
9
13
 
10
14
  def sync_resource(resource, api_parameters = {})
11
15
  @resource_details = nil
12
- if resource.id.nil? and resource.name
16
+ if resource.id.nil? and !(resource.name.nil? || resource.name.empty? )
13
17
  resource.id = name_to_id(resource.name, resource.kind, api_parameters)
14
18
  elsif resource.id
15
19
  resource.name = id_to_name(resource.id, resource.kind, api_parameters)
16
20
  end
17
21
 
18
- unless resource.is_undefined?
22
+ unless resource.is_id_undefined? || resource.is_name_undefined?
19
23
  resource.details = @resource_details
20
24
  @ui.detail("Syncronized resource: #{resource}")
21
25
  end
@@ -37,14 +41,22 @@ module VagrantPlugins
37
41
  def resourcefield_to_id(resource_type, resource_field, resource_field_value, options={})
38
42
  @ui.info("Fetching UUID for #{resource_type} with #{resource_field} '#{resource_field_value}'")
39
43
  full_response = translate_from_to(resource_type, options)
40
- @resource_details = full_response.find {|type| type[resource_field] == resource_field_value }
41
- @resource_details['id']
44
+ @resource_details = full_response.find {|type| type[resource_field] == resource_field_value } if full_response
45
+ if @resource_details
46
+ @resource_details['id']
47
+ else
48
+ raise CloudstackResourceNotFound.new("No UUID found for #{resource_type} with #{resource_field} '#{resource_field_value}'")
49
+ end
42
50
  end
43
51
 
44
52
  def id_to_resourcefield(resource_id, resource_type, resource_field, options={})
45
53
  @ui.info("Fetching #{resource_field} for #{resource_type} with UUID '#{resource_id}'")
46
54
  options = options.merge({'id' => resource_id})
47
- full_response = translate_from_to(resource_type, options)
55
+ begin
56
+ full_response = translate_from_to(resource_type, options)
57
+ rescue Fog::Compute::Cloudstack::BadRequest => e
58
+ raise CloudstackResourceNotFound.new("No Name found for #{resource_type} with UUID '#{resource_id}', #{e.class.to_s} reports:\n #{e.message}")
59
+ end
48
60
  @resource_details = full_response[0]
49
61
  @resource_details[resource_field]
50
62
  end
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module Cloudstack
3
- VERSION = '1.4.0'
3
+ VERSION = '1.5.0'
4
4
  end
5
5
  end
data/spec/spec_helper.rb CHANGED
@@ -1,8 +1,53 @@
1
1
  require 'simplecov'
2
2
  require 'coveralls'
3
3
  require 'rspec/its'
4
+ require 'i18n'
4
5
 
5
6
  Dir["#{__dir__}/vagrant-cloudstack/support/**/*.rb"].each { |f| require f }
6
7
 
7
8
  SimpleCov.start
8
9
  Coveralls.wear!
10
+
11
+ ZONE_NAME = 'Zone Name'.freeze
12
+ ZONE_ID = 'Zone UUID'.freeze
13
+ SERVICE_OFFERING_NAME = 'Service Offering Name'.freeze
14
+ SERVICE_OFFERING_ID = 'Service Offering UUID'.freeze
15
+ TEMPLATE_NAME = 'Template Name'.freeze
16
+ TEMPLATE_ID = 'Template UUID'.freeze
17
+ NETWORK_NAME = 'Network Name'.freeze
18
+ NETWORK_ID = 'Network UUID'.freeze
19
+ VPC_ID = 'VPC UUID'.freeze
20
+ DISPLAY_NAME = 'Display Name'.freeze
21
+ DISK_OFFERING_NAME = 'Disk Offering Name'.freeze
22
+ DISK_OFFERING_ID = 'Disk Offering UUID'.freeze
23
+
24
+ SERVER_ID = 'Server UUID'.freeze
25
+ NETWORK_TYPE_ADVANCED = 'Advanced'.freeze
26
+ NETWORK_TYPE_BASIC = 'Basic'.freeze
27
+ SECURITY_GROUPS_ENABLED = true
28
+ SECURITY_GROUPS_DISABLED = false
29
+ SECURITY_GROUP_ID = 'UUID of Security Group'.freeze
30
+ SECURITY_GROUP_NAME = 'Name of Security Group'.freeze
31
+ SECURITY_GROUP_DESC = 'Description of Security Group'.freeze
32
+
33
+ PF_IP_ADDRESS = 'Public IP for port forwarding'.freeze
34
+ PF_IP_ADDRESS_ID = 'UUID of Public IP for port forwarding'.freeze
35
+ PF_TRUSTED_NETWORKS = 'IP Ranges to allow public access from'.freeze
36
+ PF_RANDOM_START = 49_152
37
+ GUEST_PORT_SSH = 22
38
+ GUEST_PORT_WINRM = 5985
39
+ GUEST_PORT_RDP = 3389
40
+
41
+ COMMUNICATOR_SSH = 'VagrantPlugins::CommunicatorSSH::Communicator'.freeze
42
+ COMMUNICATOR_WINRM = 'VagrantPlugins::CommunicatorWinRM::Communicator'.freeze
43
+
44
+ SSH_GENERATED_PRIVATE_KEY = '-----BEGIN RSA PRIVATE KEY-----\nMIICWwIBA==\n-----END RSA PRIVATE KEY-----'.freeze
45
+ SSH_GENERATED_KEY_NAME = 'SSH Generated Key Name'.freeze
46
+ JOB_ID = 'UUID of a Job'.freeze
47
+ PORT_FORWARDING_RULE_ID = 'UUID of port forwarding rule'.freeze
48
+ ACL_ID = 'UUID of an ACL'.freeze
49
+ GENERATED_PASSWORD = 'Generated password'.freeze
50
+ VOLUME_ID = 'UUID of volume'.freeze
51
+
52
+ I18n.load_path << File.expand_path('../../locales/en.yml', __FILE__)
53
+ I18n.reload!