code: func (m *Internal) executeKeyringOpMgr(
  	mgr *serf.KeyManager,
  	args *structs.KeyringRequest,
  	reply *structs.KeyringResponses,
  	wan bool,
  	segment string) {
  	var serfResp *serf.KeyResponse
  	var err error
  
  	opts := &serf.KeyRequestOptions{RelayFactor: args.RelayFactor}
  	switch args.Operation {
  	case structs.KeyringList:
  		serfResp, err = mgr.ListKeysWithOptions(opts)
  	case structs.KeyringInstall:
  		serfResp, err = mgr.InstallKeyWithOptions(args.Key, opts)
  	case structs.KeyringUse:
  		serfResp, err = mgr.UseKeyWithOptions(args.Key, opts)
  	case structs.KeyringRemove:
  		serfResp, err = mgr.RemoveKeyWithOptions(args.Key, opts)
  	}
  
  	errStr := ""
  	if err != nil {
  		errStr = err.Error()
  	}
  
  	reply.Responses = append(reply.Responses, &structs.KeyringResponse{
  		WAN:        wan,
  		Datacenter: m.srv.config.Datacenter,
  		Segment:    segment,
  		Messages:   serfResp.Messages,
  		Keys:       serfResp.Keys,
  		NumNodes:   serfResp.NumNodes,
  		Error:      errStr,
  	})
  }
docs: // executeKeyringOpMgr executes the appropriate keyring-related function based on
  // the type of keyring operation in the request. It takes the KeyManager as an
  // argument, so it can handle any operation for either LAN or WAN pools.