Skip to content
This repository has been archived by the owner on Dec 7, 2022. It is now read-only.

Commit

Permalink
Make the url configurable
Browse files Browse the repository at this point in the history
Prevent doing name lookups on non existing domains that would log to syslog
  • Loading branch information
ripienaar committed Aug 22, 2011
1 parent 3334caf commit 17c8a3c
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 13 deletions.
1 change: 0 additions & 1 deletion agent/libvirt/README.md
Expand Up @@ -68,7 +68,6 @@ Other available actions are:
Todo?
====

* Make the hypervisor URL configurable, atm only QEMU and only unauthenticated
* Expose more hypervisor information like device lists, network lists, storage lists etc
* Allow for creation using provided XML
* More stats so that full feature auto provisioning can be built
Expand Down
39 changes: 29 additions & 10 deletions agent/libvirt/agent/libvirt.rb
Expand Up @@ -35,9 +35,7 @@ class Libvirt<RPC::Agent
rescue Exception => e
reply.fail! "Could not load hvm info: %s: %s" % [request[:domain], e]
ensure
# http://web.archiveorange.com/archive/v/8XiUWgenYUvT8J107dnM
nodeinfo = nil
GC.start
close(conn)
end
end
Expand All @@ -48,6 +46,8 @@ class Libvirt<RPC::Agent
conn = connect

begin
has_domain?(request[:domain], conn)

domain = conn.lookup_domain_by_name(request[:domain])
info = domain.info

Expand All @@ -64,7 +64,6 @@ class Libvirt<RPC::Agent
ensure
domain = nil
info = nil
GC.start

close(conn)
end
Expand All @@ -76,13 +75,14 @@ class Libvirt<RPC::Agent
conn = connect

begin
has_domain?(request[:domain], conn)

domain = conn.lookup_domain_by_name(request[:domain])
reply[:xml] = domain.xml_desc
rescue Exception => e
reply.fail! "Could not load domain %s: %s" % [request[:domain], e]
ensure
domain = nil
GC.start

close(conn)
end
Expand Down Expand Up @@ -111,7 +111,6 @@ class Libvirt<RPC::Agent
reply.fail! "Could not define domain %s: %s" % [request[:domain], e]
ensure
domain = nil
GC.start

close(conn)
end
Expand All @@ -122,6 +121,9 @@ class Libvirt<RPC::Agent

begin
conn = connect

has_domain?(request[:domain], conn)

domain = conn.lookup_domain_by_name(request[:domain])

if request[:destroy] && domain.active?
Expand All @@ -138,7 +140,6 @@ class Libvirt<RPC::Agent
reply.fail! "Could not undefine domain %s: %s" % [request[:domain], e]
ensure
domain = nil
GC.start

close(conn)
end
Expand All @@ -157,7 +158,9 @@ class Libvirt<RPC::Agent

private
def connect
conn = ::Libvirt::open('qemu:///system')
url = @config.pluginconf["libvirt.url"] || "qemu:///system"

conn = ::Libvirt::open(url)

raise "Could not connect to hypervisor" if conn.closed?

Expand All @@ -166,11 +169,27 @@ def connect

def close(conn)
if conn && !conn.closed?
Log.info("Closing connection")
# http://web.archiveorange.com/archive/v/8XiUWgenYUvT8J107dnM
GC.start
conn.close
end
end

def domains(conn)
domains = []
conn.list_domains.each do |domain|
domains << conn.lookup_domain_by_id(domain).name
end

domains << conn.list_defined_domains

domains.flatten.sort
end

def has_domain?(domain, conn)
raise "Unknown domain #{request[:domain]}" unless domains(conn).include?(request[:domain])
end

def virtstates
{0 => "No state",
1 => "Running",
Expand All @@ -185,6 +204,8 @@ def domain_action(name, action)
conn = connect

begin
has_domain?(request[:domain], conn)

domain = conn.lookup_domain_by_name(name)
domain.send(action.to_sym)

Expand All @@ -193,8 +214,6 @@ def domain_action(name, action)
reply.fail! "Could not #{action} domain %s : %s" % [request[:domain], e]
ensure
domain = nil
GC.start

close(conn)
end
end
Expand Down
8 changes: 6 additions & 2 deletions agent/libvirt/application/virt.rb
Expand Up @@ -60,9 +60,13 @@ def xml_command

def domains_command
virtclient.hvinfo.each do |r|
domains = r[:data][:active_domains] << r[:data][:inactive_domains]
if r[:statuscode] == 0
domains = r[:data][:active_domains] << r[:data][:inactive_domains]

puts "%30s: %s" % [r[:sender], domains.flatten.sort.join(", ")]
puts "%30s: %s" % [r[:sender], domains.flatten.sort.join(", ")]
else
puts "%30s: %s" % [r[:sender], r[:statusmsg]]
end
end

puts
Expand Down

0 comments on commit 17c8a3c

Please sign in to comment.