code: func (c *Client) UpsertNode(s services.Server) (*services.KeepAlive, error) {
  	if s.GetNamespace() == "" {
  		return nil, trace.BadParameter("missing node namespace")
  	}
  	protoServer, ok := s.(*services.ServerV2)
  	if !ok {
  		return nil, trace.BadParameter("unsupported client")
  	}
  	clt, err := c.grpc()
  	if err != nil {
  		return nil, trace.Wrap(err)
  	}
  	keepAlive, err := clt.UpsertNode(context.TODO(), protoServer)
  	if err != nil {
  		return nil, trail.FromGRPC(err)
  	}
  	return keepAlive, nil
  }
docs: // UpsertNode is used by SSH servers to reprt their presence
  // to the auth servers in form of hearbeat expiring after ttl period.