def sync_state
current_state = {}
Open3.popen3("func '*' call virt state") do |stdin, stdout, stderr|
YAML.load(stdout.read).each do |host, machines|
next unless machines[0] =~ /running/
machines.each do |machine|
name, state = machine.split(" ")
current_state[name] = {:state => state, :cloud => host} unless name == "Domain-0"
end
end
end
Machine.find(:all).each do |machine|
if current_state.has_key?(machine.name) then
machine.update_attributes(:cloud => current_state[machine.name][:cloud], :state => current_state[machine.name][:state])
current_state.delete(machine.name)
else
machine.update_attribute(:state, "missing")
end
end
current_state.each do |name, machine|
Machine.create :name => name, :email => "unknown", :cloud => machine[:cloud], :state => machine[:state]
end
end