lib/vcloud-rest/vcloud/vm.rb
def edit_vm_network(vmId, network, config={})
      params = {
        'method' => :get,
        'command' => "/vApp/vm-#{vmId}/networkConnectionSection"
      }

      netconfig_response, headers = send_request(params)

      if config[:primary_index]
        node = netconfig_response.css('PrimaryNetworkConnectionIndex').first
        node.content = config[:primary_index]
      end

      picked_network = netconfig_response.css("NetworkConnection").select do |net|
        net.attribute('network').text == network[:name]
      end.first

      raise WrongItemIDError, "Network named #{network[:name]} not found." unless picked_network

      if config[:ip_allocation_mode]
        node = picked_network.css('IpAddressAllocationMode').first
        node.content = config[:ip_allocation_mode]
      end

      if config[:network_index]
        node = picked_network.css('NetworkConnectionIndex').first
        node.content = config[:network_index]
      end

      if config[:is_connected]
        node = picked_network.css('IsConnected').first
        node.content = config[:is_connected]
      end

      if config[:ip]
        node = picked_network.css('IpAddress').first
        node.content = config[:ip]
      end

      params = {
        'method' => :put,
        'command' => "/vApp/vm-#{vmId}/networkConnectionSection"
      }

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

      task_id = headers[:location].gsub(/.*\/task\//, "")
      task_id
    end
def edit_vm_network(vmId, network, config={})
      params = {
        'method' => :get,
        'command' => "/vApp/vm-#{vmId}/networkConnectionSection"
      }

      netconfig_response, headers = send_request(params)

      if config[:primary_index]
        node = netconfig_response.css('PrimaryNetworkConnectionIndex').first
        node.content = config[:primary_index]
      end

      picked_network = netconfig_response.css("NetworkConnection").select do |net|
        net.attribute('network').text == network[:name]
      end.first

      raise WrongItemIDError, "Network named #{network[:name]} not found." unless picked_network

      if config[:ip_allocation_mode]
        node = picked_network.css('IpAddressAllocationMode').first
        node.content = config[:ip_allocation_mode]
      end

      if config[:network_index]
        node = picked_network.css('NetworkConnectionIndex').first
        node.content = config[:network_index]
      end

      if config[:is_connected]
        node = picked_network.css('IsConnected').first
        node.content = config[:is_connected]
      end

      if config[:ip]
        node = picked_network.css('IpAddress').first
        node.content = config[:ip]
      end

      params = {
        'method' => :put,
        'command' => "/vApp/vm-#{vmId}/networkConnectionSection"
      }

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

      task_id = headers[:location].gsub(/.*\/task\//, "")
      task_id
    end
def edit_vm_network ( vmId , network , config = { } ) params = { 'method' => :get , 'command' => "/vApp/vm-#{vmId}/networkConnectionSection" } netconfig_response , headers = send_request ( params ) if config [ :primary_index ] node = netconfig_response . css ( 'PrimaryNetworkConnectionIndex' ) . first node . content = config [ :primary_index ] end picked_network = netconfig_response . css ( "NetworkConnection" ) . select do | net | net . attribute ( 'network' ) . text == network [ :name ] end . first raise WrongItemIDError , "Network named #{network[:name]} not found." unless picked_network if config [ :ip_allocation_mode ] node = picked_network . css ( 'IpAddressAllocationMode' ) . first node . content = config [ :ip_allocation_mode ] end if config [ :network_index ] node = picked_network . css ( 'NetworkConnectionIndex' ) . first node . content = config [ :network_index ] end if config [ :is_connected ] node = picked_network . css ( 'IsConnected' ) . first node . content = config [ :is_connected ] end if config [ :ip ] node = picked_network . css ( 'IpAddress' ) . first node . content = config [ :ip ] end params = { 'method' => :put , 'command' => "/vApp/vm-#{vmId}/networkConnectionSection" } response , headers = send_request ( params , netconfig_response . to_xml , "application/vnd.vmware.vcloud.networkConnectionSection+xml" ) task_id = headers [ :location ] . gsub ( / \/ \/ / , "" ) task_id end
Edit VM Network Config

 Retrieve the existing network config section and edit it
 to ensure settings are not lost
Edit VM Network Config