lib/rbovirt.rb in rbovirt-0.0.7 vs lib/rbovirt.rb in rbovirt-0.0.8

- old
+ new

@@ -7,10 +7,17 @@ require "ovirt/vm" require "ovirt/volume" require "ovirt/interface" require "ovirt/network" +require "client/vm_api" +require "client/template_api" +require "client/cluster_api" +require "client/host_api" +require "client/datacenter_api" +require "client/storage_domain_api" + require "nokogiri" require "rest_client" module OVIRT @@ -35,177 +42,28 @@ @datacenter_id = datacenter_id @cluster_id = cluster_id @api_entrypoint = api_entrypoint end - def vm(vm_id, opts={}) - headers = {:accept => "application/xml; detail=disks; detail=nics; detail=hosts"} - vm = OVIRT::VM::new(self, http_get("/vms/%s" % vm_id, headers).root) - # optional eager loading - vm.interfaces = interfaces(vm_id) if opts[:include] && opts[:include].include?(:interfaces) - vm.volumes = volumes(vm_id) if opts[:include] && opts[:include].include?(:volumes) - vm - end - - def interfaces vm_id - http_get("/vms/%s/nics" % vm_id, http_headers).xpath('/nics/nic').collect do |nic| - OVIRT::Interface::new(self, nic) - end - end - - def volumes vm_id - http_get("/vms/%s/disks" % vm_id, http_headers).xpath('/disks/disk').collect do |disk| - OVIRT::Volume::new(self, disk) - end - end - - def vms(opts={}) - headers = {:accept => "application/xml; detail=disks; detail=nics; detail=hosts"} - search= opts[:search] || ("datacenter=%s" % current_datacenter.name) - http_get("/vms?search=%s" % CGI.escape(search), headers).xpath('/vms/vm').collect do |vm| - OVIRT::VM::new(self, vm) - end - end - - def vm_action(id, action, opts={}) - xml_response = http_post("/vms/%s/%s" % [id, action],'<action/>', opts) - return (xml_response/'action/status').first.text.strip.upcase=="COMPLETE" - end - - def destroy_vm(id) - http_delete("/vms/%s" % id) - end - def api_version xml = http_get("/")/'/api/product_info/version' (xml/'version').first[:major] +"."+ (xml/'version').first[:minor] end def api_version?(major) api_version.split('.')[0] == major end - def cluster_version?(cluster_id, major) - c = cluster(cluster_id) - c.version.split('.')[0] == major - end - - def create_vm(opts) - opts[:cluster_name] ||= clusters.first.name - result_xml = http_post("/vms",OVIRT::VM.to_xml(opts)) - OVIRT::VM::new(self, result_xml.root) - end - - def update_vm(opts) - opts[:cluster_name] ||= clusters.first.name - result_xml = http_put("/vms/%s" % opts[:id], OVIRT::VM.to_xml(opts)) - OVIRT::VM::new(self, result_xml.root) - end - - def add_volume(vm_id, opts={}) - storage_domain_id = opts[:storage_domain] || storagedomains.first.id - result_xml = http_post("/vms/%s/disks" % vm_id, OVIRT::Volume.to_xml(storage_domain_id, opts)) - end - - - def add_interface(vm_id, opts={}) - http_post("/vms/%s/nics" % vm_id, OVIRT::Interface.to_xml( opts)) - end - - def create_template(opts) - template = http_post("/templates", Template.to_xml(opts)) - OVIRT::Template::new(self, template.root) - end - - def destroy_template(id) - http_delete("/templates/%s" % id) - end - - def templates(opts={}) - search= opts[:search] || ("datacenter=%s" % current_datacenter.name) - http_get("/templates?search=%s" % CGI.escape(search)).xpath('/templates/template').collect do |t| - OVIRT::Template::new(self, t) - end.compact - end - - def template(template_id) - template = http_get("/templates/%s" % template_id) - OVIRT::Template::new(self, template.root) - end - - def datacenters(opts={}) - search = opts[:search] ||"" - datacenters = http_get("/datacenters?search=%s" % CGI.escape(search)) - datacenters.xpath('/data_centers/data_center').collect do |dc| - OVIRT::DataCenter::new(self, dc) - end - end - - def clusters(opts={}) - headers = {:accept => "application/xml; detail=datacenters"} - search= opts[:search] || ("datacenter=%s" % current_datacenter.name) - http_get("/clusters?search=%s" % CGI.escape(search), headers).xpath('/clusters/cluster').collect do |cl| - OVIRT::Cluster.new(self, cl) - end - end - - def cluster(cluster_id) - headers = {:accept => "application/xml; detail=datacenters"} - cluster_xml = http_get("/clusters/%s" % cluster_id, headers) - OVIRT::Cluster.new(self, cluster_xml.root) - end - - def networks(opts) - cluster_id = opts[:cluster_id] || current_cluster.id - http_get("/clusters/%s/networks" % cluster_id, http_headers).xpath('/networks/network').collect do |cl| - OVIRT::Network.new(self, cl) - end - end - + private def current_datacenter @current_datacenter ||= self.datacenter_id ? datacenter(self.datacenter_id) : datacenters.first end def current_cluster @current_cluster ||= self.cluster_id ? cluster(self.cluster_id) : clusters.first end - def datacenter(datacenter_id) - begin - datacenter = http_get("/datacenters/%s" % datacenter_id) - OVIRT::DataCenter::new(self, datacenter.root) - rescue - handle_fault $! - end - end - - def host(host_id, opts={}) - xml_response = http_get("/hosts/%s" % host_id) - OVIRT::Host::new(self, xml_response.root) - end - - def hosts(opts={}) - search= opts[:search] || ("datacenter=%s" % current_datacenter.name) - http_get("/hosts?search=%s" % CGI.escape(search)).xpath('/hosts/host').collect do |h| - OVIRT::Host::new(self, h) - end - end - - def storagedomain(sd_id) - sd = http_get("/storagedomains/%s" % sd_id) - OVIRT::StorageDomain::new(self, sd.root) - end - - def storagedomains(opts={}) - search= opts[:search] ||'' - http_get("/storagedomains?search=%s" % CGI.escape(search)).xpath('/storage_domains/storage_domain').collect do |sd| - OVIRT::StorageDomain::new(self, sd) - end - end - - private - def http_get(suburl, headers={}) begin Nokogiri::XML(RestClient::Resource.new(@api_entrypoint)[suburl].get(http_headers(headers))) rescue handle_fault $! @@ -285,9 +143,7 @@ def follow xml = Client::parse_response(OVIRT::client(@client.base_url)[@href].get(@client.auth_header)) object_class = ::OVIRT.const_get(xml.root.name.camelize) object_class.new(@client, (xml.root)) end - end - end \ No newline at end of file