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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.rubocop.yml +34 -0
  4. data/README.md +19 -2
  5. data/Rakefile +1 -1
  6. data/lib/vagrant-vcloud.rb +11 -13
  7. data/lib/vagrant-vcloud/action.rb +74 -47
  8. data/lib/vagrant-vcloud/action/announce_ssh_exec.rb +4 -2
  9. data/lib/vagrant-vcloud/action/build_vapp.rb +134 -110
  10. data/lib/vagrant-vcloud/action/connect_vcloud.rb +31 -42
  11. data/lib/vagrant-vcloud/action/destroy.rb +34 -29
  12. data/lib/vagrant-vcloud/action/disconnect_vcloud.rb +7 -5
  13. data/lib/vagrant-vcloud/action/forward_ports.rb +42 -35
  14. data/lib/vagrant-vcloud/action/handle_nat_port_collisions.rb +26 -22
  15. data/lib/vagrant-vcloud/action/inventory_check.rb +79 -52
  16. data/lib/vagrant-vcloud/action/is_bridged.rb +30 -0
  17. data/lib/vagrant-vcloud/action/is_created.rb +13 -14
  18. data/lib/vagrant-vcloud/action/is_paused.rb +0 -2
  19. data/lib/vagrant-vcloud/action/is_running.rb +0 -2
  20. data/lib/vagrant-vcloud/action/message_already_running.rb +1 -1
  21. data/lib/vagrant-vcloud/action/message_cannot_suspend.rb +1 -1
  22. data/lib/vagrant-vcloud/action/message_not_created.rb +1 -1
  23. data/lib/vagrant-vcloud/action/message_will_not_destroy.rb +6 -1
  24. data/lib/vagrant-vcloud/action/power_off.rb +16 -21
  25. data/lib/vagrant-vcloud/action/power_on.rb +64 -28
  26. data/lib/vagrant-vcloud/action/read_ssh_info.rb +44 -28
  27. data/lib/vagrant-vcloud/action/read_state.rb +16 -23
  28. data/lib/vagrant-vcloud/action/resume.rb +5 -13
  29. data/lib/vagrant-vcloud/action/suspend.rb +5 -13
  30. data/lib/vagrant-vcloud/action/sync_folders.rb +82 -48
  31. data/lib/vagrant-vcloud/action/unmap_port_forwardings.rb +27 -29
  32. data/lib/vagrant-vcloud/command.rb +186 -0
  33. data/lib/vagrant-vcloud/config.rb +41 -20
  34. data/lib/vagrant-vcloud/driver/base.rb +170 -121
  35. data/lib/vagrant-vcloud/driver/meta.rb +64 -70
  36. data/lib/vagrant-vcloud/driver/version_5_1.rb +1038 -716
  37. data/lib/vagrant-vcloud/errors.rb +4 -4
  38. data/lib/vagrant-vcloud/model/forwarded_port.rb +4 -2
  39. data/lib/vagrant-vcloud/plugin.rb +30 -20
  40. data/lib/vagrant-vcloud/provider.rb +6 -6
  41. data/lib/vagrant-vcloud/util/compile_forwarded_ports.rb +1 -1
  42. data/lib/vagrant-vcloud/version.rb +1 -1
  43. data/locales/en.yml +6 -5
  44. data/vagrant-vcloud.gemspec +10 -7
  45. metadata +35 -4
@@ -1,64 +1,53 @@
1
- require "log4r"
2
-
3
1
  module VagrantPlugins
4
2
  module VCloud
5
3
  module Action
6
4
  class ConnectVCloud
7
5
  def initialize(app, env)
8
6
  @app = app
9
- @logger = Log4r::Logger.new("vagrant_vcloud::action::connect_vcloud")
7
+ @logger = Log4r::Logger.new('vagrant_vcloud::action::connect_vcloud')
10
8
  end
11
9
 
12
10
  def call(env)
13
11
  config = env[:machine].provider_config
14
12
 
15
- # begin
16
- # Avoid recreating a new session each time.
17
- if !config.vcloud_cnx
18
- @logger.info("Connecting to vCloud Director...")
13
+ if !config.vcloud_cnx
14
+ @logger.info('Connecting to vCloud Director...')
19
15
 
