Class: StudioApi::Appliance

Inherits:
ActiveResource::Base
  • Object
show all
Extended by:
StudioResource
Defined in:
lib/studio_api/appliance.rb

Overview

Represents appliance in studio beside information about itself contains also information about its relative object like packages, signing keys etc Each method try to be ActiveResource compatible, so each can throw ConnectionError

Defined Under Namespace

Classes: Configuration, GpgKey, Repository, Status

Class Method Summary (collapse)

Instance Method Summary (collapse)

Methods included from StudioResource

collection_path, element_path, extended, studio_connection, studio_connection=

Class Method Details

+ (StudioApi::Appliance) clone(source_id, options = {})

clones appliance or template

See Also:

  • (StudioApi(StudioApi::TemplateSet)


272
273
274
275
276
277
278
279
280
281
# File 'lib/studio_api/appliance.rb', line 272

def self.clone source_id,options={}
  request_str = "/appliances?clone_from=#{source_id.to_i}"
  request_str = Util.add_options request_str, options, false
  response = GenericRequest.new(studio_connection).post request_str, options
  if defined? ActiveModel #we are in rails3, so set model persistent
    Appliance.new Hash.from_xml(response)["appliance"],true
  else
    Appliance.new Hash.from_xml(response)["appliance"]
  end
end

Instance Method Details

- (StudioApi::Appliance::GpgKey) add_gpg_key(name, key, options = {})

add GPG key to appliance



303
304
305
306
307
# File 'lib/studio_api/appliance.rb', line 303

def add_gpg_key (name, key, options={})
  my_key = GpgKey.dup
  my_key.studio_connection = self.class.studio_connection
  my_key.create id, name, key, options
end

- (Hash<String,String>) add_package(name, options = {})



372
373
374
# File 'lib/studio_api/appliance.rb', line 372

def add_package (name, options={})
	software_command "add_package",{:name => name}.merge(options)
end

- (Hash<String,String>) add_pattern(name, options = {})



395
396
397
# File 'lib/studio_api/appliance.rb', line 395

def add_pattern (name, options={})
	software_command "add_pattern",{:name => name}.merge(options)
end

- (Array<StudioApi::Repository>) add_repository(*repo_ids)

adds repositories to appliance

Examples:

various way to add repo

appl = Appliance.find 1234
appl.add_repository 5678
appl.add_repository [5678,34,56,78,90]
appl.add_repository 5678,34,56,78,90


188
189
190
191
192
193
194
195
# File 'lib/studio_api/appliance.rb', line 188

def add_repository (*repo_ids)
  response = nil
  repo_ids.flatten.each do |repo_id|
    rq = GenericRequest.new self.class.studio_connection
    response = rq.post "/appliances/#{id}/cmd/add_repository?repo_id=#{repo_id.to_i}"
  end
  Hash.from_xml(response)["repositories"].collect{ |r| Repository.new r }
end

- (Object) add_user(name)



209
210
211
212
213
# File 'lib/studio_api/appliance.rb', line 209

def add_user name
  request_str = "/appliances/#{id.to_i}/sharing/#{CGI.escape name.to_s}"
  response = GenericRequest.new(self.class.studio_connection).post request_str
  handle_users_response response
end

- (Object) add_user_repository

adds repository for user rpms



198
199
200
201
# File 'lib/studio_api/appliance.rb', line 198

def add_user_repository
  rq = GenericRequest.new self.class.studio_connection
  rq.post "/appliances/#{id}/cmd/add_user_repository"
end

- (Object) background



244
245
246
247
# File 'lib/studio_api/appliance.rb', line 244

def background
  request_str = "/appliances/#{id.to_i}/configuration/background"
  GenericRequest.new(self.class.studio_connection).get request_str
end

- (Object) background=(logo)



249
250
251
252
253
254
255
256
257
258
# File 'lib/studio_api/appliance.rb', line 249

def background= ()
  request_str = "/appliances/#{id.to_i}/configuration/background"
  if .is_a?(IO) && .respond_to?(:path)
    GenericRequest.new(self.class.studio_connection).post request_str, :file => 
  else
    File.open(.to_s) do |f| 
      GenericRequest.new(self.class.studio_connection).post request_str, :file => f
    end
  end
end

- (Hash<String,String>) ban_package(name)



414
415
416
# File 'lib/studio_api/appliance.rb', line 414

def ban_package(name)
	software_command "ban_package",:name => name
end

- (Object) configuration

Shortcut to find configuration of appliance. Always ask server for new one.

See Also:



262
263
264
265
# File 'lib/studio_api/appliance.rb', line 262

def configuration
  Configuration.studio_connection = self.class.studio_connection
  Configuration.find id
end

- (String) file_content_from_build(build, src_path)

Gets file content from finished build.



148
149
150
151
# File 'lib/studio_api/appliance.rb', line 148

def file_content_from_build (build,src_path)
  rq = GenericRequest.new self.class.studio_connection
  rq.get "/appliances/#{id.to_i}/image_files?build_id=#{build.id.to_i}&path=#{CGI.escape src_path.to_s}"
end

- (StudioApi::Appliance::GpgKey?) gpg_key(key_id)

Gets GPG key assigned to appliance with specified id



294
295
296
297
298
# File 'lib/studio_api/appliance.rb', line 294

def gpg_key( key_id )
  my_key = GpgKey.dup
  my_key.studio_connection = self.class.studio_connection
  my_key.find key_id, :params => { :appliance_id => id }
end

- (Array<StudioApi::Appliance::GpgKey>) gpg_keys

Gets all GPG keys assigned to appliance



285
286
287
288
289
# File 'lib/studio_api/appliance.rb', line 285

def gpg_keys
  my_key = GpgKey.dup
  my_key.studio_connection = self.class.studio_connection
  my_key.find :all, :params => { :appliance_id => id }
end

- (Array<StudioApi::Package,StudioApi::Pattern>) installed_software(options = {})

Gets list of all installed (include dependencies) software (package and patterns) in appliance



323
324
325
326
327
328
329
330
331
332
333
334
335
# File 'lib/studio_api/appliance.rb', line 323

def installed_software (options = {})
  request_str = "/appliances/#{id.to_i}/software/installed"
  request_str = Util.add_options request_str, options
  response = GenericRequest.new(self.class.studio_connection).get request_str
  attrs = XmlSimple.xml_in response
			res = []
  return res unless attrs["repository"]
			attrs["repository"].each do |repo|
options = { "repository_id" => repo["id"].to_i }
  	res += convert_selectable repo["software"][0], options
			end
			res
end

- (Object) logo



228
229
230
231
# File 'lib/studio_api/appliance.rb', line 228

def 
  request_str = "/appliances/#{id.to_i}/configuration/logo"
  GenericRequest.new(self.class.studio_connection).get request_str
end

- (Object) logo=(logo)



233
234
235
236
237
238
239
240
241
242
# File 'lib/studio_api/appliance.rb', line 233

def logo= ()
  request_str = "/appliances/#{id.to_i}/configuration/logo"
  if .is_a?(IO) && .respond_to?(:path)
    GenericRequest.new(self.class.studio_connection).post request_str, :file => 
  else
    File.open(.to_s) do |f| 
      GenericRequest.new(self.class.studio_connection).post request_str, :file => f
    end
  end
end

- (Object) manifest_file(build, options = {})



221
222
223
224
225
226
# File 'lib/studio_api/appliance.rb', line 221

def manifest_file (build, options={})
  build = build.image_type if build.respond_to?(:image_type)
  request_str = "/appliances/#{id.to_i}/software/manifest/#{CGI.escape build.to_s}"
  request_str = Util.add_options request_str, options
  GenericRequest.new(self.class.studio_connection).get request_str
end

- (Hash<String,String>) remove_package(name)



383
384
385
# File 'lib/studio_api/appliance.rb', line 383

def remove_package (name)
	software_command "remove_package",:name => name
end

- (Hash<String,String>) remove_pattern(name)



406
407
408
# File 'lib/studio_api/appliance.rb', line 406

def remove_pattern (name)
	software_command "remove_pattern",:name => name
end

- (Array<StudioApi::Repository>) remove_repository(*repo_ids)

remove repositories from appliance

Examples:

various way to remove repo

appl = Appliance.find 1234
appl.remove_repository 5678
appl.remove_repository [5678,34,56,78,90]
appl.remove_repository 5678,34,56,78,90


171
172
173
174
175
176
177
178
# File 'lib/studio_api/appliance.rb', line 171

def remove_repository (*repo_ids)
  response = nil
  repo_ids.flatten.each do |repo_id|
    rq = GenericRequest.new self.class.studio_connection
    response = rq.post "/appliances/#{id}/cmd/remove_repository?repo_id=#{repo_id.to_i}"
  end
  Hash.from_xml(response)["repositories"].collect{ |r| Repository.new r }
end

- (Object) remove_user(name)



215
216
217
218
219
# File 'lib/studio_api/appliance.rb', line 215

def remove_user name
  request_str = "/appliances/#{id.to_i}/sharing/#{CGI.escape name.to_s}"
  response = GenericRequest.new(self.class.studio_connection).delete request_str
  handle_users_response response
end

- (StudioApi::Appliance::Repository) repositories

Gets all repositories assigned to appliance



155
156
157
158
159
160
# File 'lib/studio_api/appliance.rb', line 155

def repositories
  my_repo = Repository.dup
  my_repo.studio_connection = self.class.studio_connection
  my_repo.appliance = self
  my_repo.find :all, :params => { :appliance_id => id }
end

- (Object) rpm_content(name, options = {})

Returns rpm file as String



358
359
360
361
362
# File 'lib/studio_api/appliance.rb', line 358

def rpm_content(name, options={})
  request_str = "/appliances/#{id.to_i}/cmd/download_package?name=#{CGI.escape name.to_s}"
  request_str = Util.add_options request_str, options, false
  GenericRequest.new(self.class.studio_connection).get request_str
end

- (Array<StudioApi::Package,StudioApi::Pattern>) search_software(search_string, options = {})

Search software (package and patterns) in appliance



341
342
343
344
345
346
347
348
349
350
351
352
353
# File 'lib/studio_api/appliance.rb', line 341

def search_software (search_string,options={})
  request_str = "/appliances/#{id.to_i}/software/search?q=#{CGI.escape search_string.to_s}"
  request_str = Util.add_options request_str, options, false
  response = GenericRequest.new(self.class.studio_connection).get request_str
  attrs = XmlSimple.xml_in response
  return [] unless attrs["repository"]
			res = []
			attrs["repository"].each do |repo|
options = { "repository_id" => repo["id"].to_i }
  	res += convert_selectable repo["software"][0], options
			end
			res
end

- (Array<StudioApi::Package,StudioApi::Pattern>) selected_software

Gets list of all explicitelly selected software ( package and patterns) in appliance



312
313
314
315
316
317
# File 'lib/studio_api/appliance.rb', line 312

def selected_software
  request_str = "/appliances/#{id.to_i}/software"
  response = GenericRequest.new(self.class.studio_connection).get request_str
  attrs = XmlSimple.xml_in response
  convert_selectable attrs
end

- (StudioApi::Appliance::Status) status

gets status of appliance



136
137
138
139
140
141
142
# File 'lib/studio_api/appliance.rb', line 136

def status
  my_status = Status#.dup FIXME this doesn't work well with AciveResource :(
  my_status.studio_connection = self.class.studio_connection
  #rails is so smart, that it ignores prefix for calls. At least it is good that we don't want to do such things from library users
  from = Util.join_relative_url( self.class.site.path,"appliances/#{id.to_i}/status")
  my_status.find :one, :from => from
end

- (Hash<String,String>) unban_package(name)



422
423
424
# File 'lib/studio_api/appliance.rb', line 422

def unban_package(name)
	software_command "unban_package",:name => name
end

- (Object) users



203
204
205
206
207
# File 'lib/studio_api/appliance.rb', line 203

def users
  request_str = "/appliances/#{id.to_i}/sharing"
  response = GenericRequest.new(self.class.studio_connection).get request_str
  handle_users_response response
end