code: func (cfg *Config) CheckAndSetDefaults() error {
  	if cfg.ID == "" {
  		return trace.BadParameter("missing parameter ID")
  	}
  	if cfg.ClusterName == "" {
  		return trace.BadParameter("missing parameter ClusterName")
  	}
  	if cfg.ClientTLS == nil {
  		return trace.BadParameter("missing parameter ClientTLS")
  	}
  	if cfg.Listener == nil {
  		return trace.BadParameter("missing parameter Listener")
  	}
  	if cfg.DataDir == "" {
  		return trace.BadParameter("missing parameter DataDir")
  	}
  	if cfg.Context == nil {
  		cfg.Context = context.TODO()
  	}
  	if cfg.PollingPeriod == 0 {
  		cfg.PollingPeriod = defaults.HighResPollingPeriod
  	}
  	if cfg.Limiter == nil {
  		var err error
  		cfg.Limiter, err = limiter.NewLimiter(limiter.LimiterConfig{})
  		if err != nil {
  			return trace.Wrap(err)
  		}
  	}
  	if cfg.Clock == nil {
  		cfg.Clock = clockwork.NewRealClock()
  	}
  	if cfg.Component == "" {
  		cfg.Component = teleport.Component(teleport.ComponentProxy, teleport.ComponentServer)
  	}
  	return nil
  }
docs: // CheckAndSetDefaults checks parameters and sets default values