20
16
  @logger.debug("config.hostname : #{config.hostname}")
21
17
  @logger.debug("config.username : #{config.username}")
22
- @logger.debug("config.password : #{config.password}")
18
+ @logger.debug("config.password : <hidden>")
23
19
  @logger.debug("config.org_name : #{config.org_name}")
24
20
 
25
- # Create the vcloud-rest connection object with the configuration
26
- # information.
27
- config.vcloud_cnx = Driver::Meta.new(
28
- config.hostname,
29
- config.username,
30
- config.password,
31
- config.org_name
32
- )
33
-
34
- @logger.info("Logging into vCloud Director...")
35
- config.vcloud_cnx.login
36
-
37
- # Check for the vCloud Director authentication token
38
- if config.vcloud_cnx.driver.auth_key
39
- @logger.info("Logged in successfully!")
40
- @logger.debug(
41
- "x-vcloud-authorization=#{config.vcloud_cnx.driver.auth_key}"
42
- )
43
- else
44
- @logger.info("Login failed in to #{config.hostname}.")
45
- env[:ui].error("Login failed in to #{config.hostname}.")
46
- raise
47
- end
48
- else
49
- @logger.info("Already logged in, using current session")
21
+ # Create the vcloud-rest connection object with the configuration
22
+ # information.
23
+ config.vcloud_cnx = Driver::Meta.new(
24
+ config.hostname,
25
+ config.username,
26
+ config.password,
27
+ config.org_name
28
+ )
29
+
30
+ @logger.info('Logging into vCloud Director...')
31
+ config.vcloud_cnx.login
32
+
33
+ # Check for the vCloud Director authentication token
34
+ if config.vcloud_cnx.driver.auth_key
35
+ @logger.info('Logged in successfully!')
50
36
  @logger.debug(
51
- "x-vcloud-authorization=#{config.vcloud_cnx.driver.auth_key}"
37
+ "x-vcloud-authorization=#{config.vcloud_cnx.driver.auth_key}"
52
38
  )
39
+ else
40
+ @logger.info("Login failed in to #{config.hostname}.")
41
+ env[:ui].error("Login failed in to #{config.hostname}.")
42
+ raise
53
43
  end
54
-
55
- @app.call env
56
-
57
- # rescue Exception => e
58
- # ### When bad credentials, we get here.
59
- # @logger.debug("Couldn't connect to vCloud Director: #{e.inspect}")
60
- # raise VagrantPlugins::VCloud::Errors::VCloudError, :message => e.message
61
- # end
44
+ else
45
+ @logger.info('Already logged in, using current session')
46
+ @logger.debug(
47
+ "x-vcloud-authorization=#{config.vcloud_cnx.driver.auth_key}"
48
+ )
49
+ end
50
+ @app.call env
62
51
 
63
52
  end
64
53
  end
@@ -1,60 +1,65 @@
1
- require "i18n"
2
-
3
1
  module VagrantPlugins
4
2
  module VCloud
5
3
  module Action
6
4
  class Destroy
7
-
8
5
  def initialize(app, env)
9
6
  @app = app
10
- @logger = Log4r::Logger.new("vagrant_vcloud::action::destroy")
7
+ @logger = Log4r::Logger.new('vagrant_vcloud::action::destroy')
11
8
  end
12
9
 
13
10
  def call(env)
14
-
15
11
  cfg = env[:machine].provider_config
16
12
  cnx = cfg.vcloud_cnx.driver
17
- vAppId = env[:machine].get_vapp_id
18
- vmId = env[:machine].id
13
+ vapp_id = env[:machine].get_vapp_id
14
+ vm_id = env[:machine].id
19
15
 
20
16
  cfg.org = cnx.get_organization_by_name(cfg.org_name)
21
17
  cfg.vdc_id = cnx.get_vdc_id_by_name(cfg.org, cfg.vdc_name)
22
18
 
23
- testvApp = cnx.get_vapp(vAppId)
19
+ test_vapp = cnx.get_vapp(vapp_id)
24
20
 
