code: func (s *store) Create(ctx context.Context, key string, obj, out runtime.Object, ttl uint64) error {
  	if version, err := s.versioner.ObjectResourceVersion(obj); err == nil && version != 0 {
  		return errors.New("resourceVersion should not be set on objects to be created")
  	}
  	if err := s.versioner.PrepareObjectForStorage(obj); err != nil {
  		return fmt.Errorf("PrepareObjectForStorage failed: %v", err)
  	}
  	data, err := runtime.Encode(s.codec, obj)
  	if err != nil {
  		return err
  	}
  	key = path.Join(s.pathPrefix, key)
  
  	opts, err := s.ttlOpts(ctx, int64(ttl))
  	if err != nil {
  		return err
  	}
  
  	newData, err := s.transformer.TransformToStorage(data, authenticatedDataString(key))
  	if err != nil {
  		return storage.NewInternalError(err.Error())
  	}
  
  	startTime := time.Now()
  	txnResp, err := s.client.KV.Txn(ctx).If(
  		notFound(key),
  	).Then(
  		clientv3.OpPut(key, string(newData), opts...),
  	).Commit()
  	metrics.RecordEtcdRequestLatency("create", getTypeName(obj), startTime)
  	if err != nil {
  		return err
  	}
  	if !txnResp.Succeeded {
  		return storage.NewKeyExistsError(key, 0)
  	}
  
  	if out != nil {
  		putResp := txnResp.Responses[0].GetResponsePut()
  		return decode(s.codec, s.versioner, data, out, putResp.Header.Revision)
  	}
  	return nil
  }
docs: // Create implements storage.Interface.Create.