code: func (s *HTTPServer) OperatorRaftPeer(resp http.ResponseWriter, req *http.Request) (interface{}, error) {
  	var args structs.RaftRemovePeerRequest
  	s.parseDC(req, &args.Datacenter)
  	s.parseToken(req, &args.Token)
  
  	params := req.URL.Query()
  	_, hasID := params["id"]
  	if hasID {
  		args.ID = raft.ServerID(params.Get("id"))
  	}
  	_, hasAddress := params["address"]
  	if hasAddress {
  		args.Address = raft.ServerAddress(params.Get("address"))
  	}
  
  	if !hasID && !hasAddress {
  		resp.WriteHeader(http.StatusBadRequest)
  		fmt.Fprint(resp, "Must specify either ?id with the server's ID or ?address with IP:port of peer to remove")
  		return nil, nil
  	}
  	if hasID && hasAddress {
  		resp.WriteHeader(http.StatusBadRequest)
  		fmt.Fprint(resp, "Must specify only one of ?id or ?address")
  		return nil, nil
  	}
  
  	var reply struct{}
  	method := "Operator.RaftRemovePeerByID"
  	if hasAddress {
  		method = "Operator.RaftRemovePeerByAddress"
  	}
  	if err := s.agent.RPC(method, &args, &reply); err != nil {
  		return nil, err
  	}
  
  	return nil, nil
  }
docs: // OperatorRaftPeer supports actions on Raft peers. Currently we only support
  // removing peers by address.