25
- @logger.debug("Number of VMs in the vApp: #{testvApp[:vms_hash].count}")
21
+ @logger.debug(
22
+ "Number of VMs in the vApp: #{test_vapp[:vms_hash].count}"
23
+ )
26
24
 
27
- if testvApp[:vms_hash].count == 1
28
- env[:ui].info("Single VM left in the vApp, destroying the vApp...")
25
+ if test_vapp[:vms_hash].count == 1
26
+ env[:ui].info('Single VM left in the vApp, destroying the vApp...')
29
27
 
30
28
  if cfg.vdc_edge_gateway_ip && cfg.vdc_edge_gateway
31
- env[:ui].info("Removing NAT rules on [#{cfg.vdc_edge_gateway}] for IP [#{cfg.vdc_edge_gateway_ip}].")
32
- @logger.debug("Deleting Edge Gateway rules - vdc id: #{cfg.vdc_id}")
33
- edge_remove = cnx.remove_edge_gateway_rules(cfg.vdc_edge_gateway, cfg.vdc_id, cfg.vdc_edge_gateway_ip, vAppId)
29
+ env[:ui].info(
30
+ "Removing NAT rules on [#{cfg.vdc_edge_gateway}] " +
31
+ "for IP [#{cfg.vdc_edge_gateway_ip}]."
32
+ )
33
+ @logger.debug(
34
+ "Deleting Edge Gateway rules - vdc id: #{cfg.vdc_id}"
35
+ )
36
+ edge_remove = cnx.remove_edge_gateway_rules(
37
+ cfg.vdc_edge_gateway,
38
+ cfg.vdc_id,
39
+ cfg.vdc_edge_gateway_ip,
40
+ vapp_id
41
+ )
34
42
  cnx.wait_task_completion(edge_remove)
35
43
  end
36
44
 
37
- env[:ui].info("Destroying vApp...")
38
- vAppDeleteTask = cnx.delete_vapp(vAppId)
39
- @logger.debug("vApp Delete task id #{vAppDeleteTask}")
40
- cnx.wait_task_completion(vAppDeleteTask)
45
+ env[:ui].info('Destroying vApp...')
46
+ vapp_delete_task = cnx.delete_vapp(vapp_id)
47
+ @logger.debug("vApp Delete task id #{vapp_delete_task}")
48
+ cnx.wait_task_completion(vapp_delete_task)
41
49
 
42
-
43
- # FIXME: Look into this.
44
- ####env[:machine].provider.driver.delete
45
- env[:machine].id=nil
46
- env[:machine].vappid=nil
50
+ env[:machine].id = nil
51
+ env[:machine].vappid = nil
47
52
  else
48
- env[:ui].info("Destroying VM...")
49
- vmDeleteTask = cnx.delete_vm(vmId)
50
- @logger.debug("VM Delete task id #{vmDeleteTask}")
51
- cnx.wait_task_completion(vmDeleteTask)
52
- env[:machine].id=nil
53
+ env[:ui].info('Destroying VM...')
54
+ vm_delete_task = cnx.delete_vm(vm_id)
55
+ @logger.debug("VM Delete task id #{vm_delete_task}")
56
+ cnx.wait_task_completion(vm_delete_task)
57
+
58
+ env[:machine].id = nil
53
59
  end
54
60
 
55
61
  @app.call env
56
62
  end
57
-
58
63
  end
59
64
  end
60
65
  end
@@ -4,14 +4,16 @@ module VagrantPlugins
4
4
  class DisconnectVCloud
5
5
  def initialize(app, env)
6
6
  @app = app
7
- @logger = Log4r::Logger.new("vagrant_vcloud::action::disconnect_vcloud")
7
+ @logger = Log4r::Logger.new(
8
+ 'vagrant_vcloud::action::disconnect_vcloud'
9
+ )
8
10
  end
9
11
 
10
12
  def call(env)
11
13
  begin
12
- @logger.info("Disconnecting from vCloud Director...")
14
+ @logger.info('Disconnecting from vCloud Director...')
13
15
 
14
- # Fetch the global vCloud Director connection handle
16
+ # Fetch the global vCloud Director connection handle
15
17
  cnx = env[:machine].provider_config.vcloud_cnx.driver
16
18
 
