lib/vcloud-rest/vcloud/vapp_networking.rb
def set_vapp_port_forwarding_rules(vappid, network_name, config={})
      builder = Nokogiri::XML::Builder.new do |xml|
      xml.NetworkConfigSection(
        "xmlns" => "http://www.vmware.com/vcloud/v1.5",
        "xmlns:ovf" => "http://schemas.dmtf.org/ovf/envelope/1") {
        xml['ovf'].Info "Network configuration"
        xml.NetworkConfig("networkName" => network_name) {
          xml.Configuration {
            xml.ParentNetwork("href" => "#{@api_url}/network/#{config[:parent_network]}")
            xml.FenceMode(config[:fence_mode] || 'isolated')
            xml.Features {
              xml.NatService {
                xml.IsEnabled "true"
                xml.NatType "portForwarding"
                xml.Policy(config[:nat_policy_type] || "allowTraffic")
                config[:nat_rules].each do |nat_rule|
                  xml.NatRule {
                    xml.VmRule {
                      xml.ExternalPort nat_rule[:nat_external_port]
                      xml.VAppScopedVmId nat_rule[:vm_scoped_local_id]
                      xml.VmNicId(nat_rule[:nat_vmnic_id] || "0")
                      xml.InternalPort nat_rule[:nat_internal_port]
                      xml.Protocol(nat_rule[:nat_protocol] || "TCP")
                    }
                  }
                end
              }
            }
          }
        }
      }
      end

      params = {
        'method' => :put,
        'command' => "/vApp/vapp-#{vappid}/networkConfigSection"
      }

      response, headers = send_request(params, builder.to_xml, "application/vnd.vmware.vcloud.networkConfigSection+xml")

      task_id = headers[:location].gsub(/.*\/task\//, "")
      task_id
    end
def set_vapp_port_forwarding_rules(vappid, network_name, config={})
      builder = Nokogiri::XML::Builder.new do |xml|
      xml.NetworkConfigSection(
        "xmlns" => "http://www.vmware.com/vcloud/v1.5",
        "xmlns:ovf" => "http://schemas.dmtf.org/ovf/envelope/1") {
        xml['ovf'].Info "Network configuration"
        xml.NetworkConfig("networkName" => network_name) {
          xml.Configuration {
            xml.ParentNetwork("href" => "#{@api_url}/network/#{config[:parent_network]}")
            xml.FenceMode(config[:fence_mode] || 'isolated')
            xml.Features {
              xml.NatService {
                xml.IsEnabled "true"
                xml.NatType "portForwarding"
                xml.Policy(config[:nat_policy_type] || "allowTraffic")
                config[:nat_rules].each do |nat_rule|
                  xml.NatRule {
                    xml.VmRule {
                      xml.ExternalPort nat_rule[:nat_external_port]
                      xml.VAppScopedVmId nat_rule[:vm_scoped_local_id]
                      xml.VmNicId(nat_rule[:nat_vmnic_id] || "0")
                      xml.InternalPort nat_rule[:nat_internal_port]
                      xml.Protocol(nat_rule[:nat_protocol] || "TCP")
                    }
                  }
                end
              }
            }
          }
        }
      }
      end

      params = {
        'method' => :put,
        'command' => "/vApp/vapp-#{vappid}/networkConfigSection"
      }

      response, headers = send_request(params, builder.to_xml, "application/vnd.vmware.vcloud.networkConfigSection+xml")

      task_id = headers[:location].gsub(/.*\/task\//, "")
      task_id
    end
def set_vapp_port_forwarding_rules ( vappid , network_name , config = { } ) builder = Nokogiri :: XML :: Builder . new do | xml | xml . NetworkConfigSection ( "xmlns" => "http://www.vmware.com/vcloud/v1.5" , "xmlns:ovf" => "http://schemas.dmtf.org/ovf/envelope/1" ) { xml [ 'ovf' ] . Info "Network configuration" xml . NetworkConfig ( "networkName" => network_name ) { xml . Configuration { xml . ParentNetwork ( "href" => "#{@api_url}/network/#{config[:parent_network]}" ) xml . FenceMode ( config [ :fence_mode ] || 'isolated' ) xml . Features { xml . NatService { xml . IsEnabled "true" xml . NatType "portForwarding" xml . Policy ( config [ :nat_policy_type ] || "allowTraffic" ) config [ :nat_rules ] . each do | nat_rule | xml . NatRule { xml . VmRule { xml . ExternalPort nat_rule [ :nat_external_port ] xml . VAppScopedVmId nat_rule [ :vm_scoped_local_id ] xml . VmNicId ( nat_rule [ :nat_vmnic_id ] || "0" ) xml . InternalPort nat_rule [ :nat_internal_port ] xml . Protocol ( nat_rule [ :nat_protocol ] || "TCP" ) } } end } } } } } end params = { 'method' => :put , 'command' => "/vApp/vapp-#{vappid}/networkConfigSection" } response , headers = send_request ( params , builder . to_xml , "application/vnd.vmware.vcloud.networkConfigSection+xml" ) task_id = headers [ :location ] . gsub ( / \/ \/ / , "" ) task_id end
Set vApp port forwarding rules

 - vappid: id of the vapp to be modified
 - network_name: name of the vapp network to be modified
 - config: hash with network configuration specifications, must contain an array inside :nat_rules with the nat rules to be applied.
Set vApp port forwarding rules