mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-10-31 18:28:13 +00:00 
			
		
		
		
	Merge pull request #38676 from caesarxuchao/sync-gc
Automatic merge from submit-queue (batch tested with PRs 38676, 41765, 42103, 41833, 41702) Add synchronous garbage collection Fix https://github.com/kubernetes/kubernetes/issues/29891. Split into five commits: 1. generated: don't need review 2. API: got reviewed in #38678, i addressed @lavalamp's comments there. 3. registry changes: @nikhiljindal could you help take a look? 4. gc changes: reviewed by @deads2k in #38679. It needs another pass. 5. tests: @lavalamp @deads2k could take a look? TODO: - [ ] Update doc. Note that the existing doc has been refactored in https://github.com/kubernetes/kubernetes.github.io/pull/2488. - [ ] add an admission controller to check if a user can set OwnerReference.BlockOwnerDeletion - [ ] https://github.com/kubernetes/kubernetes/pull/38676#discussion_r103277274 - [ ] split the unit tests garbagecollector_test.go according to the components tested. - [ ] try if it's practically safe to use the cached object status in attempToDeleteItem(), after synchronous GC feature is stable. (Also see https://github.com/kubernetes/kubernetes/pull/38676#discussion_r103056971) - [ ] add blockOwnerDeletion for rs adoption https://github.com/kubernetes/kubernetes/pull/38679#discussion_r93817284 - [ ] https://k8s-gubernator.appspot.com/build/kubernetes-jenkins/pr-logs/pull/38676/pull-kubernetes-e2e-gce-etcd3/20101/ (improve the log message) ```release-note Added foreground garbage collection: the owner object will not be deleted until all its dependents are deleted by the garbage collector. Please checkout the [user doc](https://kubernetes.io/docs/concepts/abstractions/controllers/garbage-collection/) for details. deleteOptions.orphanDependents is going to be deprecated in 1.7. Please use deleteOptions.propagationPolicy instead. ```
This commit is contained in:
		| @@ -1059,9 +1059,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -1456,9 +1463,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -1853,9 +1867,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -2250,9 +2271,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -2647,9 +2675,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -3180,9 +3215,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -4643,9 +4685,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -5040,9 +5089,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -5709,9 +5765,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -6242,9 +6305,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -6639,9 +6709,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -7673,9 +7750,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -8240,9 +8324,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -9196,9 +9287,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -15159,9 +15257,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -16781,9 +16886,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -17679,9 +17791,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -18610,9 +18729,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -19585,9 +19711,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -20118,9 +20251,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -20651,9 +20791,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -22084,9 +22231,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -23048,9 +23202,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -23581,9 +23742,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -24316,9 +24484,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -24849,9 +25024,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -25246,9 +25428,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -26120,9 +26309,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -26578,9 +26774,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -28632,9 +28835,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -29539,9 +29749,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -29904,9 +30121,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -30277,9 +30501,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -30658,9 +30889,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -32052,9 +32290,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -32417,9 +32662,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -32790,9 +33042,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -33171,9 +33430,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -34614,9 +34880,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -35104,12 +35377,16 @@ | |||||||
|       "type": "string" |       "type": "string" | ||||||
|      }, |      }, | ||||||
|      "orphanDependents": { |      "orphanDependents": { | ||||||
|       "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |       "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|       "type": "boolean" |       "type": "boolean" | ||||||
|      }, |      }, | ||||||
|      "preconditions": { |      "preconditions": { | ||||||
|       "description": "Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.", |       "description": "Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.", | ||||||
|       "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Preconditions" |       "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Preconditions" | ||||||
|  |      }, | ||||||
|  |      "propagationPolicy": { | ||||||
|  |       "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |       "type": "string" | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
| @@ -35278,6 +35555,10 @@ | |||||||
|       "description": "API version of the referent.", |       "description": "API version of the referent.", | ||||||
|       "type": "string" |       "type": "string" | ||||||
|      }, |      }, | ||||||
|  |      "blockOwnerDeletion": { | ||||||
|  |       "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", | ||||||
|  |       "type": "boolean" | ||||||
|  |      }, | ||||||
|      "controller": { |      "controller": { | ||||||
|       "description": "If true, this reference points to the managing controller.", |       "description": "If true, this reference points to the managing controller.", | ||||||
|       "type": "boolean" |       "type": "boolean" | ||||||
|   | |||||||
| @@ -521,7 +521,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -1171,6 +1179,10 @@ | |||||||
|      "controller": { |      "controller": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "If true, this reference points to the managing controller." |       "description": "If true, this reference points to the managing controller." | ||||||
|  |      }, | ||||||
|  |      "blockOwnerDeletion": { | ||||||
|  |       "type": "boolean", | ||||||
|  |       "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
| @@ -3286,7 +3298,11 @@ | |||||||
|      }, |      }, | ||||||
|      "orphanDependents": { |      "orphanDependents": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list." |       "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both." | ||||||
|  |      }, | ||||||
|  |      "propagationPolicy": { | ||||||
|  |       "$ref": "v1.DeletionPropagation", | ||||||
|  |       "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
| @@ -3304,6 +3320,10 @@ | |||||||
|     "id": "types.UID", |     "id": "types.UID", | ||||||
|     "properties": {} |     "properties": {} | ||||||
|    }, |    }, | ||||||
|  |    "v1.DeletionPropagation": { | ||||||
|  |     "id": "v1.DeletionPropagation", | ||||||
|  |     "properties": {} | ||||||
|  |    }, | ||||||
|    "v1.APIResourceList": { |    "v1.APIResourceList": { | ||||||
|     "id": "v1.APIResourceList", |     "id": "v1.APIResourceList", | ||||||
|     "description": "APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.", |     "description": "APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.", | ||||||
|   | |||||||
| @@ -209,6 +209,10 @@ | |||||||
|      "controller": { |      "controller": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "If true, this reference points to the managing controller." |       "description": "If true, this reference points to the managing controller." | ||||||
|  |      }, | ||||||
|  |      "blockOwnerDeletion": { | ||||||
|  |       "type": "boolean", | ||||||
|  |       "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
|   | |||||||
| @@ -209,6 +209,10 @@ | |||||||
|      "controller": { |      "controller": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "If true, this reference points to the managing controller." |       "description": "If true, this reference points to the managing controller." | ||||||
|  |      }, | ||||||
|  |      "blockOwnerDeletion": { | ||||||
|  |       "type": "boolean", | ||||||
|  |       "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
|   | |||||||
| @@ -307,6 +307,10 @@ | |||||||
|      "controller": { |      "controller": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "If true, this reference points to the managing controller." |       "description": "If true, this reference points to the managing controller." | ||||||
|  |      }, | ||||||
|  |      "blockOwnerDeletion": { | ||||||
|  |       "type": "boolean", | ||||||
|  |       "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
|   | |||||||
| @@ -307,6 +307,10 @@ | |||||||
|      "controller": { |      "controller": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "If true, this reference points to the managing controller." |       "description": "If true, this reference points to the managing controller." | ||||||
|  |      }, | ||||||
|  |      "blockOwnerDeletion": { | ||||||
|  |       "type": "boolean", | ||||||
|  |       "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
|   | |||||||
| @@ -521,7 +521,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -1174,6 +1182,10 @@ | |||||||
|      "controller": { |      "controller": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "If true, this reference points to the managing controller." |       "description": "If true, this reference points to the managing controller." | ||||||
|  |      }, | ||||||
|  |      "blockOwnerDeletion": { | ||||||
|  |       "type": "boolean", | ||||||
|  |       "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
| @@ -1392,7 +1404,11 @@ | |||||||
|      }, |      }, | ||||||
|      "orphanDependents": { |      "orphanDependents": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list." |       "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both." | ||||||
|  |      }, | ||||||
|  |      "propagationPolicy": { | ||||||
|  |       "$ref": "v1.DeletionPropagation", | ||||||
|  |       "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
| @@ -1410,6 +1426,10 @@ | |||||||
|     "id": "types.UID", |     "id": "types.UID", | ||||||
|     "properties": {} |     "properties": {} | ||||||
|    }, |    }, | ||||||
|  |    "v1.DeletionPropagation": { | ||||||
|  |     "id": "v1.DeletionPropagation", | ||||||
|  |     "properties": {} | ||||||
|  |    }, | ||||||
|    "v1.APIResourceList": { |    "v1.APIResourceList": { | ||||||
|     "id": "v1.APIResourceList", |     "id": "v1.APIResourceList", | ||||||
|     "description": "APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.", |     "description": "APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.", | ||||||
|   | |||||||
| @@ -521,7 +521,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -1174,6 +1182,10 @@ | |||||||
|      "controller": { |      "controller": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "If true, this reference points to the managing controller." |       "description": "If true, this reference points to the managing controller." | ||||||
|  |      }, | ||||||
|  |      "blockOwnerDeletion": { | ||||||
|  |       "type": "boolean", | ||||||
|  |       "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
| @@ -3262,7 +3274,11 @@ | |||||||
|      }, |      }, | ||||||
|      "orphanDependents": { |      "orphanDependents": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list." |       "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both." | ||||||
|  |      }, | ||||||
|  |      "propagationPolicy": { | ||||||
|  |       "$ref": "v1.DeletionPropagation", | ||||||
|  |       "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
| @@ -3280,6 +3296,10 @@ | |||||||
|     "id": "types.UID", |     "id": "types.UID", | ||||||
|     "properties": {} |     "properties": {} | ||||||
|    }, |    }, | ||||||
|  |    "v1.DeletionPropagation": { | ||||||
|  |     "id": "v1.DeletionPropagation", | ||||||
|  |     "properties": {} | ||||||
|  |    }, | ||||||
|    "v1.APIResourceList": { |    "v1.APIResourceList": { | ||||||
|     "id": "v1.APIResourceList", |     "id": "v1.APIResourceList", | ||||||
|     "description": "APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.", |     "description": "APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.", | ||||||
|   | |||||||
| @@ -465,7 +465,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -881,6 +889,10 @@ | |||||||
|      "controller": { |      "controller": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "If true, this reference points to the managing controller." |       "description": "If true, this reference points to the managing controller." | ||||||
|  |      }, | ||||||
|  |      "blockOwnerDeletion": { | ||||||
|  |       "type": "boolean", | ||||||
|  |       "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
| @@ -1097,7 +1109,11 @@ | |||||||
|      }, |      }, | ||||||
|      "orphanDependents": { |      "orphanDependents": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list." |       "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both." | ||||||
|  |      }, | ||||||
|  |      "propagationPolicy": { | ||||||
|  |       "$ref": "v1.DeletionPropagation", | ||||||
|  |       "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
| @@ -1115,6 +1131,10 @@ | |||||||
|     "id": "types.UID", |     "id": "types.UID", | ||||||
|     "properties": {} |     "properties": {} | ||||||
|    }, |    }, | ||||||
|  |    "v1.DeletionPropagation": { | ||||||
|  |     "id": "v1.DeletionPropagation", | ||||||
|  |     "properties": {} | ||||||
|  |    }, | ||||||
|    "v1.APIResourceList": { |    "v1.APIResourceList": { | ||||||
|     "id": "v1.APIResourceList", |     "id": "v1.APIResourceList", | ||||||
|     "description": "APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.", |     "description": "APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.", | ||||||
|   | |||||||
| @@ -521,7 +521,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -1491,7 +1499,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -2687,7 +2703,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -3657,7 +3681,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -4406,7 +4438,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -5037,7 +5077,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -6281,7 +6329,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -6595,6 +6651,10 @@ | |||||||
|      "controller": { |      "controller": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "If true, this reference points to the managing controller." |       "description": "If true, this reference points to the managing controller." | ||||||
|  |      }, | ||||||
|  |      "blockOwnerDeletion": { | ||||||
|  |       "type": "boolean", | ||||||
|  |       "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
| @@ -8683,7 +8743,11 @@ | |||||||
|      }, |      }, | ||||||
|      "orphanDependents": { |      "orphanDependents": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list." |       "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both." | ||||||
|  |      }, | ||||||
|  |      "propagationPolicy": { | ||||||
|  |       "$ref": "v1.DeletionPropagation", | ||||||
|  |       "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
| @@ -8701,6 +8765,10 @@ | |||||||
|     "id": "types.UID", |     "id": "types.UID", | ||||||
|     "properties": {} |     "properties": {} | ||||||
|    }, |    }, | ||||||
|  |    "v1.DeletionPropagation": { | ||||||
|  |     "id": "v1.DeletionPropagation", | ||||||
|  |     "properties": {} | ||||||
|  |    }, | ||||||
|    "v1beta1.DeploymentList": { |    "v1beta1.DeploymentList": { | ||||||
|     "id": "v1beta1.DeploymentList", |     "id": "v1beta1.DeploymentList", | ||||||
|     "description": "DeploymentList is a list of Deployments.", |     "description": "DeploymentList is a list of Deployments.", | ||||||
|   | |||||||
| @@ -521,7 +521,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -1171,6 +1179,10 @@ | |||||||
|      "controller": { |      "controller": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "If true, this reference points to the managing controller." |       "description": "If true, this reference points to the managing controller." | ||||||
|  |      }, | ||||||
|  |      "blockOwnerDeletion": { | ||||||
|  |       "type": "boolean", | ||||||
|  |       "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
| @@ -1402,7 +1414,11 @@ | |||||||
|      }, |      }, | ||||||
|      "orphanDependents": { |      "orphanDependents": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list." |       "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both." | ||||||
|  |      }, | ||||||
|  |      "propagationPolicy": { | ||||||
|  |       "$ref": "v1.DeletionPropagation", | ||||||
|  |       "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
| @@ -1420,6 +1436,10 @@ | |||||||
|     "id": "types.UID", |     "id": "types.UID", | ||||||
|     "properties": {} |     "properties": {} | ||||||
|    }, |    }, | ||||||
|  |    "v1.DeletionPropagation": { | ||||||
|  |     "id": "v1.DeletionPropagation", | ||||||
|  |     "properties": {} | ||||||
|  |    }, | ||||||
|    "v1.APIResourceList": { |    "v1.APIResourceList": { | ||||||
|     "id": "v1.APIResourceList", |     "id": "v1.APIResourceList", | ||||||
|     "description": "APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.", |     "description": "APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.", | ||||||
|   | |||||||
| @@ -449,7 +449,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -1008,7 +1016,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -1623,7 +1639,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -2412,7 +2436,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -2907,6 +2939,10 @@ | |||||||
|      "controller": { |      "controller": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "If true, this reference points to the managing controller." |       "description": "If true, this reference points to the managing controller." | ||||||
|  |      }, | ||||||
|  |      "blockOwnerDeletion": { | ||||||
|  |       "type": "boolean", | ||||||
|  |       "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
| @@ -3089,7 +3125,11 @@ | |||||||
|      }, |      }, | ||||||
|      "orphanDependents": { |      "orphanDependents": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list." |       "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both." | ||||||
|  |      }, | ||||||
|  |      "propagationPolicy": { | ||||||
|  |       "$ref": "v1.DeletionPropagation", | ||||||
|  |       "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
| @@ -3107,6 +3147,10 @@ | |||||||
|     "id": "types.UID", |     "id": "types.UID", | ||||||
|     "properties": {} |     "properties": {} | ||||||
|    }, |    }, | ||||||
|  |    "v1.DeletionPropagation": { | ||||||
|  |     "id": "v1.DeletionPropagation", | ||||||
|  |     "properties": {} | ||||||
|  |    }, | ||||||
|    "v1alpha1.ClusterRoleList": { |    "v1alpha1.ClusterRoleList": { | ||||||
|     "id": "v1alpha1.ClusterRoleList", |     "id": "v1alpha1.ClusterRoleList", | ||||||
|     "description": "ClusterRoleList is a collection of ClusterRoles", |     "description": "ClusterRoleList is a collection of ClusterRoles", | ||||||
|   | |||||||
| @@ -449,7 +449,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -1008,7 +1016,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -1623,7 +1639,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -2412,7 +2436,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -2907,6 +2939,10 @@ | |||||||
|      "controller": { |      "controller": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "If true, this reference points to the managing controller." |       "description": "If true, this reference points to the managing controller." | ||||||
|  |      }, | ||||||
|  |      "blockOwnerDeletion": { | ||||||
|  |       "type": "boolean", | ||||||
|  |       "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
| @@ -3089,7 +3125,11 @@ | |||||||
|      }, |      }, | ||||||
|      "orphanDependents": { |      "orphanDependents": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list." |       "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both." | ||||||
|  |      }, | ||||||
|  |      "propagationPolicy": { | ||||||
|  |       "$ref": "v1.DeletionPropagation", | ||||||
|  |       "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
| @@ -3107,6 +3147,10 @@ | |||||||
|     "id": "types.UID", |     "id": "types.UID", | ||||||
|     "properties": {} |     "properties": {} | ||||||
|    }, |    }, | ||||||
|  |    "v1.DeletionPropagation": { | ||||||
|  |     "id": "v1.DeletionPropagation", | ||||||
|  |     "properties": {} | ||||||
|  |    }, | ||||||
|    "v1beta1.ClusterRoleList": { |    "v1beta1.ClusterRoleList": { | ||||||
|     "id": "v1beta1.ClusterRoleList", |     "id": "v1beta1.ClusterRoleList", | ||||||
|     "description": "ClusterRoleList is a collection of ClusterRoles", |     "description": "ClusterRoleList is a collection of ClusterRoles", | ||||||
|   | |||||||
| @@ -465,7 +465,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -782,6 +790,10 @@ | |||||||
|      "controller": { |      "controller": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "If true, this reference points to the managing controller." |       "description": "If true, this reference points to the managing controller." | ||||||
|  |      }, | ||||||
|  |      "blockOwnerDeletion": { | ||||||
|  |       "type": "boolean", | ||||||
|  |       "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
| @@ -915,7 +927,11 @@ | |||||||
|      }, |      }, | ||||||
|      "orphanDependents": { |      "orphanDependents": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list." |       "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both." | ||||||
|  |      }, | ||||||
|  |      "propagationPolicy": { | ||||||
|  |       "$ref": "v1.DeletionPropagation", | ||||||
|  |       "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
| @@ -933,6 +949,10 @@ | |||||||
|     "id": "types.UID", |     "id": "types.UID", | ||||||
|     "properties": {} |     "properties": {} | ||||||
|    }, |    }, | ||||||
|  |    "v1.DeletionPropagation": { | ||||||
|  |     "id": "v1.DeletionPropagation", | ||||||
|  |     "properties": {} | ||||||
|  |    }, | ||||||
|    "v1.APIResourceList": { |    "v1.APIResourceList": { | ||||||
|     "id": "v1.APIResourceList", |     "id": "v1.APIResourceList", | ||||||
|     "description": "APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.", |     "description": "APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.", | ||||||
|   | |||||||
| @@ -698,7 +698,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -1503,7 +1511,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -2308,7 +2324,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -3113,7 +3137,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -3862,7 +3894,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -4631,7 +4671,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -6199,7 +6247,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -7113,7 +7169,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -7885,7 +7949,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -10481,7 +10553,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -11286,7 +11366,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -12421,7 +12509,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -13391,7 +13487,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -14196,7 +14300,15 @@ | |||||||
|         "type": "boolean", |         "type": "boolean", | ||||||
|         "paramType": "query", |         "paramType": "query", | ||||||
|         "name": "orphanDependents", |         "name": "orphanDependents", | ||||||
|         "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |         "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  |         "required": false, | ||||||
|  |         "allowMultiple": false | ||||||
|  |        }, | ||||||
|  |        { | ||||||
|  |         "type": "string", | ||||||
|  |         "paramType": "query", | ||||||
|  |         "name": "propagationPolicy", | ||||||
|  |         "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|         "required": false, |         "required": false, | ||||||
|         "allowMultiple": false |         "allowMultiple": false | ||||||
|        }, |        }, | ||||||
| @@ -16512,6 +16624,10 @@ | |||||||
|      "controller": { |      "controller": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "If true, this reference points to the managing controller." |       "description": "If true, this reference points to the managing controller." | ||||||
|  |      }, | ||||||
|  |      "blockOwnerDeletion": { | ||||||
|  |       "type": "boolean", | ||||||
|  |       "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
| @@ -16822,7 +16938,11 @@ | |||||||
|      }, |      }, | ||||||
|      "orphanDependents": { |      "orphanDependents": { | ||||||
|       "type": "boolean", |       "type": "boolean", | ||||||
|       "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list." |       "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both." | ||||||
|  |      }, | ||||||
|  |      "propagationPolicy": { | ||||||
|  |       "$ref": "v1.DeletionPropagation", | ||||||
|  |       "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both." | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
| @@ -16840,6 +16960,10 @@ | |||||||
|     "id": "types.UID", |     "id": "types.UID", | ||||||
|     "properties": {} |     "properties": {} | ||||||
|    }, |    }, | ||||||
|  |    "v1.DeletionPropagation": { | ||||||
|  |     "id": "v1.DeletionPropagation", | ||||||
|  |     "properties": {} | ||||||
|  |    }, | ||||||
|    "v1.EndpointsList": { |    "v1.EndpointsList": { | ||||||
|     "id": "v1.EndpointsList", |     "id": "v1.EndpointsList", | ||||||
|     "description": "EndpointsList is a list of endpoints.", |     "description": "EndpointsList is a list of endpoints.", | ||||||
|   | |||||||
| @@ -1351,6 +1351,10 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
|  | </div> | ||||||
|  | <div class="sect2"> | ||||||
|  | <h3 id="_v1_deletionpropagation">v1.DeletionPropagation</h3> | ||||||
|  | 
 | ||||||
| </div> | </div> | ||||||
| <div class="sect2"> | <div class="sect2"> | ||||||
| <h3 id="_v1_gcepersistentdiskvolumesource">v1.GCEPersistentDiskVolumeSource</h3> | <h3 id="_v1_gcepersistentdiskvolumesource">v1.GCEPersistentDiskVolumeSource</h3> | ||||||
| @@ -2413,6 +2417,13 @@ Populated by the system when a graceful deletion is requested. Read-only. More i | |||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| </tr> | </tr> | ||||||
|  | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">blockOwnerDeletion</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | </tr> | ||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| @@ -4020,11 +4031,18 @@ Populated by the system when a graceful deletion is requested. Read-only. More i | |||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| </tr> | </tr> | ||||||
|  | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_v1_deletionpropagation">v1.DeletionPropagation</a></p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| @@ -5451,7 +5469,7 @@ Examples:<br> | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-02-27 07:15:52 UTC | Last updated 2017-03-01 06:41:12 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -1187,12 +1187,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -2411,7 +2419,7 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-01-06 18:13:59 UTC | Last updated 2017-02-24 20:25:21 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -437,6 +437,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| </tr> | </tr> | ||||||
|  | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">blockOwnerDeletion</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | </tr> | ||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| @@ -914,7 +921,7 @@ Populated by the system when a graceful deletion is requested. Read-only. More i | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-02-07 05:41:02 UTC | Last updated 2017-02-23 09:26:13 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -492,6 +492,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| </tr> | </tr> | ||||||
|  | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">blockOwnerDeletion</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | </tr> | ||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| @@ -914,7 +921,7 @@ Populated by the system when a graceful deletion is requested. Read-only. More i | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-01-25 20:38:39 UTC | Last updated 2017-02-23 09:26:18 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -519,6 +519,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| </tr> | </tr> | ||||||
|  | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">blockOwnerDeletion</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | </tr> | ||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| @@ -1175,7 +1182,7 @@ Populated by the system when a graceful deletion is requested. Read-only. More i | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-02-02 02:26:17 UTC | Last updated 2017-02-23 09:26:23 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -443,6 +443,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| </tr> | </tr> | ||||||
|  | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">blockOwnerDeletion</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | </tr> | ||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| @@ -1175,7 +1182,7 @@ Populated by the system when a graceful deletion is requested. Read-only. More i | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-01-25 20:38:43 UTC | Last updated 2017-02-23 09:26:28 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -496,11 +496,18 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| </tr> | </tr> | ||||||
|  | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_v1_deletionpropagation">v1.DeletionPropagation</a></p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| @@ -1249,6 +1256,13 @@ Populated by the system when a graceful deletion is requested. Read-only. More i | |||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| </tr> | </tr> | ||||||
|  | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">blockOwnerDeletion</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | </tr> | ||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| @@ -1370,6 +1384,10 @@ Examples:<br> | |||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
|  | </div> | ||||||
|  | <div class="sect2"> | ||||||
|  | <h3 id="_v1_deletionpropagation">v1.DeletionPropagation</h3> | ||||||
|  | 
 | ||||||
| </div> | </div> | ||||||
| <div class="sect2"> | <div class="sect2"> | ||||||
| <h3 id="_any">any</h3> | <h3 id="_any">any</h3> | ||||||
| @@ -1382,7 +1400,7 @@ Examples:<br> | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-01-25 20:38:47 UTC | Last updated 2017-02-24 20:25:42 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -1336,12 +1336,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -2411,7 +2419,7 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-01-06 18:14:17 UTC | Last updated 2017-02-24 20:25:42 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -1248,6 +1248,10 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
|  | </div> | ||||||
|  | <div class="sect2"> | ||||||
|  | <h3 id="_v1_deletionpropagation">v1.DeletionPropagation</h3> | ||||||
|  | 
 | ||||||
| </div> | </div> | ||||||
| <div class="sect2"> | <div class="sect2"> | ||||||
| <h3 id="_v1_gcepersistentdiskvolumesource">v1.GCEPersistentDiskVolumeSource</h3> | <h3 id="_v1_gcepersistentdiskvolumesource">v1.GCEPersistentDiskVolumeSource</h3> | ||||||
| @@ -2317,6 +2321,13 @@ Populated by the system when a graceful deletion is requested. Read-only. More i | |||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| </tr> | </tr> | ||||||
|  | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">blockOwnerDeletion</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | </tr> | ||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| @@ -4065,11 +4076,18 @@ Populated by the system when a graceful deletion is requested. Read-only. More i | |||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| </tr> | </tr> | ||||||
|  | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_v1_deletionpropagation">v1.DeletionPropagation</a></p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| @@ -5376,7 +5394,7 @@ Examples:<br> | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-02-27 07:16:35 UTC | Last updated 2017-03-01 06:41:44 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -1336,12 +1336,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -2411,7 +2419,7 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-01-06 18:14:24 UTC | Last updated 2017-02-24 20:25:51 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -496,11 +496,18 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| </tr> | </tr> | ||||||
|  | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_v1_deletionpropagation">v1.DeletionPropagation</a></p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| @@ -1151,6 +1158,13 @@ Populated by the system when a graceful deletion is requested. Read-only. More i | |||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| </tr> | </tr> | ||||||
|  | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">blockOwnerDeletion</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | </tr> | ||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| @@ -1328,6 +1342,10 @@ Examples:<br> | |||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
|  | </div> | ||||||
|  | <div class="sect2"> | ||||||
|  | <h3 id="_v1_deletionpropagation">v1.DeletionPropagation</h3> | ||||||
|  | 
 | ||||||
| </div> | </div> | ||||||
| <div class="sect2"> | <div class="sect2"> | ||||||
| <h3 id="_v1beta1_certificatesigningrequeststatus">v1beta1.CertificateSigningRequestStatus</h3> | <h3 id="_v1beta1_certificatesigningrequeststatus">v1beta1.CertificateSigningRequestStatus</h3> | ||||||
| @@ -1378,7 +1396,7 @@ Examples:<br> | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-02-20 18:28:59 UTC | Last updated 2017-02-24 20:26:00 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -1147,12 +1147,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">name of the CertificateSigningRequest</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">name of the CertificateSigningRequest</p></td> | ||||||
| @@ -1900,7 +1908,7 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-01-12 20:13:16 UTC | Last updated 2017-02-24 20:26:00 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -3478,11 +3478,18 @@ Populated by the system when a graceful deletion is requested. Read-only. More i | |||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| </tr> | </tr> | ||||||
|  | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_v1_deletionpropagation">v1.DeletionPropagation</a></p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| @@ -5583,6 +5590,10 @@ Examples:<br> | |||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
|  | </div> | ||||||
|  | <div class="sect2"> | ||||||
|  | <h3 id="_v1_deletionpropagation">v1.DeletionPropagation</h3> | ||||||
|  | 
 | ||||||
| </div> | </div> | ||||||
| <div class="sect2"> | <div class="sect2"> | ||||||
| <h3 id="_v1_tcpsocketaction">v1.TCPSocketAction</h3> | <h3 id="_v1_tcpsocketaction">v1.TCPSocketAction</h3> | ||||||
| @@ -6231,6 +6242,13 @@ Both these may change in the future. Incoming requests are matched against the h | |||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| </tr> | </tr> | ||||||
|  | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">blockOwnerDeletion</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | </tr> | ||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| @@ -7781,7 +7799,7 @@ Both these may change in the future. Incoming requests are matched against the h | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-02-27 20:18:57 UTC | Last updated 2017-03-01 06:41:57 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -1634,12 +1634,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -2978,12 +2986,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -4828,12 +4844,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -6172,12 +6196,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -7137,12 +7169,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -9348,12 +9388,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">name of the PodSecurityPolicy</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">name of the PodSecurityPolicy</p></td> | ||||||
| @@ -10406,12 +10454,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">name of the ThirdPartyResource</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">name of the ThirdPartyResource</p></td> | ||||||
| @@ -13582,7 +13638,7 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-01-18 12:27:30 UTC | Last updated 2017-02-24 20:26:05 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -558,11 +558,18 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| </tr> | </tr> | ||||||
|  | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_v1_deletionpropagation">v1.DeletionPropagation</a></p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| @@ -1194,6 +1201,13 @@ Populated by the system when a graceful deletion is requested. Read-only. More i | |||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| </tr> | </tr> | ||||||
|  | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">blockOwnerDeletion</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | </tr> | ||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| @@ -1363,6 +1377,10 @@ Examples:<br> | |||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
|  | </div> | ||||||
|  | <div class="sect2"> | ||||||
|  | <h3 id="_v1_deletionpropagation">v1.DeletionPropagation</h3> | ||||||
|  | 
 | ||||||
| </div> | </div> | ||||||
| <div class="sect2"> | <div class="sect2"> | ||||||
| <h3 id="_v1beta1_poddisruptionbudgetspec">v1beta1.PodDisruptionBudgetSpec</h3> | <h3 id="_v1beta1_poddisruptionbudgetspec">v1beta1.PodDisruptionBudgetSpec</h3> | ||||||
| @@ -1416,7 +1434,7 @@ Examples:<br> | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-01-25 20:39:08 UTC | Last updated 2017-02-24 20:26:10 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -1187,12 +1187,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -2411,7 +2419,7 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-01-06 18:14:50 UTC | Last updated 2017-02-24 20:26:10 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1131,12 +1131,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">name of the ClusterRoleBinding</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">name of the ClusterRoleBinding</p></td> | ||||||
| @@ -2024,12 +2032,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">name of the ClusterRole</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">name of the ClusterRole</p></td> | ||||||
| @@ -2957,12 +2973,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -3906,12 +3930,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -5983,7 +6015,7 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-01-06 18:14:57 UTC | Last updated 2017-02-24 20:26:19 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -569,11 +569,18 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| </tr> | </tr> | ||||||
|  | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_v1_deletionpropagation">v1.DeletionPropagation</a></p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| @@ -1267,6 +1274,13 @@ Populated by the system when a graceful deletion is requested. Read-only. More i | |||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| </tr> | </tr> | ||||||
|  | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">blockOwnerDeletion</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | </tr> | ||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| @@ -1498,6 +1512,10 @@ Examples:<br> | |||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
|  | </div> | ||||||
|  | <div class="sect2"> | ||||||
|  | <h3 id="_v1_deletionpropagation">v1.DeletionPropagation</h3> | ||||||
|  | 
 | ||||||
| </div> | </div> | ||||||
| <div class="sect2"> | <div class="sect2"> | ||||||
| <h3 id="_v1beta1_policyrule">v1beta1.PolicyRule</h3> | <h3 id="_v1beta1_policyrule">v1beta1.PolicyRule</h3> | ||||||
| @@ -1737,7 +1755,7 @@ Examples:<br> | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-02-13 18:31:09 UTC | Last updated 2017-02-24 20:26:15 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -1131,12 +1131,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">name of the ClusterRoleBinding</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">name of the ClusterRoleBinding</p></td> | ||||||
| @@ -2024,12 +2032,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">name of the ClusterRole</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">name of the ClusterRole</p></td> | ||||||
| @@ -2957,12 +2973,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -3906,12 +3930,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -5983,7 +6015,7 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-01-18 13:58:18 UTC | Last updated 2017-02-24 20:26:15 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -551,11 +551,18 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| </tr> | </tr> | ||||||
|  | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_v1_deletionpropagation">v1.DeletionPropagation</a></p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| @@ -1087,6 +1094,13 @@ Populated by the system when a graceful deletion is requested. Read-only. More i | |||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| </tr> | </tr> | ||||||
|  | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">blockOwnerDeletion</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | </tr> | ||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| @@ -1208,6 +1222,10 @@ Examples:<br> | |||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
|  | </div> | ||||||
|  | <div class="sect2"> | ||||||
|  | <h3 id="_v1_deletionpropagation">v1.DeletionPropagation</h3> | ||||||
|  | 
 | ||||||
| </div> | </div> | ||||||
| <div class="sect2"> | <div class="sect2"> | ||||||
| <h3 id="_any">any</h3> | <h3 id="_any">any</h3> | ||||||
| @@ -1220,7 +1238,7 @@ Examples:<br> | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-01-25 20:39:20 UTC | Last updated 2017-02-24 20:26:24 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -1147,12 +1147,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">name of the StorageClass</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">name of the StorageClass</p></td> | ||||||
| @@ -1662,7 +1670,7 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-01-06 18:15:04 UTC | Last updated 2017-02-24 20:26:24 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -4191,11 +4191,18 @@ The resulting set of endpoints can be viewed as:<br> | |||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| </tr> | </tr> | ||||||
|  | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_v1_deletionpropagation">v1.DeletionPropagation</a></p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| @@ -6443,6 +6450,10 @@ Examples:<br> | |||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
|  | </div> | ||||||
|  | <div class="sect2"> | ||||||
|  | <h3 id="_v1_deletionpropagation">v1.DeletionPropagation</h3> | ||||||
|  | 
 | ||||||
| </div> | </div> | ||||||
| <div class="sect2"> | <div class="sect2"> | ||||||
| <h3 id="_v1_tcpsocketaction">v1.TCPSocketAction</h3> | <h3 id="_v1_tcpsocketaction">v1.TCPSocketAction</h3> | ||||||
| @@ -7358,6 +7369,13 @@ Examples:<br> | |||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| </tr> | </tr> | ||||||
|  | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">blockOwnerDeletion</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | </tr> | ||||||
| </tbody> | </tbody> | ||||||
| </table> | </table> | ||||||
| 
 | 
 | ||||||
| @@ -9714,7 +9732,7 @@ Examples:<br> | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-02-27 07:15:44 UTC | Last updated 2017-03-01 06:41:05 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -2565,12 +2565,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -3530,12 +3538,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -4495,12 +4511,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -5460,12 +5484,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -6425,12 +6457,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -7769,12 +7809,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -11303,12 +11351,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -12268,12 +12324,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -13991,12 +14055,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -15335,12 +15407,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -16300,12 +16380,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">namespace</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">object name and auth scope, such as for teams and projects</p></td> | ||||||
| @@ -18927,12 +19015,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">name of the Namespace</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">name of the Namespace</p></td> | ||||||
| @@ -20310,12 +20406,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">name of the Node</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">name of the Node</p></td> | ||||||
| @@ -22595,12 +22699,20 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| <tr> | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">orphanDependents</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list.</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the "orphan" finalizer will be added to/removed from the object’s finalizers list. Either this field or PropagationPolicy may be set, but not both.</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> | ||||||
| <td class="tableblock halign-left valign-top"></td> | <td class="tableblock halign-left valign-top"></td> | ||||||
| </tr> | </tr> | ||||||
| <tr> | <tr> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">QueryParameter</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">propagationPolicy</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> | ||||||
|  | <td class="tableblock halign-left valign-top"></td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">PathParameter</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td> | ||||||
| <td class="tableblock halign-left valign-top"><p class="tableblock">name of the PersistentVolume</p></td> | <td class="tableblock halign-left valign-top"><p class="tableblock">name of the PersistentVolume</p></td> | ||||||
| @@ -33962,7 +34074,7 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } | |||||||
| </div> | </div> | ||||||
| <div id="footer"> | <div id="footer"> | ||||||
| <div id="footer-text"> | <div id="footer-text"> | ||||||
| Last updated 2017-02-14 17:56:17 UTC | Last updated 2017-02-24 20:25:13 UTC | ||||||
| </div> | </div> | ||||||
| </div> | </div> | ||||||
| </body> | </body> | ||||||
|   | |||||||
| @@ -722,9 +722,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -1119,9 +1126,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -1516,9 +1530,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -1913,9 +1934,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -2254,9 +2282,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -4341,9 +4376,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -5305,9 +5347,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -6423,9 +6472,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -6956,9 +7012,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -7691,9 +7754,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -8224,9 +8294,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -10048,9 +10125,16 @@ | |||||||
|       { |       { | ||||||
|        "uniqueItems": true, |        "uniqueItems": true, | ||||||
|        "type": "boolean", |        "type": "boolean", | ||||||
|        "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |        "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|        "name": "orphanDependents", |        "name": "orphanDependents", | ||||||
|        "in": "query" |        "in": "query" | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |        "uniqueItems": true, | ||||||
|  |        "type": "string", | ||||||
|  |        "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |        "name": "propagationPolicy", | ||||||
|  |        "in": "query" | ||||||
|       } |       } | ||||||
|      ], |      ], | ||||||
|      "responses": { |      "responses": { | ||||||
| @@ -10600,12 +10684,16 @@ | |||||||
|       "type": "string" |       "type": "string" | ||||||
|      }, |      }, | ||||||
|      "orphanDependents": { |      "orphanDependents": { | ||||||
|       "description": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", |       "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|       "type": "boolean" |       "type": "boolean" | ||||||
|      }, |      }, | ||||||
|      "preconditions": { |      "preconditions": { | ||||||
|       "description": "Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.", |       "description": "Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.", | ||||||
|       "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Preconditions" |       "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Preconditions" | ||||||
|  |      }, | ||||||
|  |      "propagationPolicy": { | ||||||
|  |       "description": "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  |       "type": "string" | ||||||
|      } |      } | ||||||
|     } |     } | ||||||
|    }, |    }, | ||||||
| @@ -10774,6 +10862,10 @@ | |||||||
|       "description": "API version of the referent.", |       "description": "API version of the referent.", | ||||||
|       "type": "string" |       "type": "string" | ||||||
|      }, |      }, | ||||||
|  |      "blockOwnerDeletion": { | ||||||
|  |       "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", | ||||||
|  |       "type": "boolean" | ||||||
|  |      }, | ||||||
|      "controller": { |      "controller": { | ||||||
|       "description": "If true, this reference points to the managing controller.", |       "description": "If true, this reference points to the managing controller.", | ||||||
|       "type": "boolean" |       "type": "boolean" | ||||||
|   | |||||||
| @@ -104,7 +104,7 @@ func TestConfigMapController(t *testing.T) { | |||||||
| 	// There should be 2 updates to add both the finalizers. | 	// There should be 2 updates to add both the finalizers. | ||||||
| 	updatedConfigMap := GetConfigMapFromChan(configmapUpdateChan) | 	updatedConfigMap := GetConfigMapFromChan(configmapUpdateChan) | ||||||
| 	assert.True(t, configmapController.hasFinalizerFunc(updatedConfigMap, deletionhelper.FinalizerDeleteFromUnderlyingClusters)) | 	assert.True(t, configmapController.hasFinalizerFunc(updatedConfigMap, deletionhelper.FinalizerDeleteFromUnderlyingClusters)) | ||||||
| 	assert.True(t, configmapController.hasFinalizerFunc(updatedConfigMap, metav1.FinalizerOrphan)) | 	assert.True(t, configmapController.hasFinalizerFunc(updatedConfigMap, metav1.FinalizerOrphanDependents)) | ||||||
|  |  | ||||||
| 	// Verify that the configmap is created in underlying cluster1. | 	// Verify that the configmap is created in underlying cluster1. | ||||||
| 	createdConfigMap := GetConfigMapFromChan(cluster1CreateChan) | 	createdConfigMap := GetConfigMapFromChan(cluster1CreateChan) | ||||||
|   | |||||||
| @@ -105,7 +105,7 @@ func TestDaemonSetController(t *testing.T) { | |||||||
| 	// There should be an update to add both the finalizers. | 	// There should be an update to add both the finalizers. | ||||||
| 	updatedDaemonSet := GetDaemonSetFromChan(daemonsetUpdateChan) | 	updatedDaemonSet := GetDaemonSetFromChan(daemonsetUpdateChan) | ||||||
| 	assert.True(t, daemonsetController.hasFinalizerFunc(updatedDaemonSet, deletionhelper.FinalizerDeleteFromUnderlyingClusters)) | 	assert.True(t, daemonsetController.hasFinalizerFunc(updatedDaemonSet, deletionhelper.FinalizerDeleteFromUnderlyingClusters)) | ||||||
| 	assert.True(t, daemonsetController.hasFinalizerFunc(updatedDaemonSet, metav1.FinalizerOrphan)) | 	assert.True(t, daemonsetController.hasFinalizerFunc(updatedDaemonSet, metav1.FinalizerOrphanDependents)) | ||||||
| 	daemonset1 = *updatedDaemonSet | 	daemonset1 = *updatedDaemonSet | ||||||
|  |  | ||||||
| 	createdDaemonSet := GetDaemonSetFromChan(cluster1CreateChan) | 	createdDaemonSet := GetDaemonSetFromChan(cluster1CreateChan) | ||||||
|   | |||||||
| @@ -146,7 +146,7 @@ func TestIngressController(t *testing.T) { | |||||||
| 	// There should be an update to add both the finalizers. | 	// There should be an update to add both the finalizers. | ||||||
| 	updatedIngress := GetIngressFromChan(t, fedIngressUpdateChan) | 	updatedIngress := GetIngressFromChan(t, fedIngressUpdateChan) | ||||||
| 	assert.True(t, ingressController.hasFinalizerFunc(updatedIngress, deletionhelper.FinalizerDeleteFromUnderlyingClusters)) | 	assert.True(t, ingressController.hasFinalizerFunc(updatedIngress, deletionhelper.FinalizerDeleteFromUnderlyingClusters)) | ||||||
| 	assert.True(t, ingressController.hasFinalizerFunc(updatedIngress, metav1.FinalizerOrphan), fmt.Sprintf("ingress does not have the orphan finalizer: %v", updatedIngress)) | 	assert.True(t, ingressController.hasFinalizerFunc(updatedIngress, metav1.FinalizerOrphanDependents), fmt.Sprintf("ingress does not have the orphan finalizer: %v", updatedIngress)) | ||||||
| 	fedIngress = *updatedIngress | 	fedIngress = *updatedIngress | ||||||
|  |  | ||||||
| 	t.Log("Checking that Ingress was correctly created in cluster 1") | 	t.Log("Checking that Ingress was correctly created in cluster 1") | ||||||
| @@ -319,7 +319,7 @@ func WaitForFinalizersInFederationStore(ingressController *IngressController, st | |||||||
| 			return false, err | 			return false, err | ||||||
| 		} | 		} | ||||||
| 		ingress := obj.(*extensionsv1beta1.Ingress) | 		ingress := obj.(*extensionsv1beta1.Ingress) | ||||||
| 		if ingressController.hasFinalizerFunc(ingress, metav1.FinalizerOrphan) && | 		if ingressController.hasFinalizerFunc(ingress, metav1.FinalizerOrphanDependents) && | ||||||
| 			ingressController.hasFinalizerFunc(ingress, deletionhelper.FinalizerDeleteFromUnderlyingClusters) { | 			ingressController.hasFinalizerFunc(ingress, deletionhelper.FinalizerDeleteFromUnderlyingClusters) { | ||||||
| 			return true, nil | 			return true, nil | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -133,7 +133,7 @@ func TestNamespaceController(t *testing.T) { | |||||||
| 	// Delete the namespace with orphan finalizer (let namespaces | 	// Delete the namespace with orphan finalizer (let namespaces | ||||||
| 	// in underlying clusters be as is). | 	// in underlying clusters be as is). | ||||||
| 	// TODO: Add a test without orphan finalizer. | 	// TODO: Add a test without orphan finalizer. | ||||||
| 	ns1.ObjectMeta.Finalizers = append(ns1.ObjectMeta.Finalizers, metav1.FinalizerOrphan) | 	ns1.ObjectMeta.Finalizers = append(ns1.ObjectMeta.Finalizers, metav1.FinalizerOrphanDependents) | ||||||
| 	ns1.DeletionTimestamp = &metav1.Time{Time: time.Now()} | 	ns1.DeletionTimestamp = &metav1.Time{Time: time.Now()} | ||||||
| 	namespaceWatch.Modify(&ns1) | 	namespaceWatch.Modify(&ns1) | ||||||
| 	assert.Equal(t, ns1.Name, GetStringFromChan(nsDeleteChan)) | 	assert.Equal(t, ns1.Name, GetStringFromChan(nsDeleteChan)) | ||||||
|   | |||||||
| @@ -105,7 +105,7 @@ func TestSecretController(t *testing.T) { | |||||||
| 	// There should be an update to add both the finalizers. | 	// There should be an update to add both the finalizers. | ||||||
| 	updatedSecret := GetSecretFromChan(secretUpdateChan) | 	updatedSecret := GetSecretFromChan(secretUpdateChan) | ||||||
| 	assert.True(t, secretController.hasFinalizerFunc(updatedSecret, deletionhelper.FinalizerDeleteFromUnderlyingClusters)) | 	assert.True(t, secretController.hasFinalizerFunc(updatedSecret, deletionhelper.FinalizerDeleteFromUnderlyingClusters)) | ||||||
| 	assert.True(t, secretController.hasFinalizerFunc(updatedSecret, metav1.FinalizerOrphan)) | 	assert.True(t, secretController.hasFinalizerFunc(updatedSecret, metav1.FinalizerOrphanDependents)) | ||||||
| 	secret1 = *updatedSecret | 	secret1 = *updatedSecret | ||||||
|  |  | ||||||
| 	// Verify that the secret is created in underlying cluster1. | 	// Verify that the secret is created in underlying cluster1. | ||||||
|   | |||||||
| @@ -93,8 +93,8 @@ func (dh *DeletionHelper) EnsureFinalizers(obj runtime.Object) ( | |||||||
| 	if !dh.hasFinalizerFunc(obj, FinalizerDeleteFromUnderlyingClusters) { | 	if !dh.hasFinalizerFunc(obj, FinalizerDeleteFromUnderlyingClusters) { | ||||||
| 		finalizers = append(finalizers, FinalizerDeleteFromUnderlyingClusters) | 		finalizers = append(finalizers, FinalizerDeleteFromUnderlyingClusters) | ||||||
| 	} | 	} | ||||||
| 	if !dh.hasFinalizerFunc(obj, metav1.FinalizerOrphan) { | 	if !dh.hasFinalizerFunc(obj, metav1.FinalizerOrphanDependents) { | ||||||
| 		finalizers = append(finalizers, metav1.FinalizerOrphan) | 		finalizers = append(finalizers, metav1.FinalizerOrphanDependents) | ||||||
| 	} | 	} | ||||||
| 	if len(finalizers) != 0 { | 	if len(finalizers) != 0 { | ||||||
| 		glog.V(2).Infof("Adding finalizers %v to %s", finalizers, dh.objNameFunc(obj)) | 		glog.V(2).Infof("Adding finalizers %v to %s", finalizers, dh.objNameFunc(obj)) | ||||||
| @@ -117,7 +117,7 @@ func (dh *DeletionHelper) HandleObjectInUnderlyingClusters(obj runtime.Object) ( | |||||||
| 		glog.V(2).Infof("obj does not have %s finalizer. Nothing to do", FinalizerDeleteFromUnderlyingClusters) | 		glog.V(2).Infof("obj does not have %s finalizer. Nothing to do", FinalizerDeleteFromUnderlyingClusters) | ||||||
| 		return obj, nil | 		return obj, nil | ||||||
| 	} | 	} | ||||||
| 	hasOrphanFinalizer := dh.hasFinalizerFunc(obj, metav1.FinalizerOrphan) | 	hasOrphanFinalizer := dh.hasFinalizerFunc(obj, metav1.FinalizerOrphanDependents) | ||||||
| 	if hasOrphanFinalizer { | 	if hasOrphanFinalizer { | ||||||
| 		glog.V(2).Infof("Found finalizer orphan. Nothing to do, just remove the finalizer") | 		glog.V(2).Infof("Found finalizer orphan. Nothing to do, just remove the finalizer") | ||||||
| 		// If the obj has FinalizerOrphan finalizer, then we need to orphan the | 		// If the obj has FinalizerOrphan finalizer, then we need to orphan the | ||||||
| @@ -127,7 +127,7 @@ func (dh *DeletionHelper) HandleObjectInUnderlyingClusters(obj runtime.Object) ( | |||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return obj, err | 			return obj, err | ||||||
| 		} | 		} | ||||||
| 		return dh.removeFinalizerFunc(obj, metav1.FinalizerOrphan) | 		return dh.removeFinalizerFunc(obj, metav1.FinalizerOrphanDependents) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	glog.V(2).Infof("Deleting obj %s from underlying clusters", objName) | 	glog.V(2).Infof("Deleting obj %s from underlying clusters", objName) | ||||||
|   | |||||||
| @@ -244,7 +244,7 @@ func IsServiceIPRequested(service *Service) bool { | |||||||
|  |  | ||||||
| var standardFinalizers = sets.NewString( | var standardFinalizers = sets.NewString( | ||||||
| 	string(FinalizerKubernetes), | 	string(FinalizerKubernetes), | ||||||
| 	metav1.FinalizerOrphan, | 	metav1.FinalizerOrphanDependents, | ||||||
| ) | ) | ||||||
|  |  | ||||||
| // HasAnnotation returns a bool if passed in annotation exists | // HasAnnotation returns a bool if passed in annotation exists | ||||||
|   | |||||||
| @@ -20,8 +20,6 @@ import ( | |||||||
| 	"reflect" | 	"reflect" | ||||||
| 	"testing" | 	"testing" | ||||||
|  |  | ||||||
| 	"github.com/google/gofuzz" |  | ||||||
|  |  | ||||||
| 	"k8s.io/apimachinery/pkg/api/meta" | 	"k8s.io/apimachinery/pkg/api/meta" | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
| @@ -31,50 +29,6 @@ import ( | |||||||
|  |  | ||||||
| var _ metav1.Object = &metav1.ObjectMeta{} | var _ metav1.Object = &metav1.ObjectMeta{} | ||||||
|  |  | ||||||
| func getObjectMetaAndOwnerReferences() (objectMeta metav1.ObjectMeta, metaOwnerReferences []metav1.OwnerReference) { |  | ||||||
| 	fuzz.New().NilChance(.5).NumElements(1, 5).Fuzz(&objectMeta) |  | ||||||
| 	references := objectMeta.OwnerReferences |  | ||||||
| 	metaOwnerReferences = make([]metav1.OwnerReference, 0) |  | ||||||
| 	for i := 0; i < len(references); i++ { |  | ||||||
| 		metaOwnerReferences = append(metaOwnerReferences, metav1.OwnerReference{ |  | ||||||
| 			Kind:       references[i].Kind, |  | ||||||
| 			Name:       references[i].Name, |  | ||||||
| 			UID:        references[i].UID, |  | ||||||
| 			APIVersion: references[i].APIVersion, |  | ||||||
| 			Controller: references[i].Controller, |  | ||||||
| 		}) |  | ||||||
| 	} |  | ||||||
| 	if len(references) == 0 { |  | ||||||
| 		objectMeta.OwnerReferences = make([]metav1.OwnerReference, 0) |  | ||||||
| 	} |  | ||||||
| 	return objectMeta, metaOwnerReferences |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func testGetOwnerReferences(t *testing.T) { |  | ||||||
| 	meta, expected := getObjectMetaAndOwnerReferences() |  | ||||||
| 	refs := meta.GetOwnerReferences() |  | ||||||
| 	if !reflect.DeepEqual(refs, expected) { |  | ||||||
| 		t.Errorf("expect %v\n got %v", expected, refs) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func testSetOwnerReferences(t *testing.T) { |  | ||||||
| 	expected, newRefs := getObjectMetaAndOwnerReferences() |  | ||||||
| 	objectMeta := &metav1.ObjectMeta{} |  | ||||||
| 	objectMeta.SetOwnerReferences(newRefs) |  | ||||||
| 	if !reflect.DeepEqual(expected.OwnerReferences, objectMeta.OwnerReferences) { |  | ||||||
| 		t.Errorf("expect: %#v\n got: %#v", expected.OwnerReferences, objectMeta.OwnerReferences) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func TestAccessOwnerReferences(t *testing.T) { |  | ||||||
| 	fuzzIter := 5 |  | ||||||
| 	for i := 0; i < fuzzIter; i++ { |  | ||||||
| 		testGetOwnerReferences(t) |  | ||||||
| 		testSetOwnerReferences(t) |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func TestAccessorImplementations(t *testing.T) { | func TestAccessorImplementations(t *testing.T) { | ||||||
| 	for _, gv := range api.Registry.EnabledVersions() { | 	for _, gv := range api.Registry.EnabledVersions() { | ||||||
| 		internalGV := schema.GroupVersion{Group: gv.Group, Version: runtime.APIVersionInternal} | 		internalGV := schema.GroupVersion{Group: gv.Group, Version: runtime.APIVersionInternal} | ||||||
|   | |||||||
| @@ -3000,6 +3000,20 @@ type Preconditions struct { | |||||||
| 	UID *types.UID | 	UID *types.UID | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // DeletionPropagation decides whether and how garbage collection will be performed. | ||||||
|  | type DeletionPropagation string | ||||||
|  |  | ||||||
|  | const ( | ||||||
|  | 	// Orphans the dependents. | ||||||
|  | 	DeletePropagationOrphan DeletionPropagation = "Orphan" | ||||||
|  | 	// Deletes the object from the key-value store, the garbage collector will delete the dependents in the background. | ||||||
|  | 	DeletePropagationBackground DeletionPropagation = "Background" | ||||||
|  | 	// The object exists in the key-value store until the garbage collector deletes all the dependents whose ownerReference.blockOwnerDeletion=true from the key-value store. | ||||||
|  | 	// API sever will put the "DeletingDependents" finalizer on the object, and sets its deletionTimestamp. | ||||||
|  | 	// This policy is cascading, i.e., the dependents will be deleted with Foreground. | ||||||
|  | 	DeletePropagationForeground DeletionPropagation = "Foreground" | ||||||
|  | ) | ||||||
|  |  | ||||||
| // DeleteOptions may be provided when deleting an API object | // DeleteOptions may be provided when deleting an API object | ||||||
| // DEPRECATED: This type has been moved to meta/v1 and will be removed soon. | // DEPRECATED: This type has been moved to meta/v1 and will be removed soon. | ||||||
| type DeleteOptions struct { | type DeleteOptions struct { | ||||||
| @@ -3016,10 +3030,18 @@ type DeleteOptions struct { | |||||||
| 	// +optional | 	// +optional | ||||||
| 	Preconditions *Preconditions | 	Preconditions *Preconditions | ||||||
|  |  | ||||||
|  | 	// Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. | ||||||
| 	// Should the dependent objects be orphaned. If true/false, the "orphan" | 	// Should the dependent objects be orphaned. If true/false, the "orphan" | ||||||
| 	// finalizer will be added to/removed from the object's finalizers list. | 	// finalizer will be added to/removed from the object's finalizers list. | ||||||
|  | 	// Either this field or PropagationPolicy may be set, but not both. | ||||||
| 	// +optional | 	// +optional | ||||||
| 	OrphanDependents *bool | 	OrphanDependents *bool | ||||||
|  |  | ||||||
|  | 	// Whether and how garbage collection will be performed. | ||||||
|  | 	// Defaults to Default. | ||||||
|  | 	// Either this field or OrphanDependents may be set, but not both. | ||||||
|  | 	// +optional | ||||||
|  | 	PropagationPolicy *DeletionPropagation | ||||||
| } | } | ||||||
|  |  | ||||||
| // ListOptions is the query options to a standard REST list call, and has future support for | // ListOptions is the query options to a standard REST list call, and has future support for | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -680,10 +680,18 @@ message DeleteOptions { | |||||||
|   // +optional |   // +optional | ||||||
|   optional Preconditions preconditions = 2; |   optional Preconditions preconditions = 2; | ||||||
| 
 | 
 | ||||||
|  |   // Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. | ||||||
|   // Should the dependent objects be orphaned. If true/false, the "orphan" |   // Should the dependent objects be orphaned. If true/false, the "orphan" | ||||||
|   // finalizer will be added to/removed from the object's finalizers list. |   // finalizer will be added to/removed from the object's finalizers list. | ||||||
|  |   // Either this field or PropagationPolicy may be set, but not both. | ||||||
|   // +optional |   // +optional | ||||||
|   optional bool orphanDependents = 3; |   optional bool orphanDependents = 3; | ||||||
|  | 
 | ||||||
|  |   // Whether and how garbage collection will be performed. | ||||||
|  |   // Defaults to Default. | ||||||
|  |   // Either this field or OrphanDependents may be set, but not both. | ||||||
|  |   // +optional | ||||||
|  |   optional string propagationPolicy = 4; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Represents downward API info for projecting into a projected volume. | // Represents downward API info for projecting into a projected volume. | ||||||
|   | |||||||
| @@ -84,7 +84,7 @@ func IsServiceIPRequested(service *Service) bool { | |||||||
|  |  | ||||||
| var standardFinalizers = sets.NewString( | var standardFinalizers = sets.NewString( | ||||||
| 	string(FinalizerKubernetes), | 	string(FinalizerKubernetes), | ||||||
| 	metav1.FinalizerOrphan, | 	metav1.FinalizerOrphanDependents, | ||||||
| ) | ) | ||||||
|  |  | ||||||
| func IsStandardFinalizerName(str string) bool { | func IsStandardFinalizerName(str string) bool { | ||||||
|   | |||||||
| @@ -63,6 +63,10 @@ func (meta *ObjectMeta) GetOwnerReferences() []metav1.OwnerReference { | |||||||
| 			value := *meta.OwnerReferences[i].Controller | 			value := *meta.OwnerReferences[i].Controller | ||||||
| 			ret[i].Controller = &value | 			ret[i].Controller = &value | ||||||
| 		} | 		} | ||||||
|  | 		if meta.OwnerReferences[i].BlockOwnerDeletion != nil { | ||||||
|  | 			value := *meta.OwnerReferences[i].BlockOwnerDeletion | ||||||
|  | 			ret[i].BlockOwnerDeletion = &value | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 	return ret | 	return ret | ||||||
| } | } | ||||||
| @@ -78,6 +82,10 @@ func (meta *ObjectMeta) SetOwnerReferences(references []metav1.OwnerReference) { | |||||||
| 			value := *references[i].Controller | 			value := *references[i].Controller | ||||||
| 			newReferences[i].Controller = &value | 			newReferences[i].Controller = &value | ||||||
| 		} | 		} | ||||||
|  | 		if references[i].BlockOwnerDeletion != nil { | ||||||
|  | 			value := *references[i].BlockOwnerDeletion | ||||||
|  | 			newReferences[i].BlockOwnerDeletion = &value | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 	meta.OwnerReferences = newReferences | 	meta.OwnerReferences = newReferences | ||||||
| } | } | ||||||
|   | |||||||
| @@ -51338,6 +51338,32 @@ func (x *Preconditions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { | |||||||
| 	z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | 	z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (x DeletionPropagation) CodecEncodeSelf(e *codec1978.Encoder) { | ||||||
|  | 	var h codecSelfer1234 | ||||||
|  | 	z, r := codec1978.GenHelperEncoder(e) | ||||||
|  | 	_, _, _ = h, z, r | ||||||
|  | 	yym1 := z.EncBinary() | ||||||
|  | 	_ = yym1 | ||||||
|  | 	if false { | ||||||
|  | 	} else if z.HasExtensions() && z.EncExt(x) { | ||||||
|  | 	} else { | ||||||
|  | 		r.EncodeString(codecSelferC_UTF81234, string(x)) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *DeletionPropagation) CodecDecodeSelf(d *codec1978.Decoder) { | ||||||
|  | 	var h codecSelfer1234 | ||||||
|  | 	z, r := codec1978.GenHelperDecoder(d) | ||||||
|  | 	_, _, _ = h, z, r | ||||||
|  | 	yym1 := z.DecBinary() | ||||||
|  | 	_ = yym1 | ||||||
|  | 	if false { | ||||||
|  | 	} else if z.HasExtensions() && z.DecExt(x) { | ||||||
|  | 	} else { | ||||||
|  | 		*((*string)(x)) = r.DecodeString() | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (x *DeleteOptions) CodecEncodeSelf(e *codec1978.Encoder) { | func (x *DeleteOptions) CodecEncodeSelf(e *codec1978.Encoder) { | ||||||
| 	var h codecSelfer1234 | 	var h codecSelfer1234 | ||||||
| 	z, r := codec1978.GenHelperEncoder(e) | 	z, r := codec1978.GenHelperEncoder(e) | ||||||
| @@ -51352,7 +51378,7 @@ func (x *DeleteOptions) CodecEncodeSelf(e *codec1978.Encoder) { | |||||||
| 		} else { | 		} else { | ||||||
| 			yysep2 := !z.EncBinary() | 			yysep2 := !z.EncBinary() | ||||||
| 			yy2arr2 := z.EncBasicHandle().StructToArray | 			yy2arr2 := z.EncBasicHandle().StructToArray | ||||||
| 			var yyq2 [5]bool | 			var yyq2 [6]bool | ||||||
| 			_, _, _ = yysep2, yyq2, yy2arr2 | 			_, _, _ = yysep2, yyq2, yy2arr2 | ||||||
| 			const yyr2 bool = false | 			const yyr2 bool = false | ||||||
| 			yyq2[0] = x.Kind != "" | 			yyq2[0] = x.Kind != "" | ||||||
| @@ -51362,9 +51388,9 @@ func (x *DeleteOptions) CodecEncodeSelf(e *codec1978.Encoder) { | |||||||
| 			yyq2[4] = x.OrphanDependents != nil | 			yyq2[4] = x.OrphanDependents != nil | ||||||
| 			var yynn2 int | 			var yynn2 int | ||||||
| 			if yyr2 || yy2arr2 { | 			if yyr2 || yy2arr2 { | ||||||
| 				r.EncodeArrayStart(5) | 				r.EncodeArrayStart(6) | ||||||
| 			} else { | 			} else { | ||||||
| 				yynn2 = 0 | 				yynn2 = 1 | ||||||
| 				for _, b := range yyq2 { | 				for _, b := range yyq2 { | ||||||
| 					if b { | 					if b { | ||||||
| 						yynn2++ | 						yynn2++ | ||||||
| @@ -51516,6 +51542,25 @@ func (x *DeleteOptions) CodecEncodeSelf(e *codec1978.Encoder) { | |||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
|  | 			if yyr2 || yy2arr2 { | ||||||
|  | 				z.EncSendContainerState(codecSelfer_containerArrayElem1234) | ||||||
|  | 				if x.PropagationPolicy == nil { | ||||||
|  | 					r.EncodeNil() | ||||||
|  | 				} else { | ||||||
|  | 					yy23 := *x.PropagationPolicy | ||||||
|  | 					yy23.CodecEncodeSelf(e) | ||||||
|  | 				} | ||||||
|  | 			} else { | ||||||
|  | 				z.EncSendContainerState(codecSelfer_containerMapKey1234) | ||||||
|  | 				r.EncodeString(codecSelferC_UTF81234, string("PropagationPolicy")) | ||||||
|  | 				z.EncSendContainerState(codecSelfer_containerMapValue1234) | ||||||
|  | 				if x.PropagationPolicy == nil { | ||||||
|  | 					r.EncodeNil() | ||||||
|  | 				} else { | ||||||
|  | 					yy25 := *x.PropagationPolicy | ||||||
|  | 					yy25.CodecEncodeSelf(e) | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
| 			if yyr2 || yy2arr2 { | 			if yyr2 || yy2arr2 { | ||||||
| 				z.EncSendContainerState(codecSelfer_containerArrayEnd1234) | 				z.EncSendContainerState(codecSelfer_containerArrayEnd1234) | ||||||
| 			} else { | 			} else { | ||||||
| @@ -51644,6 +51689,17 @@ func (x *DeleteOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { | |||||||
| 					*((*bool)(x.OrphanDependents)) = r.DecodeBool() | 					*((*bool)(x.OrphanDependents)) = r.DecodeBool() | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
|  | 		case "PropagationPolicy": | ||||||
|  | 			if r.TryDecodeAsNil() { | ||||||
|  | 				if x.PropagationPolicy != nil { | ||||||
|  | 					x.PropagationPolicy = nil | ||||||
|  | 				} | ||||||
|  | 			} else { | ||||||
|  | 				if x.PropagationPolicy == nil { | ||||||
|  | 					x.PropagationPolicy = new(DeletionPropagation) | ||||||
|  | 				} | ||||||
|  | 				x.PropagationPolicy.CodecDecodeSelf(d) | ||||||
|  | 			} | ||||||
| 		default: | 		default: | ||||||
| 			z.DecStructFieldNotFound(-1, yys3) | 			z.DecStructFieldNotFound(-1, yys3) | ||||||
| 		} // end switch yys3 | 		} // end switch yys3 | ||||||
| @@ -51655,16 +51711,16 @@ func (x *DeleteOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { | |||||||
| 	var h codecSelfer1234 | 	var h codecSelfer1234 | ||||||
| 	z, r := codec1978.GenHelperDecoder(d) | 	z, r := codec1978.GenHelperDecoder(d) | ||||||
| 	_, _, _ = h, z, r | 	_, _, _ = h, z, r | ||||||
| 	var yyj13 int | 	var yyj14 int | ||||||
| 	var yyb13 bool | 	var yyb14 bool | ||||||
| 	var yyhl13 bool = l >= 0 | 	var yyhl14 bool = l >= 0 | ||||||
| 	yyj13++ | 	yyj14++ | ||||||
| 	if yyhl13 { | 	if yyhl14 { | ||||||
| 		yyb13 = yyj13 > l | 		yyb14 = yyj14 > l | ||||||
| 	} else { | 	} else { | ||||||
| 		yyb13 = r.CheckBreak() | 		yyb14 = r.CheckBreak() | ||||||
| 	} | 	} | ||||||
| 	if yyb13 { | 	if yyb14 { | ||||||
| 		z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | 		z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| @@ -51672,21 +51728,21 @@ func (x *DeleteOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { | |||||||
| 	if r.TryDecodeAsNil() { | 	if r.TryDecodeAsNil() { | ||||||
| 		x.Kind = "" | 		x.Kind = "" | ||||||
| 	} else { | 	} else { | ||||||
| 		yyv14 := &x.Kind | 		yyv15 := &x.Kind | ||||||
| 		yym15 := z.DecBinary() | 		yym16 := z.DecBinary() | ||||||
| 		_ = yym15 | 		_ = yym16 | ||||||
| 		if false { | 		if false { | ||||||
| 		} else { | 		} else { | ||||||
| 			*((*string)(yyv14)) = r.DecodeString() | 			*((*string)(yyv15)) = r.DecodeString() | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	yyj13++ | 	yyj14++ | ||||||
| 	if yyhl13 { | 	if yyhl14 { | ||||||
| 		yyb13 = yyj13 > l | 		yyb14 = yyj14 > l | ||||||
| 	} else { | 	} else { | ||||||
| 		yyb13 = r.CheckBreak() | 		yyb14 = r.CheckBreak() | ||||||
| 	} | 	} | ||||||
| 	if yyb13 { | 	if yyb14 { | ||||||
| 		z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | 		z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| @@ -51694,21 +51750,21 @@ func (x *DeleteOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { | |||||||
| 	if r.TryDecodeAsNil() { | 	if r.TryDecodeAsNil() { | ||||||
| 		x.APIVersion = "" | 		x.APIVersion = "" | ||||||
| 	} else { | 	} else { | ||||||
| 		yyv16 := &x.APIVersion | 		yyv17 := &x.APIVersion | ||||||
| 		yym17 := z.DecBinary() | 		yym18 := z.DecBinary() | ||||||
| 		_ = yym17 | 		_ = yym18 | ||||||
| 		if false { | 		if false { | ||||||
| 		} else { | 		} else { | ||||||
| 			*((*string)(yyv16)) = r.DecodeString() | 			*((*string)(yyv17)) = r.DecodeString() | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	yyj13++ | 	yyj14++ | ||||||
| 	if yyhl13 { | 	if yyhl14 { | ||||||
| 		yyb13 = yyj13 > l | 		yyb14 = yyj14 > l | ||||||
| 	} else { | 	} else { | ||||||
| 		yyb13 = r.CheckBreak() | 		yyb14 = r.CheckBreak() | ||||||
| 	} | 	} | ||||||
| 	if yyb13 { | 	if yyb14 { | ||||||
| 		z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | 		z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| @@ -51721,20 +51777,20 @@ func (x *DeleteOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { | |||||||
| 		if x.GracePeriodSeconds == nil { | 		if x.GracePeriodSeconds == nil { | ||||||
| 			x.GracePeriodSeconds = new(int64) | 			x.GracePeriodSeconds = new(int64) | ||||||
| 		} | 		} | ||||||
| 		yym19 := z.DecBinary() | 		yym20 := z.DecBinary() | ||||||
| 		_ = yym19 | 		_ = yym20 | ||||||
| 		if false { | 		if false { | ||||||
| 		} else { | 		} else { | ||||||
| 			*((*int64)(x.GracePeriodSeconds)) = int64(r.DecodeInt(64)) | 			*((*int64)(x.GracePeriodSeconds)) = int64(r.DecodeInt(64)) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	yyj13++ | 	yyj14++ | ||||||
| 	if yyhl13 { | 	if yyhl14 { | ||||||
| 		yyb13 = yyj13 > l | 		yyb14 = yyj14 > l | ||||||
| 	} else { | 	} else { | ||||||
| 		yyb13 = r.CheckBreak() | 		yyb14 = r.CheckBreak() | ||||||
| 	} | 	} | ||||||
| 	if yyb13 { | 	if yyb14 { | ||||||
| 		z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | 		z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| @@ -51749,13 +51805,13 @@ func (x *DeleteOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { | |||||||
| 		} | 		} | ||||||
| 		x.Preconditions.CodecDecodeSelf(d) | 		x.Preconditions.CodecDecodeSelf(d) | ||||||
| 	} | 	} | ||||||
| 	yyj13++ | 	yyj14++ | ||||||
| 	if yyhl13 { | 	if yyhl14 { | ||||||
| 		yyb13 = yyj13 > l | 		yyb14 = yyj14 > l | ||||||
| 	} else { | 	} else { | ||||||
| 		yyb13 = r.CheckBreak() | 		yyb14 = r.CheckBreak() | ||||||
| 	} | 	} | ||||||
| 	if yyb13 { | 	if yyb14 { | ||||||
| 		z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | 		z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| @@ -51768,25 +51824,46 @@ func (x *DeleteOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { | |||||||
| 		if x.OrphanDependents == nil { | 		if x.OrphanDependents == nil { | ||||||
| 			x.OrphanDependents = new(bool) | 			x.OrphanDependents = new(bool) | ||||||
| 		} | 		} | ||||||
| 		yym22 := z.DecBinary() | 		yym23 := z.DecBinary() | ||||||
| 		_ = yym22 | 		_ = yym23 | ||||||
| 		if false { | 		if false { | ||||||
| 		} else { | 		} else { | ||||||
| 			*((*bool)(x.OrphanDependents)) = r.DecodeBool() | 			*((*bool)(x.OrphanDependents)) = r.DecodeBool() | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	for { | 	yyj14++ | ||||||
| 		yyj13++ | 	if yyhl14 { | ||||||
| 		if yyhl13 { | 		yyb14 = yyj14 > l | ||||||
| 			yyb13 = yyj13 > l |  | ||||||
| 	} else { | 	} else { | ||||||
| 			yyb13 = r.CheckBreak() | 		yyb14 = r.CheckBreak() | ||||||
| 	} | 	} | ||||||
| 		if yyb13 { | 	if yyb14 { | ||||||
|  | 		z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	z.DecSendContainerState(codecSelfer_containerArrayElem1234) | ||||||
|  | 	if r.TryDecodeAsNil() { | ||||||
|  | 		if x.PropagationPolicy != nil { | ||||||
|  | 			x.PropagationPolicy = nil | ||||||
|  | 		} | ||||||
|  | 	} else { | ||||||
|  | 		if x.PropagationPolicy == nil { | ||||||
|  | 			x.PropagationPolicy = new(DeletionPropagation) | ||||||
|  | 		} | ||||||
|  | 		x.PropagationPolicy.CodecDecodeSelf(d) | ||||||
|  | 	} | ||||||
|  | 	for { | ||||||
|  | 		yyj14++ | ||||||
|  | 		if yyhl14 { | ||||||
|  | 			yyb14 = yyj14 > l | ||||||
|  | 		} else { | ||||||
|  | 			yyb14 = r.CheckBreak() | ||||||
|  | 		} | ||||||
|  | 		if yyb14 { | ||||||
| 			break | 			break | ||||||
| 		} | 		} | ||||||
| 		z.DecSendContainerState(codecSelfer_containerArrayElem1234) | 		z.DecSendContainerState(codecSelfer_containerArrayElem1234) | ||||||
| 		z.DecStructFieldNotFound(yyj13-1, "") | 		z.DecStructFieldNotFound(yyj14-1, "") | ||||||
| 	} | 	} | ||||||
| 	z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | 	z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | ||||||
| } | } | ||||||
| @@ -65736,7 +65813,7 @@ func (x codecSelfer1234) decSlicev1_OwnerReference(v *[]pkg2_v1.OwnerReference, | |||||||
| 
 | 
 | ||||||
| 			yyrg1 := len(yyv1) > 0 | 			yyrg1 := len(yyv1) > 0 | ||||||
| 			yyv21 := yyv1 | 			yyv21 := yyv1 | ||||||
| 			yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 72) | 			yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 80) | ||||||
| 			if yyrt1 { | 			if yyrt1 { | ||||||
| 				if yyrl1 <= cap(yyv1) { | 				if yyrl1 <= cap(yyv1) { | ||||||
| 					yyv1 = yyv1[:yyrl1] | 					yyv1 = yyv1[:yyrl1] | ||||||
|   | |||||||
| @@ -3432,6 +3432,20 @@ type Preconditions struct { | |||||||
| 	UID *types.UID `json:"uid,omitempty" protobuf:"bytes,1,opt,name=uid,casttype=k8s.io/apimachinery/pkg/types.UID"` | 	UID *types.UID `json:"uid,omitempty" protobuf:"bytes,1,opt,name=uid,casttype=k8s.io/apimachinery/pkg/types.UID"` | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // DeletionPropagation decides if a deletion will propagate to the dependents of the object, and how the garbage collector will handle the propagation. | ||||||
|  | type DeletionPropagation string | ||||||
|  |  | ||||||
|  | const ( | ||||||
|  | 	// Orphans the dependents. | ||||||
|  | 	DeletePropagationOrphan DeletionPropagation = "Orphan" | ||||||
|  | 	// Deletes the object from the key-value store, the garbage collector will delete the dependents in the background. | ||||||
|  | 	DeletePropagationBackground DeletionPropagation = "Background" | ||||||
|  | 	// The object exists in the key-value store until the garbage collector deletes all the dependents whose ownerReference.blockOwnerDeletion=true from the key-value store. | ||||||
|  | 	// API sever will put the "DeletingDependents" finalizer on the object, and sets its deletionTimestamp. | ||||||
|  | 	// This policy is cascading, i.e., the dependents will be deleted with Foreground. | ||||||
|  | 	DeletePropagationForeground DeletionPropagation = "Foreground" | ||||||
|  | ) | ||||||
|  |  | ||||||
| // DeleteOptions may be provided when deleting an API object | // DeleteOptions may be provided when deleting an API object | ||||||
| // DEPRECATED: This type has been moved to meta/v1 and will be removed soon. | // DEPRECATED: This type has been moved to meta/v1 and will be removed soon. | ||||||
| // +k8s:openapi-gen=false | // +k8s:openapi-gen=false | ||||||
| @@ -3450,10 +3464,18 @@ type DeleteOptions struct { | |||||||
| 	// +optional | 	// +optional | ||||||
| 	Preconditions *Preconditions `json:"preconditions,omitempty" protobuf:"bytes,2,opt,name=preconditions"` | 	Preconditions *Preconditions `json:"preconditions,omitempty" protobuf:"bytes,2,opt,name=preconditions"` | ||||||
|  |  | ||||||
|  | 	// Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. | ||||||
| 	// Should the dependent objects be orphaned. If true/false, the "orphan" | 	// Should the dependent objects be orphaned. If true/false, the "orphan" | ||||||
| 	// finalizer will be added to/removed from the object's finalizers list. | 	// finalizer will be added to/removed from the object's finalizers list. | ||||||
|  | 	// Either this field or PropagationPolicy may be set, but not both. | ||||||
| 	// +optional | 	// +optional | ||||||
| 	OrphanDependents *bool `json:"orphanDependents,omitempty" protobuf:"varint,3,opt,name=orphanDependents"` | 	OrphanDependents *bool `json:"orphanDependents,omitempty" protobuf:"varint,3,opt,name=orphanDependents"` | ||||||
|  |  | ||||||
|  | 	// Whether and how garbage collection will be performed. | ||||||
|  | 	// Defaults to Default. | ||||||
|  | 	// Either this field or OrphanDependents may be set, but not both. | ||||||
|  | 	// +optional | ||||||
|  | 	PropagationPolicy *DeletionPropagation | ||||||
| } | } | ||||||
|  |  | ||||||
| // ListOptions is the query options to a standard REST list call. | // ListOptions is the query options to a standard REST list call. | ||||||
|   | |||||||
| @@ -355,7 +355,8 @@ var map_DeleteOptions = map[string]string{ | |||||||
| 	"":                   "DeleteOptions may be provided when deleting an API object DEPRECATED: This type has been moved to meta/v1 and will be removed soon.", | 	"":                   "DeleteOptions may be provided when deleting an API object DEPRECATED: This type has been moved to meta/v1 and will be removed soon.", | ||||||
| 	"gracePeriodSeconds": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", | 	"gracePeriodSeconds": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", | ||||||
| 	"preconditions":      "Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.", | 	"preconditions":      "Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.", | ||||||
| 	"orphanDependents":   "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", | 	"orphanDependents":   "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  | 	"PropagationPolicy":  "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (DeleteOptions) SwaggerDoc() map[string]string { | func (DeleteOptions) SwaggerDoc() map[string]string { | ||||||
|   | |||||||
| @@ -1064,6 +1064,7 @@ func autoConvert_v1_DeleteOptions_To_api_DeleteOptions(in *DeleteOptions, out *a | |||||||
| 	out.GracePeriodSeconds = (*int64)(unsafe.Pointer(in.GracePeriodSeconds)) | 	out.GracePeriodSeconds = (*int64)(unsafe.Pointer(in.GracePeriodSeconds)) | ||||||
| 	out.Preconditions = (*api.Preconditions)(unsafe.Pointer(in.Preconditions)) | 	out.Preconditions = (*api.Preconditions)(unsafe.Pointer(in.Preconditions)) | ||||||
| 	out.OrphanDependents = (*bool)(unsafe.Pointer(in.OrphanDependents)) | 	out.OrphanDependents = (*bool)(unsafe.Pointer(in.OrphanDependents)) | ||||||
|  | 	out.PropagationPolicy = (*api.DeletionPropagation)(unsafe.Pointer(in.PropagationPolicy)) | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @@ -1075,6 +1076,7 @@ func autoConvert_api_DeleteOptions_To_v1_DeleteOptions(in *api.DeleteOptions, ou | |||||||
| 	out.GracePeriodSeconds = (*int64)(unsafe.Pointer(in.GracePeriodSeconds)) | 	out.GracePeriodSeconds = (*int64)(unsafe.Pointer(in.GracePeriodSeconds)) | ||||||
| 	out.Preconditions = (*Preconditions)(unsafe.Pointer(in.Preconditions)) | 	out.Preconditions = (*Preconditions)(unsafe.Pointer(in.Preconditions)) | ||||||
| 	out.OrphanDependents = (*bool)(unsafe.Pointer(in.OrphanDependents)) | 	out.OrphanDependents = (*bool)(unsafe.Pointer(in.OrphanDependents)) | ||||||
|  | 	out.PropagationPolicy = (*DeletionPropagation)(unsafe.Pointer(in.PropagationPolicy)) | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|   | |||||||
| @@ -734,6 +734,11 @@ func DeepCopy_v1_DeleteOptions(in interface{}, out interface{}, c *conversion.Cl | |||||||
| 			*out = new(bool) | 			*out = new(bool) | ||||||
| 			**out = **in | 			**out = **in | ||||||
| 		} | 		} | ||||||
|  | 		if in.PropagationPolicy != nil { | ||||||
|  | 			in, out := &in.PropagationPolicy, &out.PropagationPolicy | ||||||
|  | 			*out = new(DeletionPropagation) | ||||||
|  | 			**out = **in | ||||||
|  | 		} | ||||||
| 		return nil | 		return nil | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|   | |||||||
| @@ -295,7 +295,6 @@ func ValidateObjectMeta(meta *metav1.ObjectMeta, requiresNamespace bool, nameFn | |||||||
| 	for i := range meta.Finalizers { | 	for i := range meta.Finalizers { | ||||||
| 		allErrs = append(allErrs, validateKubeFinalizerName(string(meta.Finalizers[i]), fldPath.Child("finalizers").Index(i))...) | 		allErrs = append(allErrs, validateKubeFinalizerName(string(meta.Finalizers[i]), fldPath.Child("finalizers").Index(i))...) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return allErrs | 	return allErrs | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -762,6 +762,11 @@ func DeepCopy_api_DeleteOptions(in interface{}, out interface{}, c *conversion.C | |||||||
| 			*out = new(bool) | 			*out = new(bool) | ||||||
| 			**out = **in | 			**out = **in | ||||||
| 		} | 		} | ||||||
|  | 		if in.PropagationPolicy != nil { | ||||||
|  | 			in, out := &in.PropagationPolicy, &out.PropagationPolicy | ||||||
|  | 			*out = new(DeletionPropagation) | ||||||
|  | 			**out = **in | ||||||
|  | 		} | ||||||
| 		return nil | 		return nil | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|   | |||||||
| @@ -335,7 +335,7 @@ type MyAPIObject2 struct { | |||||||
| 	metav1.ObjectMeta | 	metav1.ObjectMeta | ||||||
| } | } | ||||||
|  |  | ||||||
| func getObjectMetaAndOwnerRefereneces() (myAPIObject2 MyAPIObject2, metaOwnerReferences []metav1.OwnerReference) { | func getObjectMetaAndOwnerReferences() (myAPIObject2 MyAPIObject2, metaOwnerReferences []metav1.OwnerReference) { | ||||||
| 	fuzz.New().NilChance(.5).NumElements(1, 5).Fuzz(&myAPIObject2) | 	fuzz.New().NilChance(.5).NumElements(1, 5).Fuzz(&myAPIObject2) | ||||||
| 	references := myAPIObject2.ObjectMeta.OwnerReferences | 	references := myAPIObject2.ObjectMeta.OwnerReferences | ||||||
| 	// This is necessary for the test to pass because the getter will return a | 	// This is necessary for the test to pass because the getter will return a | ||||||
| @@ -348,6 +348,7 @@ func getObjectMetaAndOwnerRefereneces() (myAPIObject2 MyAPIObject2, metaOwnerRef | |||||||
| 			UID:                references[i].UID, | 			UID:                references[i].UID, | ||||||
| 			APIVersion:         references[i].APIVersion, | 			APIVersion:         references[i].APIVersion, | ||||||
| 			Controller:         references[i].Controller, | 			Controller:         references[i].Controller, | ||||||
|  | 			BlockOwnerDeletion: references[i].BlockOwnerDeletion, | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
| 	if len(references) == 0 { | 	if len(references) == 0 { | ||||||
| @@ -359,7 +360,7 @@ func getObjectMetaAndOwnerRefereneces() (myAPIObject2 MyAPIObject2, metaOwnerRef | |||||||
| } | } | ||||||
|  |  | ||||||
| func testGetOwnerReferences(t *testing.T) { | func testGetOwnerReferences(t *testing.T) { | ||||||
| 	obj, expected := getObjectMetaAndOwnerRefereneces() | 	obj, expected := getObjectMetaAndOwnerReferences() | ||||||
| 	accessor, err := meta.Accessor(&obj) | 	accessor, err := meta.Accessor(&obj) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		t.Error(err) | 		t.Error(err) | ||||||
| @@ -371,7 +372,7 @@ func testGetOwnerReferences(t *testing.T) { | |||||||
| } | } | ||||||
|  |  | ||||||
| func testSetOwnerReferences(t *testing.T) { | func testSetOwnerReferences(t *testing.T) { | ||||||
| 	expected, references := getObjectMetaAndOwnerRefereneces() | 	expected, references := getObjectMetaAndOwnerReferences() | ||||||
| 	obj := MyAPIObject2{} | 	obj := MyAPIObject2{} | ||||||
| 	accessor, err := meta.Accessor(&obj) | 	accessor, err := meta.Accessor(&obj) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
|   | |||||||
| @@ -123,6 +123,7 @@ func TestDecode(t *testing.T) { | |||||||
| } | } | ||||||
|  |  | ||||||
| func TestUnstructuredGetters(t *testing.T) { | func TestUnstructuredGetters(t *testing.T) { | ||||||
|  | 	trueVar := true | ||||||
| 	unstruct := unstructured.Unstructured{ | 	unstruct := unstructured.Unstructured{ | ||||||
| 		Object: map[string]interface{}{ | 		Object: map[string]interface{}{ | ||||||
| 			"kind":       "test_kind", | 			"kind":       "test_kind", | ||||||
| @@ -154,6 +155,10 @@ func TestUnstructuredGetters(t *testing.T) { | |||||||
| 						"name":       "podb", | 						"name":       "podb", | ||||||
| 						"apiVersion": "v1", | 						"apiVersion": "v1", | ||||||
| 						"uid":        "2", | 						"uid":        "2", | ||||||
|  | 						// though these fields are of type *bool, but when | ||||||
|  | 						// decoded from JSON, they are unmarshalled as bool. | ||||||
|  | 						"controller":         true, | ||||||
|  | 						"blockOwnerDeletion": true, | ||||||
| 					}, | 					}, | ||||||
| 				}, | 				}, | ||||||
| 				"finalizers": []interface{}{ | 				"finalizers": []interface{}{ | ||||||
| @@ -225,6 +230,8 @@ func TestUnstructuredGetters(t *testing.T) { | |||||||
| 			Name:               "podb", | 			Name:               "podb", | ||||||
| 			APIVersion:         "v1", | 			APIVersion:         "v1", | ||||||
| 			UID:                "2", | 			UID:                "2", | ||||||
|  | 			Controller:         &trueVar, | ||||||
|  | 			BlockOwnerDeletion: &trueVar, | ||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
| 	if got, want := refs, expectedOwnerReferences; !reflect.DeepEqual(got, want) { | 	if got, want := refs, expectedOwnerReferences; !reflect.DeepEqual(got, want) { | ||||||
| @@ -268,6 +275,7 @@ func TestUnstructuredSetters(t *testing.T) { | |||||||
| 						"apiVersion":         "v1", | 						"apiVersion":         "v1", | ||||||
| 						"uid":                "1", | 						"uid":                "1", | ||||||
| 						"controller":         (*bool)(nil), | 						"controller":         (*bool)(nil), | ||||||
|  | 						"blockOwnerDeletion": (*bool)(nil), | ||||||
| 					}, | 					}, | ||||||
| 					{ | 					{ | ||||||
| 						"kind":               "Pod", | 						"kind":               "Pod", | ||||||
| @@ -275,6 +283,7 @@ func TestUnstructuredSetters(t *testing.T) { | |||||||
| 						"apiVersion":         "v1", | 						"apiVersion":         "v1", | ||||||
| 						"uid":                "2", | 						"uid":                "2", | ||||||
| 						"controller":         &trueVar, | 						"controller":         &trueVar, | ||||||
|  | 						"blockOwnerDeletion": &trueVar, | ||||||
| 					}, | 					}, | ||||||
| 				}, | 				}, | ||||||
| 				"finalizers": []interface{}{ | 				"finalizers": []interface{}{ | ||||||
| @@ -312,6 +321,7 @@ func TestUnstructuredSetters(t *testing.T) { | |||||||
| 			APIVersion:         "v1", | 			APIVersion:         "v1", | ||||||
| 			UID:                "2", | 			UID:                "2", | ||||||
| 			Controller:         &trueVar, | 			Controller:         &trueVar, | ||||||
|  | 			BlockOwnerDeletion: &trueVar, | ||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
| 	unstruct.SetOwnerReferences(newOwnerReferences) | 	unstruct.SetOwnerReferences(newOwnerReferences) | ||||||
|   | |||||||
| @@ -191,7 +191,7 @@ func (m *PodControllerRefManager) AdoptPod(pod *v1.Pod) error { | |||||||
| 	// Note that ValidateOwnerReferences() will reject this patch if another | 	// Note that ValidateOwnerReferences() will reject this patch if another | ||||||
| 	// OwnerReference exists with controller=true. | 	// OwnerReference exists with controller=true. | ||||||
| 	addControllerPatch := fmt.Sprintf( | 	addControllerPatch := fmt.Sprintf( | ||||||
| 		`{"metadata":{"ownerReferences":[{"apiVersion":"%s","kind":"%s","name":"%s","uid":"%s","controller":true}],"uid":"%s"}}`, | 		`{"metadata":{"ownerReferences":[{"apiVersion":"%s","kind":"%s","name":"%s","uid":"%s","controller":true,"blockOwnerDeletion":true}],"uid":"%s"}}`, | ||||||
| 		m.controllerKind.GroupVersion(), m.controllerKind.Kind, | 		m.controllerKind.GroupVersion(), m.controllerKind.Kind, | ||||||
| 		m.controller.GetName(), m.controller.GetUID(), pod.UID) | 		m.controller.GetName(), m.controller.GetUID(), pod.UID) | ||||||
| 	return m.podControl.PatchPod(pod.Namespace, pod.Name, []byte(addControllerPatch)) | 	return m.podControl.PatchPod(pod.Namespace, pod.Name, []byte(addControllerPatch)) | ||||||
|   | |||||||
| @@ -483,6 +483,9 @@ func (r RealPodControl) CreatePodsWithControllerRef(namespace string, template * | |||||||
| 	if controllerRef.Controller == nil || *controllerRef.Controller != true { | 	if controllerRef.Controller == nil || *controllerRef.Controller != true { | ||||||
| 		return fmt.Errorf("controllerRef.Controller is not set") | 		return fmt.Errorf("controllerRef.Controller is not set") | ||||||
| 	} | 	} | ||||||
|  | 	if controllerRef.BlockOwnerDeletion == nil || *controllerRef.BlockOwnerDeletion != true { | ||||||
|  | 		return fmt.Errorf("controllerRef.BlockOwnerDeletion is not set") | ||||||
|  | 	} | ||||||
| 	return r.createPods("", namespace, template, controllerObject, controllerRef) | 	return r.createPods("", namespace, template, controllerObject, controllerRef) | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -12,14 +12,20 @@ go_library( | |||||||
|     name = "go_default_library", |     name = "go_default_library", | ||||||
|     srcs = [ |     srcs = [ | ||||||
|         "garbagecollector.go", |         "garbagecollector.go", | ||||||
|  |         "graph.go", | ||||||
|  |         "graph_builder.go", | ||||||
|         "metrics.go", |         "metrics.go", | ||||||
|  |         "operations.go", | ||||||
|  |         "patch.go", | ||||||
|         "rate_limiter_helper.go", |         "rate_limiter_helper.go", | ||||||
|         "uid_cache.go", |         "uid_cache.go", | ||||||
|     ], |     ], | ||||||
|     tags = ["automanaged"], |     tags = ["automanaged"], | ||||||
|     deps = [ |     deps = [ | ||||||
|  |         "//pkg/client/retry:go_default_library", | ||||||
|         "//pkg/controller/garbagecollector/metaonly:go_default_library", |         "//pkg/controller/garbagecollector/metaonly:go_default_library", | ||||||
|         "//pkg/util/metrics:go_default_library", |         "//pkg/util/metrics:go_default_library", | ||||||
|  |         "//pkg/util/workqueue/prometheus:go_default_library", | ||||||
|         "//vendor:github.com/golang/glog", |         "//vendor:github.com/golang/glog", | ||||||
|         "//vendor:github.com/golang/groupcache/lru", |         "//vendor:github.com/golang/groupcache/lru", | ||||||
|         "//vendor:github.com/prometheus/client_golang/prometheus", |         "//vendor:github.com/prometheus/client_golang/prometheus", | ||||||
| @@ -54,15 +60,16 @@ go_test( | |||||||
|         "//pkg/api/v1:go_default_library", |         "//pkg/api/v1:go_default_library", | ||||||
|         "//pkg/controller/garbagecollector/metaonly:go_default_library", |         "//pkg/controller/garbagecollector/metaonly:go_default_library", | ||||||
|         "//vendor:github.com/stretchr/testify/assert", |         "//vendor:github.com/stretchr/testify/assert", | ||||||
|  |         "//vendor:k8s.io/apimachinery/pkg/api/meta", | ||||||
|         "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", |         "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", | ||||||
|         "//vendor:k8s.io/apimachinery/pkg/runtime/schema", |         "//vendor:k8s.io/apimachinery/pkg/runtime/schema", | ||||||
|         "//vendor:k8s.io/apimachinery/pkg/runtime/serializer", |         "//vendor:k8s.io/apimachinery/pkg/runtime/serializer", | ||||||
|         "//vendor:k8s.io/apimachinery/pkg/types", |         "//vendor:k8s.io/apimachinery/pkg/types", | ||||||
|         "//vendor:k8s.io/apimachinery/pkg/util/json", |         "//vendor:k8s.io/apimachinery/pkg/util/json", | ||||||
|         "//vendor:k8s.io/apimachinery/pkg/util/sets", |         "//vendor:k8s.io/apimachinery/pkg/util/sets", | ||||||
|  |         "//vendor:k8s.io/apimachinery/pkg/util/strategicpatch", | ||||||
|         "//vendor:k8s.io/client-go/dynamic", |         "//vendor:k8s.io/client-go/dynamic", | ||||||
|         "//vendor:k8s.io/client-go/rest", |         "//vendor:k8s.io/client-go/rest", | ||||||
|         "//vendor:k8s.io/client-go/util/clock", |  | ||||||
|         "//vendor:k8s.io/client-go/util/workqueue", |         "//vendor:k8s.io/client-go/util/workqueue", | ||||||
|     ], |     ], | ||||||
| ) | ) | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -19,6 +19,7 @@ package garbagecollector | |||||||
| import ( | import ( | ||||||
| 	"net/http" | 	"net/http" | ||||||
| 	"net/http/httptest" | 	"net/http/httptest" | ||||||
|  | 	"reflect" | ||||||
| 	"strings" | 	"strings" | ||||||
| 	"sync" | 	"sync" | ||||||
| 	"testing" | 	"testing" | ||||||
| @@ -27,15 +28,16 @@ import ( | |||||||
|  |  | ||||||
| 	_ "k8s.io/kubernetes/pkg/api/install" | 	_ "k8s.io/kubernetes/pkg/api/install" | ||||||
|  |  | ||||||
|  | 	"k8s.io/apimachinery/pkg/api/meta" | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	"k8s.io/apimachinery/pkg/runtime/schema" | 	"k8s.io/apimachinery/pkg/runtime/schema" | ||||||
| 	"k8s.io/apimachinery/pkg/runtime/serializer" | 	"k8s.io/apimachinery/pkg/runtime/serializer" | ||||||
| 	"k8s.io/apimachinery/pkg/types" | 	"k8s.io/apimachinery/pkg/types" | ||||||
| 	"k8s.io/apimachinery/pkg/util/json" | 	"k8s.io/apimachinery/pkg/util/json" | ||||||
| 	"k8s.io/apimachinery/pkg/util/sets" | 	"k8s.io/apimachinery/pkg/util/sets" | ||||||
|  | 	"k8s.io/apimachinery/pkg/util/strategicpatch" | ||||||
| 	"k8s.io/client-go/dynamic" | 	"k8s.io/client-go/dynamic" | ||||||
| 	restclient "k8s.io/client-go/rest" | 	restclient "k8s.io/client-go/rest" | ||||||
| 	"k8s.io/client-go/util/clock" |  | ||||||
| 	"k8s.io/client-go/util/workqueue" | 	"k8s.io/client-go/util/workqueue" | ||||||
| 	"k8s.io/kubernetes/pkg/api" | 	"k8s.io/kubernetes/pkg/api" | ||||||
| 	"k8s.io/kubernetes/pkg/api/v1" | 	"k8s.io/kubernetes/pkg/api/v1" | ||||||
| @@ -53,7 +55,7 @@ func TestNewGarbageCollector(t *testing.T) { | |||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		t.Fatal(err) | 		t.Fatal(err) | ||||||
| 	} | 	} | ||||||
| 	assert.Equal(t, 1, len(gc.monitors)) | 	assert.Equal(t, 1, len(gc.dependencyGraphBuilder.monitors)) | ||||||
| } | } | ||||||
|  |  | ||||||
| // fakeAction records information about requests to aid in testing. | // fakeAction records information about requests to aid in testing. | ||||||
| @@ -142,8 +144,8 @@ func serilizeOrDie(t *testing.T, object interface{}) []byte { | |||||||
| 	return data | 	return data | ||||||
| } | } | ||||||
|  |  | ||||||
| // test the processItem function making the expected actions. | // test the attemptToDeleteItem function making the expected actions. | ||||||
| func TestProcessItem(t *testing.T) { | func TestAttemptToDeleteItem(t *testing.T) { | ||||||
| 	pod := getPod("ToBeDeletedPod", []metav1.OwnerReference{ | 	pod := getPod("ToBeDeletedPod", []metav1.OwnerReference{ | ||||||
| 		{ | 		{ | ||||||
| 			Kind:       "ReplicationController", | 			Kind:       "ReplicationController", | ||||||
| @@ -177,10 +179,10 @@ func TestProcessItem(t *testing.T) { | |||||||
| 			}, | 			}, | ||||||
| 			Namespace: pod.Namespace, | 			Namespace: pod.Namespace, | ||||||
| 		}, | 		}, | ||||||
| 		// owners are intentionally left empty. The processItem routine should get the latest item from the server. | 		// owners are intentionally left empty. The attemptToDeleteItem routine should get the latest item from the server. | ||||||
| 		owners: nil, | 		owners: nil, | ||||||
| 	} | 	} | ||||||
| 	err := gc.processItem(item) | 	err := gc.attemptToDeleteItem(item) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		t.Errorf("Unexpected Error: %v", err) | 		t.Errorf("Unexpected Error: %v", err) | ||||||
| 	} | 	} | ||||||
| @@ -249,7 +251,7 @@ func TestProcessEvent(t *testing.T) { | |||||||
| 	var testScenarios = []struct { | 	var testScenarios = []struct { | ||||||
| 		name string | 		name string | ||||||
| 		// a series of events that will be supplied to the | 		// a series of events that will be supplied to the | ||||||
| 		// Propagator.eventQueue. | 		// GraphBuilder.eventQueue. | ||||||
| 		events []event | 		events []event | ||||||
| 	}{ | 	}{ | ||||||
| 		{ | 		{ | ||||||
| @@ -293,22 +295,19 @@ func TestProcessEvent(t *testing.T) { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	for _, scenario := range testScenarios { | 	for _, scenario := range testScenarios { | ||||||
| 		propagator := &Propagator{ | 		dependencyGraphBuilder := &GraphBuilder{ | ||||||
| 			eventQueue: workqueue.NewTimedWorkQueue(), | 			graphChanges: workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter()), | ||||||
| 			uidToNode: &concurrentUIDToNode{ | 			uidToNode: &concurrentUIDToNode{ | ||||||
| 				RWMutex:   &sync.RWMutex{}, | 				uidToNodeLock: sync.RWMutex{}, | ||||||
| 				uidToNode:     make(map[types.UID]*node), | 				uidToNode:     make(map[types.UID]*node), | ||||||
| 			}, | 			}, | ||||||
| 			gc: &GarbageCollector{ | 			attemptToDelete:  workqueue.NewRateLimitingQueue(workqueue.DefaultControllerRateLimiter()), | ||||||
| 				dirtyQueue:       workqueue.NewTimedWorkQueue(), |  | ||||||
| 				clock:            clock.RealClock{}, |  | ||||||
| 			absentOwnerCache: NewUIDCache(2), | 			absentOwnerCache: NewUIDCache(2), | ||||||
| 			}, |  | ||||||
| 		} | 		} | ||||||
| 		for i := 0; i < len(scenario.events); i++ { | 		for i := 0; i < len(scenario.events); i++ { | ||||||
| 			propagator.eventQueue.Add(&workqueue.TimedWorkQueueItem{StartTime: propagator.gc.clock.Now(), Object: &scenario.events[i]}) | 			dependencyGraphBuilder.graphChanges.Add(&scenario.events[i]) | ||||||
| 			propagator.processEvent() | 			dependencyGraphBuilder.processGraphChanges() | ||||||
| 			verifyGraphInvariants(scenario.name, propagator.uidToNode.uidToNode, t) | 			verifyGraphInvariants(scenario.name, dependencyGraphBuilder.uidToNode.uidToNode, t) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @@ -321,18 +320,18 @@ func TestDependentsRace(t *testing.T) { | |||||||
| 	const updates = 100 | 	const updates = 100 | ||||||
| 	owner := &node{dependents: make(map[*node]struct{})} | 	owner := &node{dependents: make(map[*node]struct{})} | ||||||
| 	ownerUID := types.UID("owner") | 	ownerUID := types.UID("owner") | ||||||
| 	gc.propagator.uidToNode.Write(owner) | 	gc.dependencyGraphBuilder.uidToNode.Write(owner) | ||||||
| 	go func() { | 	go func() { | ||||||
| 		for i := 0; i < updates; i++ { | 		for i := 0; i < updates; i++ { | ||||||
| 			dependent := &node{} | 			dependent := &node{} | ||||||
| 			gc.propagator.addDependentToOwners(dependent, []metav1.OwnerReference{{UID: ownerUID}}) | 			gc.dependencyGraphBuilder.addDependentToOwners(dependent, []metav1.OwnerReference{{UID: ownerUID}}) | ||||||
| 			gc.propagator.removeDependentFromOwners(dependent, []metav1.OwnerReference{{UID: ownerUID}}) | 			gc.dependencyGraphBuilder.removeDependentFromOwners(dependent, []metav1.OwnerReference{{UID: ownerUID}}) | ||||||
| 		} | 		} | ||||||
| 	}() | 	}() | ||||||
| 	go func() { | 	go func() { | ||||||
| 		gc.orphanQueue.Add(&workqueue.TimedWorkQueueItem{StartTime: gc.clock.Now(), Object: owner}) | 		gc.attemptToOrphan.Add(owner) | ||||||
| 		for i := 0; i < updates; i++ { | 		for i := 0; i < updates; i++ { | ||||||
| 			gc.orphanFinalizer() | 			gc.attemptToOrphanWorker() | ||||||
| 		} | 		} | ||||||
| 	}() | 	}() | ||||||
| } | } | ||||||
| @@ -348,9 +347,13 @@ func TestGCListWatcher(t *testing.T) { | |||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		t.Fatal(err) | 		t.Fatal(err) | ||||||
| 	} | 	} | ||||||
| 	lw := gcListWatcher(client, podResource) | 	lw := listWatcher(client, podResource) | ||||||
| 	lw.Watch(metav1.ListOptions{ResourceVersion: "1"}) | 	if _, err := lw.Watch(metav1.ListOptions{ResourceVersion: "1"}); err != nil { | ||||||
| 	lw.List(metav1.ListOptions{ResourceVersion: "1"}) | 		t.Fatal(err) | ||||||
|  | 	} | ||||||
|  | 	if _, err := lw.List(metav1.ListOptions{ResourceVersion: "1"}); err != nil { | ||||||
|  | 		t.Fatal(err) | ||||||
|  | 	} | ||||||
| 	if e, a := 2, len(testHandler.actions); e != a { | 	if e, a := 2, len(testHandler.actions); e != a { | ||||||
| 		t.Errorf("expect %d requests, got %d", e, a) | 		t.Errorf("expect %d requests, got %d", e, a) | ||||||
| 	} | 	} | ||||||
| @@ -373,7 +376,7 @@ func podToGCNode(pod *v1.Pod) *node { | |||||||
| 			}, | 			}, | ||||||
| 			Namespace: pod.Namespace, | 			Namespace: pod.Namespace, | ||||||
| 		}, | 		}, | ||||||
| 		// owners are intentionally left empty. The processItem routine should get the latest item from the server. | 		// owners are intentionally left empty. The attemptToDeleteItem routine should get the latest item from the server. | ||||||
| 		owners: nil, | 		owners: nil, | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @@ -447,12 +450,12 @@ func TestAbsentUIDCache(t *testing.T) { | |||||||
| 	defer srv.Close() | 	defer srv.Close() | ||||||
| 	gc := setupGC(t, clientConfig) | 	gc := setupGC(t, clientConfig) | ||||||
| 	gc.absentOwnerCache = NewUIDCache(2) | 	gc.absentOwnerCache = NewUIDCache(2) | ||||||
| 	gc.processItem(podToGCNode(rc1Pod1)) | 	gc.attemptToDeleteItem(podToGCNode(rc1Pod1)) | ||||||
| 	gc.processItem(podToGCNode(rc2Pod1)) | 	gc.attemptToDeleteItem(podToGCNode(rc2Pod1)) | ||||||
| 	// rc1 should already be in the cache, no request should be sent. rc1 should be promoted in the UIDCache | 	// rc1 should already be in the cache, no request should be sent. rc1 should be promoted in the UIDCache | ||||||
| 	gc.processItem(podToGCNode(rc1Pod2)) | 	gc.attemptToDeleteItem(podToGCNode(rc1Pod2)) | ||||||
| 	// after this call, rc2 should be evicted from the UIDCache | 	// after this call, rc2 should be evicted from the UIDCache | ||||||
| 	gc.processItem(podToGCNode(rc3Pod1)) | 	gc.attemptToDeleteItem(podToGCNode(rc3Pod1)) | ||||||
| 	// check cache | 	// check cache | ||||||
| 	if !gc.absentOwnerCache.Has(types.UID("1")) { | 	if !gc.absentOwnerCache.Has(types.UID("1")) { | ||||||
| 		t.Errorf("expected rc1 to be in the cache") | 		t.Errorf("expected rc1 to be in the cache") | ||||||
| @@ -474,3 +477,89 @@ func TestAbsentUIDCache(t *testing.T) { | |||||||
| 		t.Errorf("expected only 1 GET rc1 request, got %d", count) | 		t.Errorf("expected only 1 GET rc1 request, got %d", count) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestDeleteOwnerRefPatch(t *testing.T) { | ||||||
|  | 	original := v1.Pod{ | ||||||
|  | 		ObjectMeta: metav1.ObjectMeta{ | ||||||
|  | 			UID: "100", | ||||||
|  | 			OwnerReferences: []metav1.OwnerReference{ | ||||||
|  | 				{UID: "1"}, | ||||||
|  | 				{UID: "2"}, | ||||||
|  | 				{UID: "3"}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 	originalData := serilizeOrDie(t, original) | ||||||
|  | 	expected := v1.Pod{ | ||||||
|  | 		ObjectMeta: metav1.ObjectMeta{ | ||||||
|  | 			UID: "100", | ||||||
|  | 			OwnerReferences: []metav1.OwnerReference{ | ||||||
|  | 				{UID: "1"}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 	patch := deleteOwnerRefPatch("100", "2", "3") | ||||||
|  | 	patched, err := strategicpatch.StrategicMergePatch(originalData, patch, v1.Pod{}) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatal(err) | ||||||
|  | 	} | ||||||
|  | 	var got v1.Pod | ||||||
|  | 	if err := json.Unmarshal(patched, &got); err != nil { | ||||||
|  | 		t.Fatal(err) | ||||||
|  | 	} | ||||||
|  | 	if !reflect.DeepEqual(expected, got) { | ||||||
|  | 		t.Errorf("expected: %#v,\ngot: %#v", expected, got) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestUnblockOwnerReference(t *testing.T) { | ||||||
|  | 	trueVar := true | ||||||
|  | 	falseVar := false | ||||||
|  | 	original := v1.Pod{ | ||||||
|  | 		ObjectMeta: metav1.ObjectMeta{ | ||||||
|  | 			UID: "100", | ||||||
|  | 			OwnerReferences: []metav1.OwnerReference{ | ||||||
|  | 				{UID: "1", BlockOwnerDeletion: &trueVar}, | ||||||
|  | 				{UID: "2", BlockOwnerDeletion: &falseVar}, | ||||||
|  | 				{UID: "3"}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 	originalData := serilizeOrDie(t, original) | ||||||
|  | 	expected := v1.Pod{ | ||||||
|  | 		ObjectMeta: metav1.ObjectMeta{ | ||||||
|  | 			UID: "100", | ||||||
|  | 			OwnerReferences: []metav1.OwnerReference{ | ||||||
|  | 				{UID: "1", BlockOwnerDeletion: &falseVar}, | ||||||
|  | 				{UID: "2", BlockOwnerDeletion: &falseVar}, | ||||||
|  | 				{UID: "3"}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 	accessor, err := meta.Accessor(&original) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatal(err) | ||||||
|  | 	} | ||||||
|  | 	n := node{ | ||||||
|  | 		owners: accessor.GetOwnerReferences(), | ||||||
|  | 	} | ||||||
|  | 	patch, err := n.patchToUnblockOwnerReferences() | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatal(err) | ||||||
|  | 	} | ||||||
|  | 	patched, err := strategicpatch.StrategicMergePatch(originalData, patch, v1.Pod{}) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatal(err) | ||||||
|  | 	} | ||||||
|  | 	var got v1.Pod | ||||||
|  | 	if err := json.Unmarshal(patched, &got); err != nil { | ||||||
|  | 		t.Fatal(err) | ||||||
|  | 	} | ||||||
|  | 	if !reflect.DeepEqual(expected, got) { | ||||||
|  | 		t.Errorf("expected: %#v,\ngot: %#v", expected, got) | ||||||
|  | 		t.Errorf("expected: %#v,\ngot: %#v", expected.OwnerReferences, got.OwnerReferences) | ||||||
|  | 		for _, ref := range got.OwnerReferences { | ||||||
|  | 			t.Errorf("ref.UID=%s, ref.BlockOwnerDeletion=%v", ref.UID, *ref.BlockOwnerDeletion) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|   | |||||||
							
								
								
									
										159
									
								
								pkg/controller/garbagecollector/graph.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										159
									
								
								pkg/controller/garbagecollector/graph.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,159 @@ | |||||||
|  | /* | ||||||
|  | Copyright 2016 The Kubernetes Authors. | ||||||
|  |  | ||||||
|  | Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | you may not use this file except in compliance with the License. | ||||||
|  | You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  |     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  | Unless required by applicable law or agreed to in writing, software | ||||||
|  | distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | See the License for the specific language governing permissions and | ||||||
|  | limitations under the License. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | package garbagecollector | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"sync" | ||||||
|  |  | ||||||
|  | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
|  | 	"k8s.io/apimachinery/pkg/types" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type objectReference struct { | ||||||
|  | 	metav1.OwnerReference | ||||||
|  | 	// This is needed by the dynamic client | ||||||
|  | 	Namespace string | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (s objectReference) String() string { | ||||||
|  | 	return fmt.Sprintf("[%s/%s, namespace: %s, name: %s, uid: %s]", s.APIVersion, s.Kind, s.Namespace, s.Name, s.UID) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // The single-threaded GraphBuilder.processEvent() is the sole writer of the | ||||||
|  | // nodes. The multi-threaded GarbageCollector.processItem() reads the nodes. | ||||||
|  | // WARNING: node has different locks on different fields. setters and getters | ||||||
|  | // use the respective locks, so the return values of the getters can be | ||||||
|  | // inconsistent. | ||||||
|  | type node struct { | ||||||
|  | 	identity objectReference | ||||||
|  | 	// dependents will be read by the orphan() routine, we need to protect it with a lock. | ||||||
|  | 	dependentsLock sync.RWMutex | ||||||
|  | 	// dependents are the nodes that have node.identity as a | ||||||
|  | 	// metadata.ownerReference. | ||||||
|  | 	dependents map[*node]struct{} | ||||||
|  | 	// this is set by processEvent() if the object has non-nil DeletionTimestamp | ||||||
|  | 	// and has the FinalizerDeleteDependents. | ||||||
|  | 	deletingDependents     bool | ||||||
|  | 	deletingDependentsLock sync.RWMutex | ||||||
|  | 	// this records if the object's deletionTimestamp is non-nil. | ||||||
|  | 	beingDeleted     bool | ||||||
|  | 	beingDeletedLock sync.RWMutex | ||||||
|  | 	// when processing an Update event, we need to compare the updated | ||||||
|  | 	// ownerReferences with the owners recorded in the graph. | ||||||
|  | 	owners []metav1.OwnerReference | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // An object is on a one way trip to its final deletion if it starts being | ||||||
|  | // deleted, so we only provide a function to set beingDeleted to true. | ||||||
|  | func (n *node) markBeingDeleted() { | ||||||
|  | 	n.beingDeletedLock.Lock() | ||||||
|  | 	defer n.beingDeletedLock.Unlock() | ||||||
|  | 	n.beingDeleted = true | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (n *node) isBeingDeleted() bool { | ||||||
|  | 	n.beingDeletedLock.RLock() | ||||||
|  | 	defer n.beingDeletedLock.RUnlock() | ||||||
|  | 	return n.beingDeleted | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (n *node) markDeletingDependents() { | ||||||
|  | 	n.deletingDependentsLock.Lock() | ||||||
|  | 	defer n.deletingDependentsLock.Unlock() | ||||||
|  | 	n.deletingDependents = true | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (n *node) isDeletingDependents() bool { | ||||||
|  | 	n.deletingDependentsLock.RLock() | ||||||
|  | 	defer n.deletingDependentsLock.RUnlock() | ||||||
|  | 	return n.deletingDependents | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (ownerNode *node) addDependent(dependent *node) { | ||||||
|  | 	ownerNode.dependentsLock.Lock() | ||||||
|  | 	defer ownerNode.dependentsLock.Unlock() | ||||||
|  | 	ownerNode.dependents[dependent] = struct{}{} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (ownerNode *node) deleteDependent(dependent *node) { | ||||||
|  | 	ownerNode.dependentsLock.Lock() | ||||||
|  | 	defer ownerNode.dependentsLock.Unlock() | ||||||
|  | 	delete(ownerNode.dependents, dependent) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (ownerNode *node) dependentsLength() int { | ||||||
|  | 	ownerNode.dependentsLock.RLock() | ||||||
|  | 	defer ownerNode.dependentsLock.RUnlock() | ||||||
|  | 	return len(ownerNode.dependents) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Note that this function does not provide any synchronization guarantees; | ||||||
|  | // items could be added to or removed from ownerNode.dependents the moment this | ||||||
|  | // function returns. | ||||||
|  | func (ownerNode *node) getDependents() []*node { | ||||||
|  | 	ownerNode.dependentsLock.RLock() | ||||||
|  | 	defer ownerNode.dependentsLock.RUnlock() | ||||||
|  | 	var ret []*node | ||||||
|  | 	for dep := range ownerNode.dependents { | ||||||
|  | 		ret = append(ret, dep) | ||||||
|  | 	} | ||||||
|  | 	return ret | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // blockingDependents returns the dependents that are blocking the deletion of | ||||||
|  | // n, i.e., the dependent that has an ownerReference pointing to n, and | ||||||
|  | // the BlockOwnerDeletion field of that ownerReference is true. | ||||||
|  | // Note that this function does not provide any synchronization guarantees; | ||||||
|  | // items could be added to or removed from ownerNode.dependents the moment this | ||||||
|  | // function returns. | ||||||
|  | func (n *node) blockingDependents() []*node { | ||||||
|  | 	dependents := n.getDependents() | ||||||
|  | 	var ret []*node | ||||||
|  | 	for _, dep := range dependents { | ||||||
|  | 		for _, owner := range dep.owners { | ||||||
|  | 			if owner.UID == n.identity.UID && owner.BlockOwnerDeletion != nil && *owner.BlockOwnerDeletion { | ||||||
|  | 				ret = append(ret, dep) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return ret | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type concurrentUIDToNode struct { | ||||||
|  | 	uidToNodeLock sync.RWMutex | ||||||
|  | 	uidToNode     map[types.UID]*node | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *concurrentUIDToNode) Write(node *node) { | ||||||
|  | 	m.uidToNodeLock.Lock() | ||||||
|  | 	defer m.uidToNodeLock.Unlock() | ||||||
|  | 	m.uidToNode[node.identity.UID] = node | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *concurrentUIDToNode) Read(uid types.UID) (*node, bool) { | ||||||
|  | 	m.uidToNodeLock.RLock() | ||||||
|  | 	defer m.uidToNodeLock.RUnlock() | ||||||
|  | 	n, ok := m.uidToNode[uid] | ||||||
|  | 	return n, ok | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *concurrentUIDToNode) Delete(uid types.UID) { | ||||||
|  | 	m.uidToNodeLock.Lock() | ||||||
|  | 	defer m.uidToNodeLock.Unlock() | ||||||
|  | 	delete(m.uidToNode, uid) | ||||||
|  | } | ||||||
							
								
								
									
										497
									
								
								pkg/controller/garbagecollector/graph_builder.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										497
									
								
								pkg/controller/garbagecollector/graph_builder.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,497 @@ | |||||||
|  | /* | ||||||
|  | Copyright 2016 The Kubernetes Authors. | ||||||
|  |  | ||||||
|  | Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | you may not use this file except in compliance with the License. | ||||||
|  | You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  |     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  | Unless required by applicable law or agreed to in writing, software | ||||||
|  | distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | See the License for the specific language governing permissions and | ||||||
|  | limitations under the License. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | package garbagecollector | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"reflect" | ||||||
|  | 	"time" | ||||||
|  |  | ||||||
|  | 	"github.com/golang/glog" | ||||||
|  |  | ||||||
|  | 	"k8s.io/apimachinery/pkg/api/meta" | ||||||
|  | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
|  | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
|  | 	"k8s.io/apimachinery/pkg/runtime/schema" | ||||||
|  | 	utilruntime "k8s.io/apimachinery/pkg/util/runtime" | ||||||
|  | 	"k8s.io/apimachinery/pkg/util/sets" | ||||||
|  | 	"k8s.io/apimachinery/pkg/util/wait" | ||||||
|  | 	"k8s.io/apimachinery/pkg/watch" | ||||||
|  | 	"k8s.io/client-go/dynamic" | ||||||
|  | 	"k8s.io/client-go/tools/cache" | ||||||
|  | 	"k8s.io/client-go/util/workqueue" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type eventType int | ||||||
|  |  | ||||||
|  | const ( | ||||||
|  | 	addEvent eventType = iota | ||||||
|  | 	updateEvent | ||||||
|  | 	deleteEvent | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type event struct { | ||||||
|  | 	eventType eventType | ||||||
|  | 	obj       interface{} | ||||||
|  | 	// the update event comes with an old object, but it's not used by the garbage collector. | ||||||
|  | 	oldObj interface{} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // GraphBuilder: based on the events supplied by the informers, GraphBuilder updates | ||||||
|  | // uidToNode, a graph that caches the dependencies as we know, and enqueues | ||||||
|  | // items to the attemptToDelete and attemptToOrphan. | ||||||
|  | type GraphBuilder struct { | ||||||
|  | 	restMapper meta.RESTMapper | ||||||
|  | 	// each monitor list/watches a resource, the results are funneled to the | ||||||
|  | 	// dependencyGraphBuilder | ||||||
|  | 	monitors []cache.Controller | ||||||
|  | 	// metaOnlyClientPool uses a special codec, which removes fields except for | ||||||
|  | 	// apiVersion, kind, and metadata during decoding. | ||||||
|  | 	metaOnlyClientPool dynamic.ClientPool | ||||||
|  | 	// used to register exactly once the rate limiters of the clients used by | ||||||
|  | 	// the `monitors`. | ||||||
|  | 	registeredRateLimiterForControllers *RegisteredRateLimiter | ||||||
|  | 	// monitors are the producer of the graphChanges queue, graphBuilder alters | ||||||
|  | 	// the in-memory graph according to the changes. | ||||||
|  | 	graphChanges workqueue.RateLimitingInterface | ||||||
|  | 	// uidToNode doesn't require a lock to protect, because only the | ||||||
|  | 	// single-threaded GraphBuilder.processGraphChanges() reads/writes it. | ||||||
|  | 	uidToNode *concurrentUIDToNode | ||||||
|  | 	// GraphBuilder is the producer of attemptToDelete and attemptToOrphan, GC is the consumer. | ||||||
|  | 	attemptToDelete workqueue.RateLimitingInterface | ||||||
|  | 	attemptToOrphan workqueue.RateLimitingInterface | ||||||
|  | 	// GraphBuilder and GC share the absentOwnerCache. Objects that are known to | ||||||
|  | 	// be non-existent are added to the cached. | ||||||
|  | 	absentOwnerCache *UIDCache | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func listWatcher(client *dynamic.Client, resource schema.GroupVersionResource) *cache.ListWatch { | ||||||
|  | 	return &cache.ListWatch{ | ||||||
|  | 		ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { | ||||||
|  | 			// APIResource.Kind is not used by the dynamic client, so | ||||||
|  | 			// leave it empty. We want to list this resource in all | ||||||
|  | 			// namespaces if it's namespace scoped, so leave | ||||||
|  | 			// APIResource.Namespaced as false is all right. | ||||||
|  | 			apiResource := metav1.APIResource{Name: resource.Resource} | ||||||
|  | 			return client.ParameterCodec(dynamic.VersionedParameterEncoderWithV1Fallback). | ||||||
|  | 				Resource(&apiResource, metav1.NamespaceAll). | ||||||
|  | 				List(options) | ||||||
|  | 		}, | ||||||
|  | 		WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { | ||||||
|  | 			// APIResource.Kind is not used by the dynamic client, so | ||||||
|  | 			// leave it empty. We want to list this resource in all | ||||||
|  | 			// namespaces if it's namespace scoped, so leave | ||||||
|  | 			// APIResource.Namespaced as false is all right. | ||||||
|  | 			apiResource := metav1.APIResource{Name: resource.Resource} | ||||||
|  | 			return client.ParameterCodec(dynamic.VersionedParameterEncoderWithV1Fallback). | ||||||
|  | 				Resource(&apiResource, metav1.NamespaceAll). | ||||||
|  | 				Watch(options) | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (gb *GraphBuilder) controllerFor(resource schema.GroupVersionResource, kind schema.GroupVersionKind) (cache.Controller, error) { | ||||||
|  | 	// TODO: consider store in one storage. | ||||||
|  | 	glog.V(5).Infof("create storage for resource %s", resource) | ||||||
|  | 	client, err := gb.metaOnlyClientPool.ClientForGroupVersionKind(kind) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	gb.registeredRateLimiterForControllers.registerIfNotPresent(resource.GroupVersion(), client, "garbage_collector_monitoring") | ||||||
|  | 	setObjectTypeMeta := func(obj interface{}) { | ||||||
|  | 		runtimeObject, ok := obj.(runtime.Object) | ||||||
|  | 		if !ok { | ||||||
|  | 			utilruntime.HandleError(fmt.Errorf("expected runtime.Object, got %#v", obj)) | ||||||
|  | 		} | ||||||
|  | 		runtimeObject.GetObjectKind().SetGroupVersionKind(kind) | ||||||
|  | 	} | ||||||
|  | 	_, monitor := cache.NewInformer( | ||||||
|  | 		listWatcher(client, resource), | ||||||
|  | 		nil, | ||||||
|  | 		ResourceResyncTime, | ||||||
|  | 		cache.ResourceEventHandlerFuncs{ | ||||||
|  | 			// add the event to the dependencyGraphBuilder's graphChanges. | ||||||
|  | 			AddFunc: func(obj interface{}) { | ||||||
|  | 				setObjectTypeMeta(obj) | ||||||
|  | 				event := &event{ | ||||||
|  | 					eventType: addEvent, | ||||||
|  | 					obj:       obj, | ||||||
|  | 				} | ||||||
|  | 				gb.graphChanges.Add(event) | ||||||
|  | 			}, | ||||||
|  | 			UpdateFunc: func(oldObj, newObj interface{}) { | ||||||
|  | 				setObjectTypeMeta(newObj) | ||||||
|  | 				// TODO: check if there are differences in the ownerRefs, | ||||||
|  | 				// finalizers, and DeletionTimestamp; if not, ignore the update. | ||||||
|  | 				event := &event{updateEvent, newObj, oldObj} | ||||||
|  | 				gb.graphChanges.Add(event) | ||||||
|  | 			}, | ||||||
|  | 			DeleteFunc: func(obj interface{}) { | ||||||
|  | 				// delta fifo may wrap the object in a cache.DeletedFinalStateUnknown, unwrap it | ||||||
|  | 				if deletedFinalStateUnknown, ok := obj.(cache.DeletedFinalStateUnknown); ok { | ||||||
|  | 					obj = deletedFinalStateUnknown.Obj | ||||||
|  | 				} | ||||||
|  | 				setObjectTypeMeta(obj) | ||||||
|  | 				event := &event{ | ||||||
|  | 					eventType: deleteEvent, | ||||||
|  | 					obj:       obj, | ||||||
|  | 				} | ||||||
|  | 				gb.graphChanges.Add(event) | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 	) | ||||||
|  | 	return monitor, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (gb *GraphBuilder) monitorsForResources(resources map[schema.GroupVersionResource]struct{}) error { | ||||||
|  | 	for resource := range resources { | ||||||
|  | 		if _, ok := ignoredResources[resource]; ok { | ||||||
|  | 			glog.V(5).Infof("ignore resource %#v", resource) | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		kind, err := gb.restMapper.KindFor(resource) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return err | ||||||
|  | 		} | ||||||
|  | 		monitor, err := gb.controllerFor(resource, kind) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return err | ||||||
|  | 		} | ||||||
|  | 		gb.monitors = append(gb.monitors, monitor) | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (gb *GraphBuilder) HasSynced() bool { | ||||||
|  | 	for _, monitor := range gb.monitors { | ||||||
|  | 		if !monitor.HasSynced() { | ||||||
|  | 			return false | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return true | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (gb *GraphBuilder) Run(stopCh <-chan struct{}) { | ||||||
|  | 	for _, monitor := range gb.monitors { | ||||||
|  | 		go monitor.Run(stopCh) | ||||||
|  | 	} | ||||||
|  | 	go wait.Until(gb.runProcessGraphChanges, 1*time.Second, stopCh) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var ignoredResources = map[schema.GroupVersionResource]struct{}{ | ||||||
|  | 	schema.GroupVersionResource{Group: "extensions", Version: "v1beta1", Resource: "replicationcontrollers"}:              {}, | ||||||
|  | 	schema.GroupVersionResource{Group: "", Version: "v1", Resource: "bindings"}:                                           {}, | ||||||
|  | 	schema.GroupVersionResource{Group: "", Version: "v1", Resource: "componentstatuses"}:                                  {}, | ||||||
|  | 	schema.GroupVersionResource{Group: "", Version: "v1", Resource: "events"}:                                             {}, | ||||||
|  | 	schema.GroupVersionResource{Group: "authentication.k8s.io", Version: "v1beta1", Resource: "tokenreviews"}:             {}, | ||||||
|  | 	schema.GroupVersionResource{Group: "authorization.k8s.io", Version: "v1beta1", Resource: "subjectaccessreviews"}:      {}, | ||||||
|  | 	schema.GroupVersionResource{Group: "authorization.k8s.io", Version: "v1beta1", Resource: "selfsubjectaccessreviews"}:  {}, | ||||||
|  | 	schema.GroupVersionResource{Group: "authorization.k8s.io", Version: "v1beta1", Resource: "localsubjectaccessreviews"}: {}, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (gb *GraphBuilder) enqueueChanges(e *event) { | ||||||
|  | 	gb.graphChanges.Add(e) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // addDependentToOwners adds n to owners' dependents list. If the owner does not | ||||||
|  | // exist in the gb.uidToNode yet, a "virtual" node will be created to represent | ||||||
|  | // the owner. The "virtual" node will be enqueued to the attemptToDelete, so that | ||||||
|  | // processItem() will verify if the owner exists according to the API server. | ||||||
|  | func (gb *GraphBuilder) addDependentToOwners(n *node, owners []metav1.OwnerReference) { | ||||||
|  | 	for _, owner := range owners { | ||||||
|  | 		ownerNode, ok := gb.uidToNode.Read(owner.UID) | ||||||
|  | 		if !ok { | ||||||
|  | 			// Create a "virtual" node in the graph for the owner if it doesn't | ||||||
|  | 			// exist in the graph yet. Then enqueue the virtual node into the | ||||||
|  | 			// attemptToDelete. The garbage processor will enqueue a virtual delete | ||||||
|  | 			// event to delete it from the graph if API server confirms this | ||||||
|  | 			// owner doesn't exist. | ||||||
|  | 			ownerNode = &node{ | ||||||
|  | 				identity: objectReference{ | ||||||
|  | 					OwnerReference: owner, | ||||||
|  | 					Namespace:      n.identity.Namespace, | ||||||
|  | 				}, | ||||||
|  | 				dependents: make(map[*node]struct{}), | ||||||
|  | 			} | ||||||
|  | 			glog.V(5).Infof("add virtual node.identity: %s\n\n", ownerNode.identity) | ||||||
|  | 			gb.uidToNode.Write(ownerNode) | ||||||
|  | 			gb.attemptToDelete.Add(ownerNode) | ||||||
|  | 		} | ||||||
|  | 		ownerNode.addDependent(n) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // insertNode insert the node to gb.uidToNode; then it finds all owners as listed | ||||||
|  | // in n.owners, and adds the node to their dependents list. | ||||||
|  | func (gb *GraphBuilder) insertNode(n *node) { | ||||||
|  | 	gb.uidToNode.Write(n) | ||||||
|  | 	gb.addDependentToOwners(n, n.owners) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // removeDependentFromOwners remove n from owners' dependents list. | ||||||
|  | func (gb *GraphBuilder) removeDependentFromOwners(n *node, owners []metav1.OwnerReference) { | ||||||
|  | 	for _, owner := range owners { | ||||||
|  | 		ownerNode, ok := gb.uidToNode.Read(owner.UID) | ||||||
|  | 		if !ok { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		ownerNode.deleteDependent(n) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // removeNode removes the node from gb.uidToNode, then finds all | ||||||
|  | // owners as listed in n.owners, and removes n from their dependents list. | ||||||
|  | func (gb *GraphBuilder) removeNode(n *node) { | ||||||
|  | 	gb.uidToNode.Delete(n.identity.UID) | ||||||
|  | 	gb.removeDependentFromOwners(n, n.owners) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type ownerRefPair struct { | ||||||
|  | 	oldRef metav1.OwnerReference | ||||||
|  | 	newRef metav1.OwnerReference | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // TODO: profile this function to see if a naive N^2 algorithm performs better | ||||||
|  | // when the number of references is small. | ||||||
|  | func referencesDiffs(old []metav1.OwnerReference, new []metav1.OwnerReference) (added []metav1.OwnerReference, removed []metav1.OwnerReference, changed []ownerRefPair) { | ||||||
|  | 	oldUIDToRef := make(map[string]metav1.OwnerReference) | ||||||
|  | 	for i := 0; i < len(old); i++ { | ||||||
|  | 		oldUIDToRef[string(old[i].UID)] = old[i] | ||||||
|  | 	} | ||||||
|  | 	oldUIDSet := sets.StringKeySet(oldUIDToRef) | ||||||
|  | 	newUIDToRef := make(map[string]metav1.OwnerReference) | ||||||
|  | 	for i := 0; i < len(new); i++ { | ||||||
|  | 		newUIDToRef[string(new[i].UID)] = new[i] | ||||||
|  | 	} | ||||||
|  | 	newUIDSet := sets.StringKeySet(newUIDToRef) | ||||||
|  |  | ||||||
|  | 	addedUID := newUIDSet.Difference(oldUIDSet) | ||||||
|  | 	removedUID := oldUIDSet.Difference(newUIDSet) | ||||||
|  | 	intersection := oldUIDSet.Intersection(newUIDSet) | ||||||
|  |  | ||||||
|  | 	for uid := range addedUID { | ||||||
|  | 		added = append(added, newUIDToRef[uid]) | ||||||
|  | 	} | ||||||
|  | 	for uid := range removedUID { | ||||||
|  | 		removed = append(removed, oldUIDToRef[uid]) | ||||||
|  | 	} | ||||||
|  | 	for uid := range intersection { | ||||||
|  | 		if !reflect.DeepEqual(oldUIDToRef[uid], newUIDToRef[uid]) { | ||||||
|  | 			changed = append(changed, ownerRefPair{oldRef: oldUIDToRef[uid], newRef: newUIDToRef[uid]}) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return added, removed, changed | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // returns if the object in the event just transitions to "being deleted". | ||||||
|  | func deletionStarts(oldObj interface{}, newAccessor metav1.Object) bool { | ||||||
|  | 	// The delta_fifo may combine the creation and update of the object into one | ||||||
|  | 	// event, so if there is no oldObj, we just return if the newObj (via | ||||||
|  | 	// newAccessor) is being deleted. | ||||||
|  | 	if oldObj == nil { | ||||||
|  | 		if newAccessor.GetDeletionTimestamp() == nil { | ||||||
|  | 			return false | ||||||
|  | 		} | ||||||
|  | 		return true | ||||||
|  | 	} | ||||||
|  | 	oldAccessor, err := meta.Accessor(oldObj) | ||||||
|  | 	if err != nil { | ||||||
|  | 		utilruntime.HandleError(fmt.Errorf("cannot access oldObj: %v", err)) | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	return beingDeleted(newAccessor) && !beingDeleted(oldAccessor) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func beingDeleted(accessor metav1.Object) bool { | ||||||
|  | 	return accessor.GetDeletionTimestamp() != nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func hasDeleteDependentsFinalizer(accessor metav1.Object) bool { | ||||||
|  | 	finalizers := accessor.GetFinalizers() | ||||||
|  | 	for _, finalizer := range finalizers { | ||||||
|  | 		if finalizer == metav1.FinalizerDeleteDependents { | ||||||
|  | 			return true | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return false | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func hasOrphanFinalizer(accessor metav1.Object) bool { | ||||||
|  | 	finalizers := accessor.GetFinalizers() | ||||||
|  | 	for _, finalizer := range finalizers { | ||||||
|  | 		if finalizer == metav1.FinalizerOrphanDependents { | ||||||
|  | 			return true | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return false | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // this function takes newAccessor directly because the caller already | ||||||
|  | // instantiates an accessor for the newObj. | ||||||
|  | func startsWaitingForDependentsDeleted(oldObj interface{}, newAccessor metav1.Object) bool { | ||||||
|  | 	return deletionStarts(oldObj, newAccessor) && hasDeleteDependentsFinalizer(newAccessor) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // this function takes newAccessor directly because the caller already | ||||||
|  | // instantiates an accessor for the newObj. | ||||||
|  | func startsWaitingForDependentsOrphaned(oldObj interface{}, newAccessor metav1.Object) bool { | ||||||
|  | 	return deletionStarts(oldObj, newAccessor) && hasOrphanFinalizer(newAccessor) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // if an blocking ownerReference points to an object gets removed, or gets set to | ||||||
|  | // "BlockOwnerDeletion=false", add the object to the attemptToDelete queue. | ||||||
|  | func (gb *GraphBuilder) addUnblockedOwnersToDeleteQueue(removed []metav1.OwnerReference, changed []ownerRefPair) { | ||||||
|  | 	for _, ref := range removed { | ||||||
|  | 		if ref.BlockOwnerDeletion != nil && *ref.BlockOwnerDeletion { | ||||||
|  | 			node, found := gb.uidToNode.Read(ref.UID) | ||||||
|  | 			if !found { | ||||||
|  | 				glog.V(5).Infof("cannot find %s in uidToNode", ref.UID) | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
|  | 			gb.attemptToDelete.Add(node) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	for _, c := range changed { | ||||||
|  | 		wasBlocked := c.oldRef.BlockOwnerDeletion != nil && *c.oldRef.BlockOwnerDeletion | ||||||
|  | 		isUnblocked := c.newRef.BlockOwnerDeletion == nil || (c.newRef.BlockOwnerDeletion != nil && !*c.newRef.BlockOwnerDeletion) | ||||||
|  | 		if wasBlocked && isUnblocked { | ||||||
|  | 			node, found := gb.uidToNode.Read(c.newRef.UID) | ||||||
|  | 			if !found { | ||||||
|  | 				glog.V(5).Infof("cannot find %s in uidToNode", c.newRef.UID) | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
|  | 			gb.attemptToDelete.Add(node) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (gb *GraphBuilder) processTransitions(oldObj interface{}, newAccessor metav1.Object, n *node) { | ||||||
|  | 	if startsWaitingForDependentsOrphaned(oldObj, newAccessor) { | ||||||
|  | 		glog.V(5).Infof("add %s to the attemptToOrphan", n.identity) | ||||||
|  | 		gb.attemptToOrphan.Add(n) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	if startsWaitingForDependentsDeleted(oldObj, newAccessor) { | ||||||
|  | 		glog.V(2).Infof("add %s to the attemptToDelete, because it's waiting for its dependents to be deleted", n.identity) | ||||||
|  | 		// if the n is added as a "virtual" node, its deletingDependents field is not properly set, so always set it here. | ||||||
|  | 		n.markDeletingDependents() | ||||||
|  | 		for dep := range n.dependents { | ||||||
|  | 			gb.attemptToDelete.Add(dep) | ||||||
|  | 		} | ||||||
|  | 		gb.attemptToDelete.Add(n) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (gb *GraphBuilder) runProcessGraphChanges() { | ||||||
|  | 	for gb.processGraphChanges() { | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Dequeueing an event from graphChanges, updating graph, populating dirty_queue. | ||||||
|  | func (gb *GraphBuilder) processGraphChanges() bool { | ||||||
|  | 	item, quit := gb.graphChanges.Get() | ||||||
|  | 	if quit { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | 	defer gb.graphChanges.Done(item) | ||||||
|  | 	event, ok := item.(*event) | ||||||
|  | 	if !ok { | ||||||
|  | 		utilruntime.HandleError(fmt.Errorf("expect a *event, got %v", item)) | ||||||
|  | 		return true | ||||||
|  | 	} | ||||||
|  | 	obj := event.obj | ||||||
|  | 	accessor, err := meta.Accessor(obj) | ||||||
|  | 	if err != nil { | ||||||
|  | 		utilruntime.HandleError(fmt.Errorf("cannot access obj: %v", err)) | ||||||
|  | 		return true | ||||||
|  | 	} | ||||||
|  | 	typeAccessor, err := meta.TypeAccessor(obj) | ||||||
|  | 	if err != nil { | ||||||
|  | 		utilruntime.HandleError(fmt.Errorf("cannot access obj: %v", err)) | ||||||
|  | 		return true | ||||||
|  | 	} | ||||||
|  | 	glog.V(5).Infof("GraphBuilder process object: %s/%s, namespace %s, name %s, event type %s", typeAccessor.GetAPIVersion(), typeAccessor.GetKind(), accessor.GetNamespace(), accessor.GetName(), event.eventType) | ||||||
|  | 	// Check if the node already exsits | ||||||
|  | 	existingNode, found := gb.uidToNode.Read(accessor.GetUID()) | ||||||
|  | 	switch { | ||||||
|  | 	case (event.eventType == addEvent || event.eventType == updateEvent) && !found: | ||||||
|  | 		newNode := &node{ | ||||||
|  | 			identity: objectReference{ | ||||||
|  | 				OwnerReference: metav1.OwnerReference{ | ||||||
|  | 					APIVersion: typeAccessor.GetAPIVersion(), | ||||||
|  | 					Kind:       typeAccessor.GetKind(), | ||||||
|  | 					UID:        accessor.GetUID(), | ||||||
|  | 					Name:       accessor.GetName(), | ||||||
|  | 				}, | ||||||
|  | 				Namespace: accessor.GetNamespace(), | ||||||
|  | 			}, | ||||||
|  | 			dependents:         make(map[*node]struct{}), | ||||||
|  | 			owners:             accessor.GetOwnerReferences(), | ||||||
|  | 			deletingDependents: beingDeleted(accessor) && hasDeleteDependentsFinalizer(accessor), | ||||||
|  | 			beingDeleted:       beingDeleted(accessor), | ||||||
|  | 		} | ||||||
|  | 		gb.insertNode(newNode) | ||||||
|  | 		// the underlying delta_fifo may combine a creation and a deletion into | ||||||
|  | 		// one event, so we need to further process the event. | ||||||
|  | 		gb.processTransitions(event.oldObj, accessor, newNode) | ||||||
|  | 	case (event.eventType == addEvent || event.eventType == updateEvent) && found: | ||||||
|  | 		// handle changes in ownerReferences | ||||||
|  | 		added, removed, changed := referencesDiffs(existingNode.owners, accessor.GetOwnerReferences()) | ||||||
|  | 		if len(added) != 0 || len(removed) != 0 || len(changed) != 0 { | ||||||
|  | 			// check if the changed dependency graph unblock owners that are | ||||||
|  | 			// waiting for the deletion of their dependents. | ||||||
|  | 			gb.addUnblockedOwnersToDeleteQueue(removed, changed) | ||||||
|  | 			// update the node itself | ||||||
|  | 			existingNode.owners = accessor.GetOwnerReferences() | ||||||
|  | 			// Add the node to its new owners' dependent lists. | ||||||
|  | 			gb.addDependentToOwners(existingNode, added) | ||||||
|  | 			// remove the node from the dependent list of node that are no longer in | ||||||
|  | 			// the node's owners list. | ||||||
|  | 			gb.removeDependentFromOwners(existingNode, removed) | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if beingDeleted(accessor) { | ||||||
|  | 			existingNode.markBeingDeleted() | ||||||
|  | 		} | ||||||
|  | 		gb.processTransitions(event.oldObj, accessor, existingNode) | ||||||
|  | 	case event.eventType == deleteEvent: | ||||||
|  | 		if !found { | ||||||
|  | 			glog.V(5).Infof("%v doesn't exist in the graph, this shouldn't happen", accessor.GetUID()) | ||||||
|  | 			return true | ||||||
|  | 		} | ||||||
|  | 		// removeNode updates the graph | ||||||
|  | 		gb.removeNode(existingNode) | ||||||
|  | 		existingNode.dependentsLock.RLock() | ||||||
|  | 		defer existingNode.dependentsLock.RUnlock() | ||||||
|  | 		if len(existingNode.dependents) > 0 { | ||||||
|  | 			gb.absentOwnerCache.Add(accessor.GetUID()) | ||||||
|  | 		} | ||||||
|  | 		for dep := range existingNode.dependents { | ||||||
|  | 			gb.attemptToDelete.Add(dep) | ||||||
|  | 		} | ||||||
|  | 		for _, owner := range existingNode.owners { | ||||||
|  | 			ownerNode, found := gb.uidToNode.Read(owner.UID) | ||||||
|  | 			if !found || !ownerNode.isDeletingDependents() { | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
|  | 			// this is to let attempToDeleteItem check if all the owner's | ||||||
|  | 			// dependents are deleted, if so, the owner will be deleted. | ||||||
|  | 			gb.attemptToDelete.Add(ownerNode) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return true | ||||||
|  | } | ||||||
							
								
								
									
										135
									
								
								pkg/controller/garbagecollector/operations.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								pkg/controller/garbagecollector/operations.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,135 @@ | |||||||
|  | /* | ||||||
|  | Copyright 2016 The Kubernetes Authors. | ||||||
|  |  | ||||||
|  | Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | you may not use this file except in compliance with the License. | ||||||
|  | You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  |     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  | Unless required by applicable law or agreed to in writing, software | ||||||
|  | distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | See the License for the specific language governing permissions and | ||||||
|  | limitations under the License. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | package garbagecollector | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  |  | ||||||
|  | 	"github.com/golang/glog" | ||||||
|  |  | ||||||
|  | 	"k8s.io/apimachinery/pkg/api/errors" | ||||||
|  | 	"k8s.io/apimachinery/pkg/api/meta" | ||||||
|  | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
|  | 	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" | ||||||
|  | 	"k8s.io/apimachinery/pkg/runtime/schema" | ||||||
|  | 	"k8s.io/apimachinery/pkg/types" | ||||||
|  | 	"k8s.io/kubernetes/pkg/client/retry" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // apiResource consults the REST mapper to translate an <apiVersion, kind, | ||||||
|  | // namespace> tuple to a unversioned.APIResource struct. | ||||||
|  | func (gc *GarbageCollector) apiResource(apiVersion, kind string, namespaced bool) (*metav1.APIResource, error) { | ||||||
|  | 	fqKind := schema.FromAPIVersionAndKind(apiVersion, kind) | ||||||
|  | 	mapping, err := gc.restMapper.RESTMapping(fqKind.GroupKind(), apiVersion) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, fmt.Errorf("unable to get REST mapping for kind: %s, version: %s", kind, apiVersion) | ||||||
|  | 	} | ||||||
|  | 	glog.V(5).Infof("map kind %s, version %s to resource %s", kind, apiVersion, mapping.Resource) | ||||||
|  | 	resource := metav1.APIResource{ | ||||||
|  | 		Name:       mapping.Resource, | ||||||
|  | 		Namespaced: namespaced, | ||||||
|  | 		Kind:       kind, | ||||||
|  | 	} | ||||||
|  | 	return &resource, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (gc *GarbageCollector) deleteObject(item objectReference, policy *metav1.DeletionPropagation) error { | ||||||
|  | 	fqKind := schema.FromAPIVersionAndKind(item.APIVersion, item.Kind) | ||||||
|  | 	client, err := gc.clientPool.ClientForGroupVersionKind(fqKind) | ||||||
|  | 	gc.registeredRateLimiter.registerIfNotPresent(fqKind.GroupVersion(), client, "garbage_collector_operation") | ||||||
|  | 	resource, err := gc.apiResource(item.APIVersion, item.Kind, len(item.Namespace) != 0) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	uid := item.UID | ||||||
|  | 	preconditions := metav1.Preconditions{UID: &uid} | ||||||
|  | 	deleteOptions := metav1.DeleteOptions{Preconditions: &preconditions, PropagationPolicy: policy} | ||||||
|  | 	return client.Resource(resource, item.Namespace).Delete(item.Name, &deleteOptions) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (gc *GarbageCollector) getObject(item objectReference) (*unstructured.Unstructured, error) { | ||||||
|  | 	fqKind := schema.FromAPIVersionAndKind(item.APIVersion, item.Kind) | ||||||
|  | 	client, err := gc.clientPool.ClientForGroupVersionKind(fqKind) | ||||||
|  | 	gc.registeredRateLimiter.registerIfNotPresent(fqKind.GroupVersion(), client, "garbage_collector_operation") | ||||||
|  | 	resource, err := gc.apiResource(item.APIVersion, item.Kind, len(item.Namespace) != 0) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return client.Resource(resource, item.Namespace).Get(item.Name) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (gc *GarbageCollector) updateObject(item objectReference, obj *unstructured.Unstructured) (*unstructured.Unstructured, error) { | ||||||
|  | 	fqKind := schema.FromAPIVersionAndKind(item.APIVersion, item.Kind) | ||||||
|  | 	client, err := gc.clientPool.ClientForGroupVersionKind(fqKind) | ||||||
|  | 	gc.registeredRateLimiter.registerIfNotPresent(fqKind.GroupVersion(), client, "garbage_collector_operation") | ||||||
|  | 	resource, err := gc.apiResource(item.APIVersion, item.Kind, len(item.Namespace) != 0) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return client.Resource(resource, item.Namespace).Update(obj) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (gc *GarbageCollector) patchObject(item objectReference, patch []byte) (*unstructured.Unstructured, error) { | ||||||
|  | 	fqKind := schema.FromAPIVersionAndKind(item.APIVersion, item.Kind) | ||||||
|  | 	client, err := gc.clientPool.ClientForGroupVersionKind(fqKind) | ||||||
|  | 	gc.registeredRateLimiter.registerIfNotPresent(fqKind.GroupVersion(), client, "garbage_collector_operation") | ||||||
|  | 	resource, err := gc.apiResource(item.APIVersion, item.Kind, len(item.Namespace) != 0) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return client.Resource(resource, item.Namespace).Patch(item.Name, types.StrategicMergePatchType, patch) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // TODO: Using Patch when strategicmerge supports deleting an entry from a | ||||||
|  | // slice of a base type. | ||||||
|  | func (gc *GarbageCollector) removeFinalizer(owner *node, targetFinalizer string) error { | ||||||
|  | 	err := retry.RetryOnConflict(retry.DefaultBackoff, func() error { | ||||||
|  | 		ownerObject, err := gc.getObject(owner.identity) | ||||||
|  | 		if errors.IsNotFound(err) { | ||||||
|  | 			return nil | ||||||
|  | 		} | ||||||
|  | 		if err != nil { | ||||||
|  | 			return fmt.Errorf("cannot finalize owner %s, because cannot get it: %v. The garbage collector will retry later.", owner.identity, err) | ||||||
|  | 		} | ||||||
|  | 		accessor, err := meta.Accessor(ownerObject) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return fmt.Errorf("cannot access the owner object %v: %v. The garbage collector will retry later.", ownerObject, err) | ||||||
|  | 		} | ||||||
|  | 		finalizers := accessor.GetFinalizers() | ||||||
|  | 		var newFinalizers []string | ||||||
|  | 		found := false | ||||||
|  | 		for _, f := range finalizers { | ||||||
|  | 			if f == targetFinalizer { | ||||||
|  | 				found = true | ||||||
|  | 				break | ||||||
|  | 			} | ||||||
|  | 			newFinalizers = append(newFinalizers, f) | ||||||
|  | 		} | ||||||
|  | 		if !found { | ||||||
|  | 			glog.V(5).Infof("the orphan finalizer is already removed from object %s", owner.identity) | ||||||
|  | 			return nil | ||||||
|  | 		} | ||||||
|  | 		// remove the owner from dependent's OwnerReferences | ||||||
|  | 		ownerObject.SetFinalizers(newFinalizers) | ||||||
|  | 		_, err = gc.updateObject(owner.identity, ownerObject) | ||||||
|  | 		return err | ||||||
|  | 	}) | ||||||
|  | 	if errors.IsConflict(err) { | ||||||
|  | 		return fmt.Errorf("updateMaxRetries(%d) has reached. The garbage collector will retry later for owner %v.", retry.DefaultBackoff.Steps, owner.identity) | ||||||
|  | 	} | ||||||
|  | 	return err | ||||||
|  | } | ||||||
							
								
								
									
										54
									
								
								pkg/controller/garbagecollector/patch.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								pkg/controller/garbagecollector/patch.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | |||||||
|  | /* | ||||||
|  | Copyright 2016 The Kubernetes Authors. | ||||||
|  |  | ||||||
|  | Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  | you may not use this file except in compliance with the License. | ||||||
|  | You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  |     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  | Unless required by applicable law or agreed to in writing, software | ||||||
|  | distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  | See the License for the specific language governing permissions and | ||||||
|  | limitations under the License. | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | package garbagecollector | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"encoding/json" | ||||||
|  | 	"fmt" | ||||||
|  | 	"strings" | ||||||
|  |  | ||||||
|  | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
|  | 	"k8s.io/apimachinery/pkg/types" | ||||||
|  | 	"k8s.io/kubernetes/pkg/controller/garbagecollector/metaonly" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func deleteOwnerRefPatch(dependentUID types.UID, ownerUIDs ...types.UID) []byte { | ||||||
|  | 	var pieces []string | ||||||
|  | 	for _, ownerUID := range ownerUIDs { | ||||||
|  | 		pieces = append(pieces, fmt.Sprintf(`{"$patch":"delete","uid":"%s"}`, ownerUID)) | ||||||
|  | 	} | ||||||
|  | 	patch := fmt.Sprintf(`{"metadata":{"ownerReferences":[%s],"uid":"%s"}}`, strings.Join(pieces, ","), dependentUID) | ||||||
|  | 	return []byte(patch) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // generate a patch that unsets the BlockOwnerDeletion field of all | ||||||
|  | // ownerReferences of node. | ||||||
|  | func (n *node) patchToUnblockOwnerReferences() ([]byte, error) { | ||||||
|  | 	var dummy metaonly.MetadataOnlyObject | ||||||
|  | 	var blockingRefs []metav1.OwnerReference | ||||||
|  | 	falseVar := false | ||||||
|  | 	for _, owner := range n.owners { | ||||||
|  | 		if owner.BlockOwnerDeletion != nil && *owner.BlockOwnerDeletion { | ||||||
|  | 			ref := owner | ||||||
|  | 			ref.BlockOwnerDeletion = &falseVar | ||||||
|  | 			blockingRefs = append(blockingRefs, ref) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	dummy.ObjectMeta.SetOwnerReferences(blockingRefs) | ||||||
|  | 	dummy.ObjectMeta.UID = n.identity.UID | ||||||
|  | 	return json.Marshal(dummy) | ||||||
|  | } | ||||||
| @@ -481,14 +481,14 @@ func (rsc *ReplicaSetController) manageReplicas(filteredPods []*v1.Pod, rs *exte | |||||||
| 			go func() { | 			go func() { | ||||||
| 				defer wg.Done() | 				defer wg.Done() | ||||||
| 				var err error | 				var err error | ||||||
|  | 				boolPtr := func(b bool) *bool { return &b } | ||||||
| 				var trueVar = true |  | ||||||
| 				controllerRef := &metav1.OwnerReference{ | 				controllerRef := &metav1.OwnerReference{ | ||||||
| 					APIVersion:         getRSKind().GroupVersion().String(), | 					APIVersion:         getRSKind().GroupVersion().String(), | ||||||
| 					Kind:               getRSKind().Kind, | 					Kind:               getRSKind().Kind, | ||||||
| 					Name:               rs.Name, | 					Name:               rs.Name, | ||||||
| 					UID:                rs.UID, | 					UID:                rs.UID, | ||||||
| 					Controller: &trueVar, | 					BlockOwnerDeletion: boolPtr(true), | ||||||
|  | 					Controller:         boolPtr(true), | ||||||
| 				} | 				} | ||||||
| 				err = rsc.podControl.CreatePodsWithControllerRef(rs.Namespace, &rs.Spec.Template, rs, controllerRef) | 				err = rsc.podControl.CreatePodsWithControllerRef(rs.Namespace, &rs.Spec.Template, rs, controllerRef) | ||||||
| 				if err != nil { | 				if err != nil { | ||||||
|   | |||||||
| @@ -479,13 +479,14 @@ func (rm *ReplicationManager) manageReplicas(filteredPods []*v1.Pod, rc *v1.Repl | |||||||
| 			go func() { | 			go func() { | ||||||
| 				defer wg.Done() | 				defer wg.Done() | ||||||
| 				var err error | 				var err error | ||||||
| 				var trueVar = true | 				boolPtr := func(b bool) *bool { return &b } | ||||||
| 				controllerRef := &metav1.OwnerReference{ | 				controllerRef := &metav1.OwnerReference{ | ||||||
| 					APIVersion:         getRCKind().GroupVersion().String(), | 					APIVersion:         getRCKind().GroupVersion().String(), | ||||||
| 					Kind:               getRCKind().Kind, | 					Kind:               getRCKind().Kind, | ||||||
| 					Name:               rc.Name, | 					Name:               rc.Name, | ||||||
| 					UID:                rc.UID, | 					UID:                rc.UID, | ||||||
| 					Controller: &trueVar, | 					BlockOwnerDeletion: boolPtr(true), | ||||||
|  | 					Controller:         boolPtr(true), | ||||||
| 				} | 				} | ||||||
| 				err = rm.podControl.CreatePodsWithControllerRef(rc.Namespace, rc.Spec.Template, rc, controllerRef) | 				err = rm.podControl.CreatePodsWithControllerRef(rc.Namespace, rc.Spec.Template, rc, controllerRef) | ||||||
| 				if err != nil { | 				if err != nil { | ||||||
|   | |||||||
| @@ -351,11 +351,18 @@ func GetOpenAPIDefinitions(ref openapi.ReferenceCallback) map[string]openapi.Ope | |||||||
| 						}, | 						}, | ||||||
| 						"orphanDependents": { | 						"orphanDependents": { | ||||||
| 							SchemaProps: spec.SchemaProps{ | 							SchemaProps: spec.SchemaProps{ | ||||||
| 								Description: "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", | 								Description: "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
| 								Type:        []string{"boolean"}, | 								Type:        []string{"boolean"}, | ||||||
| 								Format:      "", | 								Format:      "", | ||||||
| 							}, | 							}, | ||||||
| 						}, | 						}, | ||||||
|  | 						"propagationPolicy": { | ||||||
|  | 							SchemaProps: spec.SchemaProps{ | ||||||
|  | 								Description: "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
|  | 								Type:        []string{"string"}, | ||||||
|  | 								Format:      "", | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
| 					}, | 					}, | ||||||
| 				}, | 				}, | ||||||
| 			}, | 			}, | ||||||
| @@ -966,6 +973,13 @@ func GetOpenAPIDefinitions(ref openapi.ReferenceCallback) map[string]openapi.Ope | |||||||
| 								Format:      "", | 								Format:      "", | ||||||
| 							}, | 							}, | ||||||
| 						}, | 						}, | ||||||
|  | 						"blockOwnerDeletion": { | ||||||
|  | 							SchemaProps: spec.SchemaProps{ | ||||||
|  | 								Description: "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", | ||||||
|  | 								Type:        []string{"boolean"}, | ||||||
|  | 								Format:      "", | ||||||
|  | 							}, | ||||||
|  | 						}, | ||||||
| 					}, | 					}, | ||||||
| 					Required: []string{"apiVersion", "kind", "name", "uid"}, | 					Required: []string{"apiVersion", "kind", "name", "uid"}, | ||||||
| 				}, | 				}, | ||||||
|   | |||||||
| @@ -143,7 +143,7 @@ func (r *REST) Delete(ctx genericapirequest.Context, name string, options *metav | |||||||
| 					newFinalizers := []string{} | 					newFinalizers := []string{} | ||||||
| 					for i := range existingNamespace.ObjectMeta.Finalizers { | 					for i := range existingNamespace.ObjectMeta.Finalizers { | ||||||
| 						finalizer := existingNamespace.ObjectMeta.Finalizers[i] | 						finalizer := existingNamespace.ObjectMeta.Finalizers[i] | ||||||
| 						if string(finalizer) != metav1.FinalizerOrphan { | 						if string(finalizer) != metav1.FinalizerOrphanDependents { | ||||||
| 							newFinalizers = append(newFinalizers, finalizer) | 							newFinalizers = append(newFinalizers, finalizer) | ||||||
| 						} | 						} | ||||||
| 					} | 					} | ||||||
|   | |||||||
| @@ -334,6 +334,14 @@ func extractFromOwnerReference(v reflect.Value, o *metav1.OwnerReference) error | |||||||
| 		controller := *controllerPtr | 		controller := *controllerPtr | ||||||
| 		o.Controller = &controller | 		o.Controller = &controller | ||||||
| 	} | 	} | ||||||
|  | 	var blockOwnerDeletionPtr *bool | ||||||
|  | 	if err := runtime.Field(v, "BlockOwnerDeletion", &blockOwnerDeletionPtr); err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	if blockOwnerDeletionPtr != nil { | ||||||
|  | 		block := *blockOwnerDeletionPtr | ||||||
|  | 		o.BlockOwnerDeletion = &block | ||||||
|  | 	} | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -357,6 +365,12 @@ func setOwnerReference(v reflect.Value, o *metav1.OwnerReference) error { | |||||||
| 			return err | 			return err | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 	if o.BlockOwnerDeletion != nil { | ||||||
|  | 		block := *(o.BlockOwnerDeletion) | ||||||
|  | 		if err := runtime.SetField(&block, v, "BlockOwnerDeletion"); err != nil { | ||||||
|  | 			return err | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -171,8 +171,26 @@ func ValidateObjectMeta(meta *metav1.ObjectMeta, requiresNamespace bool, nameFn | |||||||
| 	allErrs = append(allErrs, v1validation.ValidateLabels(meta.Labels, fldPath.Child("labels"))...) | 	allErrs = append(allErrs, v1validation.ValidateLabels(meta.Labels, fldPath.Child("labels"))...) | ||||||
| 	allErrs = append(allErrs, ValidateAnnotations(meta.Annotations, fldPath.Child("annotations"))...) | 	allErrs = append(allErrs, ValidateAnnotations(meta.Annotations, fldPath.Child("annotations"))...) | ||||||
| 	allErrs = append(allErrs, ValidateOwnerReferences(meta.OwnerReferences, fldPath.Child("ownerReferences"))...) | 	allErrs = append(allErrs, ValidateOwnerReferences(meta.OwnerReferences, fldPath.Child("ownerReferences"))...) | ||||||
| 	for _, finalizer := range meta.Finalizers { | 	allErrs = append(allErrs, ValidateFinalizers(meta.Finalizers, fldPath.Child("finalizers"))...) | ||||||
| 		allErrs = append(allErrs, ValidateFinalizerName(finalizer, fldPath.Child("finalizers"))...) | 	return allErrs | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // ValidateFinalizers tests if the finalizers name are valid, and if there are conflicting finalizers. | ||||||
|  | func ValidateFinalizers(finalizers []string, fldPath *field.Path) field.ErrorList { | ||||||
|  | 	allErrs := field.ErrorList{} | ||||||
|  | 	hasFinalizerOrphanDependents := false | ||||||
|  | 	hasFinalizerDeleteDependents := false | ||||||
|  | 	for _, finalizer := range finalizers { | ||||||
|  | 		allErrs = append(allErrs, ValidateFinalizerName(finalizer, fldPath)...) | ||||||
|  | 		if finalizer == metav1.FinalizerOrphanDependents { | ||||||
|  | 			hasFinalizerOrphanDependents = true | ||||||
|  | 		} | ||||||
|  | 		if finalizer == metav1.FinalizerDeleteDependents { | ||||||
|  | 			hasFinalizerDeleteDependents = true | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	if hasFinalizerDeleteDependents && hasFinalizerOrphanDependents { | ||||||
|  | 		allErrs = append(allErrs, field.Invalid(fldPath, finalizers, fmt.Sprintf("finalizer %s and %s cannot be both set", metav1.FinalizerOrphanDependents, metav1.FinalizerDeleteDependents))) | ||||||
| 	} | 	} | ||||||
| 	return allErrs | 	return allErrs | ||||||
| } | } | ||||||
|   | |||||||
| @@ -277,6 +277,28 @@ func TestValidateFinalizersUpdate(t *testing.T) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestValidateFinalizersPreventConflictingFinalizers(t *testing.T) { | ||||||
|  | 	testcases := map[string]struct { | ||||||
|  | 		ObjectMeta  metav1.ObjectMeta | ||||||
|  | 		ExpectedErr string | ||||||
|  | 	}{ | ||||||
|  | 		"conflicting finalizers": { | ||||||
|  | 			ObjectMeta:  metav1.ObjectMeta{Name: "test", ResourceVersion: "1", Finalizers: []string{metav1.FinalizerOrphanDependents, metav1.FinalizerDeleteDependents}}, | ||||||
|  | 			ExpectedErr: "cannot be both set", | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 	for name, tc := range testcases { | ||||||
|  | 		errs := ValidateObjectMeta(&tc.ObjectMeta, false, NameIsDNSSubdomain, field.NewPath("field")) | ||||||
|  | 		if len(errs) == 0 { | ||||||
|  | 			if len(tc.ExpectedErr) != 0 { | ||||||
|  | 				t.Errorf("case: %q, expected error to contain %q", name, tc.ExpectedErr) | ||||||
|  | 			} | ||||||
|  | 		} else if e, a := tc.ExpectedErr, errs.ToAggregate().Error(); !strings.Contains(a, e) { | ||||||
|  | 			t.Errorf("case: %q, expected error to contain %q, got error %q", name, e, a) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
| func TestValidateObjectMetaUpdatePreventsDeletionFieldMutation(t *testing.T) { | func TestValidateObjectMetaUpdatePreventsDeletionFieldMutation(t *testing.T) { | ||||||
| 	now := metav1.NewTime(time.Unix(1000, 0).UTC()) | 	now := metav1.NewTime(time.Unix(1000, 0).UTC()) | ||||||
| 	later := metav1.NewTime(time.Unix(2000, 0).UTC()) | 	later := metav1.NewTime(time.Unix(2000, 0).UTC()) | ||||||
|   | |||||||
| @@ -512,6 +512,12 @@ func (m *DeleteOptions) MarshalTo(data []byte) (int, error) { | |||||||
| 		} | 		} | ||||||
| 		i++ | 		i++ | ||||||
| 	} | 	} | ||||||
|  | 	if m.PropagationPolicy != nil { | ||||||
|  | 		data[i] = 0x22 | ||||||
|  | 		i++ | ||||||
|  | 		i = encodeVarintGenerated(data, i, uint64(len(*m.PropagationPolicy))) | ||||||
|  | 		i += copy(data[i:], *m.PropagationPolicy) | ||||||
|  | 	} | ||||||
| 	return i, nil | 	return i, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @@ -1087,6 +1093,16 @@ func (m *OwnerReference) MarshalTo(data []byte) (int, error) { | |||||||
| 		} | 		} | ||||||
| 		i++ | 		i++ | ||||||
| 	} | 	} | ||||||
|  | 	if m.BlockOwnerDeletion != nil { | ||||||
|  | 		data[i] = 0x38 | ||||||
|  | 		i++ | ||||||
|  | 		if *m.BlockOwnerDeletion { | ||||||
|  | 			data[i] = 1 | ||||||
|  | 		} else { | ||||||
|  | 			data[i] = 0 | ||||||
|  | 		} | ||||||
|  | 		i++ | ||||||
|  | 	} | ||||||
| 	return i, nil | 	return i, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @@ -1539,6 +1555,10 @@ func (m *DeleteOptions) Size() (n int) { | |||||||
| 	if m.OrphanDependents != nil { | 	if m.OrphanDependents != nil { | ||||||
| 		n += 2 | 		n += 2 | ||||||
| 	} | 	} | ||||||
|  | 	if m.PropagationPolicy != nil { | ||||||
|  | 		l = len(*m.PropagationPolicy) | ||||||
|  | 		n += 1 + l + sovGenerated(uint64(l)) | ||||||
|  | 	} | ||||||
| 	return n | 	return n | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @@ -1763,6 +1783,9 @@ func (m *OwnerReference) Size() (n int) { | |||||||
| 	if m.Controller != nil { | 	if m.Controller != nil { | ||||||
| 		n += 2 | 		n += 2 | ||||||
| 	} | 	} | ||||||
|  | 	if m.BlockOwnerDeletion != nil { | ||||||
|  | 		n += 2 | ||||||
|  | 	} | ||||||
| 	return n | 	return n | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @@ -1957,6 +1980,7 @@ func (this *DeleteOptions) String() string { | |||||||
| 		`GracePeriodSeconds:` + valueToStringGenerated(this.GracePeriodSeconds) + `,`, | 		`GracePeriodSeconds:` + valueToStringGenerated(this.GracePeriodSeconds) + `,`, | ||||||
| 		`Preconditions:` + strings.Replace(fmt.Sprintf("%v", this.Preconditions), "Preconditions", "Preconditions", 1) + `,`, | 		`Preconditions:` + strings.Replace(fmt.Sprintf("%v", this.Preconditions), "Preconditions", "Preconditions", 1) + `,`, | ||||||
| 		`OrphanDependents:` + valueToStringGenerated(this.OrphanDependents) + `,`, | 		`OrphanDependents:` + valueToStringGenerated(this.OrphanDependents) + `,`, | ||||||
|  | 		`PropagationPolicy:` + valueToStringGenerated(this.PropagationPolicy) + `,`, | ||||||
| 		`}`, | 		`}`, | ||||||
| 	}, "") | 	}, "") | ||||||
| 	return s | 	return s | ||||||
| @@ -2115,6 +2139,7 @@ func (this *OwnerReference) String() string { | |||||||
| 		`UID:` + fmt.Sprintf("%v", this.UID) + `,`, | 		`UID:` + fmt.Sprintf("%v", this.UID) + `,`, | ||||||
| 		`APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, | 		`APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, | ||||||
| 		`Controller:` + valueToStringGenerated(this.Controller) + `,`, | 		`Controller:` + valueToStringGenerated(this.Controller) + `,`, | ||||||
|  | 		`BlockOwnerDeletion:` + valueToStringGenerated(this.BlockOwnerDeletion) + `,`, | ||||||
| 		`}`, | 		`}`, | ||||||
| 	}, "") | 	}, "") | ||||||
| 	return s | 	return s | ||||||
| @@ -2997,6 +3022,36 @@ func (m *DeleteOptions) Unmarshal(data []byte) error { | |||||||
| 			} | 			} | ||||||
| 			b := bool(v != 0) | 			b := bool(v != 0) | ||||||
| 			m.OrphanDependents = &b | 			m.OrphanDependents = &b | ||||||
|  | 		case 4: | ||||||
|  | 			if wireType != 2 { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field PropagationPolicy", wireType) | ||||||
|  | 			} | ||||||
|  | 			var stringLen uint64 | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return ErrIntOverflowGenerated | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				stringLen |= (uint64(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			intStringLen := int(stringLen) | ||||||
|  | 			if intStringLen < 0 { | ||||||
|  | 				return ErrInvalidLengthGenerated | ||||||
|  | 			} | ||||||
|  | 			postIndex := iNdEx + intStringLen | ||||||
|  | 			if postIndex > l { | ||||||
|  | 				return io.ErrUnexpectedEOF | ||||||
|  | 			} | ||||||
|  | 			s := DeletionPropagation(data[iNdEx:postIndex]) | ||||||
|  | 			m.PropagationPolicy = &s | ||||||
|  | 			iNdEx = postIndex | ||||||
| 		default: | 		default: | ||||||
| 			iNdEx = preIndex | 			iNdEx = preIndex | ||||||
| 			skippy, err := skipGenerated(data[iNdEx:]) | 			skippy, err := skipGenerated(data[iNdEx:]) | ||||||
| @@ -5379,6 +5434,27 @@ func (m *OwnerReference) Unmarshal(data []byte) error { | |||||||
| 			} | 			} | ||||||
| 			b := bool(v != 0) | 			b := bool(v != 0) | ||||||
| 			m.Controller = &b | 			m.Controller = &b | ||||||
|  | 		case 7: | ||||||
|  | 			if wireType != 0 { | ||||||
|  | 				return fmt.Errorf("proto: wrong wireType = %d for field BlockOwnerDeletion", wireType) | ||||||
|  | 			} | ||||||
|  | 			var v int | ||||||
|  | 			for shift := uint(0); ; shift += 7 { | ||||||
|  | 				if shift >= 64 { | ||||||
|  | 					return ErrIntOverflowGenerated | ||||||
|  | 				} | ||||||
|  | 				if iNdEx >= l { | ||||||
|  | 					return io.ErrUnexpectedEOF | ||||||
|  | 				} | ||||||
|  | 				b := data[iNdEx] | ||||||
|  | 				iNdEx++ | ||||||
|  | 				v |= (int(b) & 0x7F) << shift | ||||||
|  | 				if b < 0x80 { | ||||||
|  | 					break | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			b := bool(v != 0) | ||||||
|  | 			m.BlockOwnerDeletion = &b | ||||||
| 		default: | 		default: | ||||||
| 			iNdEx = preIndex | 			iNdEx = preIndex | ||||||
| 			skippy, err := skipGenerated(data[iNdEx:]) | 			skippy, err := skipGenerated(data[iNdEx:]) | ||||||
| @@ -6700,137 +6776,140 @@ var ( | |||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| var fileDescriptorGenerated = []byte{ | var fileDescriptorGenerated = []byte{ | ||||||
| 	// 2098 bytes of a gzipped FileDescriptorProto | 	// 2160 bytes of a gzipped FileDescriptorProto | ||||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x19, 0x4b, 0x6f, 0x23, 0x49, | 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x19, 0xcd, 0x6f, 0x23, 0x57, | ||||||
| 	0x39, 0x6d, 0xc7, 0x1e, 0xfb, 0x73, 0x9c, 0x47, 0x91, 0x01, 0x6f, 0x24, 0xec, 0x6c, 0xef, 0x0a, | 	0x3d, 0x63, 0xc7, 0x5e, 0xfb, 0xe7, 0x38, 0x1f, 0xaf, 0x59, 0x70, 0x23, 0x61, 0xa7, 0xd3, 0x0a, | ||||||
| 	0x65, 0x61, 0xd6, 0x26, 0x59, 0x58, 0x0d, 0x03, 0x0c, 0xc4, 0x71, 0x26, 0x8a, 0x76, 0x32, 0x89, | 	0xa5, 0xb0, 0xb5, 0x49, 0x0a, 0xd5, 0xb2, 0xc0, 0x42, 0x26, 0xce, 0x46, 0x51, 0x37, 0x9b, 0xe8, | ||||||
| 	0x2a, 0x3b, 0x83, 0x58, 0x46, 0x88, 0x8e, 0xbb, 0xe2, 0x34, 0x69, 0x77, 0x37, 0x55, 0x65, 0x4f, | 	0xa5, 0xbb, 0x88, 0x65, 0x85, 0x98, 0xcc, 0xbc, 0x38, 0x43, 0xc6, 0x33, 0xc3, 0x7b, 0x63, 0x6f, | ||||||
| 	0xc2, 0x1e, 0x58, 0x69, 0x41, 0x70, 0x40, 0x68, 0x8e, 0x1c, 0x10, 0xda, 0x11, 0xdc, 0xb8, 0xf1, | 	0x4c, 0x0f, 0x54, 0x2a, 0x48, 0x1c, 0x10, 0xda, 0x23, 0x07, 0x84, 0xba, 0x82, 0x1b, 0x37, 0xfe, | ||||||
| 	0x27, 0x98, 0xe3, 0x4a, 0x5c, 0x38, 0x20, 0x8b, 0x09, 0x07, 0x8e, 0xdc, 0x23, 0x0e, 0xa8, 0xaa, | 	0x06, 0x24, 0xf6, 0x58, 0x89, 0x0b, 0x07, 0x64, 0xb1, 0xee, 0x81, 0x23, 0xf7, 0x9c, 0xd0, 0x7b, | ||||||
| 	0xab, 0xfa, 0xe1, 0x8c, 0x37, 0x6d, 0x76, 0x0f, 0x9c, 0xe2, 0xfa, 0xde, 0xf5, 0xd5, 0xf7, 0xec, | 	0xf3, 0xe6, 0xcb, 0x8e, 0x9b, 0x31, 0xed, 0xa1, 0xa7, 0x78, 0x7e, 0xdf, 0xef, 0xf7, 0xfd, 0x5e, | ||||||
| 	0xc0, 0xde, 0xe9, 0x6d, 0xd6, 0x74, 0xfc, 0xd6, 0xe9, 0xe0, 0x88, 0x50, 0x8f, 0x70, 0xc2, 0x5a, | 	0xe0, 0xe0, 0xfc, 0x36, 0x6b, 0x5a, 0x6e, 0xeb, 0xbc, 0x77, 0x42, 0xa8, 0x43, 0x7c, 0xc2, 0x5a, | ||||||
| 	0x43, 0xe2, 0xd9, 0x3e, 0x6d, 0x29, 0x84, 0x15, 0x38, 0x7d, 0xab, 0x7b, 0xe2, 0x78, 0x84, 0x9e, | 	0x7d, 0xe2, 0x98, 0x2e, 0x6d, 0x49, 0x84, 0xee, 0x59, 0x5d, 0xdd, 0x38, 0xb3, 0x1c, 0x42, 0x07, | ||||||
| 	0xb7, 0x82, 0xd3, 0x9e, 0x00, 0xb0, 0x56, 0x9f, 0x70, 0xab, 0x35, 0x5c, 0x6f, 0xf5, 0x88, 0x47, | 	0x2d, 0xef, 0xbc, 0xc3, 0x01, 0xac, 0xd5, 0x25, 0xbe, 0xde, 0xea, 0x6f, 0xb6, 0x3a, 0xc4, 0x21, | ||||||
| 	0xa8, 0xc5, 0x89, 0xdd, 0x0c, 0xa8, 0xcf, 0x7d, 0xf4, 0x7a, 0xc8, 0xd5, 0x4c, 0x72, 0x35, 0x83, | 	0x54, 0xf7, 0x89, 0xd9, 0xf4, 0xa8, 0xeb, 0xbb, 0xe8, 0x8d, 0x80, 0xab, 0x99, 0xe4, 0x6a, 0x7a, | ||||||
| 	0xd3, 0x9e, 0x00, 0xb0, 0xa6, 0xe0, 0x6a, 0x0e, 0xd7, 0x57, 0xde, 0xec, 0x39, 0xfc, 0x64, 0x70, | 	0xe7, 0x1d, 0x0e, 0x60, 0x4d, 0xce, 0xd5, 0xec, 0x6f, 0xae, 0xbd, 0xd5, 0xb1, 0xfc, 0xb3, 0xde, | ||||||
| 	0xd4, 0xec, 0xfa, 0xfd, 0x56, 0xcf, 0xef, 0xf9, 0x2d, 0xc9, 0x7c, 0x34, 0x38, 0x96, 0x27, 0x79, | 	0x49, 0xd3, 0x70, 0xbb, 0xad, 0x8e, 0xdb, 0x71, 0x5b, 0x82, 0xf9, 0xa4, 0x77, 0x2a, 0xbe, 0xc4, | ||||||
| 	0x90, 0xbf, 0x42, 0xa1, 0x2b, 0x13, 0x4d, 0xa1, 0x03, 0x8f, 0x3b, 0x7d, 0x32, 0x6e, 0xc5, 0xca, | 	0x87, 0xf8, 0x15, 0x08, 0x5d, 0x9b, 0x6a, 0x0a, 0xed, 0x39, 0xbe, 0xd5, 0x25, 0xe3, 0x56, 0xac, | ||||||
| 	0xdb, 0xd7, 0x31, 0xb0, 0xee, 0x09, 0xe9, 0x5b, 0x57, 0xf8, 0xde, 0x9a, 0xc4, 0x37, 0xe0, 0x8e, | 	0xbd, 0x73, 0x1d, 0x03, 0x33, 0xce, 0x48, 0x57, 0x9f, 0xe0, 0x7b, 0x7b, 0x1a, 0x5f, 0xcf, 0xb7, | ||||||
| 	0xdb, 0x72, 0x3c, 0xce, 0x38, 0x1d, 0x67, 0x32, 0xff, 0x92, 0x87, 0xd2, 0xe6, 0xc1, 0xee, 0x0e, | 	0xec, 0x96, 0xe5, 0xf8, 0xcc, 0xa7, 0xe3, 0x4c, 0xea, 0xdf, 0xf3, 0x50, 0xda, 0x3e, 0xda, 0xdf, | ||||||
| 	0xf5, 0x07, 0x01, 0x5a, 0x85, 0x59, 0xcf, 0xea, 0x93, 0x9a, 0xb1, 0x6a, 0xac, 0x95, 0xdb, 0x73, | 	0xa3, 0x6e, 0xcf, 0x43, 0xeb, 0x30, 0xef, 0xe8, 0x5d, 0x52, 0x53, 0xd6, 0x95, 0x8d, 0xb2, 0xb6, | ||||||
| 	0xcf, 0x47, 0x8d, 0x99, 0x8b, 0x51, 0x63, 0xf6, 0x81, 0xd5, 0x27, 0x58, 0x62, 0x90, 0x0b, 0xa5, | 	0xf0, 0x62, 0xd8, 0x98, 0x1b, 0x0d, 0x1b, 0xf3, 0x0f, 0xf4, 0x2e, 0xc1, 0x02, 0x83, 0x6c, 0x28, | ||||||
| 	0x21, 0xa1, 0xcc, 0xf1, 0x3d, 0x56, 0xcb, 0xad, 0xe6, 0xd7, 0x2a, 0x1b, 0x77, 0x9b, 0x59, 0x9c, | 	0xf5, 0x09, 0x65, 0x96, 0xeb, 0xb0, 0x5a, 0x6e, 0x3d, 0xbf, 0x51, 0xd9, 0xba, 0xdb, 0xcc, 0xe2, | ||||||
| 	0xd6, 0x94, 0x0a, 0x1e, 0x85, 0xac, 0xf7, 0x7c, 0xda, 0x71, 0x58, 0xd7, 0x1f, 0x12, 0x7a, 0xde, | 	0xb4, 0xa6, 0x50, 0xf0, 0x28, 0x60, 0xbd, 0xe7, 0xd2, 0xb6, 0xc5, 0x0c, 0xb7, 0x4f, 0xe8, 0x40, | ||||||
| 	0x5e, 0x54, 0x5a, 0x4a, 0x0a, 0xc9, 0x70, 0xa4, 0x01, 0xfd, 0xdc, 0x80, 0xc5, 0x80, 0x92, 0x63, | 	0x5b, 0x96, 0x5a, 0x4a, 0x12, 0xc9, 0x70, 0xa4, 0x01, 0xfd, 0x4a, 0x81, 0x65, 0x8f, 0x92, 0x53, | ||||||
| 	0x42, 0x29, 0xb1, 0x15, 0xbe, 0x96, 0x5f, 0x35, 0x3e, 0x03, 0xb5, 0x35, 0xa5, 0x76, 0xf1, 0x60, | 	0x42, 0x29, 0x31, 0x25, 0xbe, 0x96, 0x5f, 0x57, 0x3e, 0x07, 0xb5, 0x35, 0xa9, 0x76, 0xf9, 0x68, | ||||||
| 	0x4c, 0x3e, 0xbe, 0xa2, 0x11, 0xfd, 0xc1, 0x80, 0x15, 0x46, 0xe8, 0x90, 0xd0, 0x4d, 0xdb, 0xa6, | 	0x4c, 0x3e, 0x9e, 0xd0, 0x88, 0xfe, 0xa4, 0xc0, 0x1a, 0x23, 0xb4, 0x4f, 0xe8, 0xb6, 0x69, 0x52, | ||||||
| 	0x84, 0xb1, 0xf6, 0xf9, 0x96, 0xeb, 0x10, 0x8f, 0x6f, 0xed, 0x76, 0x30, 0xab, 0xcd, 0x4a, 0x3f, | 	0xc2, 0x98, 0x36, 0xd8, 0xb1, 0x2d, 0xe2, 0xf8, 0x3b, 0xfb, 0x6d, 0xcc, 0x6a, 0xf3, 0xc2, 0x0f, | ||||||
| 	0x7c, 0x27, 0x9b, 0x41, 0x87, 0x93, 0xe4, 0xb4, 0x4d, 0x65, 0xd1, 0xca, 0x44, 0x12, 0x86, 0x3f, | 	0xdf, 0xcf, 0x66, 0xd0, 0xf1, 0x34, 0x39, 0x9a, 0x2a, 0x2d, 0x5a, 0x9b, 0x4a, 0xc2, 0xf0, 0xa7, | ||||||
| 	0xc1, 0x0c, 0xf3, 0x18, 0xe6, 0xf4, 0x43, 0xde, 0x77, 0x18, 0x47, 0x8f, 0xa0, 0xd8, 0x13, 0x07, | 	0x98, 0xa1, 0x9e, 0xc2, 0x42, 0x18, 0xc8, 0xfb, 0x16, 0xf3, 0xd1, 0x23, 0x28, 0x76, 0xf8, 0x07, | ||||||
| 	0x56, 0x33, 0xa4, 0x81, 0xcd, 0x6c, 0x06, 0x6a, 0x19, 0xed, 0x79, 0x65, 0x4f, 0x51, 0x1e, 0x19, | 	0xab, 0x29, 0xc2, 0xc0, 0x66, 0x36, 0x03, 0x43, 0x19, 0xda, 0xa2, 0xb4, 0xa7, 0x28, 0x3e, 0x19, | ||||||
| 	0x56, 0xd2, 0xcc, 0x0f, 0x73, 0x50, 0xd9, 0x3c, 0xd8, 0xc5, 0x84, 0xf9, 0x03, 0xda, 0x25, 0x19, | 	0x96, 0xd2, 0xd4, 0x0f, 0x73, 0x50, 0xd9, 0x3e, 0xda, 0xc7, 0x84, 0xb9, 0x3d, 0x6a, 0x90, 0x0c, | ||||||
| 	0x82, 0x66, 0x03, 0x40, 0xfc, 0x65, 0x81, 0xd5, 0x25, 0x76, 0x2d, 0xb7, 0x6a, 0xac, 0x95, 0xda, | 	0x49, 0xb3, 0x05, 0xc0, 0xff, 0x32, 0x4f, 0x37, 0x88, 0x59, 0xcb, 0xad, 0x2b, 0x1b, 0x25, 0x0d, | ||||||
| 	0x48, 0xd1, 0xc1, 0x83, 0x08, 0x83, 0x13, 0x54, 0x42, 0xea, 0xa9, 0xe3, 0xd9, 0xf2, 0xb5, 0x13, | 	0x49, 0x3a, 0x78, 0x10, 0x61, 0x70, 0x82, 0x8a, 0x4b, 0x3d, 0xb7, 0x1c, 0x53, 0x44, 0x3b, 0x21, | ||||||
| 	0x52, 0xdf, 0x71, 0x3c, 0x1b, 0x4b, 0x0c, 0xba, 0x0f, 0x85, 0x21, 0xa1, 0x47, 0xc2, 0xff, 0x22, | 	0xf5, 0x5d, 0xcb, 0x31, 0xb1, 0xc0, 0xa0, 0xfb, 0x50, 0xe8, 0x13, 0x7a, 0xc2, 0xfd, 0xcf, 0x13, | ||||||
| 	0x20, 0xbe, 0x92, 0xed, 0x7a, 0x8f, 0x04, 0x4b, 0xbb, 0x7c, 0x31, 0x6a, 0x14, 0xe4, 0x4f, 0x1c, | 	0xe2, 0xeb, 0xd9, 0x8e, 0xf7, 0x88, 0xb3, 0x68, 0xe5, 0xd1, 0xb0, 0x51, 0x10, 0x3f, 0x71, 0x20, | ||||||
| 	0x0a, 0x41, 0x4d, 0x00, 0x76, 0xe2, 0x53, 0x2e, 0xcd, 0xa9, 0x15, 0x56, 0xf3, 0x6b, 0xe5, 0xf6, | 	0x04, 0x35, 0x01, 0xd8, 0x99, 0x4b, 0x7d, 0x61, 0x4e, 0xad, 0xb0, 0x9e, 0xdf, 0x28, 0x6b, 0x8b, | ||||||
| 	0xbc, 0xb0, 0xef, 0x30, 0x82, 0xe2, 0x04, 0x85, 0xf9, 0x67, 0x03, 0x16, 0x12, 0x5e, 0x90, 0x1e, | 	0xdc, 0xbe, 0xe3, 0x08, 0x8a, 0x13, 0x14, 0xea, 0x5f, 0x15, 0x58, 0x4a, 0x78, 0x41, 0x78, 0xfc, | ||||||
| 	0xbf, 0x0d, 0x73, 0xbd, 0x44, 0xbc, 0x29, 0x8f, 0x2c, 0x2b, 0xdb, 0xe7, 0x92, 0xb1, 0x88, 0x53, | 	0x36, 0x2c, 0x74, 0x12, 0xf9, 0x26, 0x3d, 0xb2, 0x2a, 0x6d, 0x5f, 0x48, 0xe6, 0x22, 0x4e, 0x51, | ||||||
| 	0x94, 0x88, 0x40, 0x99, 0x2a, 0x49, 0x3a, 0xaf, 0xd6, 0x33, 0x3f, 0x97, 0xb6, 0x21, 0xd6, 0x94, | 	0x22, 0x02, 0x65, 0x2a, 0x25, 0x85, 0x75, 0xb5, 0x99, 0x39, 0x5c, 0xa1, 0x0d, 0xb1, 0xa6, 0x04, | ||||||
| 	0x00, 0x32, 0x1c, 0x4b, 0x36, 0xff, 0x65, 0xc8, 0xa7, 0xd3, 0x99, 0x86, 0xd6, 0x12, 0xd9, 0x6c, | 	0x90, 0xe1, 0x58, 0xb2, 0xfa, 0x1f, 0x45, 0x84, 0x2e, 0xac, 0x34, 0xb4, 0x91, 0xa8, 0x66, 0x45, | ||||||
| 	0xc8, 0x2b, 0xcf, 0x4d, 0xc8, 0xc4, 0x6b, 0x52, 0x20, 0xf7, 0x7f, 0x91, 0x02, 0x77, 0x4a, 0xbf, | 	0x1c, 0x79, 0x61, 0x4a, 0x25, 0x5e, 0x53, 0x02, 0xb9, 0x2f, 0x44, 0x09, 0xdc, 0x29, 0xfd, 0xfe, | ||||||
| 	0xfd, 0xa8, 0x31, 0xf3, 0xc1, 0xdf, 0x57, 0x67, 0xcc, 0x5f, 0xe6, 0xa0, 0xda, 0x21, 0x2e, 0xe1, | 	0xa3, 0xc6, 0xdc, 0x07, 0xff, 0x5a, 0x9f, 0x53, 0x3f, 0xc9, 0x41, 0xb5, 0x4d, 0x6c, 0xe2, 0x93, | ||||||
| 	0x64, 0x3f, 0xe0, 0xf2, 0x06, 0xf7, 0x00, 0xf5, 0xa8, 0xd5, 0x25, 0x07, 0x84, 0x3a, 0xbe, 0x7d, | 	0x43, 0xcf, 0x17, 0x27, 0xb8, 0x07, 0xa8, 0x43, 0x75, 0x83, 0x1c, 0x11, 0x6a, 0xb9, 0xe6, 0x31, | ||||||
| 	0x48, 0xba, 0xbe, 0x67, 0x33, 0xf9, 0x44, 0xf9, 0xf6, 0xe7, 0x2f, 0x46, 0x0d, 0xb4, 0x73, 0x05, | 	0x31, 0x5c, 0xc7, 0x64, 0x22, 0x44, 0x79, 0xed, 0x4b, 0xa3, 0x61, 0x03, 0xed, 0x4d, 0x60, 0xf1, | ||||||
| 	0x8b, 0x5f, 0xc2, 0x81, 0x5c, 0xa8, 0x06, 0x54, 0xfe, 0x76, 0xb8, 0x2a, 0x83, 0x22, 0xfc, 0xde, | 	0x15, 0x1c, 0xc8, 0x86, 0xaa, 0x47, 0xc5, 0x6f, 0xcb, 0x97, 0x6d, 0x90, 0xa7, 0xdf, 0xdb, 0xd9, | ||||||
| 	0xca, 0x76, 0xf7, 0x83, 0x24, 0x6b, 0x7b, 0xe9, 0x62, 0xd4, 0xa8, 0xa6, 0x40, 0x38, 0x2d, 0x1c, | 	0xce, 0x7e, 0x94, 0x64, 0xd5, 0x56, 0x46, 0xc3, 0x46, 0x35, 0x05, 0xc2, 0x69, 0xe1, 0xe8, 0x07, | ||||||
| 	0x7d, 0x17, 0x16, 0x7d, 0x1a, 0x9c, 0x58, 0x5e, 0x87, 0x04, 0xc4, 0xb3, 0x89, 0xc7, 0x99, 0x4c, | 	0xb0, 0xec, 0x52, 0xef, 0x4c, 0x77, 0xda, 0xc4, 0x23, 0x8e, 0x49, 0x1c, 0x9f, 0x89, 0x92, 0x28, | ||||||
| 	0x89, 0x52, 0x7b, 0x59, 0x14, 0xaf, 0xfd, 0x31, 0x1c, 0xbe, 0x42, 0x6d, 0xee, 0x42, 0xa9, 0x33, | 	0x69, 0xab, 0xbc, 0x79, 0x1d, 0x8e, 0xe1, 0xf0, 0x04, 0x35, 0x7a, 0x0c, 0x2b, 0x1e, 0x75, 0x3d, | ||||||
| 	0xa0, 0x96, 0x10, 0x87, 0xbe, 0x0d, 0x25, 0x5b, 0xfd, 0x56, 0x37, 0x7f, 0x55, 0x57, 0x5f, 0x4d, | 	0xbd, 0xa3, 0x73, 0x89, 0x47, 0xae, 0x6d, 0x19, 0x03, 0x51, 0x32, 0x65, 0xed, 0xd6, 0x68, 0xd8, | ||||||
| 	0x73, 0x39, 0x6a, 0x54, 0x45, 0x93, 0x69, 0x6a, 0x00, 0x8e, 0x58, 0xcc, 0xc7, 0x50, 0xdd, 0x3e, | 	0x58, 0x39, 0x1a, 0x47, 0x5e, 0x0e, 0x1b, 0xaf, 0x08, 0xd7, 0x71, 0x48, 0x8c, 0xc4, 0x93, 0x62, | ||||||
| 	0x0b, 0x7c, 0xca, 0xb5, 0x4f, 0xbf, 0x04, 0x45, 0x22, 0x01, 0x52, 0x5a, 0x29, 0x2e, 0x19, 0x21, | 	0xd4, 0x7d, 0x28, 0xb5, 0x7b, 0x54, 0x40, 0xd0, 0xf7, 0xa0, 0x64, 0xca, 0xdf, 0xd2, 0xab, 0xaf, | ||||||
| 	0x19, 0x56, 0x58, 0xf4, 0x1a, 0x14, 0xc8, 0x99, 0xd5, 0xe5, 0x2a, 0xf7, 0xab, 0x8a, 0xac, 0xb0, | 	0x85, 0x9d, 0x3d, 0xa4, 0xb9, 0x1c, 0x36, 0xaa, 0x7c, 0x80, 0x35, 0x43, 0x00, 0x8e, 0x58, 0xd4, | ||||||
| 	0x2d, 0x80, 0x38, 0xc4, 0x99, 0xfb, 0x00, 0x3b, 0x24, 0x12, 0xbd, 0x09, 0x0b, 0x3a, 0x6e, 0xd3, | 	0x27, 0x50, 0xdd, 0xbd, 0xf0, 0x5c, 0xea, 0x87, 0xf1, 0xfa, 0x2a, 0x14, 0x89, 0x00, 0x08, 0x69, | ||||||
| 	0xe9, 0xf4, 0x05, 0xc5, 0xbc, 0x80, 0xd3, 0x68, 0x3c, 0x4e, 0x6f, 0x3e, 0x86, 0xb2, 0x4c, 0x39, | 	0xa5, 0xb8, 0x1d, 0x05, 0x64, 0x58, 0x62, 0xd1, 0xeb, 0x50, 0x20, 0x17, 0xba, 0xe1, 0xcb, 0xbe, | ||||||
| 	0x51, 0x33, 0x84, 0x09, 0x32, 0xe3, 0x94, 0x94, 0xc8, 0x04, 0x49, 0x81, 0x43, 0x5c, 0x54, 0x74, | 	0x52, 0x95, 0x64, 0x85, 0x5d, 0x0e, 0xc4, 0x01, 0x4e, 0x3d, 0x04, 0xd8, 0x23, 0x91, 0xe8, 0x6d, | ||||||
| 	0x72, 0x93, 0x8a, 0x4e, 0x22, 0xc2, 0x5c, 0xa8, 0x86, 0xbc, 0xba, 0x0e, 0x66, 0xd2, 0x70, 0x0b, | 	0x58, 0x0a, 0x6b, 0x22, 0x5d, 0xaa, 0x5f, 0x96, 0xcc, 0x4b, 0x38, 0x8d, 0xc6, 0xe3, 0xf4, 0xea, | ||||||
| 	0x4a, 0xda, 0x4c, 0xa5, 0x25, 0xea, 0x7f, 0x5a, 0x10, 0x8e, 0x28, 0x12, 0xda, 0x4e, 0x20, 0x55, | 	0x13, 0x28, 0x8b, 0x72, 0xe6, 0xfd, 0x88, 0x9b, 0x20, 0xaa, 0x59, 0x4a, 0x89, 0x4c, 0x10, 0x14, | ||||||
| 	0x3e, 0xb2, 0x29, 0x7b, 0x03, 0x6e, 0xa8, 0x04, 0x56, 0xba, 0x16, 0x14, 0xd9, 0x0d, 0xed, 0x33, | 	0x38, 0xc0, 0x45, 0x0d, 0x2d, 0x37, 0xad, 0xa1, 0x25, 0xb2, 0xd7, 0x86, 0x6a, 0xc0, 0x1b, 0xf6, | ||||||
| 	0x8d, 0x4f, 0x68, 0xfa, 0x19, 0xd4, 0x26, 0x35, 0xcd, 0x4f, 0x51, 0xe0, 0xb2, 0x9b, 0x62, 0xfe, | 	0xd8, 0x4c, 0x1a, 0x6e, 0x41, 0x29, 0x34, 0x53, 0x6a, 0x89, 0x66, 0x6b, 0x28, 0x08, 0x47, 0x14, | ||||||
| 	0xc6, 0x80, 0xc5, 0xa4, 0xa4, 0xec, 0xcf, 0x97, 0x5d, 0xc9, 0xf5, 0xed, 0x25, 0xe1, 0x91, 0xdf, | 	0x09, 0x6d, 0x67, 0x90, 0x6a, 0x4d, 0xd9, 0x94, 0xbd, 0x09, 0x37, 0x64, 0x73, 0x90, 0xba, 0x96, | ||||||
| 	0x1b, 0xb0, 0x9c, 0xba, 0xda, 0x54, 0x2f, 0x3e, 0x85, 0x51, 0xc9, 0xe0, 0xc8, 0x4f, 0x11, 0x1c, | 	0x24, 0xd9, 0x8d, 0xd0, 0x67, 0x21, 0x3e, 0xa1, 0xe9, 0x97, 0x50, 0x9b, 0x36, 0x90, 0x3f, 0x43, | ||||||
| 	0x7f, 0xcd, 0x41, 0xf5, 0xbe, 0x75, 0x44, 0xdc, 0x43, 0xe2, 0x92, 0x2e, 0xf7, 0x29, 0x7a, 0x1f, | 	0xf3, 0xcc, 0x6e, 0x8a, 0xfa, 0x3b, 0x05, 0x96, 0x93, 0x92, 0xb2, 0x87, 0x2f, 0xbb, 0x92, 0xeb, | ||||||
| 	0x2a, 0x7d, 0x8b, 0x77, 0x4f, 0x24, 0x54, 0x0f, 0x00, 0x9d, 0x6c, 0x25, 0x2a, 0x25, 0xa9, 0xb9, | 	0x47, 0x57, 0xc2, 0x23, 0x7f, 0x54, 0x60, 0x35, 0x75, 0xb4, 0x99, 0x22, 0x3e, 0x83, 0x51, 0xc9, | ||||||
| 	0x17, 0x8b, 0xd9, 0xf6, 0x38, 0x3d, 0x6f, 0x7f, 0x4e, 0x99, 0x54, 0x49, 0x60, 0x70, 0x52, 0x9b, | 	0xe4, 0xc8, 0xcf, 0x90, 0x1c, 0xff, 0xc8, 0x41, 0xf5, 0xbe, 0x7e, 0x42, 0xec, 0x63, 0x62, 0x13, | ||||||
| 	0x9c, 0xda, 0xe4, 0x79, 0xfb, 0x2c, 0x10, 0x35, 0x7a, 0xfa, 0x61, 0x31, 0x65, 0x02, 0x26, 0x3f, | 	0xc3, 0x77, 0x29, 0x7a, 0x1f, 0x2a, 0x5d, 0xdd, 0x37, 0xce, 0x04, 0x34, 0x5c, 0x2e, 0xda, 0xd9, | ||||||
| 	0x19, 0x38, 0x94, 0xf4, 0x89, 0xc7, 0xe3, 0xa9, 0x6d, 0x6f, 0x4c, 0x3e, 0xbe, 0xa2, 0x71, 0xe5, | 	0xda, 0x5f, 0x4a, 0x52, 0xf3, 0x20, 0x16, 0xb3, 0xeb, 0xf8, 0x74, 0xa0, 0xbd, 0x22, 0x4d, 0xaa, | ||||||
| 	0x2e, 0x2c, 0x8e, 0x1b, 0x8f, 0x16, 0x21, 0x7f, 0x4a, 0xce, 0xc3, 0xf7, 0xc2, 0xe2, 0x27, 0x5a, | 	0x24, 0x30, 0x38, 0xa9, 0x4d, 0x6c, 0x84, 0xe2, 0x7b, 0xf7, 0xc2, 0xe3, 0xfd, 0x7f, 0xf6, 0x45, | ||||||
| 	0x86, 0xc2, 0xd0, 0x72, 0x07, 0x2a, 0x1b, 0x71, 0x78, 0xb8, 0x93, 0xbb, 0x6d, 0x98, 0x7f, 0x34, | 	0x34, 0x65, 0x02, 0x26, 0x3f, 0xef, 0x59, 0x94, 0x74, 0x89, 0xe3, 0xc7, 0x1b, 0xe1, 0xc1, 0x98, | ||||||
| 	0xa0, 0x36, 0xc9, 0x10, 0xf4, 0xc5, 0x84, 0xa0, 0x76, 0x45, 0x59, 0x95, 0x7f, 0x87, 0x9c, 0x87, | 	0x7c, 0x3c, 0xa1, 0x71, 0xed, 0x2e, 0x2c, 0x8f, 0x1b, 0x8f, 0x96, 0x21, 0x7f, 0x4e, 0x06, 0x41, | ||||||
| 	0x52, 0xb7, 0xa1, 0xe4, 0x07, 0x62, 0xce, 0xf6, 0xa9, 0x7a, 0xf5, 0x37, 0xf4, 0x4b, 0xee, 0x2b, | 	0xbc, 0x30, 0xff, 0x89, 0x56, 0xa1, 0xd0, 0xd7, 0xed, 0x9e, 0xac, 0x46, 0x1c, 0x7c, 0xdc, 0xc9, | ||||||
| 	0xf8, 0xe5, 0xa8, 0x71, 0x33, 0x25, 0x5e, 0x23, 0x70, 0xc4, 0x8a, 0x4c, 0x28, 0x4a, 0x7b, 0x44, | 	0xdd, 0x56, 0xd4, 0x3f, 0x2b, 0x50, 0x9b, 0x66, 0x08, 0xfa, 0x4a, 0x42, 0x90, 0x56, 0x91, 0x56, | ||||||
| 	0xcd, 0x17, 0xdd, 0x19, 0x44, 0x6d, 0x7d, 0x24, 0x21, 0x58, 0x61, 0xcc, 0xf7, 0xa1, 0x24, 0x86, | 	0xe5, 0xdf, 0x25, 0x83, 0x40, 0xea, 0x2e, 0x94, 0x5c, 0x8f, 0xef, 0xf0, 0x2e, 0x95, 0x51, 0x7f, | ||||||
| 	0x8f, 0x3d, 0xc2, 0x2d, 0x11, 0x40, 0x8c, 0xb8, 0xc7, 0xf7, 0x1d, 0xef, 0x54, 0x99, 0x16, 0x05, | 	0x33, 0x8c, 0xe4, 0xa1, 0x84, 0x5f, 0x0e, 0x1b, 0x37, 0x53, 0xe2, 0x43, 0x04, 0x8e, 0x58, 0x91, | ||||||
| 	0xd0, 0xa1, 0x82, 0xe3, 0x88, 0xe2, 0x65, 0x25, 0x36, 0x37, 0x65, 0x89, 0xfd, 0x53, 0x0e, 0x2a, | 	0x0a, 0x45, 0x61, 0x0f, 0x9f, 0x27, 0x7c, 0xf2, 0x03, 0xef, 0xad, 0x8f, 0x04, 0x04, 0x4b, 0x8c, | ||||||
| 	0x42, 0xbb, 0xae, 0xda, 0xdf, 0x84, 0xaa, 0x9b, 0xbc, 0x93, 0xb2, 0xe2, 0xa6, 0x12, 0x98, 0x8e, | 	0xfa, 0x3e, 0x94, 0xf8, 0x62, 0x73, 0x40, 0x7c, 0x9d, 0x27, 0x10, 0x23, 0xf6, 0xe9, 0x7d, 0xcb, | ||||||
| 	0x52, 0x9c, 0xa6, 0x15, 0xcc, 0xc7, 0x0e, 0x71, 0xed, 0x88, 0x39, 0x97, 0x66, 0xbe, 0x97, 0x44, | 	0x39, 0x97, 0xa6, 0x45, 0x09, 0x74, 0x2c, 0xe1, 0x38, 0xa2, 0xb8, 0xaa, 0xc5, 0xe6, 0x66, 0x6c, | ||||||
| 	0xe2, 0x34, 0xad, 0xc8, 0xc5, 0x27, 0xe2, 0xb5, 0x55, 0x77, 0x8c, 0x72, 0xf1, 0x7b, 0x02, 0x88, | 	0xb1, 0x7f, 0xc9, 0x41, 0x85, 0x6b, 0x0f, 0xbb, 0xf6, 0x77, 0xa0, 0x6a, 0x27, 0xcf, 0x24, 0xad, | ||||||
| 	0x43, 0xdc, 0xcb, 0x6e, 0x3c, 0x3b, 0xdd, 0x8d, 0xd1, 0x1d, 0x98, 0x17, 0xed, 0xd1, 0x1f, 0x70, | 	0xb8, 0x29, 0x05, 0xa6, 0xb3, 0x14, 0xa7, 0x69, 0x39, 0xf3, 0xa9, 0x45, 0x6c, 0x33, 0x62, 0xce, | ||||||
| 	0x3d, 0x42, 0x14, 0x64, 0x23, 0x45, 0x17, 0xa3, 0xc6, 0xfc, 0xbb, 0x29, 0x0c, 0x1e, 0xa3, 0x34, | 	0xa5, 0x99, 0xef, 0x25, 0x91, 0x38, 0x4d, 0xcb, 0x6b, 0xf1, 0x29, 0x8f, 0xb6, 0x9c, 0xbc, 0x51, | ||||||
| 	0x3f, 0x04, 0x80, 0xfd, 0xa3, 0x1f, 0x93, 0x6e, 0xf8, 0x5a, 0xd7, 0x0f, 0xce, 0xa2, 0xde, 0xaa, | 	0x2d, 0xfe, 0x90, 0x03, 0x71, 0x80, 0xbb, 0xea, 0xc4, 0xf3, 0xb3, 0x9d, 0x18, 0xdd, 0x81, 0x45, | ||||||
| 	0x7d, 0x4d, 0x40, 0x95, 0x43, 0xe2, 0x7a, 0x9b, 0xc0, 0xe1, 0x14, 0x25, 0x6a, 0x41, 0x39, 0x1a, | 	0x3e, 0x1e, 0xdd, 0x9e, 0x1f, 0xae, 0x27, 0x05, 0x31, 0x48, 0xd1, 0x68, 0xd8, 0x58, 0x7c, 0x2f, | ||||||
| 	0xa6, 0x55, 0x2d, 0x59, 0x52, 0x6c, 0xe5, 0x68, 0xe2, 0xc6, 0x31, 0x4d, 0x2a, 0x74, 0x66, 0xaf, | 	0x85, 0xc1, 0x63, 0x94, 0xea, 0x87, 0x00, 0x70, 0x78, 0xf2, 0x33, 0x62, 0x04, 0xd1, 0xba, 0x7e, | ||||||
| 	0x0d, 0x9d, 0x36, 0xe4, 0x07, 0x8e, 0x2d, 0xaf, 0x5e, 0x6e, 0x7f, 0x55, 0x87, 0xff, 0xc3, 0xdd, | 	0x29, 0xe7, 0xfd, 0x56, 0xde, 0x05, 0x39, 0x54, 0x3a, 0x24, 0xee, 0xb7, 0x09, 0x1c, 0x4e, 0x51, | ||||||
| 	0xce, 0xe5, 0xa8, 0xf1, 0xea, 0xa4, 0x35, 0x94, 0x9f, 0x07, 0x84, 0x35, 0x1f, 0xee, 0x76, 0xb0, | 	0xa2, 0x16, 0x94, 0xa3, 0x45, 0x5d, 0xf6, 0x92, 0x15, 0xc9, 0x56, 0x8e, 0xb6, 0x79, 0x1c, 0xd3, | ||||||
| 	0x60, 0x7e, 0xd9, 0x63, 0x14, 0xa7, 0x7c, 0x8c, 0x0d, 0x00, 0x75, 0x6b, 0xc1, 0x7d, 0x23, 0x7c, | 	0xa4, 0x52, 0x67, 0xfe, 0xda, 0xd4, 0xd1, 0x20, 0xdf, 0xb3, 0x4c, 0x71, 0xf4, 0xb2, 0xf6, 0x8d, | ||||||
| 	0x08, 0xbd, 0x58, 0xec, 0x44, 0x18, 0x9c, 0xa0, 0x42, 0x0c, 0x96, 0xba, 0x94, 0xc8, 0xdf, 0xe2, | 	0x30, 0xfd, 0x1f, 0xee, 0xb7, 0x2f, 0x87, 0x8d, 0xd7, 0xa6, 0x5d, 0x71, 0xfd, 0x81, 0x47, 0x58, | ||||||
| 	0xb9, 0x18, 0xb7, 0xfa, 0x41, 0xad, 0x24, 0x67, 0xb8, 0x2f, 0x67, 0xab, 0x4e, 0x82, 0xad, 0xfd, | 	0xf3, 0xe1, 0x7e, 0x1b, 0x73, 0xe6, 0xab, 0x82, 0x51, 0x9c, 0x31, 0x18, 0x5b, 0x00, 0xf2, 0xd4, | ||||||
| 	0x8a, 0x52, 0xb3, 0xb4, 0x35, 0x2e, 0x0c, 0x5f, 0x95, 0x8f, 0x7c, 0x58, 0xb2, 0xc5, 0x34, 0x9a, | 	0x9c, 0xfb, 0x46, 0x10, 0x88, 0xf0, 0xd2, 0xb2, 0x17, 0x61, 0x70, 0x82, 0x0a, 0x31, 0x58, 0x31, | ||||||
| 	0x52, 0x5a, 0x9e, 0x5a, 0xe9, 0x4d, 0xa1, 0xb0, 0x33, 0x2e, 0x08, 0x5f, 0x95, 0x8d, 0x7e, 0x08, | 	0x28, 0x11, 0xbf, 0x79, 0xb8, 0x98, 0xaf, 0x77, 0xbd, 0x5a, 0x49, 0xec, 0x87, 0x5f, 0xcb, 0xd6, | ||||||
| 	0x2b, 0x1a, 0x78, 0x75, 0xae, 0xad, 0x81, 0xf4, 0x54, 0x5d, 0x4c, 0xda, 0x9d, 0x89, 0x54, 0xf8, | 	0x9d, 0x38, 0x9b, 0xf6, 0xaa, 0x54, 0xb3, 0xb2, 0x33, 0x2e, 0x0c, 0x4f, 0xca, 0x47, 0x2e, 0xac, | ||||||
| 	0x13, 0x24, 0x20, 0x1b, 0x8a, 0x6e, 0xd8, 0x5b, 0x2a, 0xb2, 0xb0, 0x7f, 0x2b, 0xdb, 0x2d, 0xe2, | 	0x98, 0x72, 0x5d, 0x8b, 0x95, 0x96, 0x67, 0x56, 0x7a, 0x93, 0x2b, 0x6c, 0x8f, 0x0b, 0xc2, 0x93, | ||||||
| 	0xe8, 0x6f, 0x26, 0x7b, 0x4a, 0x34, 0x37, 0xaa, 0x76, 0xa2, 0x64, 0xa3, 0x33, 0xa8, 0x58, 0x9e, | 	0xb2, 0xd1, 0x4f, 0x60, 0x2d, 0x04, 0x4e, 0xee, 0xcc, 0x35, 0x10, 0x9e, 0xaa, 0xf3, 0x2d, 0xbe, | ||||||
| 	0xe7, 0x73, 0x2b, 0x9c, 0xb4, 0xe7, 0xa4, 0xaa, 0xcd, 0xa9, 0x55, 0x6d, 0xc6, 0x32, 0xc6, 0x7a, | 	0x3d, 0x95, 0x0a, 0x7f, 0x8a, 0x04, 0x64, 0x42, 0xd1, 0x0e, 0x66, 0x4b, 0x45, 0x34, 0xf6, 0xef, | ||||||
| 	0x58, 0x02, 0x83, 0x93, 0xaa, 0xd0, 0x13, 0x58, 0xf0, 0x9f, 0x78, 0x84, 0x62, 0x72, 0x4c, 0x28, | 	0x66, 0x3b, 0x45, 0x9c, 0xfd, 0xcd, 0xe4, 0x4c, 0x89, 0xf6, 0x46, 0x39, 0x4e, 0xa4, 0x6c, 0x74, | ||||||
| 	0xf1, 0xc4, 0x5a, 0x56, 0x95, 0xda, 0xbf, 0x96, 0x51, 0x7b, 0x8a, 0x39, 0x0e, 0xe9, 0x34, 0x9c, | 	0x01, 0x15, 0xdd, 0x71, 0x5c, 0x5f, 0x0f, 0xb6, 0xf8, 0x05, 0xa1, 0x6a, 0x7b, 0x66, 0x55, 0xdb, | ||||||
| 	0xe1, 0x71, 0x2d, 0x62, 0x0f, 0x3d, 0x76, 0x3c, 0xcb, 0x75, 0x7e, 0x4a, 0x28, 0xab, 0xcd, 0xc7, | 	0xb1, 0x8c, 0xb1, 0x19, 0x96, 0xc0, 0xe0, 0xa4, 0x2a, 0xf4, 0x14, 0x96, 0xdc, 0xa7, 0x0e, 0xa1, | ||||||
| 	0x7b, 0xe8, 0xbd, 0x08, 0x8a, 0x13, 0x14, 0xe8, 0xeb, 0x50, 0xe9, 0xba, 0x03, 0xc6, 0x09, 0x95, | 	0x98, 0x9c, 0x12, 0x4a, 0x1c, 0x7e, 0xe5, 0xab, 0x0a, 0xed, 0xdf, 0xcc, 0xa8, 0x3d, 0xc5, 0x1c, | ||||||
| 	0x15, 0x62, 0x41, 0x66, 0x50, 0x74, 0xbf, 0xad, 0x18, 0x85, 0x93, 0x74, 0x2b, 0xdf, 0x80, 0xca, | 	0xa7, 0x74, 0x1a, 0xce, 0xf0, 0xb8, 0x16, 0x7e, 0xc7, 0x3d, 0xb5, 0x1c, 0xdd, 0xb6, 0x7e, 0x41, | ||||||
| 	0xff, 0xd8, 0x17, 0x45, 0x5f, 0x1d, 0x77, 0xe8, 0x54, 0x7d, 0xf5, 0x3f, 0x06, 0xcc, 0xa7, 0xdd, | 	0x28, 0xab, 0x2d, 0xc6, 0x77, 0xdc, 0x7b, 0x11, 0x14, 0x27, 0x28, 0xd0, 0xb7, 0xa0, 0x62, 0xd8, | ||||||
| 	0x10, 0x4d, 0x63, 0xc6, 0xc4, 0x65, 0x5f, 0xd7, 0xca, 0xfc, 0xc4, 0x5a, 0xa9, 0x4a, 0xd2, 0xec, | 	0x3d, 0xe6, 0x13, 0x2a, 0x3a, 0xc4, 0x92, 0xa8, 0xa0, 0xe8, 0x7c, 0x3b, 0x31, 0x0a, 0x27, 0xe9, | ||||||
| 	0xa7, 0x29, 0x49, 0x1b, 0x00, 0x56, 0xe0, 0xe8, 0x6a, 0x14, 0x56, 0xb7, 0xa8, 0x9e, 0xc4, 0x8b, | 	0xd6, 0xbe, 0x0d, 0x95, 0xff, 0x73, 0x2e, 0xf2, 0xb9, 0x3a, 0xee, 0xd0, 0x99, 0xe6, 0xea, 0xdf, | ||||||
| 	0x33, 0x4e, 0x50, 0x89, 0x07, 0xeb, 0xfa, 0x1e, 0xa7, 0xbe, 0xeb, 0x12, 0x2a, 0x2b, 0x58, 0x29, | 	0x72, 0xb0, 0x98, 0x76, 0x43, 0xb4, 0x8d, 0x29, 0x53, 0x1f, 0x12, 0xc2, 0x5e, 0x99, 0x9f, 0xda, | ||||||
| 	0x7c, 0xb0, 0xad, 0x08, 0x8a, 0x13, 0x14, 0xe6, 0x3e, 0xa4, 0x37, 0x3e, 0x74, 0x37, 0x34, 0x3c, | 	0x2b, 0x65, 0x4b, 0x9a, 0xff, 0x2c, 0x2d, 0x69, 0x0b, 0x40, 0xf7, 0xac, 0xb0, 0x1b, 0x05, 0xdd, | ||||||
| 	0xbc, 0xfb, 0xad, 0xa9, 0x8d, 0x36, 0x6f, 0x41, 0x19, 0xfb, 0x3e, 0x3f, 0xb0, 0xf8, 0x09, 0x43, | 	0x2d, 0xea, 0x27, 0xf1, 0xa5, 0x1c, 0x27, 0xa8, 0x78, 0xc0, 0x0c, 0xd7, 0xf1, 0xa9, 0x6b, 0xdb, | ||||||
| 	0x0d, 0x28, 0x04, 0xe2, 0x87, 0x5a, 0xe7, 0xe5, 0x77, 0x0e, 0x89, 0xc1, 0x21, 0xdc, 0xfc, 0xb5, | 	0x84, 0x8a, 0x0e, 0x56, 0x0a, 0x02, 0xb6, 0x13, 0x41, 0x71, 0x82, 0x82, 0xdf, 0x71, 0x4f, 0x6c, | ||||||
| 	0x01, 0xaf, 0x4c, 0xdc, 0xae, 0x85, 0x03, 0xba, 0xd1, 0x49, 0x99, 0x14, 0x39, 0x20, 0xa6, 0xc3, | 	0xd7, 0x38, 0x17, 0x2e, 0x08, 0xab, 0x4f, 0xf4, 0xae, 0x52, 0x70, 0xc7, 0xd5, 0x26, 0xb0, 0xf8, | ||||||
| 	0x09, 0x2a, 0xd1, 0xb6, 0x53, 0x2b, 0xf9, 0x78, 0xdb, 0x4e, 0x69, 0xc3, 0x69, 0x5a, 0xf3, 0xdf, | 	0x0a, 0x0e, 0xf5, 0x10, 0xd2, 0xb7, 0x52, 0x74, 0x37, 0x70, 0x80, 0x12, 0x5d, 0x1b, 0x67, 0x3b, | ||||||
| 	0x39, 0x28, 0x1e, 0x72, 0x8b, 0x0f, 0x18, 0x7a, 0x0c, 0x25, 0x91, 0x3d, 0xb6, 0xc5, 0x2d, 0xa9, | 	0xbc, 0x7a, 0x0b, 0xca, 0xd8, 0x75, 0xfd, 0x23, 0xdd, 0x3f, 0x63, 0xa8, 0x01, 0x05, 0x8f, 0xff, | ||||||
| 	0x39, 0xf3, 0x17, 0x2b, 0x3d, 0xfe, 0xc4, 0x1d, 0x4b, 0x43, 0x70, 0x24, 0x51, 0xac, 0xaa, 0x4c, | 	0x90, 0x4f, 0x0e, 0xe2, 0x2d, 0x46, 0x60, 0x70, 0x00, 0x57, 0x7f, 0xab, 0xc0, 0xab, 0x53, 0x5f, | ||||||
| 	0xea, 0x51, 0xe6, 0x45, 0x25, 0x27, 0xd4, 0x8e, 0x15, 0x56, 0x8c, 0xeb, 0x7d, 0xc2, 0x98, 0xd5, | 	0x00, 0xb8, 0x23, 0x8d, 0xe8, 0x4b, 0x9a, 0x14, 0x39, 0x32, 0xa6, 0xc3, 0x09, 0x2a, 0x3e, 0xfe, | ||||||
| 	0xd3, 0xb1, 0x16, 0x8d, 0xeb, 0x7b, 0x21, 0x18, 0x6b, 0x3c, 0x7a, 0x1b, 0x8a, 0x94, 0x58, 0x2c, | 	0x53, 0xcf, 0x06, 0xe3, 0xe3, 0x3f, 0xa5, 0x0d, 0xa7, 0x69, 0xd5, 0xff, 0xe6, 0xa0, 0x78, 0xec, | ||||||
| 	0x1a, 0x22, 0xea, 0x5a, 0x24, 0x96, 0xd0, 0xcb, 0x51, 0x63, 0x4e, 0x09, 0x97, 0x67, 0xac, 0xa8, | 	0xeb, 0x7e, 0x8f, 0xa1, 0x27, 0x50, 0xe2, 0x55, 0x68, 0xea, 0xbe, 0x2e, 0x34, 0x67, 0x7e, 0x55, | ||||||
| 	0xd1, 0x7b, 0x70, 0xc3, 0x26, 0xdc, 0x72, 0xdc, 0x70, 0x76, 0xc8, 0xfc, 0xed, 0x20, 0x14, 0xd6, | 	0x0b, 0xd7, 0xa8, 0x78, 0xf2, 0x85, 0x10, 0x1c, 0x49, 0xe4, 0x57, 0x5e, 0x26, 0xf4, 0x48, 0xf3, | ||||||
| 	0x09, 0x59, 0xdb, 0x15, 0x61, 0x93, 0x3a, 0x60, 0x2d, 0x50, 0xe4, 0x49, 0xd7, 0xb7, 0x89, 0x8c, | 	0xa2, 0xd6, 0x15, 0x68, 0xc7, 0x12, 0xcb, 0xd7, 0xfe, 0x2e, 0x61, 0x4c, 0xef, 0x84, 0x39, 0x1b, | ||||||
| 	0xc3, 0x42, 0x9c, 0x27, 0x5b, 0xbe, 0x4d, 0xb0, 0xc4, 0x98, 0x4f, 0x0d, 0xa8, 0x84, 0x92, 0xb6, | 	0xad, 0xfd, 0x07, 0x01, 0x18, 0x87, 0x78, 0xf4, 0x0e, 0x14, 0x29, 0xd1, 0x59, 0xb4, 0x8c, 0xd4, | ||||||
| 	0xac, 0x01, 0x23, 0x68, 0x3d, 0xba, 0x45, 0xf8, 0xdc, 0xba, 0xb1, 0xcd, 0xbe, 0x7b, 0x1e, 0x90, | 	0x43, 0x91, 0x58, 0x40, 0x2f, 0x87, 0x8d, 0x05, 0x29, 0x5c, 0x7c, 0x63, 0x49, 0x8d, 0x1e, 0xc3, | ||||||
| 	0xcb, 0x51, 0xa3, 0x2c, 0xc9, 0xc4, 0x21, 0xba, 0x40, 0xc2, 0x47, 0xb9, 0x6b, 0x7c, 0xf4, 0x1a, | 	0x0d, 0x93, 0xf8, 0xba, 0x65, 0x07, 0x3b, 0x48, 0xe6, 0xf7, 0x8d, 0x40, 0x58, 0x3b, 0x60, 0xd5, | ||||||
| 	0x14, 0xe4, 0x9c, 0xa6, 0x9c, 0x19, 0x8d, 0x65, 0x72, 0x96, 0xc3, 0x21, 0xce, 0xfc, 0x5d, 0x0e, | 	0x2a, 0xdc, 0x26, 0xf9, 0x81, 0x43, 0x81, 0xbc, 0xde, 0x0c, 0xd7, 0x24, 0x22, 0x9f, 0x0b, 0x71, | ||||||
| 	0xaa, 0xa9, 0xcb, 0x65, 0x18, 0x8d, 0xa2, 0xdd, 0x2b, 0x97, 0x61, 0x9f, 0x9f, 0xfc, 0x11, 0xf1, | 	0xbd, 0xed, 0xb8, 0x26, 0xc1, 0x02, 0xa3, 0x3e, 0x53, 0xa0, 0x12, 0x48, 0xda, 0xd1, 0x7b, 0x8c, | ||||||
| 	0xfb, 0x50, 0xec, 0x8a, 0xfb, 0xe9, 0xaf, 0xb8, 0xeb, 0xd3, 0x3c, 0x85, 0xf4, 0x4c, 0x1c, 0x49, | 	0xa0, 0xcd, 0xe8, 0x14, 0x41, 0xb8, 0xc3, 0x01, 0x39, 0xff, 0xde, 0xc0, 0x23, 0x97, 0xc3, 0x46, | ||||||
| 	0xf2, 0xc8, 0xb0, 0x12, 0x88, 0x76, 0x60, 0x89, 0x12, 0x4e, 0xcf, 0x37, 0x8f, 0x39, 0xa1, 0xc9, | 	0x59, 0x90, 0xf1, 0x8f, 0xe8, 0x00, 0x09, 0x1f, 0xe5, 0xae, 0xf1, 0xd1, 0xeb, 0x50, 0x10, 0xfb, | ||||||
| 	0x61, 0xb1, 0x10, 0x0f, 0x0f, 0x78, 0x9c, 0x00, 0x5f, 0xe5, 0x31, 0x5d, 0x98, 0x15, 0x8d, 0x5d, | 	0x9e, 0x74, 0x66, 0xb4, 0xde, 0x89, 0x9d, 0x10, 0x07, 0x38, 0xf5, 0x0f, 0x39, 0xa8, 0xa6, 0x0e, | ||||||
| 	0xb8, 0x9d, 0xa5, 0x3e, 0x5b, 0x45, 0x6e, 0xd7, 0xcc, 0x1a, 0x2f, 0xbc, 0xe3, 0x59, 0x9e, 0x1f, | 	0x97, 0x61, 0xc5, 0x8a, 0xee, 0x70, 0xb9, 0x0c, 0xef, 0x02, 0xd3, 0x1f, 0x3a, 0x7f, 0x04, 0x45, | ||||||
| 	0x06, 0x7b, 0x21, 0xf6, 0xce, 0x03, 0x01, 0xc4, 0x21, 0xee, 0xce, 0xb2, 0x58, 0x20, 0x7f, 0xf5, | 	0x83, 0x9f, 0x2f, 0x7c, 0x69, 0xde, 0x9c, 0x25, 0x14, 0xc2, 0x33, 0x71, 0x26, 0x89, 0x4f, 0x86, | ||||||
| 	0xac, 0x31, 0xf3, 0xf4, 0x59, 0x63, 0xe6, 0xa3, 0x67, 0x6a, 0x99, 0xfc, 0x01, 0x94, 0xe3, 0x31, | 	0xa5, 0x40, 0xb4, 0x07, 0x2b, 0x94, 0xf8, 0x74, 0xb0, 0x7d, 0xea, 0x13, 0x9a, 0x5c, 0x3a, 0x0b, | ||||||
| 	0xe2, 0x33, 0x56, 0x69, 0xfe, 0x08, 0x4a, 0x22, 0x92, 0xf4, 0xf8, 0x7b, 0x4d, 0xd1, 0x4f, 0x97, | 	0xf1, 0x12, 0x82, 0xc7, 0x09, 0xf0, 0x24, 0x8f, 0x6a, 0xc3, 0x3c, 0x5f, 0x10, 0xb8, 0xdb, 0x59, | ||||||
| 	0xe3, 0x5c, 0x96, 0x72, 0x6c, 0x6e, 0x40, 0xf8, 0x5d, 0x57, 0x54, 0x42, 0x87, 0x93, 0x7e, 0xaa, | 	0xea, 0x69, 0x2d, 0x72, 0x7b, 0xc8, 0x1c, 0xe2, 0xb9, 0x77, 0x1c, 0xdd, 0x71, 0x83, 0x64, 0x2f, | ||||||
| 	0x12, 0xee, 0x0a, 0x00, 0x0e, 0xe1, 0x89, 0xfd, 0xf9, 0x17, 0x06, 0x80, 0xdc, 0x13, 0xb6, 0x87, | 	0xc4, 0xde, 0x79, 0xc0, 0x81, 0x38, 0xc0, 0xdd, 0x59, 0xe5, 0x17, 0xd1, 0xdf, 0x3c, 0x6f, 0xcc, | ||||||
| 	0x62, 0xb7, 0x5b, 0x85, 0x59, 0x51, 0x62, 0xc7, 0x0d, 0x93, 0x29, 0x20, 0x31, 0xe8, 0x21, 0x14, | 	0x3d, 0x7b, 0xde, 0x98, 0xfb, 0xe8, 0xb9, 0xbc, 0x94, 0xfe, 0x18, 0xca, 0xf1, 0x3a, 0xf2, 0x39, | ||||||
| 	0x7d, 0x39, 0x5e, 0xa8, 0x8f, 0x7f, 0x6f, 0x4e, 0x8c, 0x1a, 0xf5, 0x2f, 0x9b, 0x26, 0xb6, 0x9e, | 	0xab, 0x54, 0x7f, 0x0a, 0x25, 0x9e, 0x49, 0xe1, 0x1a, 0x7d, 0xcd, 0xf0, 0x48, 0xb7, 0xf5, 0x5c, | ||||||
| 	0x6c, 0x9f, 0x71, 0xe2, 0x09, 0x1b, 0xe3, 0x88, 0x09, 0x67, 0x14, 0xac, 0x84, 0xb5, 0x5f, 0x7f, | 	0x96, 0xb6, 0xae, 0x6e, 0x41, 0xf0, 0xf6, 0xcc, 0x3b, 0xa1, 0xe5, 0x93, 0x6e, 0xaa, 0x13, 0xee, | ||||||
| 	0xfe, 0xa2, 0x3e, 0xf3, 0xf1, 0x8b, 0xfa, 0xcc, 0xdf, 0x5e, 0xd4, 0x67, 0x3e, 0xb8, 0xa8, 0x1b, | 	0x73, 0x00, 0x0e, 0xe0, 0x89, 0x7b, 0xf8, 0xaf, 0x15, 0x00, 0x71, 0xdf, 0xd8, 0xed, 0xf3, 0x3b, | ||||||
| 	0xcf, 0x2f, 0xea, 0xc6, 0xc7, 0x17, 0x75, 0xe3, 0x1f, 0x17, 0x75, 0xe3, 0xe9, 0x3f, 0xeb, 0x33, | 	0xe2, 0x3a, 0xcc, 0xf3, 0x16, 0x3b, 0x6e, 0x98, 0x28, 0x01, 0x81, 0x41, 0x0f, 0xa1, 0xe8, 0x8a, | ||||||
| 	0xef, 0xe5, 0x86, 0xeb, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x99, 0xeb, 0x4a, 0xdd, 0xf4, 0x1a, | 	0x35, 0x45, 0x3e, 0x50, 0xbe, 0x35, 0x35, 0x6b, 0xe4, 0xbf, 0x95, 0x9a, 0x58, 0x7f, 0xba, 0x7b, | ||||||
| 	0x00, 0x00, | 	0xe1, 0x13, 0x87, 0xdb, 0x18, 0x67, 0x4c, 0xb0, 0xeb, 0x60, 0x29, 0x4c, 0x7b, 0xe3, 0xc5, 0xcb, | ||||||
|  | 	0xfa, 0xdc, 0xc7, 0x2f, 0xeb, 0x73, 0xff, 0x7c, 0x59, 0x9f, 0xfb, 0x60, 0x54, 0x57, 0x5e, 0x8c, | ||||||
|  | 	0xea, 0xca, 0xc7, 0xa3, 0xba, 0xf2, 0xef, 0x51, 0x5d, 0x79, 0xf6, 0x49, 0x7d, 0xee, 0x71, 0xae, | ||||||
|  | 	0xbf, 0xf9, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb1, 0xe8, 0xc1, 0x2f, 0x98, 0x1b, 0x00, 0x00, | ||||||
| } | } | ||||||
|   | |||||||
| @@ -121,10 +121,18 @@ message DeleteOptions { | |||||||
|   // +optional |   // +optional | ||||||
|   optional Preconditions preconditions = 2; |   optional Preconditions preconditions = 2; | ||||||
| 
 | 
 | ||||||
|  |   // Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. | ||||||
|   // Should the dependent objects be orphaned. If true/false, the "orphan" |   // Should the dependent objects be orphaned. If true/false, the "orphan" | ||||||
|   // finalizer will be added to/removed from the object's finalizers list. |   // finalizer will be added to/removed from the object's finalizers list. | ||||||
|  |   // Either this field or PropagationPolicy may be set, but not both. | ||||||
|   // +optional |   // +optional | ||||||
|   optional bool orphanDependents = 3; |   optional bool orphanDependents = 3; | ||||||
|  | 
 | ||||||
|  |   // Whether and how garbage collection will be performed. | ||||||
|  |   // Defaults to Default. | ||||||
|  |   // Either this field or OrphanDependents may be set, but not both. | ||||||
|  |   // +optional | ||||||
|  |   optional string propagationPolicy = 4; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Duration is a wrapper around time.Duration which supports correct | // Duration is a wrapper around time.Duration which supports correct | ||||||
| @@ -469,6 +477,15 @@ message OwnerReference { | |||||||
|   // If true, this reference points to the managing controller. |   // If true, this reference points to the managing controller. | ||||||
|   // +optional |   // +optional | ||||||
|   optional bool controller = 6; |   optional bool controller = 6; | ||||||
|  | 
 | ||||||
|  |   // If true, AND if the owner has the "foregroundDeletion" finalizer, then | ||||||
|  |   // the owner cannot be deleted from the key-value store until this | ||||||
|  |   // reference is removed. | ||||||
|  |   // Defaults to false. | ||||||
|  |   // To set this field, a user needs "delete" permission of the owner, | ||||||
|  |   // otherwise 422 (Unprocessable Entity) will be returned. | ||||||
|  |   // +optional | ||||||
|  |   optional bool blockOwnerDeletion = 7; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out. | // Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out. | ||||||
|   | |||||||
| @@ -174,6 +174,10 @@ func (meta *ObjectMeta) GetOwnerReferences() []OwnerReference { | |||||||
| 			value := *meta.OwnerReferences[i].Controller | 			value := *meta.OwnerReferences[i].Controller | ||||||
| 			ret[i].Controller = &value | 			ret[i].Controller = &value | ||||||
| 		} | 		} | ||||||
|  | 		if meta.OwnerReferences[i].BlockOwnerDeletion != nil { | ||||||
|  | 			value := *meta.OwnerReferences[i].BlockOwnerDeletion | ||||||
|  | 			ret[i].BlockOwnerDeletion = &value | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 	return ret | 	return ret | ||||||
| } | } | ||||||
| @@ -189,6 +193,10 @@ func (meta *ObjectMeta) SetOwnerReferences(references []OwnerReference) { | |||||||
| 			value := *references[i].Controller | 			value := *references[i].Controller | ||||||
| 			newReferences[i].Controller = &value | 			newReferences[i].Controller = &value | ||||||
| 		} | 		} | ||||||
|  | 		if references[i].BlockOwnerDeletion != nil { | ||||||
|  | 			value := *references[i].BlockOwnerDeletion | ||||||
|  | 			newReferences[i].BlockOwnerDeletion = &value | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 	meta.OwnerReferences = newReferences | 	meta.OwnerReferences = newReferences | ||||||
| } | } | ||||||
|   | |||||||
| @@ -73,7 +73,8 @@ type ListMeta struct { | |||||||
|  |  | ||||||
| // These are internal finalizer values for Kubernetes-like APIs, must be qualified name unless defined here | // These are internal finalizer values for Kubernetes-like APIs, must be qualified name unless defined here | ||||||
| const ( | const ( | ||||||
| 	FinalizerOrphan string = "orphan" | 	FinalizerOrphanDependents string = "orphan" | ||||||
|  | 	FinalizerDeleteDependents string = "foregroundDeletion" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| // ObjectMeta is metadata that all persisted resources must have, which includes all objects | // ObjectMeta is metadata that all persisted resources must have, which includes all objects | ||||||
| @@ -255,6 +256,14 @@ type OwnerReference struct { | |||||||
| 	// If true, this reference points to the managing controller. | 	// If true, this reference points to the managing controller. | ||||||
| 	// +optional | 	// +optional | ||||||
| 	Controller *bool `json:"controller,omitempty" protobuf:"varint,6,opt,name=controller"` | 	Controller *bool `json:"controller,omitempty" protobuf:"varint,6,opt,name=controller"` | ||||||
|  | 	// If true, AND if the owner has the "foregroundDeletion" finalizer, then | ||||||
|  | 	// the owner cannot be deleted from the key-value store until this | ||||||
|  | 	// reference is removed. | ||||||
|  | 	// Defaults to false. | ||||||
|  | 	// To set this field, a user needs "delete" permission of the owner, | ||||||
|  | 	// otherwise 422 (Unprocessable Entity) will be returned. | ||||||
|  | 	// +optional | ||||||
|  | 	BlockOwnerDeletion *bool `json:"blockOwnerDeletion,omitempty" protobuf:"varint,7,opt,name=blockOwnerDeletion"` | ||||||
| } | } | ||||||
|  |  | ||||||
| // ListOptions is the query options to a standard REST list call. | // ListOptions is the query options to a standard REST list call. | ||||||
| @@ -305,6 +314,24 @@ type GetOptions struct { | |||||||
| 	ResourceVersion string `json:"resourceVersion,omitempty" protobuf:"bytes,1,opt,name=resourceVersion"` | 	ResourceVersion string `json:"resourceVersion,omitempty" protobuf:"bytes,1,opt,name=resourceVersion"` | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // DeletionPropagation decides if a deletion will propagate to the dependents of | ||||||
|  | // the object, and how the garbage collector will handle the propagation. | ||||||
|  | type DeletionPropagation string | ||||||
|  |  | ||||||
|  | const ( | ||||||
|  | 	// Orphans the dependents. | ||||||
|  | 	DeletePropagationOrphan DeletionPropagation = "Orphan" | ||||||
|  | 	// Deletes the object from the key-value store, the garbage collector will | ||||||
|  | 	// delete the dependents in the background. | ||||||
|  | 	DeletePropagationBackground DeletionPropagation = "Background" | ||||||
|  | 	// The object exists in the key-value store until the garbage collector | ||||||
|  | 	// deletes all the dependents whose ownerReference.blockOwnerDeletion=true | ||||||
|  | 	// from the key-value store.  API sever will put the "foregroundDeletion" | ||||||
|  | 	// finalizer on the object, and sets its deletionTimestamp.  This policy is | ||||||
|  | 	// cascading, i.e., the dependents will be deleted with Foreground. | ||||||
|  | 	DeletePropagationForeground DeletionPropagation = "Foreground" | ||||||
|  | ) | ||||||
|  |  | ||||||
| // DeleteOptions may be provided when deleting an API object. | // DeleteOptions may be provided when deleting an API object. | ||||||
| type DeleteOptions struct { | type DeleteOptions struct { | ||||||
| 	TypeMeta `json:",inline"` | 	TypeMeta `json:",inline"` | ||||||
| @@ -321,10 +348,18 @@ type DeleteOptions struct { | |||||||
| 	// +optional | 	// +optional | ||||||
| 	Preconditions *Preconditions `json:"preconditions,omitempty" protobuf:"bytes,2,opt,name=preconditions"` | 	Preconditions *Preconditions `json:"preconditions,omitempty" protobuf:"bytes,2,opt,name=preconditions"` | ||||||
|  |  | ||||||
|  | 	// Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. | ||||||
| 	// Should the dependent objects be orphaned. If true/false, the "orphan" | 	// Should the dependent objects be orphaned. If true/false, the "orphan" | ||||||
| 	// finalizer will be added to/removed from the object's finalizers list. | 	// finalizer will be added to/removed from the object's finalizers list. | ||||||
|  | 	// Either this field or PropagationPolicy may be set, but not both. | ||||||
| 	// +optional | 	// +optional | ||||||
| 	OrphanDependents *bool `json:"orphanDependents,omitempty" protobuf:"varint,3,opt,name=orphanDependents"` | 	OrphanDependents *bool `json:"orphanDependents,omitempty" protobuf:"varint,3,opt,name=orphanDependents"` | ||||||
|  |  | ||||||
|  | 	// Whether and how garbage collection will be performed. | ||||||
|  | 	// Defaults to Default. | ||||||
|  | 	// Either this field or OrphanDependents may be set, but not both. | ||||||
|  | 	// +optional | ||||||
|  | 	PropagationPolicy *DeletionPropagation `json:"propagationPolicy,omitempty" protobuf:"varint,4,opt,name=propagationPolicy"` | ||||||
| } | } | ||||||
|  |  | ||||||
| // Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out. | // Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out. | ||||||
|   | |||||||
| @@ -85,7 +85,8 @@ var map_DeleteOptions = map[string]string{ | |||||||
| 	"":                   "DeleteOptions may be provided when deleting an API object.", | 	"":                   "DeleteOptions may be provided when deleting an API object.", | ||||||
| 	"gracePeriodSeconds": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", | 	"gracePeriodSeconds": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", | ||||||
| 	"preconditions":      "Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.", | 	"preconditions":      "Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.", | ||||||
| 	"orphanDependents":   "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", | 	"orphanDependents":   "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", | ||||||
|  | 	"propagationPolicy":  "Whether and how garbage collection will be performed. Defaults to Default. Either this field or OrphanDependents may be set, but not both.", | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (DeleteOptions) SwaggerDoc() map[string]string { | func (DeleteOptions) SwaggerDoc() map[string]string { | ||||||
| @@ -195,6 +196,7 @@ var map_OwnerReference = map[string]string{ | |||||||
| 	"name":               "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", | 	"name":               "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", | ||||||
| 	"uid":                "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", | 	"uid":                "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", | ||||||
| 	"controller":         "If true, this reference points to the managing controller.", | 	"controller":         "If true, this reference points to the managing controller.", | ||||||
|  | 	"blockOwnerDeletion": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (OwnerReference) SwaggerDoc() map[string]string { | func (OwnerReference) SwaggerDoc() map[string]string { | ||||||
|   | |||||||
| @@ -204,14 +204,23 @@ func (u *Unstructured) setNestedMap(value map[string]string, fields ...string) { | |||||||
|  |  | ||||||
| func extractOwnerReference(src interface{}) metav1.OwnerReference { | func extractOwnerReference(src interface{}) metav1.OwnerReference { | ||||||
| 	v := src.(map[string]interface{}) | 	v := src.(map[string]interface{}) | ||||||
| 	controllerPtr, ok := (getNestedField(v, "controller")).(*bool) | 	// though this field is a *bool, but when decoded from JSON, it's | ||||||
|  | 	// unmarshalled as bool. | ||||||
|  | 	var controllerPtr *bool | ||||||
|  | 	controller, ok := (getNestedField(v, "controller")).(bool) | ||||||
| 	if !ok { | 	if !ok { | ||||||
| 		controllerPtr = nil | 		controllerPtr = nil | ||||||
| 	} else { | 	} else { | ||||||
| 		if controllerPtr != nil { | 		controllerCopy := controller | ||||||
| 			controller := *controllerPtr | 		controllerPtr = &controllerCopy | ||||||
| 			controllerPtr = &controller |  | ||||||
| 	} | 	} | ||||||
|  | 	var blockOwnerDeletionPtr *bool | ||||||
|  | 	blockOwnerDeletion, ok := (getNestedField(v, "blockOwnerDeletion")).(bool) | ||||||
|  | 	if !ok { | ||||||
|  | 		blockOwnerDeletionPtr = nil | ||||||
|  | 	} else { | ||||||
|  | 		blockOwnerDeletionCopy := blockOwnerDeletion | ||||||
|  | 		blockOwnerDeletionPtr = &blockOwnerDeletionCopy | ||||||
| 	} | 	} | ||||||
| 	return metav1.OwnerReference{ | 	return metav1.OwnerReference{ | ||||||
| 		Kind:               getNestedString(v, "kind"), | 		Kind:               getNestedString(v, "kind"), | ||||||
| @@ -219,6 +228,7 @@ func extractOwnerReference(src interface{}) metav1.OwnerReference { | |||||||
| 		APIVersion:         getNestedString(v, "apiVersion"), | 		APIVersion:         getNestedString(v, "apiVersion"), | ||||||
| 		UID:                (types.UID)(getNestedString(v, "uid")), | 		UID:                (types.UID)(getNestedString(v, "uid")), | ||||||
| 		Controller:         controllerPtr, | 		Controller:         controllerPtr, | ||||||
|  | 		BlockOwnerDeletion: blockOwnerDeletionPtr, | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -229,11 +239,17 @@ func setOwnerReference(src metav1.OwnerReference) map[string]interface{} { | |||||||
| 		controller := *controllerPtr | 		controller := *controllerPtr | ||||||
| 		controllerPtr = &controller | 		controllerPtr = &controller | ||||||
| 	} | 	} | ||||||
|  | 	blockOwnerDeletionPtr := src.BlockOwnerDeletion | ||||||
|  | 	if blockOwnerDeletionPtr != nil { | ||||||
|  | 		blockOwnerDeletion := *blockOwnerDeletionPtr | ||||||
|  | 		blockOwnerDeletionPtr = &blockOwnerDeletion | ||||||
|  | 	} | ||||||
| 	setNestedField(ret, src.Kind, "kind") | 	setNestedField(ret, src.Kind, "kind") | ||||||
| 	setNestedField(ret, src.Name, "name") | 	setNestedField(ret, src.Name, "name") | ||||||
| 	setNestedField(ret, src.APIVersion, "apiVersion") | 	setNestedField(ret, src.APIVersion, "apiVersion") | ||||||
| 	setNestedField(ret, string(src.UID), "uid") | 	setNestedField(ret, string(src.UID), "uid") | ||||||
| 	setNestedField(ret, controllerPtr, "controller") | 	setNestedField(ret, controllerPtr, "controller") | ||||||
|  | 	setNestedField(ret, blockOwnerDeletionPtr, "blockOwnerDeletion") | ||||||
| 	return ret | 	return ret | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -17,6 +17,8 @@ limitations under the License. | |||||||
| package validation | package validation | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|  | 	"fmt" | ||||||
|  |  | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	"k8s.io/apimachinery/pkg/util/validation" | 	"k8s.io/apimachinery/pkg/util/validation" | ||||||
| 	"k8s.io/apimachinery/pkg/util/validation/field" | 	"k8s.io/apimachinery/pkg/util/validation/field" | ||||||
| @@ -72,3 +74,17 @@ func ValidateLabels(labels map[string]string, fldPath *field.Path) field.ErrorLi | |||||||
| 	} | 	} | ||||||
| 	return allErrs | 	return allErrs | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func ValidateDeleteOptions(options *metav1.DeleteOptions) field.ErrorList { | ||||||
|  | 	allErrs := field.ErrorList{} | ||||||
|  | 	if options.OrphanDependents != nil && options.PropagationPolicy != nil { | ||||||
|  | 		allErrs = append(allErrs, field.Invalid(field.NewPath(""), options, "OrphanDependents and DeletionPropagation cannot be both set")) | ||||||
|  | 	} | ||||||
|  | 	if options.PropagationPolicy != nil && | ||||||
|  | 		*options.PropagationPolicy != metav1.DeletePropagationForeground && | ||||||
|  | 		*options.PropagationPolicy != metav1.DeletePropagationBackground && | ||||||
|  | 		*options.PropagationPolicy != metav1.DeletePropagationOrphan { | ||||||
|  | 		allErrs = append(allErrs, field.Invalid(field.NewPath(""), options, fmt.Sprintf("DeletionPropagation need to be one of %q, %q, %q or nil", metav1.DeletePropagationForeground, metav1.DeletePropagationBackground, metav1.DeletePropagationOrphan))) | ||||||
|  | 	} | ||||||
|  | 	return allErrs | ||||||
|  | } | ||||||
|   | |||||||
| @@ -186,6 +186,11 @@ func DeepCopy_v1_DeleteOptions(in interface{}, out interface{}, c *conversion.Cl | |||||||
| 			*out = new(bool) | 			*out = new(bool) | ||||||
| 			**out = **in | 			**out = **in | ||||||
| 		} | 		} | ||||||
|  | 		if in.PropagationPolicy != nil { | ||||||
|  | 			in, out := &in.PropagationPolicy, &out.PropagationPolicy | ||||||
|  | 			*out = new(DeletionPropagation) | ||||||
|  | 			**out = **in | ||||||
|  | 		} | ||||||
| 		return nil | 		return nil | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @@ -412,6 +417,11 @@ func DeepCopy_v1_OwnerReference(in interface{}, out interface{}, c *conversion.C | |||||||
| 			*out = new(bool) | 			*out = new(bool) | ||||||
| 			**out = **in | 			**out = **in | ||||||
| 		} | 		} | ||||||
|  | 		if in.BlockOwnerDeletion != nil { | ||||||
|  | 			in, out := &in.BlockOwnerDeletion, &out.BlockOwnerDeletion | ||||||
|  | 			*out = new(bool) | ||||||
|  | 			**out = **in | ||||||
|  | 		} | ||||||
| 		return nil | 		return nil | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1057,6 +1057,8 @@ func typeToJSON(typeName string) string { | |||||||
| 		return "string" | 		return "string" | ||||||
| 	case "byte", "*byte": | 	case "byte", "*byte": | ||||||
| 		return "string" | 		return "string" | ||||||
|  | 	case "v1.DeletionPropagation", "*v1.DeletionPropagation": | ||||||
|  | 		return "string" | ||||||
|  |  | ||||||
| 	// TODO: Fix these when go-restful supports a way to specify an array query param: | 	// TODO: Fix these when go-restful supports a way to specify an array query param: | ||||||
| 	// https://github.com/emicklei/go-restful/issues/225 | 	// https://github.com/emicklei/go-restful/issues/225 | ||||||
|   | |||||||
| @@ -531,52 +531,121 @@ var ( | |||||||
| 	errEmptiedFinalizers = fmt.Errorf("emptied finalizers") | 	errEmptiedFinalizers = fmt.Errorf("emptied finalizers") | ||||||
| ) | ) | ||||||
|  |  | ||||||
| // shouldUpdateFinalizers returns if we need to update the finalizers of the | // shouldUpdateFinalizerOrphanDependents returns if the finalizers need to be | ||||||
| // object, and the desired list of finalizers. When deciding whether to add | // updated for FinalizerOrphanDependents. In the order of highest to lowest | ||||||
| // the OrphanDependent finalizer, factors in the order of highest to lowest | // priority, there are three factors affect whether to add/remove the | ||||||
| // priority are: | // FinalizerOrphanDependents: options, existing finalizers of the object, | ||||||
| // | // and e.DeleteStrategy.DefaultGarbageCollectionPolicy. | ||||||
| // - options.OrphanDependents, | func shouldUpdateFinalizerOrphanDependents(e *Store, accessor metav1.Object, options *metav1.DeleteOptions) (shouldUpdate bool, shouldOrphan bool) { | ||||||
| // - existing finalizers of the object | 	shouldOrphan = false | ||||||
| // - e.DeleteStrategy.DefaultGarbageCollectionPolicy |  | ||||||
| func shouldUpdateFinalizers(e *Store, accessor metav1.Object, options *metav1.DeleteOptions) (shouldUpdate bool, newFinalizers []string) { |  | ||||||
| 	shouldOrphan := false |  | ||||||
| 	// Get default orphan policy from this REST object type | 	// Get default orphan policy from this REST object type | ||||||
| 	if gcStrategy, ok := e.DeleteStrategy.(rest.GarbageCollectionDeleteStrategy); ok { | 	if gcStrategy, ok := e.DeleteStrategy.(rest.GarbageCollectionDeleteStrategy); ok { | ||||||
| 		if gcStrategy.DefaultGarbageCollectionPolicy() == rest.OrphanDependents { | 		if gcStrategy.DefaultGarbageCollectionPolicy() == rest.OrphanDependents { | ||||||
| 			shouldOrphan = true | 			shouldOrphan = true | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// If a finalizer is set in the object, it overrides the default | 	// If a finalizer is set in the object, it overrides the default | ||||||
| 	hasOrphanFinalizer := false | 	hasOrphanFinalizer := false | ||||||
| 	finalizers := accessor.GetFinalizers() | 	finalizers := accessor.GetFinalizers() | ||||||
| 	for _, f := range finalizers { | 	for _, f := range finalizers { | ||||||
| 		if f == metav1.FinalizerOrphan { | 		// validation should make sure the two cases won't be true at the same | ||||||
|  | 		// time. | ||||||
|  | 		switch f { | ||||||
|  | 		case metav1.FinalizerOrphanDependents: | ||||||
| 			shouldOrphan = true | 			shouldOrphan = true | ||||||
| 			hasOrphanFinalizer = true | 			hasOrphanFinalizer = true | ||||||
| 			break | 			break | ||||||
|  | 		case metav1.FinalizerDeleteDependents: | ||||||
|  | 			shouldOrphan = false | ||||||
|  | 			break | ||||||
| 		} | 		} | ||||||
| 		// TODO: update this when we add a finalizer indicating a preference for the other behavior |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// If an explicit policy was set at deletion time, that overrides both | 	// If an explicit policy was set at deletion time, that overrides both | ||||||
| 	if options != nil && options.OrphanDependents != nil { | 	if options != nil && options.OrphanDependents != nil { | ||||||
| 		shouldOrphan = *options.OrphanDependents | 		shouldOrphan = *options.OrphanDependents | ||||||
| 	} | 	} | ||||||
| 	if shouldOrphan && !hasOrphanFinalizer { | 	if options != nil && options.PropagationPolicy != nil { | ||||||
| 		finalizers = append(finalizers, metav1.FinalizerOrphan) | 		switch *options.PropagationPolicy { | ||||||
| 		return true, finalizers | 		case metav1.DeletePropagationOrphan: | ||||||
|  | 			shouldOrphan = true | ||||||
|  | 		case metav1.DeletePropagationBackground, metav1.DeletePropagationForeground: | ||||||
|  | 			shouldOrphan = false | ||||||
| 		} | 		} | ||||||
| 	if !shouldOrphan && hasOrphanFinalizer { | 	} | ||||||
| 		var newFinalizers []string |  | ||||||
|  | 	shouldUpdate = shouldOrphan != hasOrphanFinalizer | ||||||
|  | 	return shouldUpdate, shouldOrphan | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // shouldUpdateFinalizerDeleteDependents returns if the finalizers need to be | ||||||
|  | // updated for FinalizerDeleteDependents. In the order of highest to lowest | ||||||
|  | // priority, there are three factors affect whether to add/remove the | ||||||
|  | // FinalizerDeleteDependents: options, existing finalizers of the object, and | ||||||
|  | // e.DeleteStrategy.DefaultGarbageCollectionPolicy. | ||||||
|  | func shouldUpdateFinalizerDeleteDependents(e *Store, accessor metav1.Object, options *metav1.DeleteOptions) (shouldUpdate bool, shouldDeleteDependentInForeground bool) { | ||||||
|  | 	// default to false | ||||||
|  | 	shouldDeleteDependentInForeground = false | ||||||
|  |  | ||||||
|  | 	// If a finalizer is set in the object, it overrides the default | ||||||
|  | 	hasFinalizerDeleteDependents := false | ||||||
|  | 	finalizers := accessor.GetFinalizers() | ||||||
| 	for _, f := range finalizers { | 	for _, f := range finalizers { | ||||||
| 			if f == metav1.FinalizerOrphan { | 		// validation has made sure the two cases won't be true at the same | ||||||
|  | 		// time. | ||||||
|  | 		switch f { | ||||||
|  | 		case metav1.FinalizerDeleteDependents: | ||||||
|  | 			shouldDeleteDependentInForeground = true | ||||||
|  | 			hasFinalizerDeleteDependents = true | ||||||
|  | 			break | ||||||
|  | 		case metav1.FinalizerOrphanDependents: | ||||||
|  | 			shouldDeleteDependentInForeground = false | ||||||
|  | 			break | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// If an explicit policy was set at deletion time, that overrides both | ||||||
|  | 	if options != nil && options.OrphanDependents != nil { | ||||||
|  | 		shouldDeleteDependentInForeground = false | ||||||
|  | 	} | ||||||
|  | 	if options != nil && options.PropagationPolicy != nil { | ||||||
|  | 		switch *options.PropagationPolicy { | ||||||
|  | 		case metav1.DeletePropagationForeground: | ||||||
|  | 			shouldDeleteDependentInForeground = true | ||||||
|  | 		case metav1.DeletePropagationBackground, metav1.DeletePropagationOrphan: | ||||||
|  | 			shouldDeleteDependentInForeground = false | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	shouldUpdate = shouldDeleteDependentInForeground != hasFinalizerDeleteDependents | ||||||
|  | 	return shouldUpdate, shouldDeleteDependentInForeground | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // shouldUpdateFinalizers returns if we need to update the finalizers of the | ||||||
|  | // object, and the desired list of finalizers. | ||||||
|  | func shouldUpdateFinalizers(e *Store, accessor metav1.Object, options *metav1.DeleteOptions) (shouldUpdate bool, newFinalizers []string) { | ||||||
|  | 	shouldUpdate1, shouldOrphan := shouldUpdateFinalizerOrphanDependents(e, accessor, options) | ||||||
|  | 	shouldUpdate2, shouldDeleteDependentInForeground := shouldUpdateFinalizerDeleteDependents(e, accessor, options) | ||||||
|  | 	oldFinalizers := accessor.GetFinalizers() | ||||||
|  | 	if !shouldUpdate1 && !shouldUpdate2 { | ||||||
|  | 		return false, oldFinalizers | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// first remove both finalizers, add them back if needed. | ||||||
|  | 	for _, f := range oldFinalizers { | ||||||
|  | 		if f == metav1.FinalizerOrphanDependents || f == metav1.FinalizerDeleteDependents { | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| 		newFinalizers = append(newFinalizers, f) | 		newFinalizers = append(newFinalizers, f) | ||||||
| 	} | 	} | ||||||
| 		return true, newFinalizers | 	if shouldOrphan { | ||||||
|  | 		newFinalizers = append(newFinalizers, metav1.FinalizerOrphanDependents) | ||||||
| 	} | 	} | ||||||
| 	return false, finalizers | 	if shouldDeleteDependentInForeground { | ||||||
|  | 		newFinalizers = append(newFinalizers, metav1.FinalizerDeleteDependents) | ||||||
|  | 	} | ||||||
|  | 	return true, newFinalizers | ||||||
| } | } | ||||||
|  |  | ||||||
| // markAsDeleting sets the obj's DeletionGracePeriodSeconds to 0, and sets the | // markAsDeleting sets the obj's DeletionGracePeriodSeconds to 0, and sets the | ||||||
|   | |||||||
| @@ -818,7 +818,7 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) { | |||||||
| 	initialGeneration := int64(1) | 	initialGeneration := int64(1) | ||||||
| 	podWithOrphanFinalizer := func(name string) *example.Pod { | 	podWithOrphanFinalizer := func(name string) *example.Pod { | ||||||
| 		return &example.Pod{ | 		return &example.Pod{ | ||||||
| 			ObjectMeta: metav1.ObjectMeta{Name: name, Finalizers: []string{"foo.com/x", metav1.FinalizerOrphan, "bar.com/y"}, Generation: initialGeneration}, | 			ObjectMeta: metav1.ObjectMeta{Name: name, Finalizers: []string{"foo.com/x", metav1.FinalizerOrphanDependents, "bar.com/y"}, Generation: initialGeneration}, | ||||||
| 			Spec:       example.PodSpec{NodeName: "machine"}, | 			Spec:       example.PodSpec{NodeName: "machine"}, | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @@ -836,7 +836,7 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) { | |||||||
| 	} | 	} | ||||||
| 	podWithOnlyOrphanFinalizer := func(name string) *example.Pod { | 	podWithOnlyOrphanFinalizer := func(name string) *example.Pod { | ||||||
| 		return &example.Pod{ | 		return &example.Pod{ | ||||||
| 			ObjectMeta: metav1.ObjectMeta{Name: name, Finalizers: []string{metav1.FinalizerOrphan}, Generation: initialGeneration}, | 			ObjectMeta: metav1.ObjectMeta{Name: name, Finalizers: []string{metav1.FinalizerOrphanDependents}, Generation: initialGeneration}, | ||||||
| 			Spec:       example.PodSpec{NodeName: "machine"}, | 			Spec:       example.PodSpec{NodeName: "machine"}, | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @@ -864,28 +864,28 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) { | |||||||
| 			orphanOptions, | 			orphanOptions, | ||||||
| 			defaultDeleteStrategy, | 			defaultDeleteStrategy, | ||||||
| 			false, | 			false, | ||||||
| 			[]string{"foo.com/x", metav1.FinalizerOrphan, "bar.com/y"}, | 			[]string{"foo.com/x", metav1.FinalizerOrphanDependents, "bar.com/y"}, | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			podWithOtherFinalizers("pod2"), | 			podWithOtherFinalizers("pod2"), | ||||||
| 			orphanOptions, | 			orphanOptions, | ||||||
| 			defaultDeleteStrategy, | 			defaultDeleteStrategy, | ||||||
| 			false, | 			false, | ||||||
| 			[]string{"foo.com/x", "bar.com/y", metav1.FinalizerOrphan}, | 			[]string{"foo.com/x", "bar.com/y", metav1.FinalizerOrphanDependents}, | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			podWithNoFinalizer("pod3"), | 			podWithNoFinalizer("pod3"), | ||||||
| 			orphanOptions, | 			orphanOptions, | ||||||
| 			defaultDeleteStrategy, | 			defaultDeleteStrategy, | ||||||
| 			false, | 			false, | ||||||
| 			[]string{metav1.FinalizerOrphan}, | 			[]string{metav1.FinalizerOrphanDependents}, | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			podWithOnlyOrphanFinalizer("pod4"), | 			podWithOnlyOrphanFinalizer("pod4"), | ||||||
| 			orphanOptions, | 			orphanOptions, | ||||||
| 			defaultDeleteStrategy, | 			defaultDeleteStrategy, | ||||||
| 			false, | 			false, | ||||||
| 			[]string{metav1.FinalizerOrphan}, | 			[]string{metav1.FinalizerOrphanDependents}, | ||||||
| 		}, | 		}, | ||||||
| 		// cases run with DeleteOptions.OrphanDedependents=false | 		// cases run with DeleteOptions.OrphanDedependents=false | ||||||
| 		// these cases all have oprhanDeleteStrategy, which should be ignored | 		// these cases all have oprhanDeleteStrategy, which should be ignored | ||||||
| @@ -927,14 +927,14 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) { | |||||||
| 			nilOrphanOptions, | 			nilOrphanOptions, | ||||||
| 			defaultDeleteStrategy, | 			defaultDeleteStrategy, | ||||||
| 			false, | 			false, | ||||||
| 			[]string{"foo.com/x", metav1.FinalizerOrphan, "bar.com/y"}, | 			[]string{"foo.com/x", metav1.FinalizerOrphanDependents, "bar.com/y"}, | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			podWithOrphanFinalizer("pod10"), | 			podWithOrphanFinalizer("pod10"), | ||||||
| 			nilOrphanOptions, | 			nilOrphanOptions, | ||||||
| 			orphanDeleteStrategy, | 			orphanDeleteStrategy, | ||||||
| 			false, | 			false, | ||||||
| 			[]string{"foo.com/x", metav1.FinalizerOrphan, "bar.com/y"}, | 			[]string{"foo.com/x", metav1.FinalizerOrphanDependents, "bar.com/y"}, | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			podWithOtherFinalizers("pod11"), | 			podWithOtherFinalizers("pod11"), | ||||||
| @@ -948,7 +948,7 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) { | |||||||
| 			nilOrphanOptions, | 			nilOrphanOptions, | ||||||
| 			orphanDeleteStrategy, | 			orphanDeleteStrategy, | ||||||
| 			false, | 			false, | ||||||
| 			[]string{"foo.com/x", "bar.com/y", metav1.FinalizerOrphan}, | 			[]string{"foo.com/x", "bar.com/y", metav1.FinalizerOrphanDependents}, | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			podWithNoFinalizer("pod13"), | 			podWithNoFinalizer("pod13"), | ||||||
| @@ -962,21 +962,21 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) { | |||||||
| 			nilOrphanOptions, | 			nilOrphanOptions, | ||||||
| 			orphanDeleteStrategy, | 			orphanDeleteStrategy, | ||||||
| 			false, | 			false, | ||||||
| 			[]string{metav1.FinalizerOrphan}, | 			[]string{metav1.FinalizerOrphanDependents}, | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			podWithOnlyOrphanFinalizer("pod15"), | 			podWithOnlyOrphanFinalizer("pod15"), | ||||||
| 			nilOrphanOptions, | 			nilOrphanOptions, | ||||||
| 			defaultDeleteStrategy, | 			defaultDeleteStrategy, | ||||||
| 			false, | 			false, | ||||||
| 			[]string{metav1.FinalizerOrphan}, | 			[]string{metav1.FinalizerOrphanDependents}, | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			podWithOnlyOrphanFinalizer("pod16"), | 			podWithOnlyOrphanFinalizer("pod16"), | ||||||
| 			nilOrphanOptions, | 			nilOrphanOptions, | ||||||
| 			orphanDeleteStrategy, | 			orphanDeleteStrategy, | ||||||
| 			false, | 			false, | ||||||
| 			[]string{metav1.FinalizerOrphan}, | 			[]string{metav1.FinalizerOrphanDependents}, | ||||||
| 		}, | 		}, | ||||||
|  |  | ||||||
| 		// cases run with nil DeleteOptions should have exact same behavior. | 		// cases run with nil DeleteOptions should have exact same behavior. | ||||||
| @@ -987,14 +987,14 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) { | |||||||
| 			nil, | 			nil, | ||||||
| 			defaultDeleteStrategy, | 			defaultDeleteStrategy, | ||||||
| 			false, | 			false, | ||||||
| 			[]string{"foo.com/x", metav1.FinalizerOrphan, "bar.com/y"}, | 			[]string{"foo.com/x", metav1.FinalizerOrphanDependents, "bar.com/y"}, | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			podWithOrphanFinalizer("pod18"), | 			podWithOrphanFinalizer("pod18"), | ||||||
| 			nil, | 			nil, | ||||||
| 			orphanDeleteStrategy, | 			orphanDeleteStrategy, | ||||||
| 			false, | 			false, | ||||||
| 			[]string{"foo.com/x", metav1.FinalizerOrphan, "bar.com/y"}, | 			[]string{"foo.com/x", metav1.FinalizerOrphanDependents, "bar.com/y"}, | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			podWithOtherFinalizers("pod19"), | 			podWithOtherFinalizers("pod19"), | ||||||
| @@ -1008,7 +1008,7 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) { | |||||||
| 			nil, | 			nil, | ||||||
| 			orphanDeleteStrategy, | 			orphanDeleteStrategy, | ||||||
| 			false, | 			false, | ||||||
| 			[]string{"foo.com/x", "bar.com/y", metav1.FinalizerOrphan}, | 			[]string{"foo.com/x", "bar.com/y", metav1.FinalizerOrphanDependents}, | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			podWithNoFinalizer("pod21"), | 			podWithNoFinalizer("pod21"), | ||||||
| @@ -1022,21 +1022,21 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) { | |||||||
| 			nil, | 			nil, | ||||||
| 			orphanDeleteStrategy, | 			orphanDeleteStrategy, | ||||||
| 			false, | 			false, | ||||||
| 			[]string{metav1.FinalizerOrphan}, | 			[]string{metav1.FinalizerOrphanDependents}, | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			podWithOnlyOrphanFinalizer("pod23"), | 			podWithOnlyOrphanFinalizer("pod23"), | ||||||
| 			nil, | 			nil, | ||||||
| 			defaultDeleteStrategy, | 			defaultDeleteStrategy, | ||||||
| 			false, | 			false, | ||||||
| 			[]string{metav1.FinalizerOrphan}, | 			[]string{metav1.FinalizerOrphanDependents}, | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			podWithOnlyOrphanFinalizer("pod24"), | 			podWithOnlyOrphanFinalizer("pod24"), | ||||||
| 			nil, | 			nil, | ||||||
| 			orphanDeleteStrategy, | 			orphanDeleteStrategy, | ||||||
| 			false, | 			false, | ||||||
| 			[]string{metav1.FinalizerOrphan}, | 			[]string{metav1.FinalizerOrphanDependents}, | ||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -1084,6 +1084,225 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // Test the DeleteOptions.PropagationPolicy is handled correctly | ||||||
|  | func TestStoreDeletionPropagation(t *testing.T) { | ||||||
|  | 	initialGeneration := int64(1) | ||||||
|  |  | ||||||
|  | 	// defaultDeleteStrategy doesn't implement rest.GarbageCollectionDeleteStrategy. | ||||||
|  | 	defaultDeleteStrategy := &testRESTStrategy{scheme, names.SimpleNameGenerator, true, false, true} | ||||||
|  | 	// orphanDeleteStrategy indicates the default garbage collection policy is | ||||||
|  | 	// to orphan dependentes. | ||||||
|  | 	orphanDeleteStrategy := &testOrphanDeleteStrategy{defaultDeleteStrategy} | ||||||
|  |  | ||||||
|  | 	foregroundPolicy := metav1.DeletePropagationForeground | ||||||
|  | 	backgroundPolicy := metav1.DeletePropagationBackground | ||||||
|  | 	orphanPolicy := metav1.DeletePropagationOrphan | ||||||
|  |  | ||||||
|  | 	testcases := map[string]struct { | ||||||
|  | 		options  *metav1.DeleteOptions | ||||||
|  | 		strategy rest.RESTDeleteStrategy | ||||||
|  | 		// finalizers that are already set in the object | ||||||
|  | 		existingFinalizers []string | ||||||
|  | 		expectedNotFound   bool | ||||||
|  | 		expectedFinalizers []string | ||||||
|  | 	}{ | ||||||
|  | 		"no existing finalizers, PropagationPolicy=Foreground, defaultDeleteStrategy": { | ||||||
|  | 			options:            &metav1.DeleteOptions{PropagationPolicy: &foregroundPolicy}, | ||||||
|  | 			strategy:           defaultDeleteStrategy, | ||||||
|  | 			expectedFinalizers: []string{metav1.FinalizerDeleteDependents}, | ||||||
|  | 		}, | ||||||
|  | 		"no existing finalizers, PropagationPolicy=Foreground, orphanDeleteStrategy": { | ||||||
|  | 			options:            &metav1.DeleteOptions{PropagationPolicy: &foregroundPolicy}, | ||||||
|  | 			strategy:           orphanDeleteStrategy, | ||||||
|  | 			expectedFinalizers: []string{metav1.FinalizerDeleteDependents}, | ||||||
|  | 		}, | ||||||
|  | 		"no existing finalizers, PropagationPolicy=Background, defaultDeleteStrategy": { | ||||||
|  | 			options:          &metav1.DeleteOptions{PropagationPolicy: &backgroundPolicy}, | ||||||
|  | 			strategy:         defaultDeleteStrategy, | ||||||
|  | 			expectedNotFound: true, | ||||||
|  | 		}, | ||||||
|  | 		"no existing finalizers, PropagationPolicy=Background, orphanDeleteStrategy": { | ||||||
|  | 			options:          &metav1.DeleteOptions{PropagationPolicy: &backgroundPolicy}, | ||||||
|  | 			strategy:         orphanDeleteStrategy, | ||||||
|  | 			expectedNotFound: true, | ||||||
|  | 		}, | ||||||
|  | 		"no existing finalizers, PropagationPolicy=OrphanDependents, defaultDeleteStrategy": { | ||||||
|  | 			options:            &metav1.DeleteOptions{PropagationPolicy: &orphanPolicy}, | ||||||
|  | 			strategy:           defaultDeleteStrategy, | ||||||
|  | 			expectedFinalizers: []string{metav1.FinalizerOrphanDependents}, | ||||||
|  | 		}, | ||||||
|  | 		"no existing finalizers, PropagationPolicy=OrphanDependents, orphanDeleteStrategy": { | ||||||
|  | 			options:            &metav1.DeleteOptions{PropagationPolicy: &orphanPolicy}, | ||||||
|  | 			strategy:           orphanDeleteStrategy, | ||||||
|  | 			expectedFinalizers: []string{metav1.FinalizerOrphanDependents}, | ||||||
|  | 		}, | ||||||
|  | 		"no existing finalizers, PropagationPolicy=Default, defaultDeleteStrategy": { | ||||||
|  | 			options:          &metav1.DeleteOptions{PropagationPolicy: nil}, | ||||||
|  | 			strategy:         defaultDeleteStrategy, | ||||||
|  | 			expectedNotFound: true, | ||||||
|  | 		}, | ||||||
|  | 		"no existing finalizers, PropagationPolicy=Default, orphanDeleteStrategy": { | ||||||
|  | 			options:            &metav1.DeleteOptions{PropagationPolicy: nil}, | ||||||
|  | 			strategy:           orphanDeleteStrategy, | ||||||
|  | 			expectedFinalizers: []string{metav1.FinalizerOrphanDependents}, | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// all cases in the following block have "existing orphan finalizer" | ||||||
|  | 		"existing orphan finalizer, PropagationPolicy=Foreground, defaultDeleteStrategy": { | ||||||
|  | 			options:            &metav1.DeleteOptions{PropagationPolicy: &foregroundPolicy}, | ||||||
|  | 			strategy:           defaultDeleteStrategy, | ||||||
|  | 			existingFinalizers: []string{metav1.FinalizerOrphanDependents}, | ||||||
|  | 			expectedFinalizers: []string{metav1.FinalizerDeleteDependents}, | ||||||
|  | 		}, | ||||||
|  | 		"existing orphan finalizer, PropagationPolicy=Foreground, orphanDeleteStrategy": { | ||||||
|  | 			options:            &metav1.DeleteOptions{PropagationPolicy: &foregroundPolicy}, | ||||||
|  | 			strategy:           orphanDeleteStrategy, | ||||||
|  | 			existingFinalizers: []string{metav1.FinalizerOrphanDependents}, | ||||||
|  | 			expectedFinalizers: []string{metav1.FinalizerDeleteDependents}, | ||||||
|  | 		}, | ||||||
|  | 		"existing orphan finalizer, PropagationPolicy=Background, defaultDeleteStrategy": { | ||||||
|  | 			options:            &metav1.DeleteOptions{PropagationPolicy: &backgroundPolicy}, | ||||||
|  | 			strategy:           defaultDeleteStrategy, | ||||||
|  | 			existingFinalizers: []string{metav1.FinalizerOrphanDependents}, | ||||||
|  | 			expectedNotFound:   true, | ||||||
|  | 		}, | ||||||
|  | 		"existing orphan finalizer, PropagationPolicy=Background, orphanDeleteStrategy": { | ||||||
|  | 			options:            &metav1.DeleteOptions{PropagationPolicy: &backgroundPolicy}, | ||||||
|  | 			strategy:           orphanDeleteStrategy, | ||||||
|  | 			existingFinalizers: []string{metav1.FinalizerOrphanDependents}, | ||||||
|  | 			expectedNotFound:   true, | ||||||
|  | 		}, | ||||||
|  | 		"existing orphan finalizer, PropagationPolicy=OrphanDependents, defaultDeleteStrategy": { | ||||||
|  | 			options:            &metav1.DeleteOptions{PropagationPolicy: &orphanPolicy}, | ||||||
|  | 			strategy:           defaultDeleteStrategy, | ||||||
|  | 			existingFinalizers: []string{metav1.FinalizerOrphanDependents}, | ||||||
|  | 			expectedFinalizers: []string{metav1.FinalizerOrphanDependents}, | ||||||
|  | 		}, | ||||||
|  | 		"existing orphan finalizer, PropagationPolicy=OrphanDependents, orphanDeleteStrategy": { | ||||||
|  | 			options:            &metav1.DeleteOptions{PropagationPolicy: &orphanPolicy}, | ||||||
|  | 			strategy:           orphanDeleteStrategy, | ||||||
|  | 			existingFinalizers: []string{metav1.FinalizerOrphanDependents}, | ||||||
|  | 			expectedFinalizers: []string{metav1.FinalizerOrphanDependents}, | ||||||
|  | 		}, | ||||||
|  | 		"existing orphan finalizer, PropagationPolicy=Default, defaultDeleteStrategy": { | ||||||
|  | 			options:            &metav1.DeleteOptions{PropagationPolicy: nil}, | ||||||
|  | 			strategy:           defaultDeleteStrategy, | ||||||
|  | 			existingFinalizers: []string{metav1.FinalizerOrphanDependents}, | ||||||
|  | 			expectedFinalizers: []string{metav1.FinalizerOrphanDependents}, | ||||||
|  | 		}, | ||||||
|  | 		"existing orphan finalizer, PropagationPolicy=Default, orphanDeleteStrategy": { | ||||||
|  | 			options:            &metav1.DeleteOptions{PropagationPolicy: nil}, | ||||||
|  | 			strategy:           orphanDeleteStrategy, | ||||||
|  | 			existingFinalizers: []string{metav1.FinalizerOrphanDependents}, | ||||||
|  | 			expectedFinalizers: []string{metav1.FinalizerOrphanDependents}, | ||||||
|  | 		}, | ||||||
|  |  | ||||||
|  | 		// all cases in the following block have "existing deleteDependents finalizer" | ||||||
|  | 		"existing deleteDependents finalizer, PropagationPolicy=Foreground, defaultDeleteStrategy": { | ||||||
|  | 			options:            &metav1.DeleteOptions{PropagationPolicy: &foregroundPolicy}, | ||||||
|  | 			strategy:           defaultDeleteStrategy, | ||||||
|  | 			existingFinalizers: []string{metav1.FinalizerDeleteDependents}, | ||||||
|  | 			expectedFinalizers: []string{metav1.FinalizerDeleteDependents}, | ||||||
|  | 		}, | ||||||
|  | 		"existing deleteDependents finalizer, PropagationPolicy=Foreground, orphanDeleteStrategy": { | ||||||
|  | 			options:            &metav1.DeleteOptions{PropagationPolicy: &foregroundPolicy}, | ||||||
|  | 			strategy:           orphanDeleteStrategy, | ||||||
|  | 			existingFinalizers: []string{metav1.FinalizerDeleteDependents}, | ||||||
|  | 			expectedFinalizers: []string{metav1.FinalizerDeleteDependents}, | ||||||
|  | 		}, | ||||||
|  | 		"existing deleteDependents finalizer, PropagationPolicy=Background, defaultDeleteStrategy": { | ||||||
|  | 			options:            &metav1.DeleteOptions{PropagationPolicy: &backgroundPolicy}, | ||||||
|  | 			strategy:           defaultDeleteStrategy, | ||||||
|  | 			existingFinalizers: []string{metav1.FinalizerDeleteDependents}, | ||||||
|  | 			expectedNotFound:   true, | ||||||
|  | 		}, | ||||||
|  | 		"existing deleteDependents finalizer, PropagationPolicy=Background, orphanDeleteStrategy": { | ||||||
|  | 			options:            &metav1.DeleteOptions{PropagationPolicy: &backgroundPolicy}, | ||||||
|  | 			strategy:           orphanDeleteStrategy, | ||||||
|  | 			existingFinalizers: []string{metav1.FinalizerDeleteDependents}, | ||||||
|  | 			expectedNotFound:   true, | ||||||
|  | 		}, | ||||||
|  | 		"existing deleteDependents finalizer, PropagationPolicy=OrphanDependents, defaultDeleteStrategy": { | ||||||
|  | 			options:            &metav1.DeleteOptions{PropagationPolicy: &orphanPolicy}, | ||||||
|  | 			strategy:           defaultDeleteStrategy, | ||||||
|  | 			existingFinalizers: []string{metav1.FinalizerDeleteDependents}, | ||||||
|  | 			expectedFinalizers: []string{metav1.FinalizerOrphanDependents}, | ||||||
|  | 		}, | ||||||
|  | 		"existing deleteDependents finalizer, PropagationPolicy=OrphanDependents, orphanDeleteStrategy": { | ||||||
|  | 			options:            &metav1.DeleteOptions{PropagationPolicy: &orphanPolicy}, | ||||||
|  | 			strategy:           orphanDeleteStrategy, | ||||||
|  | 			existingFinalizers: []string{metav1.FinalizerDeleteDependents}, | ||||||
|  | 			expectedFinalizers: []string{metav1.FinalizerOrphanDependents}, | ||||||
|  | 		}, | ||||||
|  | 		"existing deleteDependents finalizer, PropagationPolicy=Default, defaultDeleteStrategy": { | ||||||
|  | 			options:            &metav1.DeleteOptions{PropagationPolicy: nil}, | ||||||
|  | 			strategy:           defaultDeleteStrategy, | ||||||
|  | 			existingFinalizers: []string{metav1.FinalizerDeleteDependents}, | ||||||
|  | 			expectedFinalizers: []string{metav1.FinalizerDeleteDependents}, | ||||||
|  | 		}, | ||||||
|  | 		"existing deleteDependents finalizer, PropagationPolicy=Default, orphanDeleteStrategy": { | ||||||
|  | 			options:            &metav1.DeleteOptions{PropagationPolicy: nil}, | ||||||
|  | 			strategy:           orphanDeleteStrategy, | ||||||
|  | 			existingFinalizers: []string{metav1.FinalizerDeleteDependents}, | ||||||
|  | 			expectedFinalizers: []string{metav1.FinalizerDeleteDependents}, | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test") | ||||||
|  | 	destroyFunc, registry := NewTestGenericStoreRegistry(t) | ||||||
|  | 	registry.EnableGarbageCollection = true | ||||||
|  | 	defer destroyFunc() | ||||||
|  |  | ||||||
|  | 	createPod := func(i int, finalizers []string) *example.Pod { | ||||||
|  | 		return &example.Pod{ | ||||||
|  | 			ObjectMeta: metav1.ObjectMeta{Name: fmt.Sprintf("pod-%d", i), Finalizers: finalizers, Generation: initialGeneration}, | ||||||
|  | 			Spec:       example.PodSpec{NodeName: "machine"}, | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	i := 0 | ||||||
|  | 	for title, tc := range testcases { | ||||||
|  | 		t.Logf("case title: %s", title) | ||||||
|  | 		registry.DeleteStrategy = tc.strategy | ||||||
|  | 		i++ | ||||||
|  | 		pod := createPod(i, tc.existingFinalizers) | ||||||
|  | 		// create pod | ||||||
|  | 		_, err := registry.Create(testContext, pod) | ||||||
|  | 		if err != nil { | ||||||
|  | 			t.Fatalf("Unexpected error: %v", err) | ||||||
|  | 		} | ||||||
|  | 		_, _, err = registry.Delete(testContext, pod.Name, tc.options) | ||||||
|  | 		obj, err := registry.Get(testContext, pod.Name, &metav1.GetOptions{}) | ||||||
|  | 		if tc.expectedNotFound { | ||||||
|  | 			if err == nil || !errors.IsNotFound(err) { | ||||||
|  | 				t.Fatalf("Unexpected error: %v", err) | ||||||
|  | 			} | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if !tc.expectedNotFound && err != nil { | ||||||
|  | 			t.Fatalf("Unexpected error: %v", err) | ||||||
|  | 		} | ||||||
|  | 		if !tc.expectedNotFound { | ||||||
|  | 			pod, ok := obj.(*example.Pod) | ||||||
|  | 			if !ok { | ||||||
|  | 				t.Fatalf("Expect the object to be a pod, but got %#v", obj) | ||||||
|  | 			} | ||||||
|  | 			if e, a := tc.expectedFinalizers, pod.ObjectMeta.Finalizers; !reflect.DeepEqual(e, a) { | ||||||
|  | 				t.Errorf("%v: Expect object %s to have finalizers %v, got %v", pod.Name, pod.ObjectMeta.Name, e, a) | ||||||
|  | 			} | ||||||
|  | 			if pod.ObjectMeta.DeletionTimestamp == nil { | ||||||
|  | 				t.Errorf("%v: Expect the object to have DeletionTimestamp set, but got %#v", pod.Name, pod.ObjectMeta) | ||||||
|  | 			} | ||||||
|  | 			if pod.ObjectMeta.DeletionGracePeriodSeconds == nil || *pod.ObjectMeta.DeletionGracePeriodSeconds != 0 { | ||||||
|  | 				t.Errorf("%v: Expect the object to have 0 DeletionGracePeriodSecond, but got %#v", pod.Name, pod.ObjectMeta) | ||||||
|  | 			} | ||||||
|  | 			if pod.Generation <= initialGeneration { | ||||||
|  | 				t.Errorf("%v: Deletion didn't increase Generation.", pod.Name) | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
| func TestStoreDeleteCollection(t *testing.T) { | func TestStoreDeleteCollection(t *testing.T) { | ||||||
| 	podA := &example.Pod{ObjectMeta: metav1.ObjectMeta{Name: "foo"}} | 	podA := &example.Pod{ObjectMeta: metav1.ObjectMeta{Name: "foo"}} | ||||||
| 	podB := &example.Pod{ObjectMeta: metav1.ObjectMeta{Name: "bar"}} | 	podB := &example.Pod{ObjectMeta: metav1.ObjectMeta{Name: "bar"}} | ||||||
|   | |||||||
| @@ -22,6 +22,7 @@ import ( | |||||||
|  |  | ||||||
| 	"k8s.io/apimachinery/pkg/api/errors" | 	"k8s.io/apimachinery/pkg/api/errors" | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
|  | 	"k8s.io/apimachinery/pkg/apis/meta/v1/validation" | ||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
| 	"k8s.io/apimachinery/pkg/runtime/schema" | 	"k8s.io/apimachinery/pkg/runtime/schema" | ||||||
| 	genericapirequest "k8s.io/apiserver/pkg/endpoints/request" | 	genericapirequest "k8s.io/apiserver/pkg/endpoints/request" | ||||||
| @@ -66,6 +67,9 @@ func BeforeDelete(strategy RESTDeleteStrategy, ctx genericapirequest.Context, ob | |||||||
| 	if kerr != nil { | 	if kerr != nil { | ||||||
| 		return false, false, kerr | 		return false, false, kerr | ||||||
| 	} | 	} | ||||||
|  | 	if errs := validation.ValidateDeleteOptions(options); len(errs) > 0 { | ||||||
|  | 		return false, false, errors.NewInvalid(schema.GroupKind{}, "", errs) | ||||||
|  | 	} | ||||||
| 	// Checking the Preconditions here to fail early. They'll be enforced later on when we actually do the deletion, too. | 	// Checking the Preconditions here to fail early. They'll be enforced later on when we actually do the deletion, too. | ||||||
| 	if options.Preconditions != nil && options.Preconditions.UID != nil && *options.Preconditions.UID != objectMeta.UID { | 	if options.Preconditions != nil && options.Preconditions.UID != nil && *options.Preconditions.UID != objectMeta.UID { | ||||||
| 		return false, false, errors.NewConflict(schema.GroupResource{Group: gvk.Group, Resource: gvk.Kind}, objectMeta.Name, fmt.Errorf("the UID in the precondition (%s) does not match the UID in record (%s). The object might have been deleted and then recreated", *options.Preconditions.UID, objectMeta.UID)) | 		return false, false, errors.NewConflict(schema.GroupResource{Group: gvk.Group, Resource: gvk.Kind}, objectMeta.Name, fmt.Errorf("the UID in the precondition (%s) does not match the UID in record (%s). The object might have been deleted and then recreated", *options.Preconditions.UID, objectMeta.UID)) | ||||||
|   | |||||||
| @@ -22,6 +22,7 @@ import ( | |||||||
| 	"k8s.io/apimachinery/pkg/api/errors" | 	"k8s.io/apimachinery/pkg/api/errors" | ||||||
| 	"k8s.io/apimachinery/pkg/api/meta" | 	"k8s.io/apimachinery/pkg/api/meta" | ||||||
| 	genericvalidation "k8s.io/apimachinery/pkg/api/validation" | 	genericvalidation "k8s.io/apimachinery/pkg/api/validation" | ||||||
|  | 	"k8s.io/apimachinery/pkg/api/validation/path" | ||||||
| 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
| 	"k8s.io/apimachinery/pkg/util/validation/field" | 	"k8s.io/apimachinery/pkg/util/validation/field" | ||||||
| @@ -60,7 +61,7 @@ type RESTUpdateStrategy interface { | |||||||
| } | } | ||||||
|  |  | ||||||
| // TODO: add other common fields that require global validation. | // TODO: add other common fields that require global validation. | ||||||
| func validateCommonFields(obj, old runtime.Object) (field.ErrorList, error) { | func validateCommonFields(obj, old runtime.Object, strategy RESTUpdateStrategy) (field.ErrorList, error) { | ||||||
| 	allErrs := field.ErrorList{} | 	allErrs := field.ErrorList{} | ||||||
| 	objectMeta, err := metav1.ObjectMetaFor(obj) | 	objectMeta, err := metav1.ObjectMetaFor(obj) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| @@ -70,6 +71,7 @@ func validateCommonFields(obj, old runtime.Object) (field.ErrorList, error) { | |||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, fmt.Errorf("failed to get old object metadata: %v", err) | 		return nil, fmt.Errorf("failed to get old object metadata: %v", err) | ||||||
| 	} | 	} | ||||||
|  | 	allErrs = append(allErrs, genericvalidation.ValidateObjectMeta(objectMeta, strategy.NamespaceScoped(), path.ValidatePathSegmentName, field.NewPath("metadata"))...) | ||||||
| 	allErrs = append(allErrs, genericvalidation.ValidateObjectMetaUpdate(objectMeta, oldObjectMeta, field.NewPath("metadata"))...) | 	allErrs = append(allErrs, genericvalidation.ValidateObjectMetaUpdate(objectMeta, oldObjectMeta, field.NewPath("metadata"))...) | ||||||
|  |  | ||||||
| 	return allErrs, nil | 	return allErrs, nil | ||||||
| @@ -103,7 +105,7 @@ func BeforeUpdate(strategy RESTUpdateStrategy, ctx genericapirequest.Context, ob | |||||||
| 	objectMeta.ClusterName = "" | 	objectMeta.ClusterName = "" | ||||||
|  |  | ||||||
| 	// Ensure some common fields, like UID, are validated for all resources. | 	// Ensure some common fields, like UID, are validated for all resources. | ||||||
| 	errs, err := validateCommonFields(obj, old) | 	errs, err := validateCommonFields(obj, old, strategy) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return errors.NewInternalError(err) | 		return errors.NewInternalError(err) | ||||||
| 	} | 	} | ||||||
|   | |||||||
							
								
								
									
										8
									
								
								staging/src/k8s.io/client-go/Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										8
									
								
								staging/src/k8s.io/client-go/Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							| @@ -66,12 +66,12 @@ | |||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			"ImportPath": "github.com/docker/distribution/digest", | 			"ImportPath": "github.com/docker/distribution/digest", | ||||||
| 			"Comment": "v2.4.0-rc.1-38-gcd27f179", | 			"Comment": "v2.4.0-rc.1-38-gcd27f17", | ||||||
| 			"Rev": "cd27f179f2c10c5d300e6d09025b538c475b0d51" | 			"Rev": "cd27f179f2c10c5d300e6d09025b538c475b0d51" | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			"ImportPath": "github.com/docker/distribution/reference", | 			"ImportPath": "github.com/docker/distribution/reference", | ||||||
| 			"Comment": "v2.4.0-rc.1-38-gcd27f179", | 			"Comment": "v2.4.0-rc.1-38-gcd27f17", | ||||||
| 			"Rev": "cd27f179f2c10c5d300e6d09025b538c475b0d51" | 			"Rev": "cd27f179f2c10c5d300e6d09025b538c475b0d51" | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| @@ -111,12 +111,12 @@ | |||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			"ImportPath": "github.com/gogo/protobuf/proto", | 			"ImportPath": "github.com/gogo/protobuf/proto", | ||||||
| 			"Comment": "v0.2-33-ge18d7aa8", | 			"Comment": "v0.2-33-ge18d7aa", | ||||||
| 			"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" | 			"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
| 			"ImportPath": "github.com/gogo/protobuf/sortkeys", | 			"ImportPath": "github.com/gogo/protobuf/sortkeys", | ||||||
| 			"Comment": "v0.2-33-ge18d7aa8", | 			"Comment": "v0.2-33-ge18d7aa", | ||||||
| 			"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" | 			"Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" | ||||||
| 		}, | 		}, | ||||||
| 		{ | 		{ | ||||||
|   | |||||||
| @@ -244,7 +244,7 @@ func IsServiceIPRequested(service *Service) bool { | |||||||
|  |  | ||||||
| var standardFinalizers = sets.NewString( | var standardFinalizers = sets.NewString( | ||||||
| 	string(FinalizerKubernetes), | 	string(FinalizerKubernetes), | ||||||
| 	metav1.FinalizerOrphan, | 	metav1.FinalizerOrphanDependents, | ||||||
| ) | ) | ||||||
|  |  | ||||||
| // HasAnnotation returns a bool if passed in annotation exists | // HasAnnotation returns a bool if passed in annotation exists | ||||||
|   | |||||||
| @@ -3000,6 +3000,20 @@ type Preconditions struct { | |||||||
| 	UID *types.UID | 	UID *types.UID | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // DeletionPropagation decides whether and how garbage collection will be performed. | ||||||
|  | type DeletionPropagation string | ||||||
|  |  | ||||||
|  | const ( | ||||||
|  | 	// Orphans the dependents. | ||||||
|  | 	DeletePropagationOrphan DeletionPropagation = "Orphan" | ||||||
|  | 	// Deletes the object from the key-value store, the garbage collector will delete the dependents in the background. | ||||||
|  | 	DeletePropagationBackground DeletionPropagation = "Background" | ||||||
|  | 	// The object exists in the key-value store until the garbage collector deletes all the dependents whose ownerReference.blockOwnerDeletion=true from the key-value store. | ||||||
|  | 	// API sever will put the "DeletingDependents" finalizer on the object, and sets its deletionTimestamp. | ||||||
|  | 	// This policy is cascading, i.e., the dependents will be deleted with Foreground. | ||||||
|  | 	DeletePropagationForeground DeletionPropagation = "Foreground" | ||||||
|  | ) | ||||||
|  |  | ||||||
| // DeleteOptions may be provided when deleting an API object | // DeleteOptions may be provided when deleting an API object | ||||||
| // DEPRECATED: This type has been moved to meta/v1 and will be removed soon. | // DEPRECATED: This type has been moved to meta/v1 and will be removed soon. | ||||||
| type DeleteOptions struct { | type DeleteOptions struct { | ||||||
| @@ -3016,10 +3030,18 @@ type DeleteOptions struct { | |||||||
| 	// +optional | 	// +optional | ||||||
| 	Preconditions *Preconditions | 	Preconditions *Preconditions | ||||||
|  |  | ||||||
|  | 	// Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. | ||||||
| 	// Should the dependent objects be orphaned. If true/false, the "orphan" | 	// Should the dependent objects be orphaned. If true/false, the "orphan" | ||||||
| 	// finalizer will be added to/removed from the object's finalizers list. | 	// finalizer will be added to/removed from the object's finalizers list. | ||||||
|  | 	// Either this field or PropagationPolicy may be set, but not both. | ||||||
| 	// +optional | 	// +optional | ||||||
| 	OrphanDependents *bool | 	OrphanDependents *bool | ||||||
|  |  | ||||||
|  | 	// Whether and how garbage collection will be performed. | ||||||
|  | 	// Defaults to Default. | ||||||
|  | 	// Either this field or OrphanDependents may be set, but not both. | ||||||
|  | 	// +optional | ||||||
|  | 	PropagationPolicy *DeletionPropagation | ||||||
| } | } | ||||||
|  |  | ||||||
| // ListOptions is the query options to a standard REST list call, and has future support for | // ListOptions is the query options to a standard REST list call, and has future support for | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -680,10 +680,18 @@ message DeleteOptions { | |||||||
|   // +optional |   // +optional | ||||||
|   optional Preconditions preconditions = 2; |   optional Preconditions preconditions = 2; | ||||||
| 
 | 
 | ||||||
|  |   // Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. | ||||||
|   // Should the dependent objects be orphaned. If true/false, the "orphan" |   // Should the dependent objects be orphaned. If true/false, the "orphan" | ||||||
|   // finalizer will be added to/removed from the object's finalizers list. |   // finalizer will be added to/removed from the object's finalizers list. | ||||||
|  |   // Either this field or PropagationPolicy may be set, but not both. | ||||||
|   // +optional |   // +optional | ||||||
|   optional bool orphanDependents = 3; |   optional bool orphanDependents = 3; | ||||||
|  | 
 | ||||||
|  |   // Whether and how garbage collection will be performed. | ||||||
|  |   // Defaults to Default. | ||||||
|  |   // Either this field or OrphanDependents may be set, but not both. | ||||||
|  |   // +optional | ||||||
|  |   optional string propagationPolicy = 4; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Represents downward API info for projecting into a projected volume. | // Represents downward API info for projecting into a projected volume. | ||||||
|   | |||||||
| @@ -84,7 +84,7 @@ func IsServiceIPRequested(service *Service) bool { | |||||||
|  |  | ||||||
| var standardFinalizers = sets.NewString( | var standardFinalizers = sets.NewString( | ||||||
| 	string(FinalizerKubernetes), | 	string(FinalizerKubernetes), | ||||||
| 	metav1.FinalizerOrphan, | 	metav1.FinalizerOrphanDependents, | ||||||
| ) | ) | ||||||
|  |  | ||||||
| func IsStandardFinalizerName(str string) bool { | func IsStandardFinalizerName(str string) bool { | ||||||
|   | |||||||
| @@ -63,6 +63,10 @@ func (meta *ObjectMeta) GetOwnerReferences() []metav1.OwnerReference { | |||||||
| 			value := *meta.OwnerReferences[i].Controller | 			value := *meta.OwnerReferences[i].Controller | ||||||
| 			ret[i].Controller = &value | 			ret[i].Controller = &value | ||||||
| 		} | 		} | ||||||
|  | 		if meta.OwnerReferences[i].BlockOwnerDeletion != nil { | ||||||
|  | 			value := *meta.OwnerReferences[i].BlockOwnerDeletion | ||||||
|  | 			ret[i].BlockOwnerDeletion = &value | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 	return ret | 	return ret | ||||||
| } | } | ||||||
| @@ -78,6 +82,10 @@ func (meta *ObjectMeta) SetOwnerReferences(references []metav1.OwnerReference) { | |||||||
| 			value := *references[i].Controller | 			value := *references[i].Controller | ||||||
| 			newReferences[i].Controller = &value | 			newReferences[i].Controller = &value | ||||||
| 		} | 		} | ||||||
|  | 		if references[i].BlockOwnerDeletion != nil { | ||||||
|  | 			value := *references[i].BlockOwnerDeletion | ||||||
|  | 			newReferences[i].BlockOwnerDeletion = &value | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 	meta.OwnerReferences = newReferences | 	meta.OwnerReferences = newReferences | ||||||
| } | } | ||||||
|   | |||||||
| @@ -51338,6 +51338,32 @@ func (x *Preconditions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { | |||||||
| 	z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | 	z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (x DeletionPropagation) CodecEncodeSelf(e *codec1978.Encoder) { | ||||||
|  | 	var h codecSelfer1234 | ||||||
|  | 	z, r := codec1978.GenHelperEncoder(e) | ||||||
|  | 	_, _, _ = h, z, r | ||||||
|  | 	yym1 := z.EncBinary() | ||||||
|  | 	_ = yym1 | ||||||
|  | 	if false { | ||||||
|  | 	} else if z.HasExtensions() && z.EncExt(x) { | ||||||
|  | 	} else { | ||||||
|  | 		r.EncodeString(codecSelferC_UTF81234, string(x)) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (x *DeletionPropagation) CodecDecodeSelf(d *codec1978.Decoder) { | ||||||
|  | 	var h codecSelfer1234 | ||||||
|  | 	z, r := codec1978.GenHelperDecoder(d) | ||||||
|  | 	_, _, _ = h, z, r | ||||||
|  | 	yym1 := z.DecBinary() | ||||||
|  | 	_ = yym1 | ||||||
|  | 	if false { | ||||||
|  | 	} else if z.HasExtensions() && z.DecExt(x) { | ||||||
|  | 	} else { | ||||||
|  | 		*((*string)(x)) = r.DecodeString() | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (x *DeleteOptions) CodecEncodeSelf(e *codec1978.Encoder) { | func (x *DeleteOptions) CodecEncodeSelf(e *codec1978.Encoder) { | ||||||
| 	var h codecSelfer1234 | 	var h codecSelfer1234 | ||||||
| 	z, r := codec1978.GenHelperEncoder(e) | 	z, r := codec1978.GenHelperEncoder(e) | ||||||
| @@ -51352,7 +51378,7 @@ func (x *DeleteOptions) CodecEncodeSelf(e *codec1978.Encoder) { | |||||||
| 		} else { | 		} else { | ||||||
| 			yysep2 := !z.EncBinary() | 			yysep2 := !z.EncBinary() | ||||||
| 			yy2arr2 := z.EncBasicHandle().StructToArray | 			yy2arr2 := z.EncBasicHandle().StructToArray | ||||||
| 			var yyq2 [5]bool | 			var yyq2 [6]bool | ||||||
| 			_, _, _ = yysep2, yyq2, yy2arr2 | 			_, _, _ = yysep2, yyq2, yy2arr2 | ||||||
| 			const yyr2 bool = false | 			const yyr2 bool = false | ||||||
| 			yyq2[0] = x.Kind != "" | 			yyq2[0] = x.Kind != "" | ||||||
| @@ -51362,9 +51388,9 @@ func (x *DeleteOptions) CodecEncodeSelf(e *codec1978.Encoder) { | |||||||
| 			yyq2[4] = x.OrphanDependents != nil | 			yyq2[4] = x.OrphanDependents != nil | ||||||
| 			var yynn2 int | 			var yynn2 int | ||||||
| 			if yyr2 || yy2arr2 { | 			if yyr2 || yy2arr2 { | ||||||
| 				r.EncodeArrayStart(5) | 				r.EncodeArrayStart(6) | ||||||
| 			} else { | 			} else { | ||||||
| 				yynn2 = 0 | 				yynn2 = 1 | ||||||
| 				for _, b := range yyq2 { | 				for _, b := range yyq2 { | ||||||
| 					if b { | 					if b { | ||||||
| 						yynn2++ | 						yynn2++ | ||||||
| @@ -51516,6 +51542,25 @@ func (x *DeleteOptions) CodecEncodeSelf(e *codec1978.Encoder) { | |||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
|  | 			if yyr2 || yy2arr2 { | ||||||
|  | 				z.EncSendContainerState(codecSelfer_containerArrayElem1234) | ||||||
|  | 				if x.PropagationPolicy == nil { | ||||||
|  | 					r.EncodeNil() | ||||||
|  | 				} else { | ||||||
|  | 					yy23 := *x.PropagationPolicy | ||||||
|  | 					yy23.CodecEncodeSelf(e) | ||||||
|  | 				} | ||||||
|  | 			} else { | ||||||
|  | 				z.EncSendContainerState(codecSelfer_containerMapKey1234) | ||||||
|  | 				r.EncodeString(codecSelferC_UTF81234, string("PropagationPolicy")) | ||||||
|  | 				z.EncSendContainerState(codecSelfer_containerMapValue1234) | ||||||
|  | 				if x.PropagationPolicy == nil { | ||||||
|  | 					r.EncodeNil() | ||||||
|  | 				} else { | ||||||
|  | 					yy25 := *x.PropagationPolicy | ||||||
|  | 					yy25.CodecEncodeSelf(e) | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
| 			if yyr2 || yy2arr2 { | 			if yyr2 || yy2arr2 { | ||||||
| 				z.EncSendContainerState(codecSelfer_containerArrayEnd1234) | 				z.EncSendContainerState(codecSelfer_containerArrayEnd1234) | ||||||
| 			} else { | 			} else { | ||||||
| @@ -51644,6 +51689,17 @@ func (x *DeleteOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { | |||||||
| 					*((*bool)(x.OrphanDependents)) = r.DecodeBool() | 					*((*bool)(x.OrphanDependents)) = r.DecodeBool() | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
|  | 		case "PropagationPolicy": | ||||||
|  | 			if r.TryDecodeAsNil() { | ||||||
|  | 				if x.PropagationPolicy != nil { | ||||||
|  | 					x.PropagationPolicy = nil | ||||||
|  | 				} | ||||||
|  | 			} else { | ||||||
|  | 				if x.PropagationPolicy == nil { | ||||||
|  | 					x.PropagationPolicy = new(DeletionPropagation) | ||||||
|  | 				} | ||||||
|  | 				x.PropagationPolicy.CodecDecodeSelf(d) | ||||||
|  | 			} | ||||||
| 		default: | 		default: | ||||||
| 			z.DecStructFieldNotFound(-1, yys3) | 			z.DecStructFieldNotFound(-1, yys3) | ||||||
| 		} // end switch yys3 | 		} // end switch yys3 | ||||||
| @@ -51655,16 +51711,16 @@ func (x *DeleteOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { | |||||||
| 	var h codecSelfer1234 | 	var h codecSelfer1234 | ||||||
| 	z, r := codec1978.GenHelperDecoder(d) | 	z, r := codec1978.GenHelperDecoder(d) | ||||||
| 	_, _, _ = h, z, r | 	_, _, _ = h, z, r | ||||||
| 	var yyj13 int | 	var yyj14 int | ||||||
| 	var yyb13 bool | 	var yyb14 bool | ||||||
| 	var yyhl13 bool = l >= 0 | 	var yyhl14 bool = l >= 0 | ||||||
| 	yyj13++ | 	yyj14++ | ||||||
| 	if yyhl13 { | 	if yyhl14 { | ||||||
| 		yyb13 = yyj13 > l | 		yyb14 = yyj14 > l | ||||||
| 	} else { | 	} else { | ||||||
| 		yyb13 = r.CheckBreak() | 		yyb14 = r.CheckBreak() | ||||||
| 	} | 	} | ||||||
| 	if yyb13 { | 	if yyb14 { | ||||||
| 		z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | 		z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| @@ -51672,21 +51728,21 @@ func (x *DeleteOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { | |||||||
| 	if r.TryDecodeAsNil() { | 	if r.TryDecodeAsNil() { | ||||||
| 		x.Kind = "" | 		x.Kind = "" | ||||||
| 	} else { | 	} else { | ||||||
| 		yyv14 := &x.Kind | 		yyv15 := &x.Kind | ||||||
| 		yym15 := z.DecBinary() | 		yym16 := z.DecBinary() | ||||||
| 		_ = yym15 | 		_ = yym16 | ||||||
| 		if false { | 		if false { | ||||||
| 		} else { | 		} else { | ||||||
| 			*((*string)(yyv14)) = r.DecodeString() | 			*((*string)(yyv15)) = r.DecodeString() | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	yyj13++ | 	yyj14++ | ||||||
| 	if yyhl13 { | 	if yyhl14 { | ||||||
| 		yyb13 = yyj13 > l | 		yyb14 = yyj14 > l | ||||||
| 	} else { | 	} else { | ||||||
| 		yyb13 = r.CheckBreak() | 		yyb14 = r.CheckBreak() | ||||||
| 	} | 	} | ||||||
| 	if yyb13 { | 	if yyb14 { | ||||||
| 		z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | 		z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| @@ -51694,21 +51750,21 @@ func (x *DeleteOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { | |||||||
| 	if r.TryDecodeAsNil() { | 	if r.TryDecodeAsNil() { | ||||||
| 		x.APIVersion = "" | 		x.APIVersion = "" | ||||||
| 	} else { | 	} else { | ||||||
| 		yyv16 := &x.APIVersion | 		yyv17 := &x.APIVersion | ||||||
| 		yym17 := z.DecBinary() | 		yym18 := z.DecBinary() | ||||||
| 		_ = yym17 | 		_ = yym18 | ||||||
| 		if false { | 		if false { | ||||||
| 		} else { | 		} else { | ||||||
| 			*((*string)(yyv16)) = r.DecodeString() | 			*((*string)(yyv17)) = r.DecodeString() | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	yyj13++ | 	yyj14++ | ||||||
| 	if yyhl13 { | 	if yyhl14 { | ||||||
| 		yyb13 = yyj13 > l | 		yyb14 = yyj14 > l | ||||||
| 	} else { | 	} else { | ||||||
| 		yyb13 = r.CheckBreak() | 		yyb14 = r.CheckBreak() | ||||||
| 	} | 	} | ||||||
| 	if yyb13 { | 	if yyb14 { | ||||||
| 		z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | 		z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| @@ -51721,20 +51777,20 @@ func (x *DeleteOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { | |||||||
| 		if x.GracePeriodSeconds == nil { | 		if x.GracePeriodSeconds == nil { | ||||||
| 			x.GracePeriodSeconds = new(int64) | 			x.GracePeriodSeconds = new(int64) | ||||||
| 		} | 		} | ||||||
| 		yym19 := z.DecBinary() | 		yym20 := z.DecBinary() | ||||||
| 		_ = yym19 | 		_ = yym20 | ||||||
| 		if false { | 		if false { | ||||||
| 		} else { | 		} else { | ||||||
| 			*((*int64)(x.GracePeriodSeconds)) = int64(r.DecodeInt(64)) | 			*((*int64)(x.GracePeriodSeconds)) = int64(r.DecodeInt(64)) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	yyj13++ | 	yyj14++ | ||||||
| 	if yyhl13 { | 	if yyhl14 { | ||||||
| 		yyb13 = yyj13 > l | 		yyb14 = yyj14 > l | ||||||
| 	} else { | 	} else { | ||||||
| 		yyb13 = r.CheckBreak() | 		yyb14 = r.CheckBreak() | ||||||
| 	} | 	} | ||||||
| 	if yyb13 { | 	if yyb14 { | ||||||
| 		z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | 		z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| @@ -51749,13 +51805,13 @@ func (x *DeleteOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { | |||||||
| 		} | 		} | ||||||
| 		x.Preconditions.CodecDecodeSelf(d) | 		x.Preconditions.CodecDecodeSelf(d) | ||||||
| 	} | 	} | ||||||
| 	yyj13++ | 	yyj14++ | ||||||
| 	if yyhl13 { | 	if yyhl14 { | ||||||
| 		yyb13 = yyj13 > l | 		yyb14 = yyj14 > l | ||||||
| 	} else { | 	} else { | ||||||
| 		yyb13 = r.CheckBreak() | 		yyb14 = r.CheckBreak() | ||||||
| 	} | 	} | ||||||
| 	if yyb13 { | 	if yyb14 { | ||||||
| 		z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | 		z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| @@ -51768,25 +51824,46 @@ func (x *DeleteOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { | |||||||
| 		if x.OrphanDependents == nil { | 		if x.OrphanDependents == nil { | ||||||
| 			x.OrphanDependents = new(bool) | 			x.OrphanDependents = new(bool) | ||||||
| 		} | 		} | ||||||
| 		yym22 := z.DecBinary() | 		yym23 := z.DecBinary() | ||||||
| 		_ = yym22 | 		_ = yym23 | ||||||
| 		if false { | 		if false { | ||||||
| 		} else { | 		} else { | ||||||
| 			*((*bool)(x.OrphanDependents)) = r.DecodeBool() | 			*((*bool)(x.OrphanDependents)) = r.DecodeBool() | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	for { | 	yyj14++ | ||||||
| 		yyj13++ | 	if yyhl14 { | ||||||
| 		if yyhl13 { | 		yyb14 = yyj14 > l | ||||||
| 			yyb13 = yyj13 > l |  | ||||||
| 	} else { | 	} else { | ||||||
| 			yyb13 = r.CheckBreak() | 		yyb14 = r.CheckBreak() | ||||||
| 	} | 	} | ||||||
| 		if yyb13 { | 	if yyb14 { | ||||||
|  | 		z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	z.DecSendContainerState(codecSelfer_containerArrayElem1234) | ||||||
|  | 	if r.TryDecodeAsNil() { | ||||||
|  | 		if x.PropagationPolicy != nil { | ||||||
|  | 			x.PropagationPolicy = nil | ||||||
|  | 		} | ||||||
|  | 	} else { | ||||||
|  | 		if x.PropagationPolicy == nil { | ||||||
|  | 			x.PropagationPolicy = new(DeletionPropagation) | ||||||
|  | 		} | ||||||
|  | 		x.PropagationPolicy.CodecDecodeSelf(d) | ||||||
|  | 	} | ||||||
|  | 	for { | ||||||
|  | 		yyj14++ | ||||||
|  | 		if yyhl14 { | ||||||
|  | 			yyb14 = yyj14 > l | ||||||
|  | 		} else { | ||||||
|  | 			yyb14 = r.CheckBreak() | ||||||
|  | 		} | ||||||
|  | 		if yyb14 { | ||||||
| 			break | 			break | ||||||
| 		} | 		} | ||||||
| 		z.DecSendContainerState(codecSelfer_containerArrayElem1234) | 		z.DecSendContainerState(codecSelfer_containerArrayElem1234) | ||||||
| 		z.DecStructFieldNotFound(yyj13-1, "") | 		z.DecStructFieldNotFound(yyj14-1, "") | ||||||
| 	} | 	} | ||||||
| 	z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | 	z.DecSendContainerState(codecSelfer_containerArrayEnd1234) | ||||||
| } | } | ||||||
| @@ -65736,7 +65813,7 @@ func (x codecSelfer1234) decSlicev1_OwnerReference(v *[]pkg2_v1.OwnerReference, | |||||||
| 
 | 
 | ||||||
| 			yyrg1 := len(yyv1) > 0 | 			yyrg1 := len(yyv1) > 0 | ||||||
| 			yyv21 := yyv1 | 			yyv21 := yyv1 | ||||||
| 			yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 72) | 			yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 80) | ||||||
| 			if yyrt1 { | 			if yyrt1 { | ||||||
| 				if yyrl1 <= cap(yyv1) { | 				if yyrl1 <= cap(yyv1) { | ||||||
| 					yyv1 = yyv1[:yyrl1] | 					yyv1 = yyv1[:yyrl1] | ||||||
|   | |||||||
| @@ -3432,6 +3432,20 @@ type Preconditions struct { | |||||||
| 	UID *types.UID `json:"uid,omitempty" protobuf:"bytes,1,opt,name=uid,casttype=k8s.io/apimachinery/pkg/types.UID"` | 	UID *types.UID `json:"uid,omitempty" protobuf:"bytes,1,opt,name=uid,casttype=k8s.io/apimachinery/pkg/types.UID"` | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // DeletionPropagation decides if a deletion will propagate to the dependents of the object, and how the garbage collector will handle the propagation. | ||||||
|  | type DeletionPropagation string | ||||||
|  |  | ||||||
|  | const ( | ||||||
|  | 	// Orphans the dependents. | ||||||
|  | 	DeletePropagationOrphan DeletionPropagation = "Orphan" | ||||||
|  | 	// Deletes the object from the key-value store, the garbage collector will delete the dependents in the background. | ||||||
|  | 	DeletePropagationBackground DeletionPropagation = "Background" | ||||||
|  | 	// The object exists in the key-value store until the garbage collector deletes all the dependents whose ownerReference.blockOwnerDeletion=true from the key-value store. | ||||||
|  | 	// API sever will put the "DeletingDependents" finalizer on the object, and sets its deletionTimestamp. | ||||||
|  | 	// This policy is cascading, i.e., the dependents will be deleted with Foreground. | ||||||
|  | 	DeletePropagationForeground DeletionPropagation = "Foreground" | ||||||
|  | ) | ||||||
|  |  | ||||||
| // DeleteOptions may be provided when deleting an API object | // DeleteOptions may be provided when deleting an API object | ||||||
| // DEPRECATED: This type has been moved to meta/v1 and will be removed soon. | // DEPRECATED: This type has been moved to meta/v1 and will be removed soon. | ||||||
| // +k8s:openapi-gen=false | // +k8s:openapi-gen=false | ||||||
| @@ -3450,10 +3464,18 @@ type DeleteOptions struct { | |||||||
| 	// +optional | 	// +optional | ||||||
| 	Preconditions *Preconditions `json:"preconditions,omitempty" protobuf:"bytes,2,opt,name=preconditions"` | 	Preconditions *Preconditions `json:"preconditions,omitempty" protobuf:"bytes,2,opt,name=preconditions"` | ||||||
|  |  | ||||||
|  | 	// Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. | ||||||
| 	// Should the dependent objects be orphaned. If true/false, the "orphan" | 	// Should the dependent objects be orphaned. If true/false, the "orphan" | ||||||
| 	// finalizer will be added to/removed from the object's finalizers list. | 	// finalizer will be added to/removed from the object's finalizers list. | ||||||
|  | 	// Either this field or PropagationPolicy may be set, but not both. | ||||||
| 	// +optional | 	// +optional | ||||||
| 	OrphanDependents *bool `json:"orphanDependents,omitempty" protobuf:"varint,3,opt,name=orphanDependents"` | 	OrphanDependents *bool `json:"orphanDependents,omitempty" protobuf:"varint,3,opt,name=orphanDependents"` | ||||||
|  |  | ||||||
|  | 	// Whether and how garbage collection will be performed. | ||||||
|  | 	// Defaults to Default. | ||||||
|  | 	// Either this field or OrphanDependents may be set, but not both. | ||||||
|  | 	// +optional | ||||||
|  | 	PropagationPolicy *DeletionPropagation | ||||||
| } | } | ||||||
|  |  | ||||||
| // ListOptions is the query options to a standard REST list call. | // ListOptions is the query options to a standard REST list call. | ||||||
|   | |||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user
	 Kubernetes Submit Queue
					Kubernetes Submit Queue