Class: OpenNebula::VirtualNetwork

Inherits:
PoolElement show all
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

Instance Method Summary collapse

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

Deprecated.

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

Parameters:

  • description (String)

    The template of the VirtualNetwork.

  • cluster_id (Integer) (defaults to: ClusterPool::NONE_CLUSTER_ID)

    Id of the cluster, -1 to use default

Returns:



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

Returns:



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.

Parameters:

  • octet (String)

    Permissions octed , e.g. 640

Returns:



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

Parameters:

  • uid (Integer)

    the new owner id. Set to -1 to leave the current one

  • gid (Integer)

    the new group id. Set to -1 to leave the current one

Returns:



280
281
282
# File 'lib/opennebula/virtual_network.rb', line 280

def chown(uid, gid)
    super(VN_METHODS[:chown], uid, gid)
end

#deleteObject

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

#gidObject

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

Parameters:

  • ip (String)

    address to hold, if contains “:” a MAC address is assumed

  • ar_id (Integer) (defaults to: -1))

    The address range to hold the lease. If not set the lease will be held from all possible address ranges



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

Returns:

  • (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

#publishObject

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

Parameters:

  • ip (String)

    IP to release, if contains “:” a MAC address is assumed

  • ar_id (Integer) (defaults to: -1))

    The address range to release the lease. If not set the lease will be freed from all possible address ranges



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

Parameters:

  • name (String)

    New name for the virtual network.

Returns:



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

Parameters:

  • rname (String)

    of the reservation

  • rsize (String)

    number of addresses to reserve

  • ar_id (String)

    the ar_id to make the reservation. If set to nil any address range will be used

  • addr (String)

    the first address in the reservation. If set to nil the first free address will be used

  • vnet (String)

    ID of the VNET to add the reservation to. If not set a new VNET will be created.

Returns:

  • (Integer, OpenNebula::Error)

    The reservation vnet id on success, Error otherwise



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

Deprecated.

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

#unpublishObject

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

Parameters:

  • new_template (String) (defaults to: nil)

    New template contents

  • append (true, false) (defaults to: false)

    True to append new attributes instead of replace the whole template

Returns:



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_idsObject

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