Class: OpenNebula::VirtualNetwork
- Inherits:
-
PoolElement
- Object
- XMLElement
- PoolElement
- OpenNebula::VirtualNetwork
- Defined in:
- lib/opennebula/virtual_network.rb
Constant Summary collapse
- VN_METHODS =
Constants and Class Methods
{ :info => "vn.info", :allocate => "vn.allocate", :delete => "vn.delete", :add_ar => "vn.add_ar", :rm_ar => "vn.rm_ar", :update_ar => "vn.update_ar", :chown => "vn.chown", :chmod => "vn.chmod", :update => "vn.update", :hold => "vn.hold", :release => "vn.release", :rename => "vn.rename", :reserve => "vn.reserve", :free_ar => "vn.free_ar", :lock => "vn.lock", :unlock => "vn.unlock" }
Class Method Summary collapse
-
.build_xml(pe_id = nil) ⇒ Object
Creates a VirtualNetwork description with just its identifier this method should be used to create plain VirtualNetwork objects.
Instance Method Summary collapse
-
#add_ar(ar_template) ⇒ Object
Adds Address Ranges to the VirtualNetwork.
-
#addleases(ip, mac = nil) ⇒ Object
deprecated
Deprecated.
use #add_ar
-
#allocate(description, cluster_id = ClusterPool::NONE_CLUSTER_ID) ⇒ Integer, OpenNebula::Error
Allocates a new VirtualNetwork in OpenNebula.
-
#chmod(owner_u, owner_m, owner_a, group_u, group_m, group_a, other_u, other_m, other_a) ⇒ nil, OpenNebula::Error
Changes the virtual network permissions.
-
#chmod_octet(octet) ⇒ nil, OpenNebula::Error
Changes the virtual network permissions.
-
#chown(uid, gid) ⇒ nil, OpenNebula::Error
Changes the owner/group.
-
#delete ⇒ Object
Deletes the VirtualNetwork.
-
#free(ar_id) ⇒ Object
Removes an Address Range from the VirtualNetwork.
-
#gid ⇒ Object
Returns the group identifier [return] Integer the element’s group ID.
-
#hold(ip, ar_id = -1)) ⇒ Object
Holds a virtual network address.
-
#info(decrypt = false) ⇒ Object
(also: #info!)
Retrieves the information of the given VirtualNetwork.
-
#initialize(xml, client) ⇒ VirtualNetwork
constructor
Class constructor.
- #public? ⇒ Boolean
-
#publish ⇒ Object
Publishes the VirtualNetwork, to be used by other users.
-
#release(ip, ar_id = -1)) ⇒ Object
Releases an address on hold.
-
#rename(name) ⇒ nil, OpenNebula::Error
Renames this virtual network.
-
#reserve(rname, rsize, ar_id, addr, vnet) ⇒ Integer, OpenNebula::Error
Reserve a set of addresses from this virtual network.
- #reserve_with_extra(extra) ⇒ Object
-
#rm_ar(ar_id, force = false) ⇒ Object
Removes an Address Range from the VirtualNetwork.
-
#rmleases(ip) ⇒ Object
deprecated
Deprecated.
use ##rm_ar
-
#unpublish ⇒ Object
Unplubishes the VirtualNetwork.
-
#update(new_template = nil, append = false) ⇒ nil, OpenNebula::Error
Replaces the template contents.
-
#update_ar(ar_template) ⇒ Object
Updates Address Ranges from the VirtualNetwork.
-
#vrouter_ids ⇒ Object
Returns an array with the numeric virtual router ids.
Methods inherited from PoolElement
#id, #name, new_with_id, #replace, #to_str
Methods inherited from XMLElement
#[], #add_element, #attr, #delete_element, #each, #each_xpath, #element_xml, #has_elements?, #initialize_xml, #name, #retrieve_elements, #retrieve_xmlelements, #set_content, #template_like_str, #template_str, #template_xml, #text, #to_hash, #to_xml, #xml_nil?
Constructor Details
#initialize(xml, client) ⇒ VirtualNetwork
Class constructor
64 65 66 67 68 |
# File 'lib/opennebula/virtual_network.rb', line 64 def initialize(xml, client) LockableExt.make_lockable(self, VN_METHODS) super(xml,client) end |
Class Method Details
.build_xml(pe_id = nil) ⇒ Object
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)
53 54 55 56 57 58 59 60 61 |
# 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 |
Instance Method Details
#add_ar(ar_template) ⇒ Object
Adds Address Ranges to the VirtualNetwork
120 121 122 123 124 125 126 127 |
# File 'lib/opennebula/virtual_network.rb', line 120 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) ⇒ Object
use #add_ar
Simulates old addleases call
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/opennebula/virtual_network.rb', line 131 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) ⇒ Integer, OpenNebula::Error
Allocates a new VirtualNetwork in OpenNebula
88 89 90 |
# File 'lib/opennebula/virtual_network.rb', line 88 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) ⇒ nil, OpenNebula::Error
Changes the virtual network permissions. Each [Integer] argument must be 1 to allow, 0 deny, -1 do not change
298 299 300 301 302 |
# File 'lib/opennebula/virtual_network.rb', line 298 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) ⇒ nil, OpenNebula::Error
Changes the virtual network permissions.
289 290 291 |
# File 'lib/opennebula/virtual_network.rb', line 289 def chmod_octet(octet) super(VN_METHODS[:chmod], octet) end |
#chown(uid, gid) ⇒ nil, OpenNebula::Error
Changes the owner/group
280 281 282 |
# File 'lib/opennebula/virtual_network.rb', line 280 def chown(uid, gid) super(VN_METHODS[:chown], uid, gid) end |
#delete ⇒ Object
Deletes the VirtualNetwork
115 116 117 |
# File 'lib/opennebula/virtual_network.rb', line 115 def delete() super(VN_METHODS[:delete]) end |
#free(ar_id) ⇒ Object
Removes an Address Range from the VirtualNetwork
264 265 266 267 268 269 270 271 |
# File 'lib/opennebula/virtual_network.rb', line 264 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 ⇒ Object
Returns the group identifier
- return
-
Integer the element’s group ID
320 321 322 |
# File 'lib/opennebula/virtual_network.rb', line 320 def gid self['GID'].to_i end |
#hold(ip, ar_id = -1)) ⇒ Object
Holds a virtual network address
189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 |
# File 'lib/opennebula/virtual_network.rb', line 189 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) ⇒ Object Also known as: info!
Retrieves the information of the given VirtualNetwork.
75 76 77 |
# File 'lib/opennebula/virtual_network.rb', line 75 def info(decrypt = false) super(VN_METHODS[:info], 'VNET', decrypt) end |
#public? ⇒ Boolean
324 325 326 327 328 329 330 |
# File 'lib/opennebula/virtual_network.rb', line 324 def public? if self['PERMISSIONS/GROUP_U'] == "1" || self['PERMISSIONS/OTHER_U'] == "1" true else false end end |
#publish ⇒ Object
Publishes the VirtualNetwork, to be used by other users
105 106 107 |
# File 'lib/opennebula/virtual_network.rb', line 105 def publish set_publish(true) end |
#release(ip, ar_id = -1)) ⇒ Object
Releases an address on hold
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 |
# File 'lib/opennebula/virtual_network.rb', line 210 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) ⇒ nil, OpenNebula::Error
Renames this virtual network
310 311 312 |
# File 'lib/opennebula/virtual_network.rb', line 310 def rename(name) return call(VN_METHODS[:rename], @pe_id, name) end |
#reserve(rname, rsize, ar_id, addr, vnet) ⇒ Integer, OpenNebula::Error
Reserve a set of addresses from this virtual network
238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 |
# File 'lib/opennebula/virtual_network.rb', line 238 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) ⇒ Object
257 258 259 260 261 |
# File 'lib/opennebula/virtual_network.rb', line 257 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) ⇒ Object
Removes an Address Range from the VirtualNetwork
150 151 152 153 154 155 156 157 |
# File 'lib/opennebula/virtual_network.rb', line 150 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) ⇒ Object
use ##rm_ar
Simulates old rmleases call
161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'lib/opennebula/virtual_network.rb', line 161 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 |
#unpublish ⇒ Object
Unplubishes the VirtualNetwork
110 111 112 |
# File 'lib/opennebula/virtual_network.rb', line 110 def unpublish set_publish(false) end |
#update(new_template = nil, append = false) ⇒ nil, OpenNebula::Error
Replaces the template contents
100 101 102 |
# File 'lib/opennebula/virtual_network.rb', line 100 def update(new_template=nil, append=false) super(VN_METHODS[:update], new_template, append ? 1 : 0) end |
#update_ar(ar_template) ⇒ Object
Updates Address Ranges from the VirtualNetwork
176 177 178 179 180 181 182 183 |
# File 'lib/opennebula/virtual_network.rb', line 176 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 ⇒ Object
Returns an array with the numeric virtual router ids
333 334 335 336 337 338 339 340 341 |
# File 'lib/opennebula/virtual_network.rb', line 333 def vrouter_ids array = Array.new self.each("VROUTERS/ID") do |id| array << id.text.to_i end return array end |