class OpenNebula::VirtualNetwork

Constants

SHORT_VN_STATES
VN_METHODS

Constants and Class Methods

VN_STATES

Public Class Methods

build_xml(pe_id=nil) click to toggle source

Creates a VirtualNetwork description with just its identifier this method should be used to create plain VirtualNetwork objects. id the id of the network

Example:

vnet = VirtualNetwork.new(VirtualNetwork.build_xml(3),rpc_client)
# File lib/opennebula/virtual_network.rb, line 65
def VirtualNetwork.build_xml(pe_id=nil)
    if pe_id
        vn_xml = "<VNET><ID>#{pe_id}</ID></VNET>"
    else
        vn_xml = "<VNET></VNET>"
    end

    XMLElement.build_xml(vn_xml, 'VNET')
end
new(xml, client) click to toggle source

Class constructor

Calls superclass method OpenNebula::PoolElement::new
# File lib/opennebula/virtual_network.rb, line 76
def initialize(xml, client)
    LockableExt.make_lockable(self, VN_METHODS)

    super(xml,client)
end

Public Instance Methods

add_ar(ar_template) click to toggle source

Adds Address Ranges to the VirtualNetwork

# File lib/opennebula/virtual_network.rb, line 132
def add_ar(ar_template)
    return Error.new('ID not defined') if !@pe_id

    rc = @client.call(VN_METHODS[:add_ar], @pe_id, ar_template)
    rc = nil if !OpenNebula.is_error?(rc)

    return rc
end
addleases(ip, mac=nil) click to toggle source

