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