Class: OpenNebula::Template

Inherits:
PoolElement show all
Defined in:
lib/opennebula/template.rb

Constant Summary collapse

TEMPLATE_METHODS =
{
    :allocate    => "template.allocate",
    :instantiate => "template.instantiate",
    :info        => "template.info",
    :update      => "template.update",
    :delete      => "template.delete",
    :chown       => "template.chown",
    :chmod       => "template.chmod",
    :clone       => "template.clone",
    :rename      => "template.rename",
    :lock        => "template.lock",
    :unlock      => "template.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) ⇒ Template

Class constructor



59
60
61
62
63
# File 'lib/opennebula/template.rb', line 59

def initialize(xml, client)
    super(xml,client)

    @client = client
end

Class Method Details

.build_xml(pe_id = nil) ⇒ Object

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

Example:

template = Template.new(Template.build_xml(3),rpc_client)


48
49
50
51
52
53
54
55
56
# File 'lib/opennebula/template.rb', line 48

def Template.build_xml(pe_id=nil)
    if pe_id
        obj_xml = "<VMTEMPLATE><ID>#{pe_id}</ID></VMTEMPLATE>"
    else
        obj_xml = "<VMTEMPLATE></VMTEMPLATE>"
    end

    XMLElement.build_xml(obj_xml,'VMTEMPLATE')
end

Instance Method Details

#allocate(description) ⇒ nil, OpenNebula::Error

Allocates a new Template in OpenNebula



96
97
98
# File 'lib/opennebula/template.rb', line 96

def allocate(description)
    super(TEMPLATE_METHODS[:allocate], description)
end

#chmod(owner_u, owner_m, owner_a, group_u, group_m, group_a, other_u, other_m, other_a, recursive = false) ⇒ nil, OpenNebula::Error

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

any image defined in DISK.



200
201
202
203
204
# File 'lib/opennebula/template.rb', line 200

def chmod(owner_u, owner_m, owner_a, group_u, group_m, group_a, other_u,
        other_m, other_a, recursive=false)
    return call(TEMPLATE_METHODS[:chmod], @pe_id, owner_u, owner_m, owner_a, group_u,
        group_m, group_a, other_u, other_m, other_a, recursive)
end

#chmod_octet(octet, recursive = false) ⇒ nil, OpenNebula::Error

Changes the Template permissions.

any image defined in DISK.



177
178
179
180
181
182
183
184
185
186
187
188
189
190
# File 'lib/opennebula/template.rb', line 177

def chmod_octet(octet, recursive=false)
    owner_u = octet[0..0].to_i & 4 != 0 ? 1 : 0
    owner_m = octet[0..0].to_i & 2 != 0 ? 1 : 0
    owner_a = octet[0..0].to_i & 1 != 0 ? 1 : 0
    group_u = octet[1..1].to_i & 4 != 0 ? 1 : 0
    group_m = octet[1..1].to_i & 2 != 0 ? 1 : 0
    group_a = octet[1..1].to_i & 1 != 0 ? 1 : 0
    other_u = octet[2..2].to_i & 4 != 0 ? 1 : 0
    other_m = octet[2..2].to_i & 2 != 0 ? 1 : 0
    other_a = octet[2..2].to_i & 1 != 0 ? 1 : 0

    chmod(owner_u, owner_m, owner_a, group_u, group_m, group_a, other_u,
        other_m, other_a, recursive)
end

#chown(uid, gid) ⇒ Object

Changes the owner/group

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

return

nil in case of success or an Error object



165
166
167
# File 'lib/opennebula/template.rb', line 165

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

#clone(name, recursive = false) ⇒ Integer, OpenNebula::Error

Clones this Template into a new one

any image defined in DISK. The new IMAGE_ID is set into each DISK.



214
215
216
217
218
219
220
# File 'lib/opennebula/template.rb', line 214

def clone(name, recursive=false)
    return Error.new('ID not defined') if !@pe_id

    rc = @client.call(TEMPLATE_METHODS[:clone], @pe_id, name, recursive)

    return rc
end

#delete(recursive = false) ⇒ nil, OpenNebula::Error

Deletes the Template

any image defined in DISK.



107
108
109
# File 'lib/opennebula/template.rb', line 107

def delete(recursive=false)
    return call(TEMPLATE_METHODS[:delete], @pe_id, recursive)
end

#gidObject

Returns the group identifier

return

Integer the element’s group ID



238
239
240
# File 'lib/opennebula/template.rb', line 238

def gid
    self['GID'].to_i
end

#info(extended = false, decrypt = false) ⇒ Object Also known as: info!

Retrieves the information of the given Template. include extended information, such as the SIZE for each DISK



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/opennebula/template.rb', line 72

def info(extended=false, decrypt=false)
    return Error.new('ID not defined') if !@pe_id

    rc = @client.call(TEMPLATE_METHODS[:info], @pe_id, extended, decrypt)

    if !OpenNebula.is_error?(rc)
        initialize_xml(rc, 'VMTEMPLATE')
        rc   = nil

        @pe_id = self['ID'].to_i if self['ID']
        @name  = self['NAME'] if self['NAME']
    end

    return rc
end

#instantiate(name = "", hold = false, template = "", persistent = false) ⇒ Integer, OpenNebula::Error

Creates a VM instance from a Template



125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/opennebula/template.rb', line 125

def instantiate(name="", hold=false, template="", persistent=false)
    return Error.new('ID not defined') if !@pe_id

    name ||= ""
    hold = false if hold.nil?
    template ||= ""
    persistent = false if persistent.nil?

    rc = @client.call(TEMPLATE_METHODS[:instantiate], @pe_id,
        name, hold, template, persistent)

    return rc
end

#lock(level) ⇒ Object

Lock a Template



247
248
249
# File 'lib/opennebula/template.rb', line 247

def lock(level)
    return call(TEMPLATE_METHODS[:lock], @pe_id, level)
end

#owner_idObject



242
243
244
# File 'lib/opennebula/template.rb', line 242

def owner_id
    self['UID'].to_i
end

#public?Boolean



256
257
258
259
260
261
262
# File 'lib/opennebula/template.rb', line 256

def public?
    if self['PERMISSIONS/GROUP_U'] == "1" || self['PERMISSIONS/OTHER_U'] == "1"
        true
    else
        false
    end
end

#publishObject

Publishes the Template, to be used by other users



152
153
154
# File 'lib/opennebula/template.rb', line 152

def publish
    set_publish(true)
end

#rename(name) ⇒ nil, OpenNebula::Error

Renames this Template



228
229
230
# File 'lib/opennebula/template.rb', line 228

def rename(name)
    return call(TEMPLATE_METHODS[:rename], @pe_id, name)
end

#unlockObject

Unlock a Template



252
253
254
# File 'lib/opennebula/template.rb', line 252

def unlock()
    return call(TEMPLATE_METHODS[:unlock], @pe_id)
end

#unpublishObject

Unplubishes the Image



157
158
159
# File 'lib/opennebula/template.rb', line 157

def unpublish
    set_publish(false)
end

#update(new_template, append = false) ⇒ nil, OpenNebula::Error

Replaces the template contents



147
148
149
# File 'lib/opennebula/template.rb', line 147

def update(new_template, append=false)
    super(TEMPLATE_METHODS[:update], new_template, append ? 1 : 0)
end