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"
}

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from PoolElement

#id, #name, new_with_id, #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, #template_like_str, #template_str, #template_xml, #text, #to_hash, #to_xml, #xml_nil?

Constructor Details

#initialize(xml, client) ⇒ Template

Class constructor



57
58
59
60
61
# File 'lib/opennebula/template.rb', line 57

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)


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

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



94
95
96
# File 'lib/opennebula/template.rb', line 94

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.



198
199
200
201
202
# File 'lib/opennebula/template.rb', line 198

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.



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

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



163
164
165
# File 'lib/opennebula/template.rb', line 163

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.



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

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.



105
106
107
# File 'lib/opennebula/template.rb', line 105

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



236
237
238
# File 'lib/opennebula/template.rb', line 236

def gid
    self['GID'].to_i
end

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

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



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

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

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

    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



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

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

#owner_idObject



240
241
242
# File 'lib/opennebula/template.rb', line 240

def owner_id
    self['UID'].to_i
end

#public?Boolean



244
245
246
247
248
249
250
# File 'lib/opennebula/template.rb', line 244

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



150
151
152
# File 'lib/opennebula/template.rb', line 150

def publish
    set_publish(true)
end

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

Renames this Template



226
227
228
# File 'lib/opennebula/template.rb', line 226

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

#unpublishObject

Unplubishes the Image



155
156
157
# File 'lib/opennebula/template.rb', line 155

def unpublish
    set_publish(false)
end

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

Replaces the template contents



145
146
147
# File 'lib/opennebula/template.rb', line 145

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