Class: OpenNebula::MarketPlaceApp

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

Constant Summary collapse

MARKETPLACEAPP_METHODS =

Constants and Class Methods

{
    :info       => "marketapp.info",
    :allocate   => "marketapp.allocate",
    :delete     => "marketapp.delete",
    :update     => "marketapp.update",
    :chown      => "marketapp.chown",
    :chmod      => "marketapp.chmod",
    :rename     => "marketapp.rename",
    :enable     => "marketapp.enable"
}
MARKETPLACEAPP_STATES =
%w{INIT READY LOCKED ERROR DISABLED}
SHORT_MARKETPLACEAPP_STATES =
{
    "INIT"      => "ini",
    "READY"     => "rdy",
    "LOCKED"    => "lck",
    "ERROR"     => "err",
    "DISABLED"  => "dis"
}
MARKETPLACEAPP_TYPES =
%w{UNKNOWN IMAGE VMTEMPLATE SERVICE_TEMPLATE}
SHORT_MARKETPLACEAPP_TYPES =
{
    "UNKNOWN"           => "unk",
    "IMAGE"             => "img",
    "VMTEMPLATE"        => "tpl",
    "SERVICE_TEMPLATE"  => "srv"
}

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) ⇒ MarketPlaceApp

Class constructor



72
73
74
# File 'lib/opennebula/marketplaceapp.rb', line 72

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

Class Method Details

.build_xml(pe_id = nil) ⇒ Object

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

Example:

app = MarketPlaceApp.new(MarketPlace.build_xml(3),rpc_client)


61
62
63
64
65
66
67
68
69
# File 'lib/opennebula/marketplaceapp.rb', line 61

def MarketPlaceApp.build_xml(pe_id=nil)
    if pe_id
        app_xml = "<MARKETPLACEAPP><ID>#{pe_id}</ID></MARKETPLACEAPP>"
    else
        app_xml = "<MARKETPLACEAPP></MARKETPLACEAPP>"
    end

    XMLElement.build_xml(app_xml,'MARKETPLACEAPP')
end

Instance Method Details

#allocate(description, mp_id) ⇒ Integer, OpenNebula::Error

Allocates a new MarketPlace in OpenNebula

Parameters:

  • description (String)

    The template of the marketplace app

  • mp_id (Integer)

    The id of the marketplace to create the app

Returns:



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