17
19
  # Delete the current vCloud Director Session
@@ -19,11 +21,11 @@ module VagrantPlugins
19
21
 
20
22
  # If session key doesn't exist, we are disconnected
21
23
  if !cnx.auth_key
22
- @logger.info("Disconnected from vCloud Director successfully!")
24
+ @logger.info('Disconnected from vCloud Director successfully!')
23
25
  end
24
26
 
25
27
  rescue Exception => e
26
- #raise a properly namespaced error for Vagrant
28
+ # Raise a properly namespaced error for Vagrant
27
29
  raise Errors::VCloudError, :message => e.message
28
30
  end
29
31
  end
@@ -6,17 +6,16 @@ module VagrantPlugins
6
6
 
7
7
  def initialize(app, env)
8
8
  @app = app
9
- @logger = Log4r::Logger.new("vagrant_vcloud::action::forward_ports")
9
+ @logger = Log4r::Logger.new('vagrant_vcloud::action::forward_ports')
10
10
  end
11
11
 
12
- #--------------------------------------------------------------
13
- # Execution
14
- #--------------------------------------------------------------
15
12
  def call(env)
16
13
  @env = env
17
14
 
18
- # Get the ports we're forwarding
19
- env[:forwarded_ports] ||= compile_forwarded_ports(env[:machine].config)
15
+ # Get the ports we are forwarding
16
+ env[:forwarded_ports] ||= compile_forwarded_ports(
17
+ env[:machine].config
18
+ )
20
19
 
21
20
  forward_ports
22
21
 
@@ -28,34 +27,42 @@ module VagrantPlugins
28
27
 
29
28
  cfg = @env[:machine].provider_config
30
29
  cnx = cfg.vcloud_cnx.driver
31
- vmName = @env[:machine].name
32
- vAppId = @env[:machine].get_vapp_id
30
+ vapp_id = @env[:machine].get_vapp_id
31
+ vm_name = @env[:machine].name
33
32
 
34
- cfg.org = cnx.get_organization_by_name(cfg.org_name)
35
- cfg.vdc_network_id = cfg.org[:networks][cfg.vdc_network_name]
36
-
37
- @logger.debug("Getting VM info...")
38
- vm = cnx.get_vapp(vAppId)
39
- vmInfo = vm[:vms_hash][vmName.to_sym]
33
+ # FIXME: why are we overriding this here ?
34
+ # It's already been taken care during the initial
35
+ # InventoryCheck. (tsugliani)
36
+ #
37
+ # cfg.org = cnx.get_organization_by_name(cfg.org_name)
38
+ # cfg.vdc_network_id = cfg.org[:networks][cfg.vdc_network_name]
40
39
 
40
+ @logger.debug('Getting VM info...')
41
+ vm = cnx.get_vapp(vapp_id)
42
+ vm_info = vm[:vms_hash][vm_name.to_sym]
41
43
 
42
44
  @env[:forwarded_ports].each do |fp|
45
+ # FIXME: Useless variable assignement 'message_attributes'
46
+ # (tsugliani)
43
47
  message_attributes = {
44
- :guest_port => fp.guest_port,
45
- :host_port => fp.host_port
48
+ :guest_port => fp.guest_port,
49
+ :host_port => fp.host_port
46
50
  }
47
51
 
48
- @env[:ui].info("Forwarding Ports: VM port #{fp.guest_port} -> vShield Edge port #{fp.host_port}")
52
+ @env[:ui].info(
53
+ "Forwarding Ports: VM port #{fp.guest_port} -> " +
54
+ "vShield Edge port #{fp.host_port}"
55
+ )
49
56
 
50
57
  # Add the options to the ports array to send to the driver later
51
58
  ports << {
52
- :guestip => fp.guest_ip,
53
- :nat_internal_port => fp.guest_port,
54
- :hostip => fp.host_ip,
55
- :nat_external_port => fp.host_port,
56
- :name => fp.id,
57
- :nat_protocol => fp.protocol.upcase,
58
- :vapp_scoped_local_id => vmInfo[:vapp_scoped_local_id]
59
+ :guestip => fp.guest_ip,
60
+ :nat_internal_port => fp.guest_port,
61
+ :hostip => fp.host_ip,
62
+ :nat_external_port => fp.host_port,
63
+ :name => fp.id,
64
+ :nat_protocol => fp.protocol.upcase,
65
+ :vapp_scoped_local_id => vm_info[:vapp_scoped_local_id]
59
66
  }
