add_interface(vm_id, opts={})
click to toggle source
def add_interface(vm_id, opts={})
http_post("/vms/%s/nics" % vm_id, OVIRT::Interface.to_xml( opts))
end
add_volume(vm_id, opts={})
click to toggle source
def add_volume(vm_id, opts={})
search = opts[:search] || ("datacenter=%s" % current_datacenter.name)
storage_domain_id = opts[:storage_domain] || storagedomains(:role => 'data', :search => search).first.id
http_post("/vms/%s/disks" % vm_id, OVIRT::Volume.to_xml(storage_domain_id, opts))
end
api_version()
click to toggle source
def api_version
return @api_version unless @api_version.nil?
xml = http_get("/")/'/api/product_info/version'
@api_version = (xml/'version').first[:major] +"."+ (xml/'version').first[:minor]
end
api_version?(major, minor=nil)
click to toggle source
def api_version?(major, minor=nil)
(api_version.split('.')[0] == major) && (minor.nil? ? true : api_version.split('.')[1] == minor)
end
cluster(cluster_id)
click to toggle source
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
cluster_version(cluster_id)
click to toggle source
def cluster_version(cluster_id)
c = cluster(cluster_id)
return c.version.split('.')[0].to_i, c.version.split('.')[1].to_i
end
cluster_version?(cluster_id, major)
click to toggle source
def cluster_version?(cluster_id, major)
c = cluster(cluster_id)
c.version.split('.')[0] == major
end
clusters(opts={})
click to toggle source
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|
cluster = OVIRT::Cluster.new(self, cl)
cluster if cluster.datacenter.id == current_datacenter.id
end.compact
end
create_template(opts)
click to toggle source
def create_template(opts)
template = http_post("/templates", Template.to_xml(opts))
OVIRT::Template::new(self, template.root)
end
create_vm(opts)
click to toggle source
def create_vm(opts)
cluster_major_ver, cluster_minor_ver = cluster_version(self.cluster_id)
if opts[:user_data] and not opts[:user_data].empty?
if api_version?('3') and cluster_major_ver >= 3
if cluster_minor_ver >= 1
opts[:user_data_method] = :payload
elsif floppy_hook?
opts[:user_data_method] = :custom_property
else
raise "Required VDSM hook 'floppyinject' not supported by RHEV-M"
end
else
raise BackendVersionUnsupportedException.new
end
end
opts[:cluster_name] ||= clusters.first.name
OVIRT::VM::new(self, http_post("/vms",OVIRT::VM.to_xml(opts)).root)
end
datacenter(datacenter_id)
click to toggle source
def datacenter(datacenter_id)
begin
datacenter = http_get("/datacenters/%s" % datacenter_id)
OVIRT::DataCenter::new(self, datacenter.root)
rescue
handle_fault $!
end
end
datacenters(opts={})
click to toggle source
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
destroy_interface(vm_id, interface_id)
click to toggle source
def destroy_interface(vm_id, interface_id)
http_delete("/vms/%s/nics/%s" % [vm_id, interface_id])
end
destroy_template(id)
click to toggle source
def destroy_template(id)
http_delete("/templates/%s" % id)
end
destroy_vm(id)
click to toggle source
def destroy_vm(id)
http_delete("/vms/%s" % id)
end
destroy_volume(vm_id, vol_id)
click to toggle source
def destroy_volume(vm_id, vol_id)
http_delete("/vms/%s/disks/%s" % [vm_id, vol_id])
end
floppy_hook?()
click to toggle source
def floppy_hook?
xml = http_get("/capabilities")
!(xml/"version/custom_properties/custom_property[@name='floppyinject']").empty?
end
host(host_id, opts={})
click to toggle source
def host(host_id, opts={})
xml_response = http_get("/hosts/%s" % host_id)
OVIRT::Host::new(self, xml_response.root)
end
hosts(opts={})
click to toggle source
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
networks(opts)
click to toggle source
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
set_ticket(vm_id, options={})
click to toggle source
def set_ticket(vm_id, options={})
ticket = OVIRT::VM.ticket(options)
xml_response = http_post("/vms/%s/ticket" % vm_id, ticket)
(xml_response/'action/ticket/value').first.text
end
storagedomain(sd_id)
click to toggle source
def storagedomain(sd_id)
sd = http_get("/storagedomains/%s" % sd_id)
OVIRT::StorageDomain::new(self, sd.root)
end
storagedomains(opts={})
click to toggle source
def storagedomains(opts={})
search= opts[:search] || ("datacenter=%s" % current_datacenter.name)
http_get("/storagedomains?search=%s" % CGI.escape(search)).xpath('/storage_domains/storage_domain').collect do |sd|
storage_domain = OVIRT::StorageDomain::new(self, sd)
(opts[:role].nil? || storage_domain.role == opts[:role]) ? storage_domain : nil
end.compact
end
template(template_id, opts={})
click to toggle source
def template(template_id, opts={})
results = http_get("/templates/%s" % template_id)
template = OVIRT::Template::new(self, results.root)
template
end
template_interfaces(template_id)
click to toggle source
def template_interfaces template_id
http_get("/templates/%s/nics" % template_id, http_headers).xpath('/nics/nic').collect do |nic|
OVIRT::Interface::new(self, nic)
end
end
template_volumes(template_id)
click to toggle source
def template_volumes template_id
http_get("/templates/%s/disks" % template_id, http_headers).xpath('/disks/disk').collect do |disk|
OVIRT::Volume::new(self, disk)
end
end
templates(opts={})
click to toggle source
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
update_interface(vm_id, interface_id, opts={})
click to toggle source
def update_interface(vm_id, interface_id, opts={})
http_put("/vms/%s/nics/%s" % [vm_id, interface_id], OVIRT::Interface.to_xml( opts))
end
update_vm(opts)
click to toggle source
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
vm(vm_id, opts={})
click to toggle source
def vm(vm_id, opts={})
headers = {:accept => "application/xml; detail=disks; detail=nics; detail=hosts"}
OVIRT::VM::new(self, http_get("/vms/%s" % vm_id, headers).root)
end
vm_action(id, action, opts={})
click to toggle source
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
vm_interfaces(vm_id)
click to toggle source
def vm_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
vm_volumes(vm_id)
click to toggle source
def vm_volumes vm_id
volumes = http_get("/vms/%s/disks" % vm_id, http_headers).xpath('/disks/disk').collect do |disk|
OVIRT::Volume::new(self, disk)
end
volumes.sort{ |l, r| l.name <=> r.name }
end
vms(opts={})
click to toggle source
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