67
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										67
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,67 +0,0 @@ | ||||
| # Structured Merge and Diff | ||||
|  | ||||
| This repo contains code which implements the Kubernetes "apply" operation. | ||||
|  | ||||
| ## What is the apply operation? | ||||
|  | ||||
| We model resources in a control plane as having multiple "managers". Each | ||||
| manager is typically trying to manage only one aspect of a resource. The goal is | ||||
| to make it easy for disparate managers to make the changes they need without | ||||
| messing up the things that other managers are doing. In this system, both humans | ||||
| and machines (aka "controllers") act as managers. | ||||
|  | ||||
| To do this, we explicitly track (using the fieldset data structure) which fields | ||||
| each manager is currently managing. | ||||
|  | ||||
| Now, there are two basic mechanisms by which one modifies an object. | ||||
|  | ||||
| PUT/PATCH: This is a write command that says: "Make the object look EXACTLY like | ||||
| X". | ||||
|  | ||||
| APPLY: This is a write command that says: "The fields I manage should now look | ||||
| exactly like this (but I don't care about other fields)". | ||||
|  | ||||
| For PUT/PATCH, we deduce which fields will be managed based on what is changing. | ||||
| For APPLY, the user is explicitly stating which fields they wish to manage (and | ||||
| therefore requesting deletion of any fields that they used to manage but stop | ||||
| mentioning). | ||||
|  | ||||
| Any time a manager begins managing some new field, that field is removed from | ||||
| all other managers. If the manager is using the APPLY command, we call these | ||||
| conflicts, and will not proceed unless the user passes the "force" option. This | ||||
| prevents accidentally setting fields which some other entity is managing. | ||||
|  | ||||
| PUT/PATCH always "force". They are mostly used by automated systems, which won't | ||||
| do anything productive with a new error type. | ||||
|  | ||||
| ## Components | ||||
|  | ||||
| The operation has a few building blocks: | ||||
|  | ||||
| * We define a targeted schema type in the schema package. (As a consequence of | ||||
|   being well-targeted, it's much simpler than e.g. OpenAPI.) | ||||
| * We define a "field set" data structure, in the fieldpath package. A field path | ||||
|   locates a field in an object, generally a "leaf" field for our purposes. A | ||||
|   field set is a group of such paths.  They can be stored efficiently in what | ||||
|   amounts to a Trie. | ||||
| * We define a "value" type which stores an arbitrary object. | ||||
| * We define a "typed" package which combines "value" and "schema". Now we can | ||||
|   validate that an object conforms to a schema, or compare two objects. | ||||
| * We define a "merge" package which uses all of the above concepts to implement | ||||
|   the "apply" operation. | ||||
| * We will extensively test this. | ||||
|  | ||||
| ## Community, discussion, contribution, and support | ||||
|  | ||||
| Learn how to engage with the Kubernetes community on the [community page](http://kubernetes.io/community/). | ||||
|  | ||||
| You can reach the maintainers of this project at: | ||||
|  | ||||
| - Slack: [#wg-api-expression](https://kubernetes.slack.com/messages/wg-api-expression) | ||||
| - [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-wg-api-expression) | ||||
|  | ||||
| ### Code of conduct | ||||
|  | ||||
| Participation in the Kubernetes community is governed by the [Kubernetes Code of Conduct](code-of-conduct.md). | ||||
|  | ||||
| [owners]: https://git.k8s.io/community/contributors/guide/owners.md | ||||
							
								
								
									
										13
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/go.mod
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/go.mod
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,13 +0,0 @@ | ||||
| module sigs.k8s.io/structured-merge-diff/v4 | ||||
|  | ||||
| require gopkg.in/yaml.v2 v2.2.1 | ||||
|  | ||||
| require ( | ||||
| 	github.com/google/gofuzz v1.0.0 | ||||
| 	github.com/json-iterator/go v1.1.6 | ||||
| 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect | ||||
| 	github.com/modern-go/reflect2 v1.0.1 // indirect | ||||
| 	github.com/stretchr/testify v1.3.0 // indirect | ||||
| ) | ||||
|  | ||||
| go 1.13 | ||||
		Reference in New Issue
	
	Block a user
	 Shengjing Zhu
					Shengjing Zhu