60
67
  end
61
68
 
@@ -65,18 +72,18 @@ module VagrantPlugins
65
72
  @logger.debug("Current network id #{cfg.vdc_network_id}")
66
73
 
67
74
  ### Here we apply the nat_rules to the vApp we just built
68
-
69
- addports = cnx.add_vapp_port_forwarding_rules(
70
- vAppId,
71
- "Vagrant-vApp-Net",
75
+ add_ports = cnx.add_vapp_port_forwarding_rules(
76
+ vapp_id,
77
+ 'Vagrant-vApp-Net',
72
78
  {
73
- :fence_mode => "natRouted",
74
- :parent_network => cfg.vdc_network_id,
75
- :nat_policy_type => "allowTraffic",
76
- :nat_rules => ports
77
- })
78
-
79
- wait = cnx.wait_task_completion(addports)
79
+ :fence_mode => 'natRouted',
80
+ :parent_network => cfg.vdc_network_id,
81
+ :nat_policy_type => 'allowTraffic',
82
+ :nat_rules => ports
83
+ }
84
+ )
85
+
86
+ wait = cnx.wait_task_completion(add_ports)
80
87
 
81
88
  if !wait[:errormsg].nil?
82
89
  raise Errors::ComposeVAppError, :message => wait[:errormsg]
@@ -1,5 +1,4 @@
1
- require "set"
2
- require "log4r"
1
+ require 'set'
3
2
 
4
3
  module VagrantPlugins
5
4
  module VCloud
@@ -21,14 +20,15 @@ module VagrantPlugins
21
20
  # to other host ports.
22
21
  #
23
22
  class HandleNATPortCollisions
24
-
25
23
  def initialize(app, env)
26
24
  @app = app
27
- @logger = Log4r::Logger.new("vagrant_vcloud::action::handle_port_collisions")
25
+ @logger = Log4r::Logger.new(
26
+ 'vagrant_vcloud::action::handle_port_collisions'
27
+ )
28
28
  end
29
29
 
30
30
  def call(env)
31
- @logger.info("Detecting any forwarded port collisions...")
31
+ @logger.info('Detecting any forwarded port collisions...')
32
32
 
33
33
  # Determine a list of usable ports for repair
34
34
  usable_ports = Set.new(env[:machine].config.vm.usable_port_range)
@@ -40,15 +40,10 @@ module VagrantPlugins
40
40
 
41
41
  cfg = env[:machine].provider_config
42
42
  cnx = cfg.vcloud_cnx.driver
43
- vmName = env[:machine].name
44
- vAppId = env[:machine].get_vapp_id
45
-
46
- @logger.debug("Getting vapp info...")
47
- vm = cnx.get_vapp(vAppId)
48
- myhash = vm[:vms_hash][vmName.to_sym]
43
+ vapp_id = env[:machine].get_vapp_id
49
44
 
50
- @logger.debug("Getting port forwarding rules...")
51
- rules = cnx.get_vapp_port_forwarding_external_ports(vAppId)
45
+ @logger.debug('Getting port forwarding rules...')
46
+ rules = cnx.get_vapp_port_forwarding_external_ports(vapp_id)
52
47
 
53
48
  # Pass two, detect/handle any collisions
54
49
  with_forwarded_ports(env) do |options|
@@ -73,7 +68,10 @@ module VagrantPlugins
73
68
 
74
69
  # If the port is in use, then we can't use this either...
75
70
  if rules.include?(repaired_port)
76
- @logger.info("Repaired port also in use: #{repaired_port}. Trying another...")
71
+ @logger.info(
72
+ "Repaired port also in use: #{repaired_port}." +
73
+ 'Trying another...'
74
+ )
77
75
  next
78
76
  end
79
77
 
@@ -84,21 +82,27 @@ module VagrantPlugins
84
82
  # If we have no usable ports then we can't repair
