code: func New(
  	ctx context.Context,
  	domain string,
  	ttl time.Duration,
  	config *etcd.Config) (mwtypes.VolumeLockerProvider, error) {
  
  	fields := map[string]interface{}{}
  
  	if domain == "" {
  		domain = csictx.Getenv(ctx, EnvVarDomain)
  	}
  	domain = path.Join("/", domain)
  	fields["serialvol.etcd.domain"] = domain
  
  	if ttl == 0 {
  		ttl, _ = time.ParseDuration(csictx.Getenv(ctx, EnvVarTTL))
  		if ttl > 0 {
  			fields["serialvol.etcd.ttl"] = ttl
  		}
  	}
  
  	if config == nil {
  		cfg, err := initConfig(ctx, fields)
  		if err != nil {
  			return nil, err
  		}
  		config = &cfg
  	}
  
  	log.WithFields(fields).Info("creating serial vol etcd lock provider")
  
  	client, err := etcd.New(*config)
  	if err != nil {
  		return nil, err
  	}
  
  	return &provider{
  		client: client,
  		domain: domain,
  		ttl:    int(ttl.Seconds()),
  	}, nil
  }
docs: // New returns a new etcd volume lock provider.