lib/vagrant-vcloud/action/forward_ports.rb in vagrant-vcloud-0.2.2 vs lib/vagrant-vcloud/action/forward_ports.rb in vagrant-vcloud-0.3.0
- old
+ new
@@ -22,10 +22,11 @@
@app.call(env)
end
def forward_ports
ports = []
+ edge_ports = []
cfg = @env[:machine].provider_config
cnx = cfg.vcloud_cnx.driver
vapp_id = @env[:machine].get_vapp_id
vm_name = @env[:machine].name
@@ -40,16 +41,10 @@
@logger.debug('Getting VM info...')
vm = cnx.get_vapp(vapp_id)
vm_info = vm[:vms_hash][vm_name.to_sym]
@env[:forwarded_ports].each do |fp|
- # FIXME: Useless variable assignement 'message_attributes'
- # (tsugliani)
- message_attributes = {
- :guest_port => fp.guest_port,
- :host_port => fp.host_port
- }
@env[:ui].info(
"Forwarding Ports: VM port #{fp.guest_port} -> " +
"vShield Edge port #{fp.host_port}"
)
@@ -62,10 +57,12 @@
:nat_external_port => fp.host_port,
:name => fp.id,
:nat_protocol => fp.protocol.upcase,
:vapp_scoped_local_id => vm_info[:vapp_scoped_local_id]
}
+
+ edge_ports << fp.host_port
end
if !ports.empty?
# We only need to forward ports if there are any to forward
@logger.debug("Port object to be passed: #{ports.inspect}")
@@ -87,11 +84,39 @@
if !wait[:errormsg].nil?
raise Errors::ComposeVAppError, :message => wait[:errormsg]
end
- end
+ if cfg.vdc_edge_gateway_ip && \
+ cfg.vdc_edge_gateway && \
+ cfg.network_bridge.nil?
+
+
+ edge_ports.each do |port|
+ @env[:ui].info(
+ "Creating NAT rules on [#{cfg.vdc_edge_gateway}] " +
+ "for IP [#{cfg.vdc_edge_gateway_ip}] port #{port}."
+ )
+ end
+
+ # Add the vShield Edge Gateway rules
+ add_ports = cnx.add_edge_gateway_rules(
+ cfg.vdc_edge_gateway,
+ cfg.vdc_id,
+ cfg.vdc_edge_gateway_ip,
+ vapp_id,
+ edge_ports
+ )
+
+ wait = cnx.wait_task_completion(add_ports)
+
+ if !wait[:errormsg].nil?
+ raise Errors::ComposeVAppError, :message => wait[:errormsg]
+ end
+
+ end
+ end
end
end
end
end
end