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

      netconfig_response, headers = send_request(params)

      parent_section = netconfig_response.css('NetworkConnectionSection').first

      # For some reasons these elements must be removed
      netconfig_response.css("Link").each {|n| n.remove}

      # Delete placeholder network if present (since vcloud 5.5 has been removed)
      none_network = netconfig_response.css('NetworkConnection').find{|n| n.attribute('network').text == 'none'}
      none_network.remove if none_network

      networks_count = netconfig_response.css('NetworkConnection').count

      primary_index_node = netconfig_response.css('PrimaryNetworkConnectionIndex').first
      unless primary_index_node
        primary_index_node = Nokogiri::XML::Node.new "PrimaryNetworkConnectionIndex", parent_section
        parent_section.add_child(primary_index_node)
      end
      primary_index_node.content = config[:primary_index] || 0

      new_network = Nokogiri::XML::Node.new "NetworkConnection", parent_section
      new_network["network"] = network[:name]
      new_network["needsCustomization"] = true

      idx_node = Nokogiri::XML::Node.new "NetworkConnectionIndex", new_network
      idx_node.content = config[:network_index] || networks_count
      new_network.add_child(idx_node)

      if config[:ip]
        ip_node = Nokogiri::XML::Node.new "IpAddress", new_network
        ip_node.content = config[:ip]
        new_network.add_child(ip_node)
      end

      is_connected_node = Nokogiri::XML::Node.new "IsConnected", new_network
      is_connected_node.content = config[:is_connected] || true
      new_network.add_child(is_connected_node)

      allocation_node = Nokogiri::XML::Node.new "IpAddressAllocationMode", new_network
      allocation_node.content = config[:ip_allocation_mode] || "POOL"
      new_network.add_child(allocation_node)

      parent_section.add_child(new_network)

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

      put_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 add_vm_network(vmId, network, config={})
      params = {
        'method' => :get,
        'command' => "/vApp/vm-#{vmId}/networkConnectionSection"
      }

      netconfig_response, headers = send_request(params)

      parent_section = netconfig_response.css('NetworkConnectionSection').first

      # For some reasons these elements must be removed
      netconfig_response.css("Link").each {|n| n.remove}

      # Delete placeholder network if present (since vcloud 5.5 has been removed)
      none_network = netconfig_response.css('NetworkConnection').find{|n| n.attribute('network').text == 'none'}
      none_network.remove if none_network

      networks_count = netconfig_response.css('NetworkConnection').count

      primary_index_node = netconfig_response.css('PrimaryNetworkConnectionIndex').first
      unless primary_index_node
        primary_index_node = Nokogiri::XML::Node.new "PrimaryNetworkConnectionIndex", parent_section
        parent_section.add_child(primary_index_node)
      end
      primary_index_node.content = config[:primary_index] || 0

      new_network = Nokogiri::XML::Node.new "NetworkConnection", parent_section
      new_network["network"] = network[:name]
      new_network["needsCustomization"] = true

      idx_node = Nokogiri::XML::Node.new "NetworkConnectionIndex", new_network
      idx_node.content = config[:network_index] || networks_count
      new_network.add_child(idx_node)

      if config[:ip]
        ip_node = Nokogiri::XML::Node.new "IpAddress", new_network
        ip_node.content = config[:ip]
        new_network.add_child(ip_node)
      end

      is_connected_node = Nokogiri::XML::Node.new "IsConnected", new_network
      is_connected_node.content = config[:is_connected] || true
      new_network.add_child(is_connected_node)

      allocation_node = Nokogiri::XML::Node.new "IpAddressAllocationMode", new_network
      allocation_node.content = config[:ip_allocation_mode] || "POOL"
      new_network.add_child(allocation_node)

      parent_section.add_child(new_network)

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

      put_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 add_vm_network ( vmId , network , config = { } ) params = { 'method' => :get , 'command' => "/vApp/vm-#{vmId}/networkConnectionSection" } netconfig_response , headers = send_request ( params ) parent_section = netconfig_response . css ( 'NetworkConnectionSection' ) . first # For some reasons these elements must be removed netconfig_response . css ( "Link" ) . each { | n | n . remove } # Delete placeholder network if present (since vcloud 5.5 has been removed) none_network = netconfig_response . css ( 'NetworkConnection' ) . find { | n | n . attribute ( 'network' ) . text == 'none' } none_network . remove if none_network networks_count = netconfig_response . css ( 'NetworkConnection' ) . count primary_index_node = netconfig_response . css ( 'PrimaryNetworkConnectionIndex' ) . first unless primary_index_node primary_index_node = Nokogiri :: XML :: Node . new "PrimaryNetworkConnectionIndex" , parent_section parent_section . add_child ( primary_index_node ) end primary_index_node . content = config [ :primary_index ] || 0 new_network = Nokogiri :: XML :: Node . new "NetworkConnection" , parent_section new_network [ "network" ] = network [ :name ] new_network [ "needsCustomization" ] = true idx_node = Nokogiri :: XML :: Node . new "NetworkConnectionIndex" , new_network idx_node . content = config [ :network_index ] || networks_count new_network . add_child ( idx_node ) if config [ :ip ] ip_node = Nokogiri :: XML :: Node . new "IpAddress" , new_network ip_node . content = config [ :ip ] new_network . add_child ( ip_node ) end is_connected_node = Nokogiri :: XML :: Node . new "IsConnected" , new_network is_connected_node . content = config [ :is_connected ] || true new_network . add_child ( is_connected_node ) allocation_node = Nokogiri :: XML :: Node . new "IpAddressAllocationMode" , new_network allocation_node . content = config [ :ip_allocation_mode ] || "POOL" new_network . add_child ( allocation_node ) parent_section . add_child ( new_network ) params = { 'method' => :put , 'command' => "/vApp/vm-#{vmId}/networkConnectionSection" } put_response , headers = send_request ( params , netconfig_response . to_xml , "application/vnd.vmware.vcloud.networkConnectionSection+xml" ) task_id = headers [ :location ] . gsub ( / \/ \/ / , "" ) task_id end
Add a new network to a VM
Add a new network to a VM