Simulates old addleases call @deprecated use {#add_ar}

# File lib/opennebula/virtual_network.rb, line 143
def addleases(ip, mac=nil)
    self.info

    ar_id = self.retrieve_elements("AR_POOL/AR[IP='#{ip}' and SIZE='1']/AR_ID")

    if !ar_id.nil?
        return Error.new("IP Address Range found with IP #{ip}")
    end

    template = 'AR = [ '
    template << 'TYPE = "IP4"'
    template << ', IP = "' << ip << '"' if ip
    template << ', MAC = "' << mac << '"' if mac
    template << ', SIZE = 1 ]'

    add_ar(template)
end
allocate(description,cluster_id=ClusterPool::NONE_CLUSTER_ID) click to toggle source

Allocates a new VirtualNetwork in OpenNebula

@param description [String] The template of the VirtualNetwork. @param cluster_id [Integer] Id of the cluster, -1 to use default

@return [Integer, OpenNebula::Error] the new ID in case of

success, error otherwise
Calls superclass method OpenNebula::PoolElement#allocate
# File lib/opennebula/virtual_network.rb, line 100
def allocate(description,cluster_id=ClusterPool::NONE_CLUSTER_ID)
    super(VN_METHODS[:allocate], description, cluster_id)
end
chmod(owner_u, owner_m, owner_a, group_u, group_m, group_a, other_u, other_m, other_a) click to toggle source

Changes the virtual network permissions. Each [Integer] argument must be 1 to allow, 0 deny, -1 do not change

@return [nil, OpenNebula::Error] nil in case of success, Error

otherwise
Calls superclass method OpenNebula::PoolElement#chmod
# File lib/opennebula/virtual_network.rb, line 310
def chmod(owner_u, owner_m, owner_a, group_u, group_m, group_a, other_u,
        other_m, other_a)
    super(VN_METHODS[:chmod], owner_u, owner_m, owner_a, group_u,
        group_m, group_a, other_u, other_m, other_a)
end
chmod_octet(octet) click to toggle source

Changes the virtual network permissions.

@param octet [String] Permissions octed , e.g. 640 @return [nil, OpenNebula::Error] nil in case of success, Error

otherwise
Calls superclass method OpenNebula::PoolElement#chmod_octet
# File lib/opennebula/virtual_network.rb, line 301
def chmod_octet(octet)
    super(VN_METHODS[:chmod], octet)
end
chown(uid, gid) click to toggle source

Changes the owner/group

@param uid [Integer] the new owner id. Set to -1 to leave the current one @param gid [Integer] the new group id. Set to -1 to leave the current one

@return [nil, OpenNebula::Error] nil in case of success, Error

otherwise
Calls superclass method OpenNebula::PoolElement#chown
# File lib/opennebula/virtual_network.rb, line 292
def chown(uid, gid)
    super(VN_METHODS[:chown], uid, gid)
end
delete() click to toggle source

Deletes the VirtualNetwork

Calls superclass method OpenNebula::PoolElement#delete
# File lib/opennebula/virtual_network.rb, line 127
def delete()
    super(VN_METHODS[:delete])
end
free(ar_id) click to toggle source

Removes an Address Range from the VirtualNetwork

# File lib/opennebula/virtual_network.rb, line 276
def free(ar_id)
    return Error.new('ID not defined') if !@pe_id

    rc = @client.call(VN_METHODS[:free_ar], @pe_id, ar_id.to_i)
    rc = nil if !OpenNebula.is_error?(rc)

    return rc
end
gid() click to toggle source

Returns the group identifier

return

Integer the element’s group ID

# File lib/opennebula/virtual_network.rb, line 342
def gid
    self['GID'].to_i
end
hold(ip, ar_id=-1) click to toggle source

Holds a virtual network address @param ip [String] address to hold, if contains “:” a MAC address is assumed @param ar_id [Integer] The address range to hold the lease. If not set

the lease will be held from all possible address ranges
# File lib/opennebula/virtual_network.rb, line 201
def hold(ip, ar_id=-1)
    return Error.new('ID not defined') if !@pe_id

    addr_name = address_type(ip)

    return addr_name if OpenNebula.is_error?(addr_name)

    lease_template =  "LEASES = [ #{addr_name} = #{ip}"
    lease_template << ", AR_ID = #{ar_id}" if ar_id != -1
    lease_template << "]"

    rc = @client.call(VN_METHODS[:hold], @pe_id, lease_template)
    rc = nil if !OpenNebula.is_error?(rc)

    return rc
end
info(decrypt = false) click to toggle source

Retrieves the information of the given VirtualNetwork.

Calls superclass method OpenNebula::PoolElement#info
# File lib/opennebula/virtual_network.rb, line 87
def info(decrypt = false)
    super(VN_METHODS[:info], 'VNET', decrypt)
end
Also aliased as: info!
info!(decrypt = false)
Alias for: info
public?() click to toggle source
# File lib/opennebula/virtual_network.rb, line 346
def public?
    if self['PERMISSIONS/GROUP_U'] == "1" || self['PERMISSIONS/OTHER_U'] == "1"
        true
    else
        false
    end
end
publish() click to toggle source

Publishes the VirtualNetwork, to be used by other users

# File lib/opennebula/virtual_network.rb, line 117
def publish
    set_publish(true)
end
recover(result) click to toggle source

Recovers an stuck Virtual Network

@param result [Integer] Recover with failure (0), success (1), delete (2) @return [nil, OpenNebula::Error] nil in case of success, Error

otherwise
# File lib/opennebula/virtual_network.rb, line 332
def recover(result)
    return call(VN_METHODS[:recover], @pe_id, result)
end
release(ip, ar_id=-1) click to toggle source

Releases an address on hold @param ip [String] IP to release, if contains “:” a MAC address is assumed @param ar_id [Integer] The address range to release the lease. If not

set the lease will be freed from all possible address ranges
# File lib/opennebula/virtual_network.rb, line 222
def release(ip, ar_id=-1)
    return Error.new('ID not defined') if !@pe_id

    addr_name = address_type(ip)

    return addr_name if OpenNebula.is_error?(addr_name)

    lease_template =  "LEASES = [ #{addr_name} = #{ip}"
    lease_template << ", AR_ID = #{ar_id}" if ar_id != -1
    lease_template << "]"

    rc = @client.call(VN_METHODS[:release], @pe_id, lease_template)
    rc = nil if !OpenNebula.is_error?(rc)

    return rc
end
rename(name) click to toggle source

Renames this virtual network

@param name [String] New name for the virtual network.

@return [nil, OpenNebula::Error] nil in case of success, Error

otherwise
# File lib/opennebula/virtual_network.rb, line 322
def rename(name)
    return call(VN_METHODS[:rename], @pe_id, name)
end
reserve(rname, rsize, ar_id, addr, vnet) click to toggle source

Reserve a set of addresses from this virtual network @param rname [String] of the reservation @param rsize number of addresses to reserve @param ar_id the ar_id to make the reservation. If set to nil

any address range will be used

@param addr [String] the first address in the reservation. If set to

nil the first free address will be used

@param vnet [String] ID of the VNET to add the reservation to. If not

set a new VNET will be created.

@return [Integer, OpenNebula::Error] The reservation vnet id on

success, Error otherwise
# File lib/opennebula/virtual_network.rb, line 250
def reserve(rname, rsize, ar_id, addr, vnet)
    return Error.new('ID not defined') if !@pe_id

    rtmpl =  "SIZE       = #{rsize}\n"
    rtmpl << "NAME       = \"#{rname}\"\n" if !rname.nil?
    rtmpl << "AR_ID      = #{ar_id}\n" if !ar_id.nil?
    rtmpl << "NETWORK_ID = #{vnet}\n"  if !vnet.nil?

    if !addr.nil?
        addr_name = address_type(addr)

        return addr_name if OpenNebula.is_error?(addr_name)

        rtmpl << "#{addr_name} = #{addr}\n"
    end

    return @client.call(VN_METHODS[:reserve], @pe_id, rtmpl)
end
reserve_with_extra(extra) click to toggle source
# File lib/opennebula/virtual_network.rb, line 269
def reserve_with_extra(extra)
    return Error.new('ID not defined') unless @pe_id

    @client.call(VN_METHODS[:reserve], @pe_id, extra)
end
rm_ar(ar_id, force = false) click to toggle source

Removes an Address Range from the VirtualNetwork

# File lib/opennebula/virtual_network.rb, line 162
def rm_ar(ar_id, force = false)
    return Error.new('ID not defined') if !@pe_id

    rc = @client.call(VN_METHODS[:rm_ar], @pe_id, ar_id.to_i, force)
    rc = nil if !OpenNebula.is_error?(rc)

    return rc
end
rmleases(ip) click to toggle source

Simulates old rmleases call @deprecated use #{rm_ar}

# File lib/opennebula/virtual_network.rb, line 173
def rmleases(ip)
    self.info

    ar_id = self.retrieve_elements("AR_POOL/AR[IP='#{ip}' and SIZE='1']/AR_ID")

    if !ar_id
        Error.new("No single IP Address Range found with IP #{ip}")
    elsif ar_id.size > 1
        Error.new("More than one Address Range found with IP #{ip} use rmar")
    else
        rm_ar(ar_id[0])
    end
end
short_state_str() click to toggle source

Returns the state of the Virtual Network (string value)

# File lib/opennebula/virtual_network.rb, line 376
def short_state_str
    SHORT_VN_STATES[state_str]
end
state() click to toggle source

Returns the state of the Virtual Network (numeric value)

# File lib/opennebula/virtual_network.rb, line 366
def state
    self['STATE'].to_i
end
state_str() click to toggle source

Returns the state of the Virtual Network (string value)

# File lib/opennebula/virtual_network.rb, line 371
def state_str
    VN_STATES[state]
end
unpublish() click to toggle source

Unplubishes the VirtualNetwork

# File lib/opennebula/virtual_network.rb, line 122
def unpublish
    set_publish(false)
end
update(new_template=nil, append=false) click to toggle source

Replaces the template contents

@param new_template [String] New template contents @param append [true, false] True to append new attributes instead of

replace the whole template

@return [nil, OpenNebula::Error] nil in case of success, Error

otherwise
Calls superclass method OpenNebula::PoolElement#update
# File lib/opennebula/virtual_network.rb, line 112
def update(new_template=nil, append=false)
    super(VN_METHODS[:update], new_template, append ? 1 : 0)
end
update_ar(ar_template) click to toggle source

Updates Address Ranges from the VirtualNetwork

# File lib/opennebula/virtual_network.rb, line 188
def update_ar(ar_template)
    return Error.new('ID not defined') if !@pe_id

    rc = @client.call(VN_METHODS[:update_ar], @pe_id, ar_template)
    rc = nil if !OpenNebula.is_error?(rc)

    return rc
end
vrouter_ids() click to toggle source

Returns an array with the numeric virtual router ids

# File lib/opennebula/virtual_network.rb, line 355
def vrouter_ids
    array = Array.new

    self.each("VROUTERS/ID") do |id|
        array << id.text.to_i
    end

    return array
end

Private Instance Methods

address_type(addr) click to toggle source

Returns the OpenNebula name of the address to use it in LEASE attributes. MAC, IP or IP6 is returned for MAC addresses in colon notation, ipv4 and ipv6 respectively

# File lib/opennebula/virtual_network.rb, line 390
def address_type(addr)
    begin
        ipaddr = IPAddr.new addr

        if ipaddr.ipv4?
            return "IP"
        elsif ipaddr.ipv6?
            return "IP6"
        else
            return Error.new('Unknown IP type')
        end
    rescue
        if /^(\h{2}:){5}\h{2}$/ =~ addr
            return "MAC"
        else
            return Error.new('Unknown address type')
        end
    end
end
set_publish(published) click to toggle source
# File lib/opennebula/virtual_network.rb, line 381
def set_publish(published)
    group_u = published ? 1 : 0

    chmod(-1, -1, -1, group_u, -1, -1, -1, -1, -1)
end