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