class OpenNebula::DocumentJSON

Constants

TEMPLATE_TAG

Public Instance Methods

allocate(template_json, name=nil) click to toggle source

Allocate a new Document containing the json inside the TEMPLATE

@param [String] template_json json to be inserted in the TEMPLATE

of the new resource

@param [String, nil] name name of the object, this value will be

processed by the OpenNebula core

@return [nil, OpenNebula::Error] nil in case of success, Error

otherwise
Calls superclass method OpenNebula::Document#allocate
# File lib/opennebula/document_json.rb, line 33
def allocate(template_json, name=nil)
    text = build_template_xml(template_json, name)

    super(text)
end
info() click to toggle source

Retrieves the information of the Service and all its Nodes.

@return [nil, OpenNebula::Error] nil in case of success, Error

otherwise
Calls superclass method OpenNebula::Document#info
# File lib/opennebula/document_json.rb, line 44
def info
    rc = super
    if OpenNebula.is_error?(rc)
        return rc
    end

    load_body
end
Also aliased as: info!
info!()
Alias for: info
load_body() click to toggle source

Fill the @body hash with the values of the template

# File lib/opennebula/document_json.rb, line 96
def load_body
    body_str = self["TEMPLATE/#{TEMPLATE_TAG}"]

    if body_str
        begin
            @body = JSON.parse(body_str)
        rescue JSON::JSONError
            return OpenNebula::Error.new($!)
        end
    end

    return nil
end
to_json(pretty_generate=true) click to toggle source

Generates a json representing the object

@param [true, false] pretty_generate @return [String] json representing the object

# File lib/opennebula/document_json.rb, line 78
def to_json(pretty_generate=true)
    hash = self.to_hash

    body = hash['DOCUMENT']['TEMPLATE']["#{TEMPLATE_TAG}"]
    if body
        body_hash = JSON.parse(body)
        hash['DOCUMENT']['TEMPLATE']["#{TEMPLATE_TAG}"] = body_hash
    end

    if pretty_generate
        JSON.pretty_generate hash
    else
        hash.to_json
    end
end
update(template_json=nil, append=false) click to toggle source

Updates the current state of this Service in the OpenNebula DB

@params [String, nil] template_json string to be inserted in the

template. If nil @body will be used instead

@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
Calls superclass method OpenNebula::Document#update
# File lib/opennebula/document_json.rb, line 65
def update(template_json=nil, append=false)
    template_json ||= @body.to_json

    text = build_template_xml(template_json)

    super(text, append)
end

Private Instance Methods

build_template_xml(template_json, name=nil) click to toggle source

Build an xml string incluiding the provided json

@param [String] template_json The template to be inserted @param [String, nil] name The string to be inserted as name @return [String] The xml containing the json

# File lib/opennebula/document_json.rb, line 118
def build_template_xml(template_json, name=nil)
    template_json ||= ""

    text = "<TEMPLATE>"

    text << "<NAME>#{name}</NAME>" if name

    text << "<#{TEMPLATE_TAG}>"
    text << "<![CDATA[#{template_json}]]>"
    text << "</#{TEMPLATE_TAG}>"

    text << "</TEMPLATE>"

    text
end