85
83
  if !repaired_port && usable_ports.empty?
86
84
  raise Errors::ForwardPortAutolistEmpty,
87
- :vm_name => env[:machine].name,
88
- :guest_port => guest_port.to_s,
89
- :host_port => host_port.to_s
85
+ :vm_name => env[:machine].name,
86
+ :guest_port => guest_port.to_s,
87
+ :host_port => host_port.to_s
90
88
  end
91
89
 
92
90
  # Modify the args in place
93
91
  options[:host] = repaired_port
94
92
 
95
- @logger.info("Repaired FP collision: #{host_port} to #{repaired_port}")
93
+ @logger.info(
94
+ "Repaired FP collision: #{host_port} to #{repaired_port}"
95
+ )
96
96
 
97
97
  # Notify the user
98
- env[:ui].info(I18n.t("vagrant.actions.vm.forward_ports.fixed_collision",
99
- :host_port => host_port.to_s,
100
- :guest_port => guest_port.to_s,
101
- :new_port => repaired_port.to_s))
98
+ env[:ui].info(
99
+ I18n.t(
100
+ 'vagrant.actions.vm.forward_ports.fixed_collision',
101
+ :host_port => host_port.to_s,
102
+ :guest_port => guest_port.to_s,
103
+ :new_port => repaired_port.to_s
104
+ )
105
+ )
102
106
  end
103
107
  end
104
108
 
@@ -1,73 +1,79 @@
1
- require "etc"
2
- require "log4r"
1
+ require 'etc'
3
2
 
4
3
  module VagrantPlugins
5
4
  module VCloud
6
5
  module Action
7
6
  class InventoryCheck
8
-
9
7
  def initialize(app, env)
10
8
  @app = app
11
- @logger = Log4r::Logger.new("vagrant_vcloud::action::inventory_check")
9
+ @logger = Log4r::Logger.new('vagrant_vcloud::action::inventory_check')
12
10
  end
13
11
 
14
12
  def call(env)
15
13
  vcloud_check_inventory(env)
16
-
14
+
17
15
  @app.call env
18
16
  end
19
17
 
20
18
  def vcloud_upload_box(env)
21
-
22
19
  cfg = env[:machine].provider_config
23
20
  cnx = cfg.vcloud_cnx.driver
24
21
 
25
- boxDir = env[:machine].box.directory.to_s
26
- boxFile = env[:machine].box.name.to_s
22
+ box_dir = env[:machine].box.directory.to_s
23
+ box_file = env[:machine].box.name.to_s
27
24
 
28
- boxOVF = "#{boxDir}/#{boxFile}.ovf"
25
+ box_ovf = "#{box_dir}/#{box_file}.ovf"
29
26
 
