Commit Graph

8 Commits (0ac651bfc39f29b2301bd85ab3bfe277cf323100)

Author SHA1 Message Date
Kubernetes Prow Robot c65198ffb0
Merge pull request #61468 from tianshapjq/remove-consts-element.go
clean code
2019-02-01 14:31:30 -08:00
Kubernetes Submit Queue f165ad7cd2
Merge pull request #60947 from fanzhangio/replace
Automatic merge from submit-queue (batch tested with PRs 60990, 60947, 45275, 60565, 61091). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>.

Add conflict detection feature to apply strategy

- Add DetectConflictor interface on Element level. Implemented it for particular elements.
- If Options.FailOnConflict is enabled, Merge will detect conflict by invoking doConflictDecect for particular element,
  returning ConflictError with details.
- Add tests, including use case examples and illustration. For example: list, map, and complicated combination.

**What this PR does / why we need it**:
Apply is being rewritten under pkg/kubectl/apply/strategy based on visitor pattern. The new merge and replace code should check for conflicts between the recorded value and the remote value, and optionally return an error if they do not match with the field and details. A conflict is if the same field is specified in BOTH the recorded and the remote values of an object, but does not match.

**Which issue(s) this PR fixes**:
Fixes #60945 
https://github.com/kubernetes/kubectl/issues/97

**Release note**:

```release-note
NONE
```
2018-03-30 11:53:07 -07:00
fanzhangio 0299a2403f Add conflict detection feature to apply strategy
- Add DetectConflictor interface on Element level. Implemented it for particular elements.
- If Options.FailOnConflict is enabled, Merge will detect conflict by invoking doConflictDecect for particular element,
  returning ConflictError with details.
- Add tests, including use case examples and illustration. For example: list, map, and complicated combination.
2018-03-23 01:56:20 -07:00
tianshapjq 112c76488d clean code 2018-03-21 16:41:40 +08:00
Yongkun Anfernee Gui 0ce78700ae Fix comments and some small fixes 2018-03-20 15:59:23 -07:00
Phillip Wittrock 1fef312102 Small refactorings for kubectl/apply merge packages
- move strings into constants
- remove unnecessary interface
- fix documentation
- improve error messaging
2017-11-01 13:10:13 -07:00
Phillip Wittrock 32e16d09b3 Address PR comments 2017-10-02 14:39:07 -07:00
Phillip Wittrock df5fc7a2df Beginning of rewrite apply merge-logic using visitor pattern.
Major changes:
- Don't generate a patch, instead generate the merged object so it can be used with PUT
- Separate tree parsing logic to collate items in a list from the delete / merge / replace / add logic when merging
- Use openapi for merge strategy metadata so it works with extensions and version skew
- Support multi-field mergekeys when merging lists
- Support replace strategy for maps
- Reduce complexity of generating order when merging lists - keep the locally defined order and append remote only-items

Continue to support:
- Explicitly setting fields to null
- Merging lists of primitives
- Don't randomize ordering when merging lists

TODO:
- Retain keys
- Conflict detection
2017-10-02 14:37:32 -07:00