code: func (fw *Framework) FederationMiddlewareServers() (servers []srvcache.Server, err error) {
  	configured := fw.Config.Choria.FederationMiddlewareHosts
  	if len(configured) > 0 {
  		s, err := srvcache.StringHostsToServers(configured, "nats")
  		if err != nil {
  			return servers, fmt.Errorf("Could not parse configured Federation Middleware: %s", err)
  		}
  
  		for _, server := range s {
  			servers = append(servers, server)
  		}
  	}
  
  	if len(servers) == 0 {
  		if servers, err = fw.QuerySrvRecords([]string{"_mcollective-federation_server._tcp", "_x-puppet-mcollective_federation._tcp"}); err != nil {
  			return servers, fmt.Errorf("Could not resolve Federation Middleware Server SRV records: %s", err)
  		}
  	}
  
  	for i, s := range servers {
  		s.Scheme = "nats"
  		servers[i] = s
  	}
  
  	return
  }
docs: // FederationMiddlewareServers determines the correct Federation Middleware Servers
  //
  // It does this by:
  //
  //    * looking for choria.federation_middleware_hosts configuration
  //	  * Doing SRV lookups of  _mcollective-federation_server._tcp and _x-puppet-mcollective_federation._tcp