class Fog::Compute::OpenNebula::Real
Public Class Methods
new(options={})
click to toggle source
# File lib/fog/opennebula/compute.rb, line 129 def initialize(options={}) require 'opennebula' @client = ::OpenNebula::Client.new("#{options[:opennebula_username]}:#{options[:opennebula_password]}", options[:opennebula_endpoint]) end
Public Instance Methods
client()
click to toggle source
# File lib/fog/opennebula/compute.rb, line 125 def client return @client end
get_vnc_console(server_id, console_type, onevm_object)
click to toggle source
# File lib/fog/opennebula/requests/compute/get_vnc_console.rb, line 28 def get_vnc_console(server_id, console_type, onevm_object) logger = Fog::Logger.new $conf = {"vnc_proxy_port" => "29876", "vnc_proxy_ipv6" => "", "vnc_proxy_support_wss" => "", "vnc_proxy_cert" => "", "vnc_proxy_key" => ""} $vnc = OpenNebulaVNC.new($conf, logger) ret = startvnc(onevm_object,$vnc) response = Excon::Response.new response.status = ret[0] response.body = ret[1] response end
image_pool(filter = { })
click to toggle source
# File lib/fog/opennebula/requests/compute/image_pool.rb, line 5 def image_pool(filter = { }) images = ::OpenNebula::ImagePool.new(client) if filter[:mine].nil? images.info! else images.info_mine! end # if filter[:mine].nil? if not filter[:id].nil? images.each do |i| if filter[:id] == i.id return [ i ] # return an array with only one element - found image end end end images end
list_groups(filter = {})
click to toggle source
# File lib/fog/opennebula/requests/compute/list_groups.rb, line 5 def list_groups(filter = {}) groups=[] grouppool = ::OpenNebula::GroupPool.new(client) grouppool.info # { # "GROUP"=>{ # "ID"=>"0", # "NAME"=>"oneadmin", # "USERS"=>{"ID"=>["0", "1"]}, # "DATASTORE_QUOTA"=>{}, # "NETWORK_QUOTA"=>{}, # "VM_QUOTA"=>{}, # "IMAGE_QUOTA"=>{} # } #} grouppool.each do |group| filter_missmatch = false unless (filter.empty?) filter.each do |k,v| if group["#{k.to_s.upcase}"] && group["#{k.to_s.upcase}"] != v.to_s filter_missmatch = true break end end next if filter_missmatch end groups << {:id => group["ID"], :name => group["NAME"]} end groups end
list_networks(filter = { })
click to toggle source
# File lib/fog/opennebula/requests/compute/list_networks.rb, line 8 def list_networks(filter = { }) networks=[] netpool = ::OpenNebula::VirtualNetworkPool.new(client) if filter[:id].nil? netpool.info!(-2,-1,-1) elsif filter[:id] filter[:id] = filter[:id].to_i if filter[:id].is_a?(String) netpool.info!(-2, filter[:id], filter[:id]) end # if filter[:id].nil? netpool.each do |network| if filter[:network] && filter[:network].is_a?(String) && !filter[:network].empty? next if network.to_hash["VNET"]["NAME"] != filter[:network] end if filter[:network_uname] && filter[:network_uname].is_a?(String) && !filter[:network_uname].empty? next if network.to_hash["VNET"]["UNAME"] != filter[:network_uname] end if filter[:network_uid] && filter[:network_uid].is_a?(String) && !filter[:network_uid].empty? next if network.to_hash["VNET"]["UID"] != filter[:network_uid] end networks << network_to_attributes(network.to_hash) end networks end
list_vms(filter={})
click to toggle source
# File lib/fog/opennebula/requests/compute/list_vms.rb, line 7 def list_vms(filter={}) vms=[] vmpool = ::OpenNebula::VirtualMachinePool.new(client) if filter[:id].nil? vmpool.info!(-2,-1,-1,-1) elsif filter[:id] filter[:id] = filter[:id].to_i if filter[:id].is_a?(String) vmpool.info!(-2, filter[:id], filter[:id], -1) end # filter[:id].nil? vmpool.each do |vm| one = vm.to_hash data = {} data["onevm_object"] = vm data["status"] = vm.state data["state"] = vm.lcm_state_str data["id"] = vm.id data["gid"] = vm.gid data["uuid"] = vm.id data["name"] = one["VM"]["NAME"] unless one["VM"]["NAME"].nil? data["user"] = one["VM"]["UNAME"] unless one["VM"]["UNAME"].nil? data["group"] = one["VM"]["GNAME"] unless one["VM"]["GNAME"].nil? unless ( one["VM"]["TEMPLATE"].nil? ) then data["cpu"] = one["VM"]["TEMPLATE"]["VCPU"] unless one["VM"]["TEMPLATE"]["VCPU"].nil? data["memory"] = one["VM"]["TEMPLATE"]["MEMORY"] unless one["VM"]["TEMPLATE"]["MEMORY"].nil? unless (one["VM"]["TEMPLATE"]["NIC"].nil?) then if one["VM"]["TEMPLATE"]["NIC"].is_a?(Array) data["ip"]=one["VM"]["TEMPLATE"]["NIC"][0]["IP"] data["mac"]=one["VM"]["TEMPLATE"]["NIC"][0]["MAC"] else data["ip"]=one["VM"]["TEMPLATE"]["NIC"]["IP"] unless one["VM"]["TEMPLATE"]["NIC"]["IP"].nil? data["mac"]=one["VM"]["TEMPLATE"]["NIC"]["MAC"] unless one["VM"]["TEMPLATE"]["NIC"]["MAC"].nil? end end # unless (one["VM"]["TEMPLATE"]["NIC"].nil?) then end # unless ( one["VM"]["TEMPLATE"].nil? ) then vms << data end # vmpool.each vms end
network_to_attributes(net)
click to toggle source
# File lib/fog/opennebula/requests/compute/list_networks.rb, line 33 def network_to_attributes(net) return if net.nil? h = { :id => net["VNET"]["ID"], :name => net["VNET"]["NAME"], :uid => net["VNET"]["UID"], :uname => net["VNET"]["UNAME"], :gid => net["VNET"]["GID"], } h[:description] = net["VNET"]["TEMPLATE"]["DESCRIPTION"] unless net["VNET"]["TEMPLATE"]["DESCRIPTION"].nil? h[:vlan] = net["VNET"]["VLAN_ID"] unless (net["VNET"]["VLAN_ID"].nil? || net["VNET"]["VLAN_ID"].empty?) return h end
startvnc(onevm_object, vnc)
click to toggle source
# File lib/fog/opennebula/requests/compute/get_vnc_console.rb, line 40 def startvnc(onevm_object, vnc) return vnc.proxy(onevm_object) end
template_pool(filter = { })
click to toggle source
# File lib/fog/opennebula/requests/compute/template_pool.rb, line 33 def template_pool(filter = { }) templates = ::OpenNebula::TemplatePool.new(client) if filter[:id].nil? templates.info!(-2,-1,-1) elsif filter[:id] filter[:id] = filter[:id].to_i if filter[:id].is_a?(String) templates.info!(-2, filter[:id], filter[:id]) end # if filter[:id].nil? templates = templates.map do |t| # filtering by name # done here, because OpenNebula:TemplatePool does not support something like .delete_if if filter[:name] && filter[:name].is_a?(String) && !filter[:name].empty? next if t.to_hash["VMTEMPLATE"]["NAME"] != filter[:name] end if filter[:uname] && filter[:uname].is_a?(String) && !filter[:uname].empty? next if t.to_hash["VMTEMPLATE"]["UNAME"] != filter[:uname] end if filter[:uid] && filter[:uid].is_a?(String) && !filter[:uid].empty? next if t.to_hash["VMTEMPLATE"]["UID"] != filter[:uid] end h = Hash[ :id => t.to_hash["VMTEMPLATE"]["ID"], :name => t.to_hash["VMTEMPLATE"]["NAME"], :content => t.template_str, :USER_VARIABLES => "" # Default if not set in template ] h.merge! t.to_hash["VMTEMPLATE"]["TEMPLATE"] # h["NIC"] has to be an array of nic objects nics = h["NIC"] unless h["NIC"].nil? h["NIC"] = [] # reset nics to a array if nics.is_a? Array nics.each do |n| if n["NETWORK_ID"] vnet = networks.get(n["NETWORK_ID"].to_s) elsif n["NETWORK"] vnet = networks.get_by_name(n["NETWORK"].to_s) else next end h["NIC"] << interfaces.new({ :vnet => vnet, :model => n["MODEL"] || "virtio" }) end elsif nics.is_a? Hash nics["model"] = "virtio" if nics["model"].nil? #nics["uuid"] = "0" if nics["uuid"].nil? # is it better is to remove this NIC? n = networks.get_by_filter({ :id => nics["NETWORK_ID"], :network => nics["NETWORK"], :network_uname => nics["NETWORK_UNAME"], :network_uid => nics["NETWORK_UID"] }) n.each do |i| h["NIC"] << interfaces.new({ :vnet => i }) end else # should i break? end # every key should be lowercase ret_hash = {} h.each_pair do |k,v| ret_hash.merge!({k.downcase => v}) end ret_hash end templates.delete nil raise Fog::Compute::OpenNebula::NotFound, "Flavor/Template not found" if templates.empty? templates end
vm_allocate(attr={ })
click to toggle source
# File lib/fog/opennebula/requests/compute/vm_allocate.rb, line 5 def vm_allocate(attr={ }) if(attr[:flavor].nil?) raise(ArgumentError.new("Attribute flavor is nil! #{attr.inspect}")) end if(attr[:name].nil? || attr[:name].empty?) raise(ArgumentError.new("Attribute name is nil or empty! #{attr.inspect}")) end xml = ::OpenNebula::VirtualMachine.build_xml vm = ::OpenNebula::VirtualMachine.new(xml, client) rc = vm.allocate(attr[:flavor].to_s + "\nNAME=\"" + attr[:name] + "\"") # irb(main):050:0> vm.allocate(s.flavor.to_s + "\nNAME=altest5") # => #<OpenNebula::Error:0x00000002a50760 @message="[VirtualMachineAllocate] User [42] : Not authorized to perform CREATE VM.", @errno=512> # irb(main):051:0> a = vm.allocate(s.flavor.to_s + "\nNAME=altest5") # => #<OpenNebula::Error:0x00000002ac0998 @message="[VirtualMachineAllocate] User [42] : Not authorized to perform CREATE VM.", @errno=512> # irb(main):052:0> a.class if(rc.is_a? ::OpenNebula::Error) raise(rc) end # -1 - do not change the owner vm.chown(-1,attr[:gid].to_i) unless attr[:gid].nil? # TODO # check if vm is created vmid.class == One error class vm.info! one = vm.to_hash data = {} data["onevm_object"] = vm data["status"] = vm.state data["state"] = vm.lcm_state_str data["id"] = vm.id data["uuid"] = vm.id data["gid"] = vm.gid data["name"] = one["VM"]["NAME"] unless one["VM"]["NAME"].nil? data["user"] = one["VM"]["UNAME"] unless one["VM"]["UNAME"].nil? data["group"] = one["VM"]["GNAME"] unless one["VM"]["GNAME"].nil? unless ( one["VM"]["TEMPLATE"].nil? ) then temp = one["VM"]["TEMPLATE"] data["cpu"] = temp["VCPU"] unless temp["VCPU"].nil? data["memory"] = temp["MEMORY"] unless temp["MEMORY"].nil? unless (temp["NIC"].nil?) then if one["VM"]["TEMPLATE"]["NIC"].is_a?(Array) data["mac"] = temp["NIC"][0]["MAC"] unless temp["NIC"][0]["MAC"].nil? data["ip"] = temp["NIC"][0]["IP"] unless temp["NIC"][0]["IP"].nil? else data["mac"] = temp["NIC"]["MAC"] unless temp["NIC"]["MAC"].nil? data["ip"] = temp["NIC"]["IP"] unless temp["NIC"]["IP"].nil? end end end data rescue => err raise(err) end
vm_destroy(id)
click to toggle source
# File lib/fog/opennebula/requests/compute/vm_destroy.rb, line 5 def vm_destroy(id) vmpool = ::OpenNebula::VirtualMachinePool.new(client) vmpool.info!(-2,id,id,-1) vmpool.each do |vm| # true => delete and recreate vm vm.delete(false) end end
vm_disk_snapshot(id, disk_id, image_name)
click to toggle source
# File lib/fog/opennebula/requests/compute/vm_disk_snapshot.rb, line 6 def vm_disk_snapshot(id, disk_id, image_name) vmpool = ::OpenNebula::VirtualMachinePool.new(client) vmpool.info!(-2,id,id,-1) rc = 0 vmpool.each do |vm| rc = vm.disk_snapshot_create(disk_id, image_name) if(rc.is_a? ::OpenNebula::Error) raise(rc) end end rc end
vm_resume(id)
click to toggle source
# File lib/fog/opennebula/requests/compute/vm_resume.rb, line 5 def vm_resume(id) vmpool = ::OpenNebula::VirtualMachinePool.new(client) vmpool.info!(-2,id,id,-1) vmpool.each do |vm| vm.resume end end
vm_shutdown(id)
click to toggle source
# File lib/fog/opennebula/requests/compute/vm_shutdown.rb, line 6 def vm_shutdown(id) vmpool = ::OpenNebula::VirtualMachinePool.new(client) vmpool.info!(-2,id,id,-1) vmpool.each do |vm| vm.shutdown end end
vm_stop(id)
click to toggle source
# File lib/fog/opennebula/requests/compute/vm_stop.rb, line 5 def vm_stop(id) vmpool = ::OpenNebula::VirtualMachinePool.new(client) vmpool.info!(-2,id,id,-1) vmpool.each do |vm| vm.stop end end
vm_suspend(id)
click to toggle source
# File lib/fog/opennebula/requests/compute/vm_suspend.rb, line 5 def vm_suspend(id) vmpool = ::OpenNebula::VirtualMachinePool.new(client) vmpool.info!(-2,id,id,-1) vmpool.each do |vm| vm.suspend end end