def allocate(description, mp_id)
    super(MARKETPLACEAPP_METHODS[:allocate], description, mp_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 marketplace app permissions. Each [Integer] argument must be 1 to allow, 0 deny, -1 do not change

Returns:



140
141
142
143
144
# File 'lib/opennebula/marketplaceapp.rb', line 140

def chmod(owner_u, owner_m, owner_a, group_u, group_m, group_a, other_u,
        other_m, other_a)
    super(MARKETPLACEAPP_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 marketplace app permissions.

Parameters:

  • octet (String)

    Permissions octed , e.g. 640

Returns:



131
132
133
# File 'lib/opennebula/marketplaceapp.rb', line 131

def chmod_octet(octet)
    super(MARKETPLACEAPP_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:



122
123
124
# File 'lib/opennebula/marketplaceapp.rb', line 122

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

#deleteObject

Deletes the marketplace app



99
100
101
# File 'lib/opennebula/marketplaceapp.rb', line 99

def delete()
    super(MARKETPLACEAPP_METHODS[:delete])
end

#disableObject

Enables this app



229
230
231
# File 'lib/opennebula/marketplaceapp.rb', line 229

def disable
    return call(MARKETPLACEAPP_METHODS[:enable], @pe_id, false)
end

#enableObject

Enables this app



224
225
226
# File 'lib/opennebula/marketplaceapp.rb', line 224

def enable
    return call(MARKETPLACEAPP_METHODS[:enable], @pe_id, true)
end

#export(options = {}) ⇒ Hash, OpenNebula::Error

Exports this app to a suitable OpenNebula object objects. Instead of an ID, the array may contain OpenNebula::Error with specific object creation errors

{ :vm => [ vm ids/OpenNebula::Error ],
  :vmtemplate => [ vmtemplates ids/OpenNebula::Error ],
  :image => [ vm ids/OpenNebula::Error ] }

Parameters:

  • appid (Integer)

    id of the marketplace app

  • options (Hash) (defaults to: {})

    to control the export behavior dsid [Integer] datastore to save images name [String] of the new object vmtemplate_name [String] name for the VM Template, if the App has one

Returns:



169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
# File 'lib/opennebula/marketplaceapp.rb', line 169

def export(options={})
    return Error.new("Missing datastore id") if options[:dsid].nil?
    return Error.new("Missing name to export app") if options[:name].nil?

    rc  = info
    return rc if OpenNebula.is_error?(rc)
    return Error.new("App is not in READY state") if state_str!="READY"

    case type_str
    when "IMAGE"
        if !self['APPTEMPLATE64'].nil?
            tmpl=Base64::decode64(self['APPTEMPLATE64'])
        else
            tmpl=""
        end

        name = options[:name] || "marketapp-#{self.id}"

        tmpl << "\n"
        tmpl << "NAME=\"" << name << "\"\n"
        tmpl << "FROM_APP=\""       << self['ID'] << "\"\n"

        image = Image.new(Image.build_xml, @client)
        rc    = image.allocate(tmpl, options[:dsid])

        return { :image => [rc] } if OpenNebula.is_error?(rc)

        image_id = image.id
        vmtpl_id = -1

        if !self['TEMPLATE/VMTEMPLATE64'].nil?
            tmpl=Base64::decode64(self['TEMPLATE/VMTEMPLATE64'])

            tmpl_name = options[:vmtemplate_name] || name

            tmpl << "\nNAME=\"#{tmpl_name}\"\n"
            tmpl << "DISK=[ IMAGE_ID = #{image.id} ]\n"

            vmtpl = Template.new(Template.build_xml, @client)
            rc    = vmtpl.allocate(tmpl)

            if OpenNebula.is_error?(rc)
                return { :image => [image_id], :vmtemplate => [rc] }
            end

            vmtpl_id = vmtpl.id
        end

        return { :image => [image_id], :vmtemplate => [vmtpl_id] }
    else
        return Error.new("App type #{app.type_str} not supported")
    end
end

#infoObject Also known as: info!

Retrieves the information of the given marketplace app



81
82
83
# File 'lib/opennebula/marketplaceapp.rb', line 81

def info()
    super(MARKETPLACEAPP_METHODS[:info], 'MARKETPLACEAPP')
end

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

Renames this marketplace app

Parameters:

  • name (String)

    New name for the marketplace app

Returns:



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

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

#short_state_strObject

Returns the state of the marketplace app (string value)



263
264
265
# File 'lib/opennebula/marketplaceapp.rb', line 263

def short_state_str
    SHORT_MARKETPLACEAPP_STATES[state_str]
end

#short_type_strObject

Returns the marketplace app type (string value)



248
249
250
# File 'lib/opennebula/marketplaceapp.rb', line 248

def short_type_str
    SHORT_MARKETPLACEAPP_TYPES[type_str]
end

#stateObject

Returns the state of the marketplace app (numeric value)



253
254
255
# File 'lib/opennebula/marketplaceapp.rb', line 253

def state
    self['STATE'].to_i
end

#state_strObject

Returns the state of the marketplace app (string value)



258
259
260
# File 'lib/opennebula/marketplaceapp.rb', line 258

def state_str
    MARKETPLACEAPP_STATES[state]
end

#typeObject

Returns the marketplace app type



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

def type
    self['TYPE'].to_i
end

#type_strObject

Returns the marketplace app type (string value)



243
244
245
# File 'lib/opennebula/marketplaceapp.rb', line 243

def type_str
    MARKETPLACEAPP_TYPES[type]
end

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

Replaces the template contents

Parameters:

  • new_template (String)

    New template contents

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

    True to append new attributes instead of replace the whole template

Returns:



111
112
113
# File 'lib/opennebula/marketplaceapp.rb', line 111

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