vagrant-vcloud 0.1.0 → 0.1.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: 2225b21d3d39c0bbd8be864bff61450e04989570
4
- data.tar.gz: 0bb584b49730dcc825f6ee31cdce2f6c3026748c
3
+ metadata.gz: 029dca042c07fcb3034c6eba92c07f24d2f59c2e
4
+ data.tar.gz: aa3429ccf19e966599bb4aa4812f5c8cdd194184
5
5
  SHA512:
6
- metadata.gz: c8ad741705b3c4d1761f7b6e9a96fd8e48c953dc4f212108d066d31179b1a0aa104821fd7a2b0768199a9b7606665c88a511f787b0d5a1c6046fed7793d8d4ab
7
- data.tar.gz: ed8bb6a2e30c4217d43592c8eac7b4ab076d7d8b27992ff57561f1ac3b35c1997410716f679edfa15fd544df2e5a63ff8bfdd3bbbf8d4fac4a04c79a52e21ea8
6
+ metadata.gz: 9dded16f1a7f486d507006b29f7d5e7d87c83eb45b912f464227f93d99647943f3ec17bf2309c1343d3d09887780ee953e6ea49c6f8677eea3161dd1182c3c83
7
+ data.tar.gz: 83c9c33dc8d33a12f1dd2c16bb3a112f1f8b0bbcf32b529ddbbc9be8ea0c91b7478e99695e09cf2cb716ac699f745517b6ae392c2498ab73dfee0595f98b84ec
data/.gitignore CHANGED
@@ -1,3 +1,6 @@
1
1
  .vagrant/*
2
2
  pkg/*
3
- Gemfile.lock
3
+ Gemfile.lock
4
+ test-*
5
+ .yardoc/*
6
+ doc/*
data/README.md CHANGED
@@ -1,13 +1,24 @@
1
1
  [Vagrant](http://www.vagrantup.com) provider for VMware vCloud Director®
2
2
  =============
3
3
 
4
- [Version 0.1.0](https://github.com/frapposelli/vagrant-vcloud/releases/tag/v0.1.0) has been released!
4
+ [Version 0.1.1](https://github.com/frapposelli/vagrant-vcloud/releases/tag/v0.1.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.
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.1.1 are:
12
+
13
+ - bugfix multiple sub allocation pools ranges [ISSUE #24]
14
+ - Putting back Google DNS as default if not specified
15
+ - binding vCloud 5.5 API on 5.1 driver
16
+ - Debug cut and general cosmetic cleanup
17
+ - added DNS choice using the "ip_dns" Array config property.
18
+ - Updated sync_folders.rb with code from vagrant-aws, Will focus on a better sync engine later in the future.
19
+ - Removed dependency on rest-client gem, moved everything to httpclient.
20
+ - Fixed destroy vApp bug.
21
+
11
22
  Features of Version 0.1.0 are:
12
23
 
13
24
  - Basic Create/Provision/Destroy lifecycle.
@@ -30,16 +41,27 @@ What is still missing:
30
41
 
31
42
  If you're a developer and want to lend us a hand, head over to our ```develop``` branch and get busy!
32
43
 
33
- A Sample Multi-VM Vagrantfile:
44
+ Install
45
+ -------------
46
+
47
+ Version 0.1.0 can be easily installed by running:
48
+
49
+ ```vagrant plugin install vagrant-vcloud```
50
+
51
+ Vagrant will download all the required gems during the installation process.
52
+
53
+ After the install has completed a ```vagrant up --provider=vcloud``` will trigger the newly installed provider.
54
+
55
+ Here's a sample Multi-VM Vagrantfile, please note that ```vcloud.vdc_edge_gateway``` and ```vcloud.vdc_edge_gateway_ip``` are required only when you cannot access ```vcloud.vdc_network_name``` directly and there's an Organization Edge between your workstation and the vCloud Network.
34
56
 
35
57
  ```ruby
36
58
  precise32_vm_box_url = "http://vagrant.tsugliani.fr/precise32.box"
37
59
 
38
60
  nodes = [
39
- { :hostname => "web-vm", :box => "precise32", :box_url => precise32_vm_box_url},
40
- { :hostname => "ssh-vm", :box => "precise32" , :box_url => precise32_vm_box_url},
61
+ { :hostname => "web-vm", :box => "precise32", :box_url => precise32_vm_box_url },
62
+ { :hostname => "ssh-vm", :box => "precise32", :box_url => precise32_vm_box_url },
41
63
  { :hostname => "sql-vm", :box => "precise32", :box_url => precise32_vm_box_url },
42
- { :hostname => "lb-vm", :box => "precise64", :box_url => precise32_vm_box_url },
64
+ { :hostname => "lb-vm", :box => "precise64", :box_url => precise32_vm_box_url },
43
65
  { :hostname => "app-vm", :box => "precise32", :box_url => precise32_vm_box_url },
44
66
  ]
45
67
 
@@ -77,4 +99,6 @@ Vagrant.configure("2") do |config|
77
99
  end
78
100
  end
79
101
  end
80
- ```
102
+ ```
103
+
104
+ [![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/frapposelli/vagrant-vcloud/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
@@ -20,6 +20,14 @@ module VagrantPlugins
20
20
  cnx = cfg.vcloud_cnx.driver
21
21
  vmName = env[:machine].name
22
22
 
23
+ if cfg.ip_dns.nil?
24
+ dnsAddress1 = "8.8.8.8"
25
+ dnsAddress2 = "8.8.4.4"
26
+ else
27
+ dnsAddress1 = cfg.ip_dns.shift
28
+ dnsAddress2 = cfg.ip_dns.shift
29
+ end
30
+
23
31
  if !cfg.ip_subnet.nil?
24
32
 
25
33
  @logger.debug("Input address: #{cfg.ip_subnet}")
@@ -38,15 +46,17 @@ module VagrantPlugins
38
46
 
39
47
  @logger.debug("Range: #{rangeAddresses}")
40
48
 
41
- rangeAddresses.shift # Delete the "network" address from the range.
42
- gatewayIp = rangeAddresses.shift # Retrieve the first usable IP, to be used as a gateway.
43
- rangeAddresses.reverse! # Reverse the array in place.
44
- rangeAddresses.shift # Delete the "broadcast" address from the range.
45
- rangeAddresses.reverse! # Reverse back the array.
49
+ rangeAddresses.shift # Delete the "network" address from the range.
50
+ gatewayIp = rangeAddresses.shift # Retrieve the first usable IP, to be used as a gateway.
51
+ rangeAddresses.reverse! # Reverse the array in place.
52
+ rangeAddresses.shift # Delete the "broadcast" address from the range.
53
+ rangeAddresses.reverse! # Reverse back the array.
46
54
 
47
55
  @logger.debug("Gateway IP: #{gatewayIp.to_s}")
48
56
  @logger.debug("Netmask: #{cidr.wildcard_mask}")
49
57
  @logger.debug("IP Pool: #{rangeAddresses.first}-#{rangeAddresses.last}")
58
+ @logger.debug("DNS1: #{dnsAddress1} DNS2: #{dnsAddress2}")
59
+
50
60
 
51
61
  network_options = {
52
62
  :name => "Vagrant-vApp-Net",
@@ -58,12 +68,13 @@ module VagrantPlugins
58
68
  :ip_allocation_mode => "POOL",
59
69
  :parent_network => cfg.vdc_network_id,
60
70
  :enable_firewall => "false",
61
- :dns1 => "8.8.8.8", # FIXME: We should let the user choose DNS servers and then
62
- :dns2 => "8.8.4.4" # fall back to Google's if they're not specified.
71
+ :dns1 => dnsAddress1,
72
+ :dns2 => dnsAddress2
63
73
  }
64
74
 
65
75
  else
66
76
 
77
+ @logger.debug("DNS1: #{dnsAddress1} DNS2: #{dnsAddress2}")
67
78
  # No IP subnet specified, reverting to defaults
68
79
  network_options = {
69
80
  :name => "Vagrant-vApp-Net",
@@ -75,8 +86,8 @@ module VagrantPlugins
75
86
  :ip_allocation_mode => "POOL",
76
87
  :parent_network => cfg.vdc_network_id,
77
88
  :enable_firewall => "false",
78
- :dns1 => "8.8.8.8",
79
- :dns2 => "8.8.4.4"
89
+ :dns1 => dnsAddress1,
90
+ :dns2 => dnsAddress2
80
91
  }
81
92
 
82
93
  end
@@ -115,28 +126,25 @@ module VagrantPlugins
115
126
  # FIXME: Add a lot of error handling for each step here !
116
127
 
117
128
  if newVApp
118
- env[:ui].success("vApp #{newVApp[:name]} created successfully!")
129
+ env[:ui].success("vApp #{newVApp[:name]} successfully created.")
119
130
 
120
131
  # Add the vm id as machine.id
121
132
  newVMProperties = newVApp[:vms_hash].fetch(vmName)
122
133
  env[:machine].id = newVMProperties[:id]
123
134
 
124
135
  ### SET GUEST CONFIG
125
- #env[:ui].info("Setting Guest Customization on ID: [#{vmName}] of vApp [#{newVApp[:name]}]")
136
+
137
+ @logger.info("Setting Guest Customization on ID: [#{vmName}] of vApp [#{newVApp[:name]}]")
138
+
126
139
  setCustom = cnx.set_vm_guest_customization(newVMProperties[:id], vmName, {
127
140
  :enabled => true,
128
141
  :admin_passwd_enabled => false
129
142
  })
130
143
  cnx.wait_task_completion(setCustom)
131
144
 
132
- # @logger.info("Starting VM [#{vmName}] - this will take a while as vShield Edge is getting deployed as well")
133
- # env[:ui].info("Starting VM [#{vmName}] - this will take a while as vShield Edge is getting deployed as well")
134
- # poweronVM = cnx.poweron_vm(newVMProperties[:id])
135
- # cnx.wait_task_completion(poweronVM)
136
-
137
145
  else
138
146
  env[:ui].error("vApp #{newVApp[:name]} creation failed!")
139
- raise
147
+ raise # FIXME: error handling missing.
140
148
  end
141
149
  else
142
150
  env[:ui].info("Adding VM to existing vApp...")
@@ -160,27 +168,19 @@ module VagrantPlugins
160
168
 
161
169
  if newVApp
162
170
 
163
- #env[:ui].success("VM #{vmName} added to #{newVApp[:name]} successfully!")
164
- #@logger.info("VM #{vmName} added to #{newVApp[:name]} successfully!")
165
-
166
- # Add the vm id as machine.id
167
171
  newVMProperties = newVApp[:vms_hash].fetch(vmName)
168
172
  env[:machine].id = newVMProperties[:id]
169
173
 
170
174
  ### SET GUEST CONFIG
171
- #@logger.info("Setting Guest Customization on ID: [#{newVMProperties[:id]}] of vApp [#{newVApp[:name]}]")
172
- #env[:ui].info("Setting Guest Customization on ID: [#{vmName}] of vApp [#{newVApp[:name]}]")
175
+
176
+ @logger.info("Setting Guest Customization on ID: [#{newVMProperties[:id]}] of vApp [#{newVApp[:name]}]")
177
+
173
178
  setCustom = cnx.set_vm_guest_customization(newVMProperties[:id], vmName, {
174
179
  :enabled => true,
175
180
  :admin_passwd_enabled => false
176
181
  })
177
182
  cnx.wait_task_completion(setCustom)
178
183
 
179
- # @logger.info("Starting VM [#{vmName}]")
180
- # env[:ui].info("Starting VM [#{vmName}]")
181
- # poweronVM = cnx.poweron_vm(newVMProperties[:id])
182
- # cnx.wait_task_completion(poweronVM)
183
-
184
184
  else
185
185
 
186
186
  env[:ui].error("VM #{vmName} add to #{newVApp[:name]} failed!")
@@ -1,4 +1,3 @@
1
- #require "vcloud-rest/connection"
2
1
  require "log4r"
3
2
 
4
3
  module VagrantPlugins
@@ -28,20 +28,12 @@ module VagrantPlugins
28
28
  env[:ui].info("Single VM left in the vApp, destroying the vApp...")
29
29
 
30
30
  if cfg.vdc_edge_gateway_ip && cfg.vdc_edge_gateway
31
- env[:ui].info("Removing mapping for ip #{cfg.vdc_edge_gateway_ip} on Edge #{cfg.vdc_edge_gateway}.")
31
+ env[:ui].info("Removing NAT rules on [#{cfg.vdc_edge_gateway}] for IP [#{cfg.vdc_edge_gateway_ip}].")
32
32
  @logger.debug("Deleting Edge Gateway rules - vdc id: #{cfg.vdc_id}")
33
33
  edge_remove = cnx.remove_edge_gateway_rules(cfg.vdc_edge_gateway, cfg.vdc_id, cfg.vdc_edge_gateway_ip, vAppId)
34
34
  cnx.wait_task_completion(edge_remove)
35
35
  end
36
36
 
37
- env[:ui].info("Powering off vApp...")
38
- vAppStopTask = cnx.poweroff_vapp(vAppId)
39
- vAppStopWait = cnx.wait_task_completion(vAppStopTask)
40
-
41
- if !vAppStopWait[:errormsg].nil?
42
- raise Errors::StopVAppError, :message => vAppStopWait[:errormsg]
43
- end
44
-
45
37
  env[:ui].info("Destroying vApp...")
46
38
  vAppDeleteTask = cnx.delete_vapp(vAppId)
47
39
  @logger.debug("vApp Delete task id #{vAppDeleteTask}")
@@ -18,8 +18,6 @@ module VagrantPlugins
18
18
  # Get the ports we're forwarding
19
19
  env[:forwarded_ports] ||= compile_forwarded_ports(env[:machine].config)
20
20
 
21
- @logger.debug("WE'RE GOING TO FORWARD THIS!: #{@env[:forwarded_ports]}")
22
-
23
21
  forward_ports
24
22
 
25
23
  @app.call(env)
@@ -28,8 +26,6 @@ module VagrantPlugins
28
26
  def forward_ports
29
27
  ports = []
30
28
 
31
- # interfaces = @env[:machine].provider.driver.read_network_interfaces
32
-
33
29
  cfg = @env[:machine].provider_config
34
30
  cnx = cfg.vcloud_cnx.driver
35
31
  vmName = @env[:machine].name
@@ -49,28 +45,8 @@ module VagrantPlugins
49
45
  :host_port => fp.host_port
50
46
  }
51
47
 
52
- # Assuming the only reason to establish port forwarding is
53
- # because the VM is using Virtualbox NAT networking. Host-only
54
- # bridged networking don't require port-forwarding and establishing
55
- # forwarded ports on these attachment types has uncertain behaviour.
56
48
  @env[:ui].info("Forwarding Ports: VM port #{fp.guest_port} -> vShield Edge port #{fp.host_port}")
57
49
 
58
- # Verify we have the network interface to attach to
59
- # if !interfaces[fp.adapter]
60
- # raise Vagrant::Errors::ForwardPortAdapterNotFound,
61
- # :adapter => fp.adapter.to_s,
62
- # :guest => fp.guest_port.to_s,
63
- # :host => fp.host_port.to_s
64
- # end
65
-
66
- # Port forwarding requires the network interface to be a NAT interface,
67
- # so verify that that is the case.
68
- # if interfaces[fp.adapter][:type] != :nat
69
- # @env[:ui].info(I18n.t("vagrant.actions.vm.forward_ports.non_nat",
70
- # message_attributes))
71
- # next
72
- # end
73
-
74
50
  # Add the options to the ports array to send to the driver later
75
51
  ports << {
76
52
  :guestip => fp.guest_ip,
@@ -85,20 +61,11 @@ module VagrantPlugins
85
61
 
86
62
  if !ports.empty?
87
63
  # We only need to forward ports if there are any to forward
88
-
89
- @logger.debug("Here's what we should pass to the driver method: #{ports.inspect}")
90
- @logger.debug("here's our network id #{cfg.vdc_network_id}")
91
- # @env[:machine].provider.driver.forward_ports(ports)
92
-
93
- # newvapp[:vms_hash].each do |key, value|
94
-
95
- # nat_rules << { :nat_external_port => j.to_s, :nat_internal_port => "873", :nat_protocol => "UDP", :vm_scoped_local_id => value[:vapp_scoped_local_id]}
96
- # j += 1
64
+ @logger.debug("Port object to be passed: #{ports.inspect}")
65
+ @logger.debug("Current network id #{cfg.vdc_network_id}")
97
66
 
98
67
  ### Here we apply the nat_rules to the vApp we just built
99
68
 
100
- # puts "### Applying Port Forwarding NAT Rules"
101
-
102
69
  addports = cnx.add_vapp_port_forwarding_rules(
103
70
  vAppId,
104
71
  "Vagrant-vApp-Net",
@@ -115,11 +82,8 @@ module VagrantPlugins
115
82
  raise Errors::ComposeVAppError, :message => wait[:errormsg]
116
83
  end
117
84
 
118
-
119
85
  end
120
86
 
121
-
122
-
123
87
  end
124
88
  end
125
89
  end
@@ -33,15 +33,11 @@ module VagrantPlugins
33
33
  # Determine a list of usable ports for repair
34
34
  usable_ports = Set.new(env[:machine].config.vm.usable_port_range)
35
35
 
36
- @logger.debug("USABLE PORTS: #{usable_ports.inspect}")
37
-
38
36
  # Pass one, remove all defined host ports from usable ports
39
37
  with_forwarded_ports(env) do |options|
40
38
  usable_ports.delete(options[:host])
41
39
  end
42
40
 
43
- @logger.debug("USABLE PORTS AFTER IN USE DELETION: #{usable_ports.inspect}")
44
-
45
41
  cfg = env[:machine].provider_config
46
42
  cnx = cfg.vcloud_cnx.driver
47
43
  vmName = env[:machine].name
@@ -59,12 +55,8 @@ module VagrantPlugins
59
55
  guest_port = options[:guest]
60
56
  host_port = options[:host]
61
57
 
62
- #testHash = rules.flatten
63
- @logger.debug("DEBUGGING NETWORKS: rules: #{rules.inspect}")
64
-
65
58
  # If the port is open (listening for TCP connections)
66
59
  if rules.include?(host_port)
67
- @logger.debug("SO OUR PORT IS INCLUDED IN RULES BUT WHAT'S IN OPTIONS?: #{options.inspect}")
68
60
  if !options[:auto_correct]
69
61
  raise Errors::ForwardPortCollision,
70
62
  :guest_port => guest_port.to_s,
@@ -27,7 +27,7 @@ module VagrantPlugins
27
27
 
28
28
  boxOVF = "#{boxDir}/#{boxFile}.ovf"
29
29
 
30
- ### Still relying on ruby-progressbar because report_progress basically sucks.
30
+ # Still relying on ruby-progressbar because report_progress basically sucks.
31
31
 
32
32
  @logger.debug("OVF File: #{boxOVF}")
33
33
  uploadOVF = cnx.upload_ovf(
@@ -38,6 +38,7 @@ module VagrantPlugins
38
38
  cfg.catalog_id,
39
39
  {
40
40
  :progressbar_enable => true
41
+ # FIXME: export chunksize as a parameter and lower the default to 1M.
41
42
  #:chunksize => 262144
42
43
  }
43
44
  )
@@ -49,7 +50,7 @@ module VagrantPlugins
49
50
  raise Errors::CatalogAddError, :message => addOVFtoCatalog[:errormsg]
50
51
  end
51
52
 
52
- ## Retrieve catalog_item ID
53
+ # Retrieve catalog_item ID
53
54
  cfg.catalog_item = cnx.get_catalog_item_by_name(cfg.catalog_id, env[:machine].box.name.to_s)
54
55
 
55
56
  end
@@ -63,7 +64,7 @@ module VagrantPlugins
63
64
 
64
65
  @logger.debug("Catalog Creation result: #{catalogCreation.inspect}")
65
66
 
66
- env[:ui].info("Catalog [#{cfg.catalog_name}] created successfully.")
67
+ env[:ui].info("Catalog [#{cfg.catalog_name}] successfully created.")
67
68
 
68
69
  cfg.catalog_id = catalogCreation[:catalog_id]
69
70
 
@@ -83,11 +84,7 @@ module VagrantPlugins
83
84
 
84
85
  cfg.catalog = cnx.get_catalog_by_name(cfg.org, cfg.catalog_name)
85
86
 
86
-
87
- @logger.debug("BEFORE get_catalog_id_by_name")
88
87
  cfg.catalog_id = cnx.get_catalog_id_by_name(cfg.org, cfg.catalog_name)
89
- @logger.debug("AFTER get_catalog_id_by_name: #{cfg.catalog_id}")
90
-
91
88
 
92
89
  if cfg.catalog_id.nil?
93
90
  env[:ui].warn("Catalog [#{cfg.catalog_name}] does not exist!")
@@ -96,12 +93,12 @@ module VagrantPlugins
96
93
  "Would you like to create the [#{cfg.catalog_name}] catalog?\nChoice (yes/no): "
97
94
  )
98
95
 
99
- # FIXME: add an OR clause for just Y
100
- if user_input.downcase == "yes"
96
+ if user_input.downcase == "yes" || user_input.downcase == "y"
101
97
  vcloud_create_catalog(env)
102
98
  else
103
99
  env[:ui].error("Catalog not created, exiting...")
104
100
 
101
+ # FIXME: wrong error message
105
102
  raise VagrantPlugins::VCloud::Errors::VCloudError,
106
103
  :message => "Catalog not available, exiting..."
107
104
 
@@ -118,6 +115,8 @@ module VagrantPlugins
118
115
  # Checking Catalog mandatory requirements
119
116
  if !cfg.catalog_id
120
117
  @logger.info("Catalog [#{cfg.catalog_name}] STILL does not exist!")
118
+
119
+ # FIXME: wrong error message
121
120
  raise VagrantPlugins::VCloud::Errors::VCloudError,
122
121
  :message => "Catalog not available, exiting..."
123
122
 
@@ -133,20 +132,20 @@ module VagrantPlugins
133
132
  "[#{cfg.catalog_name}] Catalog?\nChoice (yes/no): "
134
133
  )
135
134
 
136
- # FIXME: add an OR clause for just Y
137
- if user_input.downcase == "yes"
135
+ if user_input.downcase == "yes" || user_input.downcase == "y"
138
136
  env[:ui].info("Uploading [#{env[:machine].box.name.to_s}]...")
139
137
  vcloud_upload_box(env)
140
138
  else
141
139
  env[:ui].error("Catalog item not available, exiting...")
142
140
 
141
+ # FIXME: wrong error message
143
142
  raise VagrantPlugins::VCloud::Errors::VCloudError,
144
143
  :message => "Catalog item not available, exiting..."
145
144
 
146
145
  end
147
146
 
148
147
  else
149
- #env[:ui].info("Using catalog item [#{env[:machine].box.name.to_s}] in Catalog [#{cfg.catalog_name}]...")
148
+ @logger.info("Using catalog item [#{env[:machine].box.name.to_s}] in Catalog [#{cfg.catalog_name}]...")
150
149
  end
151
150
  end
152
151
 
@@ -19,10 +19,28 @@ module VagrantPlugins
19
19
  vmId = env[:machine].id
20
20
  vmName = env[:machine].name
21
21
 
22
- env[:ui].info("Powering off VM...")
23
- task_id = cnx.poweroff_vm(vmId)
24
- wait = cnx.wait_task_completion(task_id)
25
-
22
+ testvApp = cnx.get_vapp(vAppId)
23
+
24
+ @logger.debug("Number of VMs in the vApp: #{testvApp[:vms_hash].count}")
25
+
26
+ if testvApp[:vms_hash].count == 1
27
+
28
+ # Poweroff vApp
29
+ env[:ui].info("Powering off vApp...")
30
+ vAppStopTask = cnx.poweroff_vapp(vAppId)
31
+ vAppStopWait = cnx.wait_task_completion(vAppStopTask)
32
+
33
+ if !vAppStopWait[:errormsg].nil?
34
+ raise Errors::StopVAppError, :message => vAppStopWait[:errormsg]
35
+ end
36
+
37
+ else
38
+ # Poweroff VM
39
+ env[:ui].info("Powering off VM...")
40
+ task_id = cnx.poweroff_vm(vmId)
41
+ wait = cnx.wait_task_completion(task_id)
42
+ end
43
+
26
44
  true
27
45
 
28
46
  @app.call env
@@ -27,7 +27,9 @@ module VagrantPlugins
27
27
 
28
28
  if testIp.nil? && cfg.vdc_edge_gateway_ip && cfg.vdc_edge_gateway
29
29
  @logger.debug("This is our first boot, we should map ports on org edge!")
30
- env[:ui].info("Mapping ip #{cfg.vdc_edge_gateway_ip} on Edge #{cfg.vdc_edge_gateway} as our entry point.")
30
+
31
+ env[:ui].info("Creating NAT rules on [#{cfg.vdc_edge_gateway}] for IP [#{cfg.vdc_edge_gateway_ip}].")
32
+
31
33
  edgeMap = cnx.set_edge_gateway_rules(cfg.vdc_edge_gateway, cfg.vdc_id, cfg.vdc_edge_gateway_ip, vAppId)
32
34
  cnx.wait_task_completion(edgeMap)
33
35
  end
@@ -1,5 +1,3 @@
1
- require "awesome_print"
2
-
3
1
  module VagrantPlugins
4
2
  module VCloud
5
3
  module Action
@@ -42,10 +40,7 @@ module VagrantPlugins
42
40
  rules = cnx.get_vapp_port_forwarding_rules(vAppId)
43
41
 
44
42
  rules.each do |rule|
45
- if rule[:vapp_scoped_local_id] == myhash[:vapp_scoped_local_id] && rule[:nat_internal_port] == "22"
46
-
47
- @logger.debug("Our variables: IP #{rule[:nat_external_ip]} and Port #{rule[:nat_external_port]}")
48
-
43
+ if rule[:vapp_scoped_local_id] == myhash[:vapp_scoped_local_id] && rule[:nat_internal_port] == "22"
49
44
  @externalIP = rule[:nat_external_ip]
50
45
  @externalPort = rule[:nat_external_port]
51
46
  break
@@ -57,6 +52,9 @@ module VagrantPlugins
57
52
  @externalIP = cfg.vdc_edge_gateway_ip
58
53
  end
59
54
 
55
+ # FIXME: fix the selfs and create a meaningful info message
56
+ # @logger.debug("Our variables: IP #{@externalIP} and Port #{@externalPort}")
57
+
60
58
  return {
61
59
  # FIXME: these shouldn't be self
62
60
  :host => @externalIP,
@@ -1,7 +1,27 @@
1
+ # The MIT License (MIT)
2
+ # Copyright (c) 2013 Mitchell Hashimoto
3
+
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy of
5
+ # this software and associated documentation files (the "Software"), to deal in
6
+ # the Software without restriction, including without limitation the rights to
7
+ # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
8
+ # of the Software, and to permit persons to whom the Software is furnished to do
9
+ # so, subject to the following conditions:
10
+
11
+ # The above copyright notice and this permission notice shall be included in all
12
+ # copies or substantial portions of the Software.
13
+
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
16
+ # FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
17
+ # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
18
+ # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19
+ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
+
1
21
  require "log4r"
2
22
  require "vagrant/util/subprocess"
3
23
  require "vagrant/util/scoped_hash_override"
4
- require "unison"
24
+ require "vagrant/util/which"
5
25
 
6
26
  module VagrantPlugins
7
27
  module VCloud
@@ -27,6 +47,11 @@ module VagrantPlugins
27
47
  # Ignore disabled shared folders
28
48
  next if data[:disabled]
29
49
 
50
+ unless Vagrant::Util::Which.which('rsync')
51
+ env[:ui].warn(I18n.t('vagrant_vcloud.rsync_not_found_warning'))
52
+ break
53
+ end
54
+
30
55
  hostpath = File.expand_path(data[:hostpath], env[:root_path])
31
56
  guestpath = data[:guestpath]
32
57
 
@@ -34,11 +59,14 @@ module VagrantPlugins
34
59
  # avoid creating an additional directory with rsync
35
60
  hostpath = "#{hostpath}/" if hostpath !~ /\/$/
36
61
 
37
- @logger.debug("RSYNCING OVER #{hostpath} to #{guestpath}")
62
+ # on windows rsync.exe requires cygdrive-style paths
63
+ if Vagrant::Util::Platform.windows?
64
+ hostpath = hostpath.gsub(/^(\w):/) { "/cygdrive/#{$1}" }
65
+ end
38
66
 
39
- # env[:ui].info(I18n.t("vagrant_aws.rsync_folder",
40
- # :hostpath => hostpath,
41
- # :guestpath => guestpath))
67
+ env[:ui].info(I18n.t("vagrant_vcloud.rsync_folder",
68
+ :hostpath => hostpath,
69
+ :guestpath => guestpath))
42
70
 
43
71
  # Create the host path if it doesn't exist and option flag is set
44
72
  if data[:create]
@@ -59,11 +87,17 @@ module VagrantPlugins
59
87
  # Rsync over to the guest path using the SSH info
60
88
  command = [
61
89
  "rsync", "--verbose", "--archive", "-z",
62
- "--exclude", ".vagrant/",
90
+ "--exclude", ".vagrant/", "--exclude", "Vagrantfile",
63
91
  "-e", "ssh -p #{ssh_info[:port]} -o StrictHostKeyChecking=no -i '#{ssh_info[:private_key_path]}'",
64
92
  hostpath,
65
93
  "#{ssh_info[:username]}@#{ssh_info[:host]}:#{guestpath}"]
66
94
 
95
+ # we need to fix permissions when using rsync.exe on windows, see
96
+ # http://stackoverflow.com/questions/5798807/rsync-permission-denied-created-directories-have-no-permissions
97
+ if Vagrant::Util::Platform.windows?
98
+ command.insert(1, "--chmod", "ugo=rwX")
99
+ end
100
+
67
101
  r = Vagrant::Util::Subprocess.execute(*command)
68
102
  if r.exit_code != 0
69
103
  raise Errors::RsyncError,
@@ -76,7 +110,4 @@ module VagrantPlugins
76
110
  end
77
111
  end
78
112
  end
79
- end
80
-
81
-
82
-
113
+ end
@@ -63,6 +63,11 @@ module VagrantPlugins
63
63
  # @return [String]
64
64
  attr_accessor :ip_subnet
65
65
 
66
+ # DNS
67
+ #
68
+ # @return [Array]
69
+ attr_accessor :ip_dns
70
+
66
71
  # Port forwarding rules
67
72
  #
68
73
  # @return [Hash]
@@ -116,14 +121,17 @@ module VagrantPlugins
116
121
  errors = _detected_errors
117
122
 
118
123
  # TODO: add blank?
119
- errors << I18n.t("config.hostname") if hostname.nil?
120
- errors << I18n.t("config.org_name") if org_name.nil?
121
- errors << I18n.t("config.username") if username.nil?
122
- errors << I18n.t("config.password") if password.nil?
124
+ errors << I18n.t("vagrant_vcloud.config.hostname") if hostname.nil?
125
+ errors << I18n.t("vagrant_vcloud.config.org_name") if org_name.nil?
126
+ errors << I18n.t("vagrant_vcloud.config.username") if username.nil?
127
+ errors << I18n.t("vagrant_vcloud.config.password") if password.nil?
123
128
 
124
- errors << I18n.t("config.catalog_name") if catalog_name.nil?
125
- errors << I18n.t("config.vdc_name") if vdc_name.nil?
126
- errors << I18n.t("config.vdc_network_name") if vdc_network_name.nil?
129
+ if !ip_dns.nil?
130
+ errors << I18n.t("vagrant_vcloud.config.ip_dns") if !ip_dns.kind_of?(Array)
131
+ end
132
+ errors << I18n.t("vagrant_vcloud.config.catalog_name") if catalog_name.nil?
133
+ errors << I18n.t("vagrant_vcloud.config.vdc_name") if vdc_name.nil?
134
+ errors << I18n.t("vagrant_vcloud.config.vdc_network_name") if vdc_network_name.nil?
127
135
 
128
136
  { "vCloud Provider" => errors }
129
137
  end