# File lib/cloudmasterd/syncer.rb, line 95
  def sync_state
    current_state = {}
    Open3.popen3("func '*' call virt state") do |stdin, stdout, stderr|
      YAML.load(stdout.read).each do |host, machines|
        machines.each do |machine|
          name, state = machine.split(" ")
          current_state[name] = {:state => state, :cloud => host} unless name == "Domain-0"
        end
      end
    end

    # Sync up the state for all the machines
    Machine.find(:all).each do |machine|
      if current_state.has_key?(machine.name) then
        # We have a current state match for this machine
        machine.update_attributes(:cloud => current_state[machine.name][:cloud], :state => current_state[machine.name][:state])

        # Delete the key so we can determine unaccounted for machines
        current_state.delete(machine.name)
      else
        # Not good - the machine in the DB isn't locateable
        machine.update_attribute(:state, "missing")
      end
    end

    # We need to create an 'unknown' instance for all the remaining keys
    current_state.each do |name, machine|
      Machine.create :name => name, :email => "unknown", :cloud => machine[:cloud], :state => machine[:state]
    end
  end