class OpenNebula::VirtualNetwork
Constants
- VN_METHODS
Constants and Class Methods
Public Class Methods
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 53 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
Class constructor
OpenNebula::PoolElement::new
# File lib/opennebula/virtual_network.rb, line 64 def initialize(xml, client) super(xml,client) end
Public Instance Methods
Adds Address Ranges to the VirtualNetwork
# File lib/opennebula/virtual_network.rb, line 118 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
Simulates old addleases call @deprecated use {#add_ar}
# File lib/opennebula/virtual_network.rb, line 129 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
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
OpenNebula::PoolElement#allocate
# File lib/opennebula/virtual_network.rb, line 86 def allocate(description,cluster_id=ClusterPool::NONE_CLUSTER_ID) super(VN_METHODS[:allocate], description, cluster_id) end
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
OpenNebula::PoolElement#chmod
# File lib/opennebula/virtual_network.rb, line 296 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
Changes the virtual network permissions.
@param octet [String] Permissions octed , e.g. 640 @return [nil, OpenNebula::Error
] nil in case of success, Error
otherwise
OpenNebula::PoolElement#chmod_octet
# File lib/opennebula/virtual_network.rb, line 287 def chmod_octet(octet) super(VN_METHODS[:chmod], octet) end
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
OpenNebula::PoolElement#chown
# File lib/opennebula/virtual_network.rb, line 278 def chown(uid, gid) super(VN_METHODS[:chown], uid, gid) end
Deletes the VirtualNetwork
OpenNebula::PoolElement#delete
# File lib/opennebula/virtual_network.rb, line 113 def delete() super(VN_METHODS[:delete]) end
Removes an Address Range from the VirtualNetwork
# File lib/opennebula/virtual_network.rb, line 262 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
Returns the group identifier
- return
-
Integer the element’s group ID
# File lib/opennebula/virtual_network.rb, line 318 def gid self['GID'].to_i end
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 187 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
Retrieves the information of the given VirtualNetwork
.
OpenNebula::PoolElement#info
# File lib/opennebula/virtual_network.rb, line 73 def info(decrypt = false) super(VN_METHODS[:info], 'VNET', decrypt) end
# File lib/opennebula/virtual_network.rb, line 341 def lock(level) return call(VN_METHODS[:lock], @pe_id, level) end
# File lib/opennebula/virtual_network.rb, line 322 def public? if self['PERMISSIONS/GROUP_U'] == "1" || self['PERMISSIONS/OTHER_U'] == "1" true else false end end
Publishes the VirtualNetwork
, to be used by other users
# File lib/opennebula/virtual_network.rb, line 103 def publish set_publish(true) end
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 208 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
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 308 def rename(name) return call(VN_METHODS[:rename], @pe_id, name) end
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 236 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
# File lib/opennebula/virtual_network.rb, line 255 def reserve_with_extra(extra) return Error.new('ID not defined') unless @pe_id @client.call(VN_METHODS[:reserve], @pe_id, extra) end
Removes an Address Range from the VirtualNetwork
# File lib/opennebula/virtual_network.rb, line 148 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
Simulates old rmleases call @deprecated use #{rm_ar}
# File lib/opennebula/virtual_network.rb, line 159 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
# File lib/opennebula/virtual_network.rb, line 345 def unlock() return call(VN_METHODS[:unlock], @pe_id) end
Unplubishes the VirtualNetwork
# File lib/opennebula/virtual_network.rb, line 108 def unpublish set_publish(false) end
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
OpenNebula::PoolElement#update
# File lib/opennebula/virtual_network.rb, line 98 def update(new_template=nil, append=false) super(VN_METHODS[:update], new_template, append ? 1 : 0) end
Updates Address Ranges from the VirtualNetwork
# File lib/opennebula/virtual_network.rb, line 174 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
Returns an array with the numeric virtual router ids
# File lib/opennebula/virtual_network.rb, line 331 def vrouter_ids array = Array.new self.each("VROUTERS/ID") do |id| array << id.text.to_i end return array end
Private Instance Methods
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 359 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
# File lib/opennebula/virtual_network.rb, line 350 def set_publish(published) group_u = published ? 1 : 0 chmod(-1, -1, -1, group_u, -1, -1, -1, -1, -1) end