30
- # Still relying on ruby-progressbar because report_progress basically sucks.
31
-
32
- @logger.debug("OVF File: #{boxOVF}")
33
- uploadOVF = cnx.upload_ovf(
27
+ # Still relying on ruby-progressbar because report_progress
28
+ # basically sucks.
29
+ @logger.debug("OVF File: #{box_ovf}")
30
+ upload_ovf = cnx.upload_ovf(
34
31
  cfg.vdc_id,
35
32
  env[:machine].box.name.to_s,
36
- "Vagrant Box",
37
- boxOVF,
33
+ 'Vagrant Box',
34
+ box_ovf,
38
35
  cfg.catalog_id,
39
36
  {
40
- :progressbar_enable => true
41
- # FIXME: export chunksize as a parameter and lower the default to 1M.
42
- #:chunksize => 262144
37
+ :progressbar_enable => true,
38
+ :chunksize => (cfg.upload_chunksize || 1_048_576)
43
39
  }
44
40
  )
45
41
 
46
- env[:ui].info("Adding [#{env[:machine].box.name.to_s}] to Catalog [#{cfg.catalog_name}]")
47
- addOVFtoCatalog = cnx.wait_task_completion(uploadOVF)
42
+ env[:ui].info(
43
+ "Adding [#{env[:machine].box.name.to_s}] to " +
44
+ "Catalog [#{cfg.catalog_name}]"
45
+ )
46
+ add_ovf_to_catalog = cnx.wait_task_completion(upload_ovf)
48
47
 
49
- if !addOVFtoCatalog[:errormsg].nil?
50
- raise Errors::CatalogAddError, :message => addOVFtoCatalog[:errormsg]
48
+ unless add_ovf_to_catalog[:errormsg].nil?
49
+ fail Errors::CatalogAddError,
50
+ :message => add_ovf_to_catalog[:errormsg]
51
51
  end
52
52
 
53
53
  # Retrieve catalog_item ID
54
- cfg.catalog_item = cnx.get_catalog_item_by_name(cfg.catalog_id, env[:machine].box.name.to_s)
55
-
54
+ cfg.catalog_item = cnx.get_catalog_item_by_name(
55
+ cfg.catalog_id,
56
+ env[:machine].box.name.to_s
57
+ )
56
58
  end
57
59
 
58
60
  def vcloud_create_catalog(env)
59
61
  cfg = env[:machine].provider_config
60
62
  cnx = cfg.vcloud_cnx.driver
61
63
 
62
- catalogCreation = cnx.create_catalog(cfg.org_id, cfg.catalog_name, "Created by #{Etc.getlogin} running on #{Socket.gethostname.downcase} using vagrant-vcloud on #{Time.now.strftime("%B %d, %Y")}")
63
- cnx.wait_task_completion(catalogCreation[:task_id])
64
-
65
- @logger.debug("Catalog Creation result: #{catalogCreation.inspect}")
64
+ catalog_creation = cnx.create_catalog(
65
+ cfg.org_id,
66
+ cfg.catalog_name,
67
+ "Created by #{Etc.getlogin} " +
68
+ "running on #{Socket.gethostname.downcase} " +
69
+ "using vagrant-vcloud on #{Time.now.strftime("%B %d, %Y")}"
70
+ )
71
+ cnx.wait_task_completion(catalog_creation[:task_id])
66
72
 
73
+ @logger.debug("Catalog Creation result: #{catalog_creation.inspect}")
67
74
  env[:ui].info("Catalog [#{cfg.catalog_name}] successfully created.")
68
75
 
69
- cfg.catalog_id = catalogCreation[:catalog_id]
70
-
76
+ cfg.catalog_id = catalog_creation[:catalog_id]
71
77
  end
72
78
 
73
79
  def vcloud_check_inventory(env)
@@ -83,72 +89,93 @@ module VagrantPlugins
83
89
  cfg.vdc_id = cnx.get_vdc_id_by_name(cfg.org, cfg.vdc_name)
84
90
 
85
91
  cfg.catalog = cnx.get_catalog_by_name(cfg.org, cfg.catalog_name)
86
-
87
92
  cfg.catalog_id = cnx.get_catalog_id_by_name(cfg.org, cfg.catalog_name)
88
93
 
89
94
  if cfg.catalog_id.nil?
90
95
  env[:ui].warn("Catalog [#{cfg.catalog_name}] does not exist!")
91
96
 
92
97
  user_input = env[:ui].ask(
93
- "Would you like to create the [#{cfg.catalog_name}] catalog?\nChoice (yes/no): "
98
+ "Would you like to create the [#{cfg.catalog_name}] catalog?\n" +
99
+ 'Choice (yes/no): '
94
100
  )
95
101
 
96
- if user_input.downcase == "yes" || user_input.downcase == "y"
102
+ if user_input.downcase == 'yes' || user_input.downcase == 'y'
97
103
  vcloud_create_catalog(env)
98
104
  else
99
- env[:ui].error("Catalog not created, exiting...")
105
+ env[:ui].error('Catalog not created, exiting...')
100
106
 
101
107
  # FIXME: wrong error message
102
- raise VagrantPlugins::VCloud::Errors::VCloudError,
103
- :message => "Catalog not available, exiting..."
108
+ raise VagrantPlugins::VCloud::Errors::VCloudError,
109
+ :message => 'Catalog not available, exiting...'
104
110
 
105
111
  end
106
112
  end
107
113
 
108
-
109
- @logger.debug("Getting catalog item with cfg.catalog_id: [#{cfg.catalog_id}] and machine name [#{env[:machine].box.name.to_s}]")
110
- cfg.catalog_item = cnx.get_catalog_item_by_name(cfg.catalog_id, env[:machine].box.name.to_s)
114
+ @logger.debug(
115
+ "Getting catalog item with cfg.catalog_id: [#{cfg.catalog_id}] " +
116
+ "and machine name [#{env[:machine].box.name.to_s}]"
117
+ )
118
+ cfg.catalog_item = cnx.get_catalog_item_by_name(
119
+ cfg.catalog_id,
120
+ env[:machine].box.name.to_s
121
+ )
122
+
111
123
  @logger.debug("Catalog item is now #{cfg.catalog_item}")
112
- cfg.vdc_network_id = cfg.org[:networks][cfg.vdc_network_name]
113
124
 
125
+ # This only works with Org Admin role or higher
126
+ cfg.vdc_network_id = cfg.org[:networks][cfg.vdc_network_name]
127
+ if !cfg.vdc_network_id
128
+ # TEMP FIX: permissions issues at the Org Level for vApp authors
129
+ # to "view" Org vDC Networks but they can see them at the
130
+ # Organization vDC level (tsugliani)
131
+ cfg.vdc_network_id = cfg.vdc[:networks][cfg.vdc_network_name]
132
+ if !cfg.vdc_network_id
133
+ raise 'vCloud User credentials has insufficient privileges'
134
+ end
135
+ end
114
136
 
115
137
  # Checking Catalog mandatory requirements
116
138
  if !cfg.catalog_id
117
139
  @logger.info("Catalog [#{cfg.catalog_name}] STILL does not exist!")
118
140
 
119
141
  # FIXME: wrong error message
120
- raise VagrantPlugins::VCloud::Errors::VCloudError,
121
- :message => "Catalog not available, exiting..."
142
+ raise VagrantPlugins::VCloud::Errors::VCloudError,
143
+ :message => 'Catalog not available, exiting...'
122
144
 
123
145
  else
124
146
  @logger.info("Catalog [#{cfg.catalog_name}] exists")
125
147
  end
126
148
 
127
149
  if !cfg.catalog_item
128
- env[:ui].warn("Catalog item [#{env[:machine].box.name.to_s}] in Catalog [#{cfg.catalog_name}] does not exist!")
150
+ env[:ui].warn(
151
+ "Catalog item [#{env[:machine].box.name.to_s}] " +
152
+ "in Catalog [#{cfg.catalog_name}] does not exist!"
153
+ )
129
154
 
130
155
  user_input = env[:ui].ask(
131
- "Would you like to upload the [#{env[:machine].box.name.to_s}] box to "\
132
- "[#{cfg.catalog_name}] Catalog?\nChoice (yes/no): "
156
+ "Would you like to upload the [#{env[:machine].box.name.to_s}] " +
157
+ "box to [#{cfg.catalog_name}] Catalog?\n" +
158
+ 'Choice (yes/no): '
133
159
  )
134
160
 
135
- if user_input.downcase == "yes" || user_input.downcase == "y"
161
+ if user_input.downcase == 'yes' || user_input.downcase == 'y'
136
162
  env[:ui].info("Uploading [#{env[:machine].box.name.to_s}]...")
137
163
  vcloud_upload_box(env)
138
164
  else
139
- env[:ui].error("Catalog item not available, exiting...")
165
+ env[:ui].error('Catalog item not available, exiting...')
140
166
 
141
167
  # FIXME: wrong error message
142
- raise VagrantPlugins::VCloud::Errors::VCloudError,
143
- :message => "Catalog item not available, exiting..."
144
-
168
+ raise VagrantPlugins::VCloud::Errors::VCloudError,
169
+ :message => 'Catalog item not available, exiting...'
145
170
  end
146
171
 
147
172
  else
148
- @logger.info("Using catalog item [#{env[:machine].box.name.to_s}] in Catalog [#{cfg.catalog_name}]...")
173
+ @logger.info(
174
+ "Using catalog item [#{env[:machine].box.name.to_s}] " +
175
+ "in Catalog [#{cfg.catalog_name}]..."
176
+ )
149
177
  end
150
178
  end
151
-
152
179
  end
153
180
  end
154
181
  end