Hi,
Now I work for SLMS ( Suse Lifecycle Management Server ) project. It cooperate with SuSE studio and use its API. I get idea that more people could benefit from easy access to studio API from ruby so I extract functionality and improve behavior, documentation and testing and now there is new rubygem studio_api.
Why you should use this gem?
- ActiveResource Behavior
- Actively maintained ( and will be due to SLMS support )
- Tightly developed with guys from studio team
- Well documented with yard
- Good test coverage
I think then a lot of glory words is better to show example. It is example based on example from documentation.
Example goal is simple. Create new appliance in studio, add own cool rpm and build appliance with it. It can be useful to test your new version of software in stable environment and have automatic appliance in which you can test it.
require 'rubygems' require 'studio_api' # Fill up Studio credentials (user name, API key, API URL) # See https://susestudio.com/user/show_api_key if you are using SUSE Studio online connection = StudioApi::Connection.new('user', 'pwd', 'https://susestudio.com/api/v1/user') # Setup the connection for all ActiveResource based class StudioApi::Util.configure_studio_connection connection # Find template with KDE4 for SLE11SP1 templates = StudioApi::TemplateSet.find(:all).find {|s| s.name == "default" }.template template = templates.find { |t| t.name == "SLED 11 SP1, KDE 4 desktop" } # clone template to new appliance appliance = StudioApi::Appliance.clone template.appliance_id, :name => "New cool appliance", :arch => "i686" puts "Created appliance #{appliance.inspect}" #add own rpm built agains SLED11_SP1 File.open("/home/jreidinger/rpms/cool_rpm-1.0-1.60.noarch.rpm","r") do |f| StudioApi::Rpm.upload f, "SLED11_SP1" end # and choose it in appliance ( and of course add repository with own rpms) appliance.add_user_repository appliance.add_package "cool_rpm", :version => "1.0-1.60" #check if appliance is OK, like dependency problems with new rpm if appliance.status.state != "ok" raise "appliance is not OK - #{appliance.status.issues.inspect}" end build = StudioApi::RunningBuild.new(:appliance_id => appliance.id, :image_type => "xen") build.save build.reload while build.state != "finished" puts "building (#{build.state}) - #{build.percent}%" sleep 5 build.reload end final_build = StudioApi::Build.find build.id puts "Appliance to download: #{final_build.download_url}"
So I hope that you like interface how I design it. Of course I welcome any suggestion how to improve it. You can use comments here, novell bugzilla or issues on github.
How to install it:
- In opensuse: 1-click for 11.3 and 1-click for factory
- alternative possible everywhere is to use
gem install studio_api
At the end few useful links if you are interested:
repository on github
yard documentation
gem at rubygems.org
Thanks for attention and I welcome any comments
Both comments and pings are currently closed.