Browse code

Add new VKE authorizer in k8s

Change-Id: Iab03a8d455349b3c9b26af771f19e0807762e94f
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/5450
Reviewed-by: Sharath George
Tested-by: Sharath George

DheerajSShetty authored on 2018/08/03 06:22:28
Showing 2 changed files
... ...
@@ -1,83 +1,6 @@
1
-From a9402d16a92e04e25ede3816872855e9a89fb812 Mon Sep 17 00:00:00 2001
2
-From: Bo Gan <ganb@vmware.com>
3
-Date: Sun, 10 Jun 2018 02:13:51 -0700
4
-Subject: [PATCH] Cascade Kubernetes patches for v1.10.2 (1f4aedb)
5
-
6
- api/swagger-spec/apps_v1alpha1.json                |  21 +
7
- api/swagger-spec/apps_v1beta1.json                 |  21 +
8
- api/swagger-spec/apps_v1beta2.json                 |  21 +
9
- api/swagger-spec/batch_v1.json                     |  21 +
10
- api/swagger-spec/batch_v1beta1.json                |  21 +
11
- api/swagger-spec/batch_v2alpha1.json               |  21 +
12
- api/swagger-spec/extensions_v1beta1.json           |  21 +
13
- api/swagger-spec/settings.k8s.io_v1alpha1.json     |  21 +
14
- api/swagger-spec/v1.json                           |  25 +
15
- cmd/kube-controller-manager/app/BUILD              |   1 +
16
- cmd/kube-controller-manager/app/plugins.go         |   4 +
17
- cmd/kubelet/app/BUILD                              |   1 +
18
- cmd/kubelet/app/plugins.go                         |   2 +
19
- pkg/apis/core/types.go                             |  14 +
20
- pkg/apis/core/validation/validation.go             |  29 +-
21
- pkg/apis/extensions/types.go                       |   1 +
22
- pkg/cloudprovider/providers/BUILD                  |   2 +
23
- pkg/cloudprovider/providers/cascade/BUILD          |  56 ++
24
- pkg/cloudprovider/providers/cascade/OWNERS         |   3 +
25
- pkg/cloudprovider/providers/cascade/apitypes.go    | 229 ++++++
26
- pkg/cloudprovider/providers/cascade/auth.go        | 145 ++++
27
- pkg/cloudprovider/providers/cascade/cascade.go     | 214 +++++
28
- .../providers/cascade/cascade_disks.go             | 227 ++++++
29
- .../providers/cascade/cascade_instances.go         |  92 +++
30
- .../providers/cascade/cascade_instances_test.go    |  44 +
31
- .../providers/cascade/cascade_loadbalancer.go      | 285 +++++++
32
- pkg/cloudprovider/providers/cascade/client.go      | 399 ++++++++++
33
- pkg/cloudprovider/providers/cascade/oidcclient.go  | 297 +++++++
34
- pkg/cloudprovider/providers/cascade/restclient.go  | 262 ++++++
35
- pkg/cloudprovider/providers/cascade/tests_owed     |   5 +
36
- pkg/cloudprovider/providers/cascade/utils.go       |  25 +
37
- pkg/cloudprovider/providers/providers.go           |   1 +
38
- pkg/kubeapiserver/options/plugins.go               |   3 +
39
- pkg/printers/internalversion/describe.go           |  11 +
40
- pkg/security/podsecuritypolicy/util/util.go        |   3 +
41
- pkg/volume/cascade_disk/BUILD                      |  43 +
42
- pkg/volume/cascade_disk/OWNERS                     |   2 +
43
- pkg/volume/cascade_disk/attacher.go                | 264 ++++++
44
- pkg/volume/cascade_disk/cascade_disk.go            | 390 +++++++++
45
- pkg/volume/cascade_disk/cascade_util.go            | 152 ++++
46
- .../admission/persistentvolume/label/admission.go  |  54 ++
47
- plugin/pkg/admission/vke/BUILD                     |  60 ++
48
- plugin/pkg/admission/vke/admission.go              | 554 +++++++++++++
49
- plugin/pkg/admission/vke/admission_test.go         | 882 +++++++++++++++++++++
50
- staging/src/k8s.io/api/core/v1/generated.pb.go     | 310 +++++++-
51
- staging/src/k8s.io/api/core/v1/types.go            |  24 +-
52
- 46 files changed, 5254 insertions(+), 29 deletions(-)
53
- create mode 100644 pkg/cloudprovider/providers/cascade/BUILD
54
- create mode 100644 pkg/cloudprovider/providers/cascade/OWNERS
55
- create mode 100644 pkg/cloudprovider/providers/cascade/apitypes.go
56
- create mode 100644 pkg/cloudprovider/providers/cascade/auth.go
57
- create mode 100644 pkg/cloudprovider/providers/cascade/cascade.go
58
- create mode 100644 pkg/cloudprovider/providers/cascade/cascade_disks.go
59
- create mode 100644 pkg/cloudprovider/providers/cascade/cascade_instances.go
60
- create mode 100644 pkg/cloudprovider/providers/cascade/cascade_instances_test.go
61
- create mode 100644 pkg/cloudprovider/providers/cascade/cascade_loadbalancer.go
62
- create mode 100644 pkg/cloudprovider/providers/cascade/client.go
63
- create mode 100644 pkg/cloudprovider/providers/cascade/oidcclient.go
64
- create mode 100644 pkg/cloudprovider/providers/cascade/restclient.go
65
- create mode 100644 pkg/cloudprovider/providers/cascade/tests_owed
66
- create mode 100644 pkg/cloudprovider/providers/cascade/utils.go
67
- create mode 100644 pkg/volume/cascade_disk/BUILD
68
- create mode 100644 pkg/volume/cascade_disk/OWNERS
69
- create mode 100644 pkg/volume/cascade_disk/attacher.go
70
- create mode 100644 pkg/volume/cascade_disk/cascade_disk.go
71
- create mode 100644 pkg/volume/cascade_disk/cascade_util.go
72
- create mode 100644 plugin/pkg/admission/vke/BUILD
73
- create mode 100644 plugin/pkg/admission/vke/admission.go
74
- create mode 100644 plugin/pkg/admission/vke/admission_test.go
75
-
76
-diff --git a/api/swagger-spec/apps_v1alpha1.json b/api/swagger-spec/apps_v1alpha1.json
77
-index 6f54662..0ce6f3f 100644
78
-+++ b/api/swagger-spec/apps_v1alpha1.json
1
+diff -duNr --no-dereference kubernetes-old/api/swagger-spec/apps_v1alpha1.json kubernetes/api/swagger-spec/apps_v1alpha1.json
2
+--- kubernetes-old/api/swagger-spec/apps_v1alpha1.json	2018-04-26 05:17:57.000000000 -0700
79 3
 @@ -1459,6 +1459,10 @@
80 4
       "photonPersistentDisk": {
81 5
        "$ref": "v1.PhotonPersistentDiskVolumeSource",
... ...
@@ -89,10 +12,14 @@ index 6f54662..0ce6f3f 100644
89 89
       }
90 90
      }
91 91
     },
92
-@@ -2109,6 +2113,23 @@
93
-      }
94
-     }
95
-    },
92
+@@ -2105,6 +2109,23 @@
93
+      },
94
+      "fsType": {
95
+       "type": "string",
96
++      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
97
++     }
98
++    }
99
++   },
96 100
 +   "v1.CascadeDiskVolumeSource": {
97 101
 +    "id": "v1.CascadeDiskVolumeSource",
98 102
 +    "description": "Represents a Cascade persistent disk resource.",
... ...
@@ -106,17 +33,12 @@ index 6f54662..0ce6f3f 100644
106 106
 +     },
107 107
 +     "fsType": {
108 108
 +      "type": "string",
109
-+      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
110
-+     }
111
-+    }
112
-+   },
113
-    "v1.Container": {
114
-     "id": "v1.Container",
115
-     "description": "A single application container that you want to run within a pod.",
116
-diff --git a/api/swagger-spec/apps_v1beta1.json b/api/swagger-spec/apps_v1beta1.json
117
-index a4b090a..6fc1e0a 100644
118
-+++ b/api/swagger-spec/apps_v1beta1.json
109
+       "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
110
+      }
111
+     }
112
+diff -duNr --no-dereference kubernetes-old/api/swagger-spec/apps_v1beta1.json kubernetes/api/swagger-spec/apps_v1beta1.json
113
+--- kubernetes-old/api/swagger-spec/apps_v1beta1.json	2018-04-26 05:17:57.000000000 -0700
119 114
 @@ -4483,6 +4483,10 @@
120 115
        "$ref": "v1.PhotonPersistentDiskVolumeSource",
121 116
        "description": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine"
... ...
@@ -128,10 +50,14 @@ index a4b090a..6fc1e0a 100644
128 128
       "projected": {
129 129
        "$ref": "v1.ProjectedVolumeSource",
130 130
        "description": "Items for all in one resources secrets, configmaps, and downward API"
131
-@@ -5210,6 +5214,23 @@
132
-      }
133
-     }
134
-    },
131
+@@ -5206,6 +5210,23 @@
132
+      },
133
+      "fsType": {
134
+       "type": "string",
135
++      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
136
++     }
137
++    }
138
++   },
135 139
 +   "v1.CascadeDiskVolumeSource": {
136 140
 +    "id": "v1.CascadeDiskVolumeSource",
137 141
 +    "description": "Represents a Cascade persistent disk resource.",
... ...
@@ -145,17 +71,12 @@ index a4b090a..6fc1e0a 100644
145 145
 +     },
146 146
 +     "fsType": {
147 147
 +      "type": "string",
148
-+      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
149
-+     }
150
-+    }
151
-+   },
152
-    "v1.ProjectedVolumeSource": {
153
-     "id": "v1.ProjectedVolumeSource",
154
-     "description": "Represents a projected volume source",
155
-diff --git a/api/swagger-spec/apps_v1beta2.json b/api/swagger-spec/apps_v1beta2.json
156
-index b1fcb48..3193163 100644
157
-+++ b/api/swagger-spec/apps_v1beta2.json
148
+       "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
149
+      }
150
+     }
151
+diff -duNr --no-dereference kubernetes-old/api/swagger-spec/apps_v1beta2.json kubernetes/api/swagger-spec/apps_v1beta2.json
152
+--- kubernetes-old/api/swagger-spec/apps_v1beta2.json	2018-04-26 05:17:57.000000000 -0700
158 153
 @@ -6849,6 +6849,10 @@
159 154
        "$ref": "v1.PhotonPersistentDiskVolumeSource",
160 155
        "description": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine"
... ...
@@ -167,10 +88,14 @@ index b1fcb48..3193163 100644
167 167
       "projected": {
168 168
        "$ref": "v1.ProjectedVolumeSource",
169 169
        "description": "Items for all in one resources secrets, configmaps, and downward API"
170
-@@ -7576,6 +7580,23 @@
171
-      }
172
-     }
173
-    },
170
+@@ -7572,6 +7576,23 @@
171
+      },
172
+      "fsType": {
173
+       "type": "string",
174
++      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
175
++     }
176
++    }
177
++   },
174 178
 +   "v1.CascadeDiskVolumeSource": {
175 179
 +    "id": "v1.CascadeDiskVolumeSource",
176 180
 +    "description": "Represents a Cascade persistent disk resource.",
... ...
@@ -184,18 +109,13 @@ index b1fcb48..3193163 100644
184 184
 +     },
185 185
 +     "fsType": {
186 186
 +      "type": "string",
187
-+      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
188
-+     }
189
-+    }
190
-+   },
191
-    "v1.ProjectedVolumeSource": {
192
-     "id": "v1.ProjectedVolumeSource",
193
-     "description": "Represents a projected volume source",
194
-diff --git a/api/swagger-spec/batch_v1.json b/api/swagger-spec/batch_v1.json
195
-index b6d6cea..a6f3aae 100644
196
-+++ b/api/swagger-spec/batch_v1.json
197
-@@ -1823,6 +1823,10 @@
187
+       "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
188
+      }
189
+     }
190
+diff -duNr --no-dereference kubernetes-old/api/swagger-spec/batch_v1beta1.json kubernetes/api/swagger-spec/batch_v1beta1.json
191
+--- kubernetes-old/api/swagger-spec/batch_v1beta1.json	2018-04-26 05:17:57.000000000 -0700
192
+@@ -1878,6 +1878,10 @@
198 193
        "$ref": "v1.PhotonPersistentDiskVolumeSource",
199 194
        "description": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine"
200 195
       },
... ...
@@ -206,10 +126,14 @@ index b6d6cea..a6f3aae 100644
206 206
       "projected": {
207 207
        "$ref": "v1.ProjectedVolumeSource",
208 208
        "description": "Items for all in one resources secrets, configmaps, and downward API"
209
-@@ -2550,6 +2554,23 @@
210
-      }
211
-     }
212
-    },
209
+@@ -2601,6 +2605,23 @@
210
+      },
211
+      "fsType": {
212
+       "type": "string",
213
++      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
214
++     }
215
++    }
216
++   },
213 217
 +   "v1.CascadeDiskVolumeSource": {
214 218
 +    "id": "v1.CascadeDiskVolumeSource",
215 219
 +    "description": "Represents a Cascade persistent disk resource.",
... ...
@@ -223,18 +147,13 @@ index b6d6cea..a6f3aae 100644
223 223
 +     },
224 224
 +     "fsType": {
225 225
 +      "type": "string",
226
-+      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
227
-+     }
228
-+    }
229
-+   },
230
-    "v1.ProjectedVolumeSource": {
231
-     "id": "v1.ProjectedVolumeSource",
232
-     "description": "Represents a projected volume source",
233
-diff --git a/api/swagger-spec/batch_v1beta1.json b/api/swagger-spec/batch_v1beta1.json
234
-index 32cdfc0..9aa9744 100644
235
-+++ b/api/swagger-spec/batch_v1beta1.json
236
-@@ -1878,6 +1878,10 @@
226
+       "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
227
+      }
228
+     }
229
+diff -duNr --no-dereference kubernetes-old/api/swagger-spec/batch_v1.json kubernetes/api/swagger-spec/batch_v1.json
230
+--- kubernetes-old/api/swagger-spec/batch_v1.json	2018-04-26 05:17:57.000000000 -0700
231
+@@ -1823,6 +1823,10 @@
237 232
        "$ref": "v1.PhotonPersistentDiskVolumeSource",
238 233
        "description": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine"
239 234
       },
... ...
@@ -245,10 +164,14 @@ index 32cdfc0..9aa9744 100644
245 245
       "projected": {
246 246
        "$ref": "v1.ProjectedVolumeSource",
247 247
        "description": "Items for all in one resources secrets, configmaps, and downward API"
248
-@@ -2605,6 +2609,23 @@
249
-      }
250
-     }
251
-    },
248
+@@ -2546,6 +2550,23 @@
249
+      },
250
+      "fsType": {
251
+       "type": "string",
252
++      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
253
++     }
254
++    }
255
++   },
252 256
 +   "v1.CascadeDiskVolumeSource": {
253 257
 +    "id": "v1.CascadeDiskVolumeSource",
254 258
 +    "description": "Represents a Cascade persistent disk resource.",
... ...
@@ -262,17 +185,12 @@ index 32cdfc0..9aa9744 100644
262 262
 +     },
263 263
 +     "fsType": {
264 264
 +      "type": "string",
265
-+      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
266
-+     }
267
-+    }
268
-+   },
269
-    "v1.ProjectedVolumeSource": {
270
-     "id": "v1.ProjectedVolumeSource",
271
-     "description": "Represents a projected volume source",
272
-diff --git a/api/swagger-spec/batch_v2alpha1.json b/api/swagger-spec/batch_v2alpha1.json
273
-index 57acdbb..c8a6ff3 100644
274
-+++ b/api/swagger-spec/batch_v2alpha1.json
265
+       "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
266
+      }
267
+     }
268
+diff -duNr --no-dereference kubernetes-old/api/swagger-spec/batch_v2alpha1.json kubernetes/api/swagger-spec/batch_v2alpha1.json
269
+--- kubernetes-old/api/swagger-spec/batch_v2alpha1.json	2018-04-26 05:17:57.000000000 -0700
275 270
 @@ -1893,6 +1893,10 @@
276 271
       "storageos": {
277 272
        "$ref": "v1.StorageOSVolumeSource",
... ...
@@ -308,10 +226,9 @@ index 57acdbb..c8a6ff3 100644
308 308
     "v1.Container": {
309 309
      "id": "v1.Container",
310 310
      "description": "A single application container that you want to run within a pod.",
311
-diff --git a/api/swagger-spec/extensions_v1beta1.json b/api/swagger-spec/extensions_v1beta1.json
312
-index 6d2e049..66b6632 100644
313
-+++ b/api/swagger-spec/extensions_v1beta1.json
311
+diff -duNr --no-dereference kubernetes-old/api/swagger-spec/extensions_v1beta1.json kubernetes/api/swagger-spec/extensions_v1beta1.json
312
+--- kubernetes-old/api/swagger-spec/extensions_v1beta1.json	2018-04-26 05:17:57.000000000 -0700
314 313
 @@ -7506,6 +7506,10 @@
315 314
       "storageos": {
316 315
        "$ref": "v1.StorageOSVolumeSource",
... ...
@@ -323,10 +240,14 @@ index 6d2e049..66b6632 100644
323 323
       }
324 324
      }
325 325
     },
326
-@@ -8218,6 +8222,23 @@
327
-      }
328
-     }
329
-    },
326
+@@ -8214,6 +8218,23 @@
327
+      },
328
+      "fsType": {
329
+       "type": "string",
330
++      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
331
++     }
332
++    }
333
++   },
330 334
 +   "v1.CascadeDiskVolumeSource": {
331 335
 +    "id": "v1.CascadeDiskVolumeSource",
332 336
 +    "description": "Represents a Cascade persistent disk resource.",
... ...
@@ -340,17 +261,12 @@ index 6d2e049..66b6632 100644
340 340
 +     },
341 341
 +     "fsType": {
342 342
 +      "type": "string",
343
-+      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
344
-+     }
345
-+    }
346
-+   },
347
-    "v1.ProjectedVolumeSource": {
348
-     "id": "v1.ProjectedVolumeSource",
349
-     "description": "Represents a projected volume source",
350
-diff --git a/api/swagger-spec/settings.k8s.io_v1alpha1.json b/api/swagger-spec/settings.k8s.io_v1alpha1.json
351
-index d4427ba..6ad2a97 100644
352
-+++ b/api/swagger-spec/settings.k8s.io_v1alpha1.json
343
+       "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
344
+      }
345
+     }
346
+diff -duNr --no-dereference kubernetes-old/api/swagger-spec/settings.k8s.io_v1alpha1.json kubernetes/api/swagger-spec/settings.k8s.io_v1alpha1.json
347
+--- kubernetes-old/api/swagger-spec/settings.k8s.io_v1alpha1.json	2018-04-26 05:17:57.000000000 -0700
353 348
 @@ -1676,6 +1676,10 @@
354 349
       "storageos": {
355 350
        "$ref": "v1.StorageOSVolumeSource",
... ...
@@ -362,10 +278,14 @@ index d4427ba..6ad2a97 100644
362 362
       }
363 363
      }
364 364
     },
365
-@@ -2350,6 +2354,23 @@
366
-      }
367
-     }
368
-    },
365
+@@ -2346,6 +2350,23 @@
366
+      },
367
+      "fsType": {
368
+       "type": "string",
369
++      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
370
++     }
371
++    }
372
++   },
369 373
 +   "v1.CascadeDiskVolumeSource": {
370 374
 +    "id": "v1.CascadeDiskVolumeSource",
371 375
 +    "description": "Represents a Cascade persistent disk resource.",
... ...
@@ -379,17 +299,12 @@ index d4427ba..6ad2a97 100644
379 379
 +     },
380 380
 +     "fsType": {
381 381
 +      "type": "string",
382
-+      "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
383
-+     }
384
-+    }
385
-+   },
386
-    "v1.ProjectedVolumeSource": {
387
-     "id": "v1.ProjectedVolumeSource",
388
-     "description": "Represents a projected volume source",
389
-diff --git a/api/swagger-spec/v1.json b/api/swagger-spec/v1.json
390
-index 3f1198e..dbd57f0 100644
391
-+++ b/api/swagger-spec/v1.json
382
+       "description": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified."
383
+      }
384
+     }
385
+diff -duNr --no-dereference kubernetes-old/api/swagger-spec/v1.json kubernetes/api/swagger-spec/v1.json
386
+--- kubernetes-old/api/swagger-spec/v1.json	2018-04-26 05:17:57.000000000 -0700
392 387
 @@ -19310,6 +19310,10 @@
393 388
        "$ref": "v1.PhotonPersistentDiskVolumeSource",
394 389
        "description": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine"
... ...
@@ -436,11 +351,10 @@ index 3f1198e..dbd57f0 100644
436 436
       }
437 437
      }
438 438
     },
439
-diff --git a/cmd/kube-controller-manager/app/BUILD b/cmd/kube-controller-manager/app/BUILD
440
-index a3f98b1..3410214 100644
441
-+++ b/cmd/kube-controller-manager/app/BUILD
442
-@@ -88,6 +88,7 @@ go_library(
439
+diff -duNr --no-dereference kubernetes-old/cmd/kube-controller-manager/app/BUILD kubernetes/cmd/kube-controller-manager/app/BUILD
440
+--- kubernetes-old/cmd/kube-controller-manager/app/BUILD	2018-04-26 05:17:57.000000000 -0700
441
+@@ -88,6 +88,7 @@
443 442
          "//pkg/volume/aws_ebs:go_default_library",
444 443
          "//pkg/volume/azure_dd:go_default_library",
445 444
          "//pkg/volume/azure_file:go_default_library",
... ...
@@ -448,11 +362,10 @@ index a3f98b1..3410214 100644
448 448
          "//pkg/volume/cinder:go_default_library",
449 449
          "//pkg/volume/csi:go_default_library",
450 450
          "//pkg/volume/fc:go_default_library",
451
-diff --git a/cmd/kube-controller-manager/app/plugins.go b/cmd/kube-controller-manager/app/plugins.go
452
-index 42034d5..e729785 100644
453
-+++ b/cmd/kube-controller-manager/app/plugins.go
454
-@@ -34,6 +34,7 @@ import (
451
+diff -duNr --no-dereference kubernetes-old/cmd/kube-controller-manager/app/plugins.go kubernetes/cmd/kube-controller-manager/app/plugins.go
452
+--- kubernetes-old/cmd/kube-controller-manager/app/plugins.go	2018-04-26 05:17:57.000000000 -0700
453
+@@ -34,6 +34,7 @@
455 454
  	"k8s.io/kubernetes/pkg/volume/aws_ebs"
456 455
  	"k8s.io/kubernetes/pkg/volume/azure_dd"
457 456
  	"k8s.io/kubernetes/pkg/volume/azure_file"
... ...
@@ -460,7 +373,7 @@ index 42034d5..e729785 100644
460 460
  	"k8s.io/kubernetes/pkg/volume/cinder"
461 461
  	"k8s.io/kubernetes/pkg/volume/csi"
462 462
  	"k8s.io/kubernetes/pkg/volume/fc"
463
-@@ -77,6 +78,7 @@ func ProbeAttachableVolumePlugins() []volume.VolumePlugin {
463
+@@ -77,6 +78,7 @@
464 464
  	allPlugins = append(allPlugins, fc.ProbeVolumePlugins()...)
465 465
  	allPlugins = append(allPlugins, iscsi.ProbeVolumePlugins()...)
466 466
  	allPlugins = append(allPlugins, rbd.ProbeVolumePlugins()...)
... ...
@@ -468,7 +381,7 @@ index 42034d5..e729785 100644
468 468
  	if utilfeature.DefaultFeatureGate.Enabled(features.CSIPersistentVolume) {
469 469
  		allPlugins = append(allPlugins, csi.ProbeVolumePlugins()...)
470 470
  	}
471
-@@ -107,6 +109,7 @@ func ProbeExpandableVolumePlugins(config componentconfig.VolumeConfiguration) []
471
+@@ -107,6 +109,7 @@
472 472
  	allPlugins = append(allPlugins, scaleio.ProbeVolumePlugins()...)
473 473
  	allPlugins = append(allPlugins, storageos.ProbeVolumePlugins()...)
474 474
  	allPlugins = append(allPlugins, fc.ProbeVolumePlugins()...)
... ...
@@ -476,7 +389,7 @@ index 42034d5..e729785 100644
476 476
  	return allPlugins
477 477
  }
478 478
  
479
-@@ -163,6 +166,7 @@ func ProbeControllerVolumePlugins(cloud cloudprovider.Interface, config componen
479
+@@ -163,6 +166,7 @@
480 480
  	allPlugins = append(allPlugins, vsphere_volume.ProbeVolumePlugins()...)
481 481
  	allPlugins = append(allPlugins, azure_dd.ProbeVolumePlugins()...)
482 482
  	allPlugins = append(allPlugins, photon_pd.ProbeVolumePlugins()...)
... ...
@@ -484,11 +397,10 @@ index 42034d5..e729785 100644
484 484
  
485 485
  	return allPlugins
486 486
  }
487
-diff --git a/cmd/kubelet/app/BUILD b/cmd/kubelet/app/BUILD
488
-index cbfb90f..6264d0c 100644
489
-+++ b/cmd/kubelet/app/BUILD
490
-@@ -117,6 +117,7 @@ go_library(
487
+diff -duNr --no-dereference kubernetes-old/cmd/kubelet/app/BUILD kubernetes/cmd/kubelet/app/BUILD
488
+--- kubernetes-old/cmd/kubelet/app/BUILD	2018-04-26 05:17:57.000000000 -0700
489
+@@ -117,6 +117,7 @@
491 490
          "//pkg/volume/aws_ebs:go_default_library",
492 491
          "//pkg/volume/azure_dd:go_default_library",
493 492
          "//pkg/volume/azure_file:go_default_library",
... ...
@@ -496,11 +408,10 @@ index cbfb90f..6264d0c 100644
496 496
          "//pkg/volume/cephfs:go_default_library",
497 497
          "//pkg/volume/cinder:go_default_library",
498 498
          "//pkg/volume/configmap:go_default_library",
499
-diff --git a/cmd/kubelet/app/plugins.go b/cmd/kubelet/app/plugins.go
500
-index ef41bb8..c9806f7 100644
501
-+++ b/cmd/kubelet/app/plugins.go
502
-@@ -32,6 +32,7 @@ import (
499
+diff -duNr --no-dereference kubernetes-old/cmd/kubelet/app/plugins.go kubernetes/cmd/kubelet/app/plugins.go
500
+--- kubernetes-old/cmd/kubelet/app/plugins.go	2018-04-26 05:17:57.000000000 -0700
501
+@@ -32,6 +32,7 @@
503 502
  	"k8s.io/kubernetes/pkg/volume/aws_ebs"
504 503
  	"k8s.io/kubernetes/pkg/volume/azure_dd"
505 504
  	"k8s.io/kubernetes/pkg/volume/azure_file"
... ...
@@ -508,7 +419,7 @@ index ef41bb8..c9806f7 100644
508 508
  	"k8s.io/kubernetes/pkg/volume/cephfs"
509 509
  	"k8s.io/kubernetes/pkg/volume/cinder"
510 510
  	"k8s.io/kubernetes/pkg/volume/configmap"
511
-@@ -100,6 +101,7 @@ func ProbeVolumePlugins() []volume.VolumePlugin {
511
+@@ -100,6 +101,7 @@
512 512
  	allPlugins = append(allPlugins, scaleio.ProbeVolumePlugins()...)
513 513
  	allPlugins = append(allPlugins, local.ProbeVolumePlugins()...)
514 514
  	allPlugins = append(allPlugins, storageos.ProbeVolumePlugins()...)
... ...
@@ -516,11 +427,10 @@ index ef41bb8..c9806f7 100644
516 516
  	if utilfeature.DefaultFeatureGate.Enabled(features.CSIPersistentVolume) {
517 517
  		allPlugins = append(allPlugins, csi.ProbeVolumePlugins()...)
518 518
  	}
519
-diff --git a/pkg/apis/core/types.go b/pkg/apis/core/types.go
520
-index 8b183de..cfe4c85 100644
521
-+++ b/pkg/apis/core/types.go
522
-@@ -316,6 +316,8 @@ type VolumeSource struct {
519
+diff -duNr --no-dereference kubernetes-old/pkg/apis/core/types.go kubernetes/pkg/apis/core/types.go
520
+--- kubernetes-old/pkg/apis/core/types.go	2018-04-26 05:17:57.000000000 -0700
521
+@@ -316,6 +316,8 @@
523 522
  	// StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod
524 523
  	// +optional
525 524
  	StorageOS *StorageOSVolumeSource
... ...
@@ -529,7 +439,7 @@ index 8b183de..cfe4c85 100644
529 529
  }
530 530
  
531 531
  // Similar to VolumeSource but meant for the administrator who creates PVs.
532
-@@ -394,6 +396,8 @@ type PersistentVolumeSource struct {
532
+@@ -394,6 +396,8 @@
533 533
  	// CSI (Container Storage Interface) represents storage that handled by an external CSI driver (Beta feature).
534 534
  	// +optional
535 535
  	CSI *CSIPersistentVolumeSource
... ...
@@ -538,7 +448,7 @@ index 8b183de..cfe4c85 100644
538 538
  }
539 539
  
540 540
  type PersistentVolumeClaimVolumeSource struct {
541
-@@ -1510,6 +1514,16 @@ type StorageOSPersistentVolumeSource struct {
541
+@@ -1510,6 +1514,16 @@
542 542
  	SecretRef *ObjectReference
543 543
  }
544 544
  
... ...
@@ -555,11 +465,10 @@ index 8b183de..cfe4c85 100644
555 555
  // Adapts a ConfigMap into a volume.
556 556
  //
557 557
  // The contents of the target ConfigMap's Data field will be presented in a
558
-diff --git a/pkg/apis/core/validation/validation.go b/pkg/apis/core/validation/validation.go
559
-index b66fd6f..7f0e6bd 100644
560
-+++ b/pkg/apis/core/validation/validation.go
561
-@@ -664,6 +664,14 @@ func validateVolumeSource(source *core.VolumeSource, fldPath *field.Path, volNam
558
+diff -duNr --no-dereference kubernetes-old/pkg/apis/core/validation/validation.go kubernetes/pkg/apis/core/validation/validation.go
559
+--- kubernetes-old/pkg/apis/core/validation/validation.go	2018-04-26 05:17:57.000000000 -0700
560
+@@ -664,6 +664,14 @@
562 561
  			allErrs = append(allErrs, validateScaleIOVolumeSource(source.ScaleIO, fldPath.Child("scaleIO"))...)
563 562
  		}
564 563
  	}
... ...
@@ -574,7 +483,7 @@ index b66fd6f..7f0e6bd 100644
574 574
  
575 575
  	if numVolumes == 0 {
576 576
  		allErrs = append(allErrs, field.Required(fldPath, "must specify a volume type"))
577
-@@ -1494,6 +1502,14 @@ func validateCSIPersistentVolumeSource(csi *core.CSIPersistentVolumeSource, fldP
577
+@@ -1494,6 +1502,14 @@
578 578
  	return allErrs
579 579
  }
580 580
  
... ...
@@ -589,7 +498,7 @@ index b66fd6f..7f0e6bd 100644
589 589
  // ValidatePersistentVolumeName checks that a name is appropriate for a
590 590
  // PersistentVolumeName object.
591 591
  var ValidatePersistentVolumeName = NameIsDNSSubdomain
592
-@@ -1737,6 +1753,15 @@ func ValidatePersistentVolume(pv *core.PersistentVolume) field.ErrorList {
592
+@@ -1737,6 +1753,15 @@
593 593
  		}
594 594
  	}
595 595
  
... ...
@@ -605,7 +514,7 @@ index b66fd6f..7f0e6bd 100644
605 605
  	if numVolumes == 0 {
606 606
  		allErrs = append(allErrs, field.Required(specPath, "must specify a volume type"))
607 607
  	}
608
-@@ -4370,7 +4395,7 @@ func ValidateSecret(secret *core.Secret) field.ErrorList {
608
+@@ -4370,7 +4395,7 @@
609 609
  			allErrs = append(allErrs, field.Required(field.NewPath("metadata", "annotations").Key(core.ServiceAccountNameKey), ""))
610 610
  		}
611 611
  	case core.SecretTypeOpaque, "":
... ...
@@ -614,7 +523,7 @@ index b66fd6f..7f0e6bd 100644
614 614
  	case core.SecretTypeDockercfg:
615 615
  		dockercfgBytes, exists := secret.Data[core.DockerConfigKey]
616 616
  		if !exists {
617
-@@ -4416,7 +4441,7 @@ func ValidateSecret(secret *core.Secret) field.ErrorList {
617
+@@ -4416,7 +4441,7 @@
618 618
  		if _, exists := secret.Data[core.TLSPrivateKeyKey]; !exists {
619 619
  			allErrs = append(allErrs, field.Required(dataPath.Key(core.TLSPrivateKeyKey), ""))
620 620
  		}
... ...
@@ -623,11 +532,10 @@ index b66fd6f..7f0e6bd 100644
623 623
  	default:
624 624
  		// no-op
625 625
  	}
626
-diff --git a/pkg/apis/extensions/types.go b/pkg/apis/extensions/types.go
627
-index e369728..a5406ab 100644
628
-+++ b/pkg/apis/extensions/types.go
629
-@@ -925,6 +925,7 @@ var (
626
+diff -duNr --no-dereference kubernetes-old/pkg/apis/extensions/types.go kubernetes/pkg/apis/extensions/types.go
627
+--- kubernetes-old/pkg/apis/extensions/types.go	2018-04-26 05:17:57.000000000 -0700
628
+@@ -925,6 +925,7 @@
630 629
  	PortworxVolume        FSType = "portworxVolume"
631 630
  	ScaleIO               FSType = "scaleIO"
632 631
  	CSI                   FSType = "csi"
... ...
@@ -635,11 +543,10 @@ index e369728..a5406ab 100644
635 635
  	All                   FSType = "*"
636 636
  )
637 637
  
638
-diff --git a/pkg/cloudprovider/providers/BUILD b/pkg/cloudprovider/providers/BUILD
639
-index aeccfa1..4313576 100644
640
-+++ b/pkg/cloudprovider/providers/BUILD
641
-@@ -12,6 +12,7 @@ go_library(
638
+diff -duNr --no-dereference kubernetes-old/pkg/cloudprovider/providers/BUILD kubernetes/pkg/cloudprovider/providers/BUILD
639
+--- kubernetes-old/pkg/cloudprovider/providers/BUILD	2018-04-26 05:17:57.000000000 -0700
640
+@@ -12,6 +12,7 @@
642 641
      deps = [
643 642
          "//pkg/cloudprovider/providers/aws:go_default_library",
644 643
          "//pkg/cloudprovider/providers/azure:go_default_library",
... ...
@@ -647,7 +554,7 @@ index aeccfa1..4313576 100644
647 647
          "//pkg/cloudprovider/providers/cloudstack:go_default_library",
648 648
          "//pkg/cloudprovider/providers/gce:go_default_library",
649 649
          "//pkg/cloudprovider/providers/openstack:go_default_library",
650
-@@ -34,6 +35,7 @@ filegroup(
650
+@@ -34,6 +35,7 @@
651 651
          ":package-srcs",
652 652
          "//pkg/cloudprovider/providers/aws:all-srcs",
653 653
          "//pkg/cloudprovider/providers/azure:all-srcs",
... ...
@@ -655,82 +562,9 @@ index aeccfa1..4313576 100644
655 655
          "//pkg/cloudprovider/providers/cloudstack:all-srcs",
656 656
          "//pkg/cloudprovider/providers/fake:all-srcs",
657 657
          "//pkg/cloudprovider/providers/gce:all-srcs",
658
-diff --git a/pkg/cloudprovider/providers/cascade/BUILD b/pkg/cloudprovider/providers/cascade/BUILD
659
-new file mode 100644
660
-index 0000000..4089166
661
-+++ b/pkg/cloudprovider/providers/cascade/BUILD
662
-@@ -0,0 +1,56 @@
663
-+package(default_visibility = ["//visibility:public"])
664
-+
665
-+load(
666
-+    "@io_bazel_rules_go//go:def.bzl",
667
-+    "go_library",
668
-+)
669
-+
670
-+go_library(
671
-+    name = "go_default_library",
672
-+    srcs = [
673
-+        "apitypes.go",
674
-+        "auth.go",
675
-+        "cascade.go",
676
-+        "cascade_disks.go",
677
-+        "cascade_instances.go",
678
-+        "cascade_loadbalancer.go",
679
-+        "client.go",
680
-+        "oidcclient.go",
681
-+        "restclient.go",
682
-+        "utils.go"
683
-+        ],
684
-+    deps = [
685
-+        "//pkg/api/v1/helper:go_default_library",
686
-+        "//pkg/cloudprovider:go_default_library",
687
-+        "//pkg/controller:go_default_library",
688
-+        "//vendor/github.com/golang/glog:go_default_library",
689
-+        "//vendor/gopkg.in/gcfg.v1:go_default_library",
690
-+        "//vendor/k8s.io/api/core/v1:go_default_library",
691
-+        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
692
-+    ],
693
-+)
694
-+
695
-+go_test(
696
-+    name = "go_default_test",
697
-+    srcs = [
698
-+        "cascade_instances_test.go",
699
-+    ],
700
-+    embed = [":go_default_library"],
701
-+    deps = [
702
-+        "//vendor/k8s.io/api/core/v1:go_default_library",
703
-+        "//vendor/github.com/stretchr/testify/assert:go_default_library",
704
-+    ],
705
-+)
706
-+
707
-+filegroup(
708
-+    name = "package-srcs",
709
-+    srcs = glob(["**"]),
710
-+    tags = ["automanaged"],
711
-+    visibility = ["//visibility:private"],
712
-+)
713
-+
714
-+filegroup(
715
-+    name = "all-srcs",
716
-+    srcs = [":package-srcs"],
717
-+    tags = ["automanaged"],
718
-+)
719
-diff --git a/pkg/cloudprovider/providers/cascade/OWNERS b/pkg/cloudprovider/providers/cascade/OWNERS
720
-new file mode 100644
721
-index 0000000..70efc9d
722
-+++ b/pkg/cloudprovider/providers/cascade/OWNERS
723
-@@ -0,0 +1,3 @@
724
-+maintainers:
725
-+- ashokc
726
-+- ysheng
727
-diff --git a/pkg/cloudprovider/providers/cascade/apitypes.go b/pkg/cloudprovider/providers/cascade/apitypes.go
728
-new file mode 100644
729
-index 0000000..fba1b3b
730
-+++ b/pkg/cloudprovider/providers/cascade/apitypes.go
658
+diff -duNr --no-dereference kubernetes-old/pkg/cloudprovider/providers/cascade/apitypes.go kubernetes/pkg/cloudprovider/providers/cascade/apitypes.go
659
+--- kubernetes-old/pkg/cloudprovider/providers/cascade/apitypes.go	1969-12-31 16:00:00.000000000 -0800
731 660
 @@ -0,0 +1,229 @@
732 661
 +package cascade
733 662
 +
... ...
@@ -961,11 +795,9 @@ index 0000000..fba1b3b
961 961
 +type LoadBalancerVMUpdate struct {
962 962
 +	VMIds []*LoadBalancerVM `json:"vmIds"`
963 963
 +}
964
-diff --git a/pkg/cloudprovider/providers/cascade/auth.go b/pkg/cloudprovider/providers/cascade/auth.go
965
-new file mode 100644
966
-index 0000000..fc92377
967
-+++ b/pkg/cloudprovider/providers/cascade/auth.go
964
+diff -duNr --no-dereference kubernetes-old/pkg/cloudprovider/providers/cascade/auth.go kubernetes/pkg/cloudprovider/providers/cascade/auth.go
965
+--- kubernetes-old/pkg/cloudprovider/providers/cascade/auth.go	1969-12-31 16:00:00.000000000 -0800
968 966
 @@ -0,0 +1,145 @@
969 967
 +package cascade
970 968
 +
... ...
@@ -1113,231 +945,69 @@ index 0000000..fc92377
1113 1113
 +	return pwd, nil
1114 1114
 +}
1115 1115
 \ No newline at end of file
1116
-diff --git a/pkg/cloudprovider/providers/cascade/cascade.go b/pkg/cloudprovider/providers/cascade/cascade.go
1117
-new file mode 100644
1118
-index 0000000..e7cf2fc
1119
-+++ b/pkg/cloudprovider/providers/cascade/cascade.go
1120
-@@ -0,0 +1,214 @@
1121
-+// The use of Cascade cloud provider requires the kubelet, kube-apiserver, and kube-controller-manager to be started
1122
-+// with config flag: '--cloud-provider=cascade --cloud-config=[path_to_config_file]'.
1123
-+package cascade
1116
+diff -duNr --no-dereference kubernetes-old/pkg/cloudprovider/providers/cascade/BUILD kubernetes/pkg/cloudprovider/providers/cascade/BUILD
1117
+--- kubernetes-old/pkg/cloudprovider/providers/cascade/BUILD	1969-12-31 16:00:00.000000000 -0800
1118
+@@ -0,0 +1,56 @@
1119
++package(default_visibility = ["//visibility:public"])
1124 1120
 +
1125
-+import (
1126
-+	"context"
1127
-+	"errors"
1128
-+	"fmt"
1129
-+	"github.com/golang/glog"
1130
-+	"gopkg.in/gcfg.v1"
1131
-+	"io"
1132
-+	k8stypes "k8s.io/apimachinery/pkg/types"
1133
-+	"k8s.io/kubernetes/pkg/cloudprovider"
1134
-+	"k8s.io/kubernetes/pkg/controller"
1135
-+	"os"
1136
-+	"strings"
1121
++load(
1122
++    "@io_bazel_rules_go//go:def.bzl",
1123
++    "go_library",
1137 1124
 +)
1138 1125
 +
1139
-+const (
1140
-+	ProviderName = "vke"
1141
-+	DiskSpecKind = "persistent-disk"
1142
-+	MasterPrefix = "master"
1126
++go_library(
1127
++    name = "go_default_library",
1128
++    srcs = [
1129
++        "apitypes.go",
1130
++        "auth.go",
1131
++        "cascade.go",
1132
++        "cascade_disks.go",
1133
++        "cascade_instances.go",
1134
++        "cascade_loadbalancer.go",
1135
++        "client.go",
1136
++        "oidcclient.go",
1137
++        "restclient.go",
1138
++        "utils.go"
1139
++        ],
1140
++    deps = [
1141
++        "//pkg/api/v1/helper:go_default_library",
1142
++        "//pkg/cloudprovider:go_default_library",
1143
++        "//pkg/controller:go_default_library",
1144
++        "//vendor/github.com/golang/glog:go_default_library",
1145
++        "//vendor/gopkg.in/gcfg.v1:go_default_library",
1146
++        "//vendor/k8s.io/api/core/v1:go_default_library",
1147
++        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
1148
++    ],
1143 1149
 +)
1144 1150
 +
1145
-+// CascadeCloud is an implementation of the cloud provider interface for Cascade Controller.
1146
-+type CascadeCloud struct {
1147
-+	cfg *CascadeConfig
1148
-+	// Authentication client to get token for Cascade API calls
1149
-+	authClient *AuthClient
1150
-+	// API Client to make Cascade API calls
1151
-+	apiClient *Client
1152
-+	// local $HOSTNAME
1153
-+	localHostname string
1154
-+	// hostname from K8S, could be overridden
1155
-+	localK8sHostname string
1156
-+}
1157
-+
1158
-+// CascadeCloud represents Cascade cloud provider's configuration.
1159
-+type CascadeConfig struct {
1160
-+	Global struct {
1161
-+		// the Cascade Controller endpoint
1162
-+		CloudTarget string `gcfg:"target"`
1163
-+		// Cascade Controller tenantName name
1164
-+		TenantName string `gcfg:"tenantName"`
1165
-+		// Cascade Controller cluster ID
1166
-+		ClusterID string `gcfg:"clusterID"`
1167
-+		// Authentication server endpoint for Cascade Controller
1168
-+		AuthEndpoint string `gcfg:"authEndpoint"`
1169
-+		// Lightwave domain name for the node
1170
-+		DomainName string `gcfg:"domainName"`
1171
-+		// DNS name of the node.
1172
-+		DNSName string `gcfg:"dnsName"`
1173
-+		// Region in which the cluster is in
1174
-+		Region string `gcfg:"region"`
1175
-+		// Availability zone in which the cluster is in
1176
-+		Zone string `gcfg:"zone"`
1177
-+		// IP address of the node.
1178
-+		IPAddress string `gcfg:"ipAddress"`
1179
-+	}
1180
-+}
1181
-+
1182
-+// Disks is interface for manipulation with Cascade Controller Persistent Disks.
1183
-+type Disks interface {
1184
-+	// AttachDisk attaches given disk to given node. Current node
1185
-+	// is used when nodeName is empty string.
1186
-+	AttachDisk(diskID string, nodeName k8stypes.NodeName) (string, error)
1187
-+
1188
-+	// DetachDisk detaches given disk to given node. Current node
1189
-+	// is used when nodeName is empty string.
1190
-+	DetachDisk(diskID string, nodeName k8stypes.NodeName) error
1191
-+
1192
-+	// DiskIsAttached checks if a disk is attached to the given node.
1193
-+	DiskIsAttached(diskID string, nodeName k8stypes.NodeName) (bool, error)
1194
-+
1195
-+	// DisksAreAttached is a batch function to check if a list of disks are attached
1196
-+	// to the node with the specified NodeName.
1197
-+	DisksAreAttached(diskID []string, nodeName k8stypes.NodeName) (map[string]bool, error)
1198
-+
1199
-+	// CreateDisk creates a new PD with given properties.
1200
-+	CreateDisk(volumeOptions *VolumeOptions) (diskID string, err error)
1201
-+
1202
-+	// DeleteDisk deletes PD.
1203
-+	DeleteDisk(diskID string) error
1204
-+
1205
-+	// Get labels to apply to volume on creation.
1206
-+	GetVolumeLabels(diskID string) (map[string]string, error)
1207
-+}
1208
-+
1209
-+// VolumeOptions specifies capacity, tags, name and flavorID for a volume.
1210
-+type VolumeOptions struct {
1211
-+	CapacityGB int
1212
-+	Tags       map[string]string
1213
-+	Name       string
1214
-+	Flavor     string
1215
-+}
1216
-+
1217
-+func readConfig(config io.Reader) (*CascadeConfig, error) {
1218
-+	if config == nil {
1219
-+		err := fmt.Errorf("Cascade Cloud Provider: config file is missing. Please restart with " +
1220
-+			"--cloud-provider=cascade --cloud-config=[path_to_config_file]")
1221
-+		return nil, err
1222
-+	}
1223
-+
1224
-+	var cfg CascadeConfig
1225
-+	err := gcfg.ReadInto(&cfg, config)
1226
-+	return &cfg, err
1227
-+}
1228
-+
1229
-+func init() {
1230
-+	cloudprovider.RegisterCloudProvider(ProviderName, func(config io.Reader) (cloudprovider.Interface, error) {
1231
-+		cfg, err := readConfig(config)
1232
-+		if err != nil {
1233
-+			glog.Errorf("Cascade Cloud Provider: failed to read in cloud provider config file. Error[%v]", err)
1234
-+			return nil, err
1235
-+		}
1236
-+		return newCascadeCloud(cfg)
1237
-+	})
1238
-+}
1239
-+
1240
-+func newCascadeCloud(cfg *CascadeConfig) (*CascadeCloud, error) {
1241
-+	if len(cfg.Global.CloudTarget) == 0 {
1242
-+		return nil, fmt.Errorf("Cascade Controller endpoint was not specified.")
1243
-+	}
1244
-+
1245
-+	// Get local hostname
1246
-+	hostname, err := os.Hostname()
1247
-+	if err != nil {
1248
-+		glog.Errorf("Cascade Cloud Provider: get hostname failed. Error[%v]", err)
1249
-+		return nil, err
1250
-+	}
1251
-+
1252
-+	cc := CascadeCloud{
1253
-+		cfg:              cfg,
1254
-+		localHostname:    hostname,
1255
-+		localK8sHostname: "",
1256
-+	}
1257
-+
1258
-+	// Instantiate the auth and API clients only on the master nodes. Kubelets running on the workers don't need them as
1259
-+	// they are used primarily for making API calls to Cascade.
1260
-+	if strings.HasPrefix(hostname, MasterPrefix) {
1261
-+		if cc.authClient, err = NewAuthClient(cfg); err != nil {
1262
-+			return nil, err
1263
-+		}
1264
-+
1265
-+		if cc.apiClient, err = NewClient(cfg, cc.authClient); err != nil {
1266
-+			return nil, err
1267
-+		}
1268
-+	}
1269
-+
1270
-+	return &cc, nil
1271
-+}
1272
-+
1273
-+// Initialize passes a Kubernetes clientBuilder interface to the cloud provider
1274
-+func (cc *CascadeCloud) Initialize(clientBuilder controller.ControllerClientBuilder) {}
1275
-+
1276
-+// Instances returns an implementation of Instances for Cascade Controller.
1277
-+func (cc *CascadeCloud) Instances() (cloudprovider.Instances, bool) {
1278
-+	return cc, true
1279
-+}
1280
-+
1281
-+func (cc *CascadeCloud) Clusters() (cloudprovider.Clusters, bool) {
1282
-+	return nil, true
1283
-+}
1284
-+
1285
-+// ProviderName returns the cloud provider ID.
1286
-+func (cc *CascadeCloud) ProviderName() string {
1287
-+	return ProviderName
1288
-+}
1289
-+
1290
-+// LoadBalancer returns an implementation of LoadBalancer for Cascade Controller.
1291
-+func (cc *CascadeCloud) LoadBalancer() (cloudprovider.LoadBalancer, bool) {
1292
-+	return cc, true
1293
-+}
1294
-+
1295
-+// Zones returns an implementation of Zones for Cascade Controller.
1296
-+func (cc *CascadeCloud) Zones() (cloudprovider.Zones, bool) {
1297
-+	return cc, true
1298
-+}
1299
-+
1300
-+func (cc *CascadeCloud) GetZone(ctx context.Context) (cloudprovider.Zone, error) {
1301
-+	return cloudprovider.Zone{
1302
-+		Region:        cc.cfg.Global.Region,
1303
-+		FailureDomain: cc.cfg.Global.Zone,
1304
-+	}, nil
1305
-+}
1306
-+
1307
-+// GetZoneByProviderID implements Zones.GetZoneByProviderID
1308
-+// This is particularly useful in external cloud providers where the kubelet
1309
-+// does not initialize node data.
1310
-+func (cc *CascadeCloud) GetZoneByProviderID(ctx context.Context, providerID string) (cloudprovider.Zone, error) {
1311
-+	return cloudprovider.Zone{}, errors.New("unimplemented")
1312
-+}
1313
-+
1314
-+// GetZoneByNodeName implements Zones.GetZoneByNodeName
1315
-+// This is particularly useful in external cloud providers where the kubelet
1316
-+// does not initialize node data.
1317
-+func (cc *CascadeCloud) GetZoneByNodeName(ctx context.Context, nodeName k8stypes.NodeName) (cloudprovider.Zone, error) {
1318
-+	return cloudprovider.Zone{}, errors.New("unimeplemented")
1319
-+}
1320
-+
1321
-+// Routes returns a false since the interface is not supported for Cascade controller.
1322
-+func (cc *CascadeCloud) Routes() (cloudprovider.Routes, bool) {
1323
-+	return nil, false
1324
-+}
1151
++go_test(
1152
++    name = "go_default_test",
1153
++    srcs = [
1154
++        "cascade_instances_test.go",
1155
++    ],
1156
++    embed = [":go_default_library"],
1157
++    deps = [
1158
++        "//vendor/k8s.io/api/core/v1:go_default_library",
1159
++        "//vendor/github.com/stretchr/testify/assert:go_default_library",
1160
++    ],
1161
++)
1325 1162
 +
1326
-+// ScrubDNS filters DNS settings for pods.
1327
-+func (cc *CascadeCloud) ScrubDNS(nameservers, searches []string) (nsOut, srchOut []string) {
1328
-+	return nameservers, searches
1329
-+}
1163
++filegroup(
1164
++    name = "package-srcs",
1165
++    srcs = glob(["**"]),
1166
++    tags = ["automanaged"],
1167
++    visibility = ["//visibility:private"],
1168
++)
1330 1169
 +
1331
-+// HasClusterID returns true if the cluster has a clusterID
1332
-+func (cc *CascadeCloud) HasClusterID() bool {
1333
-+	return true
1334
-+}
1335
-diff --git a/pkg/cloudprovider/providers/cascade/cascade_disks.go b/pkg/cloudprovider/providers/cascade/cascade_disks.go
1336
-new file mode 100644
1337
-index 0000000..8431004
1338
-+++ b/pkg/cloudprovider/providers/cascade/cascade_disks.go
1170
++filegroup(
1171
++    name = "all-srcs",
1172
++    srcs = [":package-srcs"],
1173
++    tags = ["automanaged"],
1174
++)
1175
+diff -duNr --no-dereference kubernetes-old/pkg/cloudprovider/providers/cascade/cascade_disks.go kubernetes/pkg/cloudprovider/providers/cascade/cascade_disks.go
1176
+--- kubernetes-old/pkg/cloudprovider/providers/cascade/cascade_disks.go	1969-12-31 16:00:00.000000000 -0800
1339 1177
 @@ -0,0 +1,227 @@
1340 1178
 +package cascade
1341 1179
 +
... ...
@@ -1566,11 +1236,227 @@ index 0000000..8431004
1566 1566
 +
1567 1567
 +	return labels, nil
1568 1568
 +}
1569
-diff --git a/pkg/cloudprovider/providers/cascade/cascade_instances.go b/pkg/cloudprovider/providers/cascade/cascade_instances.go
1570
-new file mode 100644
1571
-index 0000000..ee02e23
1572
-+++ b/pkg/cloudprovider/providers/cascade/cascade_instances.go
1569
+diff -duNr --no-dereference kubernetes-old/pkg/cloudprovider/providers/cascade/cascade.go kubernetes/pkg/cloudprovider/providers/cascade/cascade.go
1570
+--- kubernetes-old/pkg/cloudprovider/providers/cascade/cascade.go	1969-12-31 16:00:00.000000000 -0800
1571
+@@ -0,0 +1,214 @@
1572
++// The use of Cascade cloud provider requires the kubelet, kube-apiserver, and kube-controller-manager to be started
1573
++// with config flag: '--cloud-provider=cascade --cloud-config=[path_to_config_file]'.
1574
++package cascade
1575
++
1576
++import (
1577
++	"context"
1578
++	"errors"
1579
++	"fmt"
1580
++	"github.com/golang/glog"
1581
++	"gopkg.in/gcfg.v1"
1582
++	"io"
1583
++	k8stypes "k8s.io/apimachinery/pkg/types"
1584
++	"k8s.io/kubernetes/pkg/cloudprovider"
1585
++	"k8s.io/kubernetes/pkg/controller"
1586
++	"os"
1587
++	"strings"
1588
++)
1589
++
1590
++const (
1591
++	ProviderName = "vke"
1592
++	DiskSpecKind = "persistent-disk"
1593
++	MasterPrefix = "master"
1594
++)
1595
++
1596
++// CascadeCloud is an implementation of the cloud provider interface for Cascade Controller.
1597
++type CascadeCloud struct {
1598
++	cfg *CascadeConfig
1599
++	// Authentication client to get token for Cascade API calls
1600
++	authClient *AuthClient
1601
++	// API Client to make Cascade API calls
1602
++	apiClient *Client
1603
++	// local $HOSTNAME
1604
++	localHostname string
1605
++	// hostname from K8S, could be overridden
1606
++	localK8sHostname string
1607
++}
1608
++
1609
++// CascadeCloud represents Cascade cloud provider's configuration.
1610
++type CascadeConfig struct {
1611
++	Global struct {
1612
++		// the Cascade Controller endpoint
1613
++		CloudTarget string `gcfg:"target"`
1614
++		// Cascade Controller tenantName name
1615
++		TenantName string `gcfg:"tenantName"`
1616
++		// Cascade Controller cluster ID
1617
++		ClusterID string `gcfg:"clusterID"`
1618
++		// Authentication server endpoint for Cascade Controller
1619
++		AuthEndpoint string `gcfg:"authEndpoint"`
1620
++		// Lightwave domain name for the node
1621
++		DomainName string `gcfg:"domainName"`
1622
++		// DNS name of the node.
1623
++		DNSName string `gcfg:"dnsName"`
1624
++		// Region in which the cluster is in
1625
++		Region string `gcfg:"region"`
1626
++		// Availability zone in which the cluster is in
1627
++		Zone string `gcfg:"zone"`
1628
++		// IP address of the node.
1629
++		IPAddress string `gcfg:"ipAddress"`
1630
++	}
1631
++}
1632
++
1633
++// Disks is interface for manipulation with Cascade Controller Persistent Disks.
1634
++type Disks interface {
1635
++	// AttachDisk attaches given disk to given node. Current node
1636
++	// is used when nodeName is empty string.
1637
++	AttachDisk(diskID string, nodeName k8stypes.NodeName) (string, error)
1638
++
1639
++	// DetachDisk detaches given disk to given node. Current node
1640
++	// is used when nodeName is empty string.
1641
++	DetachDisk(diskID string, nodeName k8stypes.NodeName) error
1642
++
1643
++	// DiskIsAttached checks if a disk is attached to the given node.
1644
++	DiskIsAttached(diskID string, nodeName k8stypes.NodeName) (bool, error)
1645
++
1646
++	// DisksAreAttached is a batch function to check if a list of disks are attached
1647
++	// to the node with the specified NodeName.
1648
++	DisksAreAttached(diskID []string, nodeName k8stypes.NodeName) (map[string]bool, error)
1649
++
1650
++	// CreateDisk creates a new PD with given properties.
1651
++	CreateDisk(volumeOptions *VolumeOptions) (diskID string, err error)
1652
++
1653
++	// DeleteDisk deletes PD.
1654
++	DeleteDisk(diskID string) error
1655
++
1656
++	// Get labels to apply to volume on creation.
1657
++	GetVolumeLabels(diskID string) (map[string]string, error)
1658
++}
1659
++
1660
++// VolumeOptions specifies capacity, tags, name and flavorID for a volume.
1661
++type VolumeOptions struct {
1662
++	CapacityGB int
1663
++	Tags       map[string]string
1664
++	Name       string
1665
++	Flavor     string
1666
++}
1667
++
1668
++func readConfig(config io.Reader) (*CascadeConfig, error) {
1669
++	if config == nil {
1670
++		err := fmt.Errorf("Cascade Cloud Provider: config file is missing. Please restart with " +
1671
++			"--cloud-provider=cascade --cloud-config=[path_to_config_file]")
1672
++		return nil, err
1673
++	}
1674
++
1675
++	var cfg CascadeConfig
1676
++	err := gcfg.ReadInto(&cfg, config)
1677
++	return &cfg, err
1678
++}
1679
++
1680
++func init() {
1681
++	cloudprovider.RegisterCloudProvider(ProviderName, func(config io.Reader) (cloudprovider.Interface, error) {
1682
++		cfg, err := readConfig(config)
1683
++		if err != nil {
1684
++			glog.Errorf("Cascade Cloud Provider: failed to read in cloud provider config file. Error[%v]", err)
1685
++			return nil, err
1686
++		}
1687
++		return newCascadeCloud(cfg)
1688
++	})
1689
++}
1690
++
1691
++func newCascadeCloud(cfg *CascadeConfig) (*CascadeCloud, error) {
1692
++	if len(cfg.Global.CloudTarget) == 0 {
1693
++		return nil, fmt.Errorf("Cascade Controller endpoint was not specified.")
1694
++	}
1695
++
1696
++	// Get local hostname
1697
++	hostname, err := os.Hostname()
1698
++	if err != nil {
1699
++		glog.Errorf("Cascade Cloud Provider: get hostname failed. Error[%v]", err)
1700
++		return nil, err
1701
++	}
1702
++
1703
++	cc := CascadeCloud{
1704
++		cfg:              cfg,
1705
++		localHostname:    hostname,
1706
++		localK8sHostname: "",
1707
++	}
1708
++
1709
++	// Instantiate the auth and API clients only on the master nodes. Kubelets running on the workers don't need them as
1710
++	// they are used primarily for making API calls to Cascade.
1711
++	if strings.HasPrefix(hostname, MasterPrefix) {
1712
++		if cc.authClient, err = NewAuthClient(cfg); err != nil {
1713
++			return nil, err
1714
++		}
1715
++
1716
++		if cc.apiClient, err = NewClient(cfg, cc.authClient); err != nil {
1717
++			return nil, err
1718
++		}
1719
++	}
1720
++
1721
++	return &cc, nil
1722
++}
1723
++
1724
++// Initialize passes a Kubernetes clientBuilder interface to the cloud provider
1725
++func (cc *CascadeCloud) Initialize(clientBuilder controller.ControllerClientBuilder) {}
1726
++
1727
++// Instances returns an implementation of Instances for Cascade Controller.
1728
++func (cc *CascadeCloud) Instances() (cloudprovider.Instances, bool) {
1729
++	return cc, true
1730
++}
1731
++
1732
++func (cc *CascadeCloud) Clusters() (cloudprovider.Clusters, bool) {
1733
++	return nil, true
1734
++}
1735
++
1736
++// ProviderName returns the cloud provider ID.
1737
++func (cc *CascadeCloud) ProviderName() string {
1738
++	return ProviderName
1739
++}
1740
++
1741
++// LoadBalancer returns an implementation of LoadBalancer for Cascade Controller.
1742
++func (cc *CascadeCloud) LoadBalancer() (cloudprovider.LoadBalancer, bool) {
1743
++	return cc, true
1744
++}
1745
++
1746
++// Zones returns an implementation of Zones for Cascade Controller.
1747
++func (cc *CascadeCloud) Zones() (cloudprovider.Zones, bool) {
1748
++	return cc, true
1749
++}
1750
++
1751
++func (cc *CascadeCloud) GetZone(ctx context.Context) (cloudprovider.Zone, error) {
1752
++	return cloudprovider.Zone{
1753
++		Region:        cc.cfg.Global.Region,
1754
++		FailureDomain: cc.cfg.Global.Zone,
1755
++	}, nil
1756
++}
1757
++
1758
++// GetZoneByProviderID implements Zones.GetZoneByProviderID
1759
++// This is particularly useful in external cloud providers where the kubelet
1760
++// does not initialize node data.
1761
++func (cc *CascadeCloud) GetZoneByProviderID(ctx context.Context, providerID string) (cloudprovider.Zone, error) {
1762
++	return cloudprovider.Zone{}, errors.New("unimplemented")
1763
++}
1764
++
1765
++// GetZoneByNodeName implements Zones.GetZoneByNodeName
1766
++// This is particularly useful in external cloud providers where the kubelet
1767
++// does not initialize node data.
1768
++func (cc *CascadeCloud) GetZoneByNodeName(ctx context.Context, nodeName k8stypes.NodeName) (cloudprovider.Zone, error) {
1769
++	return cloudprovider.Zone{}, errors.New("unimeplemented")
1770
++}
1771
++
1772
++// Routes returns a false since the interface is not supported for Cascade controller.
1773
++func (cc *CascadeCloud) Routes() (cloudprovider.Routes, bool) {
1774
++	return nil, false
1775
++}
1776
++
1777
++// ScrubDNS filters DNS settings for pods.
1778
++func (cc *CascadeCloud) ScrubDNS(nameservers, searches []string) (nsOut, srchOut []string) {
1779
++	return nameservers, searches
1780
++}
1781
++
1782
++// HasClusterID returns true if the cluster has a clusterID
1783
++func (cc *CascadeCloud) HasClusterID() bool {
1784
++	return true
1785
++}
1786
+diff -duNr --no-dereference kubernetes-old/pkg/cloudprovider/providers/cascade/cascade_instances.go kubernetes/pkg/cloudprovider/providers/cascade/cascade_instances.go
1787
+--- kubernetes-old/pkg/cloudprovider/providers/cascade/cascade_instances.go	1969-12-31 16:00:00.000000000 -0800
1573 1788
 @@ -0,0 +1,92 @@
1574 1789
 +package cascade
1575 1790
 +
... ...
@@ -1664,11 +1550,9 @@ index 0000000..ee02e23
1664 1664
 +func (cc *CascadeCloud) InstanceType(ctx context.Context, nodeName k8stypes.NodeName) (string, error) {
1665 1665
 +	return "", nil
1666 1666
 +}
1667
-diff --git a/pkg/cloudprovider/providers/cascade/cascade_instances_test.go b/pkg/cloudprovider/providers/cascade/cascade_instances_test.go
1668
-new file mode 100644
1669
-index 0000000..8fb314d
1670
-+++ b/pkg/cloudprovider/providers/cascade/cascade_instances_test.go
1667
+diff -duNr --no-dereference kubernetes-old/pkg/cloudprovider/providers/cascade/cascade_instances_test.go kubernetes/pkg/cloudprovider/providers/cascade/cascade_instances_test.go
1668
+--- kubernetes-old/pkg/cloudprovider/providers/cascade/cascade_instances_test.go	1969-12-31 16:00:00.000000000 -0800
1671 1669
 @@ -0,0 +1,44 @@
1672 1670
 +package cascade
1673 1671
 +
... ...
@@ -1714,11 +1598,9 @@ index 0000000..8fb314d
1714 1714
 +	assert.Nil(t, err)
1715 1715
 +	assert.Equal(t, expectedNodeAddresses, actualNodeAddresses)
1716 1716
 +}
1717
-diff --git a/pkg/cloudprovider/providers/cascade/cascade_loadbalancer.go b/pkg/cloudprovider/providers/cascade/cascade_loadbalancer.go
1718
-new file mode 100644
1719
-index 0000000..6338072
1720
-+++ b/pkg/cloudprovider/providers/cascade/cascade_loadbalancer.go
1717
+diff -duNr --no-dereference kubernetes-old/pkg/cloudprovider/providers/cascade/cascade_loadbalancer.go kubernetes/pkg/cloudprovider/providers/cascade/cascade_loadbalancer.go
1718
+--- kubernetes-old/pkg/cloudprovider/providers/cascade/cascade_loadbalancer.go	1969-12-31 16:00:00.000000000 -0800
1721 1719
 @@ -0,0 +1,285 @@
1722 1720
 +package cascade
1723 1721
 +
... ...
@@ -2005,11 +1887,9 @@ index 0000000..6338072
2005 2005
 +func (l *loadBalancerLogger) Infof(msgTemplate string, args ...interface{}) {
2006 2006
 +	glog.Infoln(l.getLogMsg(msgTemplate, args))
2007 2007
 +}
2008
-diff --git a/pkg/cloudprovider/providers/cascade/client.go b/pkg/cloudprovider/providers/cascade/client.go
2009
-new file mode 100644
2010
-index 0000000..e4494e4
2011
-+++ b/pkg/cloudprovider/providers/cascade/client.go
2008
+diff -duNr --no-dereference kubernetes-old/pkg/cloudprovider/providers/cascade/client.go kubernetes/pkg/cloudprovider/providers/cascade/client.go
2009
+--- kubernetes-old/pkg/cloudprovider/providers/cascade/client.go	1969-12-31 16:00:00.000000000 -0800
2012 2010
 @@ -0,0 +1,399 @@
2013 2011
 +package cascade
2014 2012
 +
... ...
@@ -2410,11 +2290,9 @@ index 0000000..e4494e4
2410 2410
 +
2411 2411
 +	return errorStep
2412 2412
 +}
2413
-diff --git a/pkg/cloudprovider/providers/cascade/oidcclient.go b/pkg/cloudprovider/providers/cascade/oidcclient.go
2414
-new file mode 100644
2415
-index 0000000..6a71cc1
2416
-+++ b/pkg/cloudprovider/providers/cascade/oidcclient.go
2413
+diff -duNr --no-dereference kubernetes-old/pkg/cloudprovider/providers/cascade/oidcclient.go kubernetes/pkg/cloudprovider/providers/cascade/oidcclient.go
2414
+--- kubernetes-old/pkg/cloudprovider/providers/cascade/oidcclient.go	1969-12-31 16:00:00.000000000 -0800
2417 2415
 @@ -0,0 +1,297 @@
2418 2416
 +package cascade
2419 2417
 +
... ...
@@ -2713,11 +2591,16 @@ index 0000000..6a71cc1
2713 2713
 +
2714 2714
 +	return oidcErr
2715 2715
 +}
2716
-diff --git a/pkg/cloudprovider/providers/cascade/restclient.go b/pkg/cloudprovider/providers/cascade/restclient.go
2717
-new file mode 100644
2718
-index 0000000..71d8d1c
2719
-+++ b/pkg/cloudprovider/providers/cascade/restclient.go
2716
+diff -duNr --no-dereference kubernetes-old/pkg/cloudprovider/providers/cascade/OWNERS kubernetes/pkg/cloudprovider/providers/cascade/OWNERS
2717
+--- kubernetes-old/pkg/cloudprovider/providers/cascade/OWNERS	1969-12-31 16:00:00.000000000 -0800
2718
+@@ -0,0 +1,3 @@
2719
++maintainers:
2720
++- ashokc
2721
++- ysheng
2722
+diff -duNr --no-dereference kubernetes-old/pkg/cloudprovider/providers/cascade/restclient.go kubernetes/pkg/cloudprovider/providers/cascade/restclient.go
2723
+--- kubernetes-old/pkg/cloudprovider/providers/cascade/restclient.go	1969-12-31 16:00:00.000000000 -0800
2720 2724
 @@ -0,0 +1,262 @@
2721 2725
 +package cascade
2722 2726
 +
... ...
@@ -2981,22 +2864,18 @@ index 0000000..71d8d1c
2981 2981
 +	apiError.HttpStatusCode = res.StatusCode
2982 2982
 +	return nil, apiError
2983 2983
 +}
2984
-diff --git a/pkg/cloudprovider/providers/cascade/tests_owed b/pkg/cloudprovider/providers/cascade/tests_owed
2985
-new file mode 100644
2986
-index 0000000..dff5ab1
2987
-+++ b/pkg/cloudprovider/providers/cascade/tests_owed
2984
+diff -duNr --no-dereference kubernetes-old/pkg/cloudprovider/providers/cascade/tests_owed kubernetes/pkg/cloudprovider/providers/cascade/tests_owed
2985
+--- kubernetes-old/pkg/cloudprovider/providers/cascade/tests_owed	1969-12-31 16:00:00.000000000 -0800
2988 2986
 @@ -0,0 +1,5 @@
2989 2987
 +
2990 2988
 +Yu Sheng
2991 2989
 +Change-Id: Ifc11818f65a3e018aeea6988d9e2c0719b592920
2992 2990
 +
2993 2991
 +
2994
-diff --git a/pkg/cloudprovider/providers/cascade/utils.go b/pkg/cloudprovider/providers/cascade/utils.go
2995
-new file mode 100644
2996
-index 0000000..4e9e44c
2997
-+++ b/pkg/cloudprovider/providers/cascade/utils.go
2992
+diff -duNr --no-dereference kubernetes-old/pkg/cloudprovider/providers/cascade/utils.go kubernetes/pkg/cloudprovider/providers/cascade/utils.go
2993
+--- kubernetes-old/pkg/cloudprovider/providers/cascade/utils.go	1969-12-31 16:00:00.000000000 -0800
2998 2994
 @@ -0,0 +1,25 @@
2999 2995
 +package cascade
3000 2996
 +
... ...
@@ -3024,11 +2903,10 @@ index 0000000..4e9e44c
3024 3024
 +	return &s
3025 3025
 +}
3026 3026
 \ No newline at end of file
3027
-diff --git a/pkg/cloudprovider/providers/providers.go b/pkg/cloudprovider/providers/providers.go
3028
-index 7de9ca9..6d8a1d2 100644
3029
-+++ b/pkg/cloudprovider/providers/providers.go
3030
-@@ -20,6 +20,7 @@ import (
3027
+diff -duNr --no-dereference kubernetes-old/pkg/cloudprovider/providers/providers.go kubernetes/pkg/cloudprovider/providers/providers.go
3028
+--- kubernetes-old/pkg/cloudprovider/providers/providers.go	2018-04-26 05:17:57.000000000 -0700
3029
+@@ -20,6 +20,7 @@
3031 3030
  	// Cloud providers
3032 3031
  	_ "k8s.io/kubernetes/pkg/cloudprovider/providers/aws"
3033 3032
  	_ "k8s.io/kubernetes/pkg/cloudprovider/providers/azure"
... ...
@@ -3036,11 +2914,50 @@ index 7de9ca9..6d8a1d2 100644
3036 3036
  	_ "k8s.io/kubernetes/pkg/cloudprovider/providers/cloudstack"
3037 3037
  	_ "k8s.io/kubernetes/pkg/cloudprovider/providers/gce"
3038 3038
  	_ "k8s.io/kubernetes/pkg/cloudprovider/providers/openstack"
3039
-diff --git a/pkg/kubeapiserver/options/plugins.go b/pkg/kubeapiserver/options/plugins.go
3040
-index 75095b2..0914847 100644
3041
-+++ b/pkg/kubeapiserver/options/plugins.go
3042
-@@ -58,6 +58,7 @@ import (
3039
+diff -duNr --no-dereference kubernetes-old/pkg/kubeapiserver/authorizer/config.go kubernetes/pkg/kubeapiserver/authorizer/config.go
3040
+--- kubernetes-old/pkg/kubeapiserver/authorizer/config.go	2018-04-26 05:17:57.000000000 -0700
3041
+@@ -33,6 +33,7 @@
3042
+ 	"k8s.io/kubernetes/plugin/pkg/auth/authorizer/node"
3043
+ 	"k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac"
3044
+ 	"k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy"
3045
++	"k8s.io/kubernetes/plugin/pkg/auth/authorizer/vke"
3046
+ )
3047
+ 
3048
+ type AuthorizationConfig struct {
3049
+@@ -86,7 +87,12 @@
3050
+ 			)
3051
+ 			nodeAuthorizer := node.NewAuthorizer(graph, nodeidentifier.NewDefaultNodeIdentifier(), bootstrappolicy.NodeRules())
3052
+ 			authorizers = append(authorizers, nodeAuthorizer)
3053
+-
3054
++		case modes.ModeVKE:
3055
++			vkeAuthorizer, err := vke.NewAuthorizer()
3056
++			if err != nil {
3057
++				return nil, nil, err
3058
++			}
3059
++			authorizers = append(authorizers, vkeAuthorizer)
3060
+ 		case modes.ModeAlwaysAllow:
3061
+ 			alwaysAllowAuthorizer := authorizerfactory.NewAlwaysAllowAuthorizer()
3062
+ 			authorizers = append(authorizers, alwaysAllowAuthorizer)
3063
+diff -duNr --no-dereference kubernetes-old/pkg/kubeapiserver/authorizer/modes/modes.go kubernetes/pkg/kubeapiserver/authorizer/modes/modes.go
3064
+--- kubernetes-old/pkg/kubeapiserver/authorizer/modes/modes.go	2018-04-26 05:17:57.000000000 -0700
3065
+@@ -25,9 +25,10 @@
3066
+ 	ModeWebhook     string = "Webhook"
3067
+ 	ModeRBAC        string = "RBAC"
3068
+ 	ModeNode        string = "Node"
3069
++	ModeVKE         string = "VKE"
3070
+ )
3071
+ 
3072
+-var AuthorizationModeChoices = []string{ModeAlwaysAllow, ModeAlwaysDeny, ModeABAC, ModeWebhook, ModeRBAC, ModeNode}
3073
++var AuthorizationModeChoices = []string{ModeAlwaysAllow, ModeAlwaysDeny, ModeABAC, ModeWebhook, ModeRBAC, ModeNode, ModeVKE}
3074
+ 
3075
+ // IsValidAuthorizationMode returns true if the given authorization mode is a valid one for the apiserver
3076
+ func IsValidAuthorizationMode(authzMode string) bool {
3077
+diff -duNr --no-dereference kubernetes-old/pkg/kubeapiserver/options/plugins.go kubernetes/pkg/kubeapiserver/options/plugins.go
3078
+--- kubernetes-old/pkg/kubeapiserver/options/plugins.go	2018-04-26 05:17:57.000000000 -0700
3079
+@@ -58,6 +58,7 @@
3043 3080
  	"k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle"
3044 3081
  	mutatingwebhook "k8s.io/apiserver/pkg/admission/plugin/webhook/mutating"
3045 3082
  	validatingwebhook "k8s.io/apiserver/pkg/admission/plugin/webhook/validating"
... ...
@@ -3048,7 +2965,7 @@ index 75095b2..0914847 100644
3048 3048
  )
3049 3049
  
3050 3050
  // AllOrderedPlugins is the list of all the plugins in order.
3051
-@@ -93,6 +94,7 @@ var AllOrderedPlugins = []string{
3051
+@@ -93,6 +94,7 @@
3052 3052
  	initialization.PluginName,               // Initializers
3053 3053
  	validatingwebhook.PluginName,            // ValidatingAdmissionWebhook
3054 3054
  	resourcequota.PluginName,                // ResourceQuota
... ...
@@ -3056,7 +2973,7 @@ index 75095b2..0914847 100644
3056 3056
  	deny.PluginName,                         // AlwaysDeny
3057 3057
  }
3058 3058
  
3059
-@@ -126,6 +128,7 @@ func RegisterAllAdmissionPlugins(plugins *admission.Plugins) {
3059
+@@ -126,6 +128,7 @@
3060 3060
  	setdefault.Register(plugins)
3061 3061
  	resize.Register(plugins)
3062 3062
  	storageobjectinuseprotection.Register(plugins)
... ...
@@ -3064,11 +2981,10 @@ index 75095b2..0914847 100644
3064 3064
  }
3065 3065
  
3066 3066
  // DefaultOffAdmissionPlugins get admission plugins off by default for kube-apiserver.
3067
-diff --git a/pkg/printers/internalversion/describe.go b/pkg/printers/internalversion/describe.go
3068
-index 318148d..bd26dc6 100644
3069
-+++ b/pkg/printers/internalversion/describe.go
3070
-@@ -754,6 +754,8 @@ func describeVolumes(volumes []api.Volume, w PrefixWriter, space string) {
3067
+diff -duNr --no-dereference kubernetes-old/pkg/printers/internalversion/describe.go kubernetes/pkg/printers/internalversion/describe.go
3068
+--- kubernetes-old/pkg/printers/internalversion/describe.go	2018-04-26 05:17:57.000000000 -0700
3069
+@@ -754,6 +754,8 @@
3071 3070
  			printFlexVolumeSource(volume.VolumeSource.FlexVolume, w)
3072 3071
  		case volume.VolumeSource.Flocker != nil:
3073 3072
  			printFlockerVolumeSource(volume.VolumeSource.Flocker, w)
... ...
@@ -3077,7 +2993,7 @@ index 318148d..bd26dc6 100644
3077 3077
  		default:
3078 3078
  			w.Write(LEVEL_1, "<unknown>\n")
3079 3079
  		}
3080
-@@ -1114,6 +1116,13 @@ func printCSIPersistentVolumeSource(csi *api.CSIPersistentVolumeSource, w Prefix
3080
+@@ -1114,6 +1116,13 @@
3081 3081
  		csi.Driver, csi.VolumeHandle, csi.ReadOnly)
3082 3082
  }
3083 3083
  
... ...
@@ -3091,7 +3007,7 @@ index 318148d..bd26dc6 100644
3091 3091
  type PersistentVolumeDescriber struct {
3092 3092
  	clientset.Interface
3093 3093
  }
3094
-@@ -1250,6 +1259,8 @@ func describePersistentVolume(pv *api.PersistentVolume, events *api.EventList) (
3094
+@@ -1250,6 +1259,8 @@
3095 3095
  			printFlockerVolumeSource(pv.Spec.Flocker, w)
3096 3096
  		case pv.Spec.CSI != nil:
3097 3097
  			printCSIPersistentVolumeSource(pv.Spec.CSI, w)
... ...
@@ -3100,11 +3016,10 @@ index 318148d..bd26dc6 100644
3100 3100
  		default:
3101 3101
  			w.Write(LEVEL_1, "<unknown>\n")
3102 3102
  		}
3103
-diff --git a/pkg/security/podsecuritypolicy/util/util.go b/pkg/security/podsecuritypolicy/util/util.go
3104
-index d581f50..bfd21b1 100644
3105
-+++ b/pkg/security/podsecuritypolicy/util/util.go
3106
-@@ -68,6 +68,7 @@ func GetAllFSTypesAsSet() sets.String {
3103
+diff -duNr --no-dereference kubernetes-old/pkg/security/podsecuritypolicy/util/util.go kubernetes/pkg/security/podsecuritypolicy/util/util.go
3104
+--- kubernetes-old/pkg/security/podsecuritypolicy/util/util.go	2018-04-26 05:17:57.000000000 -0700
3105
+@@ -68,6 +68,7 @@
3107 3106
  		string(extensions.PortworxVolume),
3108 3107
  		string(extensions.ScaleIO),
3109 3108
  		string(extensions.CSI),
... ...
@@ -3112,7 +3027,7 @@ index d581f50..bfd21b1 100644
3112 3112
  	)
3113 3113
  	return fstypes
3114 3114
  }
3115
-@@ -129,6 +130,8 @@ func GetVolumeFSType(v api.Volume) (extensions.FSType, error) {
3115
+@@ -129,6 +130,8 @@
3116 3116
  		return extensions.PortworxVolume, nil
3117 3117
  	case v.ScaleIO != nil:
3118 3118
  		return extensions.ScaleIO, nil
... ...
@@ -3121,68 +3036,9 @@ index d581f50..bfd21b1 100644
3121 3121
  	}
3122 3122
  
3123 3123
  	return "", fmt.Errorf("unknown volume type for volume: %#v", v)
3124
-diff --git a/pkg/volume/cascade_disk/BUILD b/pkg/volume/cascade_disk/BUILD
3125
-new file mode 100644
3126
-index 0000000..3386612
3127
-+++ b/pkg/volume/cascade_disk/BUILD
3128
-@@ -0,0 +1,43 @@
3129
-+package(default_visibility = ["//visibility:public"])
3130
-+
3131
-+load(
3132
-+    "@io_bazel_rules_go//go:def.bzl",
3133
-+    "go_library",
3134
-+    "go_test",
3135
-+)
3136
-+
3137
-+go_library(
3138
-+    name = "go_default_library",
3139
-+    srcs = [
3140
-+        "attacher.go",
3141
-+        "cascade_disk.go",
3142
-+        "cascade_util.go",
3143
-+    ],
3144
-+    deps = [
3145
-+        "//pkg/cloudprovider:go_default_library",
3146
-+        "//pkg/cloudprovider/providers/cascade:go_default_library",
3147
-+        "//pkg/util/mount:go_default_library",
3148
-+        "//pkg/util/strings:go_default_library",
3149
-+        "//pkg/volume:go_default_library",
3150
-+        "//pkg/volume/util:go_default_library",
3151
-+        "//pkg/volume/util/volumehelper:go_default_library",
3152
-+        "//vendor/github.com/golang/glog:go_default_library",
3153
-+        "//vendor/k8s.io/api/core/v1:go_default_library",
3154
-+        "//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
3155
-+        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
3156
-+        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
3157
-+    ],
3158
-+)
3159
-+
3160
-+filegroup(
3161
-+    name = "package-srcs",
3162
-+    srcs = glob(["**"]),
3163
-+    tags = ["automanaged"],
3164
-+    visibility = ["//visibility:private"],
3165
-+)
3166
-+
3167
-+filegroup(
3168
-+    name = "all-srcs",
3169
-+    srcs = [":package-srcs"],
3170
-+    tags = ["automanaged"],
3171
-+)
3172
-diff --git a/pkg/volume/cascade_disk/OWNERS b/pkg/volume/cascade_disk/OWNERS
3173
-new file mode 100644
3174
-index 0000000..c3a4ed7
3175
-+++ b/pkg/volume/cascade_disk/OWNERS
3176
-@@ -0,0 +1,2 @@
3177
-+maintainers:
3178
-+- ashokc
3179
-diff --git a/pkg/volume/cascade_disk/attacher.go b/pkg/volume/cascade_disk/attacher.go
3180
-new file mode 100644
3181
-index 0000000..c19c37c
3182
-+++ b/pkg/volume/cascade_disk/attacher.go
3124
+diff -duNr --no-dereference kubernetes-old/pkg/volume/cascade_disk/attacher.go kubernetes/pkg/volume/cascade_disk/attacher.go
3125
+--- kubernetes-old/pkg/volume/cascade_disk/attacher.go	1969-12-31 16:00:00.000000000 -0800
3183 3126
 @@ -0,0 +1,264 @@
3184 3127
 +package cascade_disk
3185 3128
 +
... ...
@@ -3448,11 +3304,56 @@ index 0000000..c19c37c
3448 3448
 +func (detacher *cascadeDiskDetacher) UnmountDevice(deviceMountPath string) error {
3449 3449
 +	return volumeutil.UnmountPath(deviceMountPath, detacher.mounter)
3450 3450
 +}
3451
-diff --git a/pkg/volume/cascade_disk/cascade_disk.go b/pkg/volume/cascade_disk/cascade_disk.go
3452
-new file mode 100644
3453
-index 0000000..3968060
3454
-+++ b/pkg/volume/cascade_disk/cascade_disk.go
3451
+diff -duNr --no-dereference kubernetes-old/pkg/volume/cascade_disk/BUILD kubernetes/pkg/volume/cascade_disk/BUILD
3452
+--- kubernetes-old/pkg/volume/cascade_disk/BUILD	1969-12-31 16:00:00.000000000 -0800
3453
+@@ -0,0 +1,43 @@
3454
++package(default_visibility = ["//visibility:public"])
3455
++
3456
++load(
3457
++    "@io_bazel_rules_go//go:def.bzl",
3458
++    "go_library",
3459
++    "go_test",
3460
++)
3461
++
3462
++go_library(
3463
++    name = "go_default_library",
3464
++    srcs = [
3465
++        "attacher.go",
3466
++        "cascade_disk.go",
3467
++        "cascade_util.go",
3468
++    ],
3469
++    deps = [
3470
++        "//pkg/cloudprovider:go_default_library",
3471
++        "//pkg/cloudprovider/providers/cascade:go_default_library",
3472
++        "//pkg/util/mount:go_default_library",
3473
++        "//pkg/util/strings:go_default_library",
3474
++        "//pkg/volume:go_default_library",
3475
++        "//pkg/volume/util:go_default_library",
3476
++        "//pkg/volume/util/volumehelper:go_default_library",
3477
++        "//vendor/github.com/golang/glog:go_default_library",
3478
++        "//vendor/k8s.io/api/core/v1:go_default_library",
3479
++        "//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
3480
++        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
3481
++        "//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
3482
++    ],
3483
++)
3484
++
3485
++filegroup(
3486
++    name = "package-srcs",
3487
++    srcs = glob(["**"]),
3488
++    tags = ["automanaged"],
3489
++    visibility = ["//visibility:private"],
3490
++)
3491
++
3492
++filegroup(
3493
++    name = "all-srcs",
3494
++    srcs = [":package-srcs"],
3495
++    tags = ["automanaged"],
3496
++)
3497
+diff -duNr --no-dereference kubernetes-old/pkg/volume/cascade_disk/cascade_disk.go kubernetes/pkg/volume/cascade_disk/cascade_disk.go
3498
+--- kubernetes-old/pkg/volume/cascade_disk/cascade_disk.go	1969-12-31 16:00:00.000000000 -0800
3455 3499
 @@ -0,0 +1,390 @@
3456 3500
 +package cascade_disk
3457 3501
 +
... ...
@@ -3844,11 +3745,9 @@ index 0000000..3968060
3844 3844
 +
3845 3845
 +	return nil, false, fmt.Errorf("Spec does not reference a Cascade disk type")
3846 3846
 +}
3847
-diff --git a/pkg/volume/cascade_disk/cascade_util.go b/pkg/volume/cascade_disk/cascade_util.go
3848
-new file mode 100644
3849
-index 0000000..e08b7d0
3850
-+++ b/pkg/volume/cascade_disk/cascade_util.go
3847
+diff -duNr --no-dereference kubernetes-old/pkg/volume/cascade_disk/cascade_util.go kubernetes/pkg/volume/cascade_disk/cascade_util.go
3848
+--- kubernetes-old/pkg/volume/cascade_disk/cascade_util.go	1969-12-31 16:00:00.000000000 -0800
3851 3849
 @@ -0,0 +1,152 @@
3852 3850
 +package cascade_disk
3853 3851
 +
... ...
@@ -4002,11 +3901,16 @@ index 0000000..e08b7d0
4002 4002
 +
4003 4003
 +	return resolved, nil
4004 4004
 +}
4005
-diff --git a/plugin/pkg/admission/persistentvolume/label/admission.go b/plugin/pkg/admission/persistentvolume/label/admission.go
4006
-index 819adae..3d55589 100644
4007
-+++ b/plugin/pkg/admission/persistentvolume/label/admission.go
4008
-@@ -27,6 +27,7 @@ import (
4005
+diff -duNr --no-dereference kubernetes-old/pkg/volume/cascade_disk/OWNERS kubernetes/pkg/volume/cascade_disk/OWNERS
4006
+--- kubernetes-old/pkg/volume/cascade_disk/OWNERS	1969-12-31 16:00:00.000000000 -0800
4007
+@@ -0,0 +1,2 @@
4008
++maintainers:
4009
++- ashokc
4010
+diff -duNr --no-dereference kubernetes-old/plugin/pkg/admission/persistentvolume/label/admission.go kubernetes/plugin/pkg/admission/persistentvolume/label/admission.go
4011
+--- kubernetes-old/plugin/pkg/admission/persistentvolume/label/admission.go	2018-04-26 05:17:57.000000000 -0700
4012
+@@ -27,6 +27,7 @@
4009 4013
  	api "k8s.io/kubernetes/pkg/apis/core"
4010 4014
  	"k8s.io/kubernetes/pkg/cloudprovider"
4011 4015
  	"k8s.io/kubernetes/pkg/cloudprovider/providers/aws"
... ...
@@ -4014,7 +3918,7 @@ index 819adae..3d55589 100644
4014 4014
  	"k8s.io/kubernetes/pkg/cloudprovider/providers/gce"
4015 4015
  	kubeapiserveradmission "k8s.io/kubernetes/pkg/kubeapiserver/admission"
4016 4016
  	kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis"
4017
-@@ -52,6 +53,7 @@ type persistentVolumeLabel struct {
4017
+@@ -52,6 +53,7 @@
4018 4018
  	ebsVolumes       aws.Volumes
4019 4019
  	cloudConfig      []byte
4020 4020
  	gceCloudProvider *gce.GCECloud
... ...
@@ -4022,7 +3926,7 @@ index 819adae..3d55589 100644
4022 4022
  }
4023 4023
  
4024 4024
  var _ admission.MutationInterface = &persistentVolumeLabel{}
4025
-@@ -104,6 +106,13 @@ func (l *persistentVolumeLabel) Admit(a admission.Attributes) (err error) {
4025
+@@ -104,6 +106,13 @@
4026 4026
  		}
4027 4027
  		volumeLabels = labels
4028 4028
  	}
... ...
@@ -4036,7 +3940,7 @@ index 819adae..3d55589 100644
4036 4036
  
4037 4037
  	if len(volumeLabels) != 0 {
4038 4038
  		if volume.Labels == nil {
4039
-@@ -216,3 +225,48 @@ func (l *persistentVolumeLabel) getGCECloudProvider() (*gce.GCECloud, error) {
4039
+@@ -216,3 +225,48 @@
4040 4040
  	}
4041 4041
  	return l.gceCloudProvider, nil
4042 4042
  }
... ...
@@ -4085,78 +3989,9 @@ index 819adae..3d55589 100644
4085 4085
 +	}
4086 4086
 +	return l.cascadeDisks, nil
4087 4087
 +}
4088
-diff --git a/plugin/pkg/admission/vke/BUILD b/plugin/pkg/admission/vke/BUILD
4089
-new file mode 100644
4090
-index 0000000..2fb36c7
4091
-+++ b/plugin/pkg/admission/vke/BUILD
4092
-@@ -0,0 +1,60 @@
4093
-+package(default_visibility = ["//visibility:public"])
4094
-+
4095
-+load(
4096
-+    "@io_bazel_rules_go//go:def.bzl",
4097
-+    "go_library",
4098
-+)
4099
-+
4100
-+go_library(
4101
-+    name = "go_default_library",
4102
-+    srcs = ["admission.go"],
4103
-+    importpath = "k8s.io/kubernetes/plugin/pkg/admission/vke",
4104
-+    deps = [
4105
-+        "//pkg/apis/core:go_default_library",
4106
-+        "//pkg/apis/extensions:go_default_library",
4107
-+        "//pkg/apis/policy/v1beta1:go_default_library",
4108
-+        "//pkg/apis/rbac:go_default_library",
4109
-+        "//pkg/registry/rbac:go_default_library",
4110
-+        "//pkg/security/podsecuritypolicy:go_default_library",
4111
-+        "//vendor/github.com/golang/glog:go_default_library",
4112
-+        "//vendor/k8s.io/api/policy/v1beta1:go_default_library"
4113
-+        "//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library",
4114
-+        "//vendor/k8s.io/apimachinery/pkg/util/yaml:go_default_library",
4115
-+        "//vendor/k8s.io/apimachinery/pkg/util/validation/field:go_default_library",
4116
-+        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
4117
-+        "//vendor/k8s.io/apiserver/pkg/admission:go_default_library",
4118
-+    ],
4119
-+)
4120
-+
4121
-+go_test(
4122
-+    name = "go_default_test",
4123
-+    srcs = ["admission_test.go"],
4124
-+    embed = [":go_default_library"],
4125
-+    deps = [
4126
-+        "//pkg/apis/core:go_default_library",
4127
-+        "//pkg/apis/extensions:go_default_library",
4128
-+        "//pkg/apis/rbac:go_default_library",
4129
-+        "//pkg/registry/rbac:go_default_library",
4130
-+        "//pkg/security/podsecuritypolicy:go_default_library",
4131
-+        "//vendor/github.com/golang/glog:go_default_library",
4132
-+        "//vendor/github.com/stretchr/testify/assert:go_default_library",
4133
-+        "//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library",
4134
-+        "//vendor/k8s.io/apimachinery/pkg/util/yaml:go_default_library",
4135
-+        "//vendor/k8s.io/apimachinery/pkg/util/validation/field:go_default_library",
4136
-+        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
4137
-+        "//vendor/k8s.io/apiserver/pkg/admission:go_default_library",
4138
-+    ],
4139
-+)
4140
-+
4141
-+filegroup(
4142
-+    name = "package-srcs",
4143
-+    srcs = glob(["**"]),
4144
-+    tags = ["automanaged"],
4145
-+    visibility = ["//visibility:private"],
4146
-+)
4147
-+
4148
-+filegroup(
4149
-+    name = "all-srcs",
4150
-+    srcs = [":package-srcs"],
4151
-+    tags = ["automanaged"],
4152
-+)
4153
-\ No newline at end of file
4154
-diff --git a/plugin/pkg/admission/vke/admission.go b/plugin/pkg/admission/vke/admission.go
4155
-new file mode 100644
4156
-index 0000000..64c2d16
4157
-+++ b/plugin/pkg/admission/vke/admission.go
4088
+diff -duNr --no-dereference kubernetes-old/plugin/pkg/admission/vke/admission.go kubernetes/plugin/pkg/admission/vke/admission.go
4089
+--- kubernetes-old/plugin/pkg/admission/vke/admission.go	1969-12-31 16:00:00.000000000 -0800
4158 4090
 @@ -0,0 +1,554 @@
4159 4091
 +package vke
4160 4092
 +
... ...
@@ -4712,11 +4547,9 @@ index 0000000..64c2d16
4712 4712
 +	}
4713 4713
 +	return nil
4714 4714
 +}
4715
-diff --git a/plugin/pkg/admission/vke/admission_test.go b/plugin/pkg/admission/vke/admission_test.go
4716
-new file mode 100644
4717
-index 0000000..4ce4a1f
4718
-+++ b/plugin/pkg/admission/vke/admission_test.go
4715
+diff -duNr --no-dereference kubernetes-old/plugin/pkg/admission/vke/admission_test.go kubernetes/plugin/pkg/admission/vke/admission_test.go
4716
+--- kubernetes-old/plugin/pkg/admission/vke/admission_test.go	1969-12-31 16:00:00.000000000 -0800
4719 4717
 @@ -0,0 +1,882 @@
4720 4718
 +package vke
4721 4719
 +
... ...
@@ -5600,11 +5433,182 @@ index 0000000..4ce4a1f
5600 5600
 +	p.user.Groups = append(p.user.Groups, group)
5601 5601
 +	return p
5602 5602
 +}
5603
-diff --git a/staging/src/k8s.io/api/core/v1/generated.pb.go b/staging/src/k8s.io/api/core/v1/generated.pb.go
5604
-index 85c7b63..b97b2f1 100644
5605
-+++ b/staging/src/k8s.io/api/core/v1/generated.pb.go
5606
-@@ -35,6 +35,7 @@ limitations under the License.
5603
+diff -duNr --no-dereference kubernetes-old/plugin/pkg/admission/vke/BUILD kubernetes/plugin/pkg/admission/vke/BUILD
5604
+--- kubernetes-old/plugin/pkg/admission/vke/BUILD	1969-12-31 16:00:00.000000000 -0800
5605
+@@ -0,0 +1,60 @@
5606
++package(default_visibility = ["//visibility:public"])
5607
++
5608
++load(
5609
++    "@io_bazel_rules_go//go:def.bzl",
5610
++    "go_library",
5611
++)
5612
++
5613
++go_library(
5614
++    name = "go_default_library",
5615
++    srcs = ["admission.go"],
5616
++    importpath = "k8s.io/kubernetes/plugin/pkg/admission/vke",
5617
++    deps = [
5618
++        "//pkg/apis/core:go_default_library",
5619
++        "//pkg/apis/extensions:go_default_library",
5620
++        "//pkg/apis/policy/v1beta1:go_default_library",
5621
++        "//pkg/apis/rbac:go_default_library",
5622
++        "//pkg/registry/rbac:go_default_library",
5623
++        "//pkg/security/podsecuritypolicy:go_default_library",
5624
++        "//vendor/github.com/golang/glog:go_default_library",
5625
++        "//vendor/k8s.io/api/policy/v1beta1:go_default_library"
5626
++        "//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library",
5627
++        "//vendor/k8s.io/apimachinery/pkg/util/yaml:go_default_library",
5628
++        "//vendor/k8s.io/apimachinery/pkg/util/validation/field:go_default_library",
5629
++        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
5630
++        "//vendor/k8s.io/apiserver/pkg/admission:go_default_library",
5631
++    ],
5632
++)
5633
++
5634
++go_test(
5635
++    name = "go_default_test",
5636
++    srcs = ["admission_test.go"],
5637
++    embed = [":go_default_library"],
5638
++    deps = [
5639
++        "//pkg/apis/core:go_default_library",
5640
++        "//pkg/apis/extensions:go_default_library",
5641
++        "//pkg/apis/rbac:go_default_library",
5642
++        "//pkg/registry/rbac:go_default_library",
5643
++        "//pkg/security/podsecuritypolicy:go_default_library",
5644
++        "//vendor/github.com/golang/glog:go_default_library",
5645
++        "//vendor/github.com/stretchr/testify/assert:go_default_library",
5646
++        "//vendor/k8s.io/apimachinery/pkg/api/equality:go_default_library",
5647
++        "//vendor/k8s.io/apimachinery/pkg/util/yaml:go_default_library",
5648
++        "//vendor/k8s.io/apimachinery/pkg/util/validation/field:go_default_library",
5649
++        "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
5650
++        "//vendor/k8s.io/apiserver/pkg/admission:go_default_library",
5651
++    ],
5652
++)
5653
++
5654
++filegroup(
5655
++    name = "package-srcs",
5656
++    srcs = glob(["**"]),
5657
++    tags = ["automanaged"],
5658
++    visibility = ["//visibility:private"],
5659
++)
5660
++
5661
++filegroup(
5662
++    name = "all-srcs",
5663
++    srcs = [":package-srcs"],
5664
++    tags = ["automanaged"],
5665
++)
5666
+\ No newline at end of file
5667
+diff -duNr --no-dereference kubernetes-old/plugin/pkg/auth/authorizer/vke/BUILD kubernetes/plugin/pkg/auth/authorizer/vke/BUILD
5668
+--- kubernetes-old/plugin/pkg/auth/authorizer/vke/BUILD	1969-12-31 16:00:00.000000000 -0800
5669
+@@ -0,0 +1,30 @@
5670
++package(default_visibility = ["//visibility:public"])
5671
++
5672
++load(
5673
++    "@io_bazel_rules_go//go:def.bzl",
5674
++    "go_library",
5675
++)
5676
++
5677
++go_library(
5678
++    name = "go_default_library",
5679
++    srcs = [
5680
++        "vke_authorizer.go",
5681
++    ],
5682
++    importpath = "k8s.io/kubernetes/plugin/pkg/auth/authorizer/vke",
5683
++    deps = [
5684
++        "//vendor/k8s.io/apiserver/pkg/authorization/authorizer:go_default_library",
5685
++    ],
5686
++)
5687
++
5688
++filegroup(
5689
++    name = "package-srcs",
5690
++    srcs = glob(["**"]),
5691
++    tags = ["automanaged"],
5692
++    visibility = ["//visibility:private"],
5693
++)
5694
++
5695
++filegroup(
5696
++    name = "all-srcs",
5697
++    srcs = [":package-srcs"],
5698
++    tags = ["automanaged"],
5699
++)
5700
+diff -duNr --no-dereference kubernetes-old/plugin/pkg/auth/authorizer/vke/OWNERS kubernetes/plugin/pkg/auth/authorizer/vke/OWNERS
5701
+--- kubernetes-old/plugin/pkg/auth/authorizer/vke/OWNERS	1969-12-31 16:00:00.000000000 -0800
5702
+@@ -0,0 +1,2 @@
5703
++maintainers:
5704
++- ashokc
5705
+diff -duNr --no-dereference kubernetes-old/plugin/pkg/auth/authorizer/vke/vke_authorizer.go kubernetes/plugin/pkg/auth/authorizer/vke/vke_authorizer.go
5706
+--- kubernetes-old/plugin/pkg/auth/authorizer/vke/vke_authorizer.go	1969-12-31 16:00:00.000000000 -0800
5707
+@@ -0,0 +1,63 @@
5708
++package vke
5709
++
5710
++import (
5711
++	"bufio"
5712
++	"fmt"
5713
++	"os"
5714
++	"strings"
5715
++
5716
++	"github.com/golang/glog"
5717
++	"k8s.io/apiserver/pkg/authorization/authorizer"
5718
++)
5719
++
5720
++const systemClusterPrefix = "system:clusterID:"
5721
++
5722
++// VKEAuthorizer authorizes requests which comes from nodes using certificates.
5723
++// If a request is from a node which is not a part of the cluster, reject.
5724
++type VKEAuthorizer struct {
5725
++	clusterID string
5726
++}
5727
++
5728
++// NewAuthorizer returns a new node authorizer
5729
++func NewAuthorizer() (authorizer.Authorizer, error) {
5730
++	file, err := os.Open("/etc/kubernetes/cc_cloud.config")
5731
++	if err != nil {
5732
++		return nil, err
5733
++	}
5734
++	defer file.Close()
5735
++
5736
++	scanner := bufio.NewScanner(file)
5737
++
5738
++	for scanner.Scan() {
5739
++		lineContent := scanner.Text()
5740
++		if strings.Contains(lineContent, "clusterID = ") {
5741
++			clusterID := strings.SplitAfter(lineContent, "= ")[1]
5742
++			return &VKEAuthorizer{clusterID: clusterID}, nil
5743
++		}
5744
++	}
5745
++
5746
++	return nil, fmt.Errorf("Cluster ID cannot be parsed from config file successfully")
5747
++}
5748
++
5749
++// Authorize authorizes requests based on the VKE authorizer.
5750
++func (v *VKEAuthorizer) Authorize(attrs authorizer.Attributes) (authorizer.Decision, string, error) {
5751
++	if isNonClusterNode(attrs, v.clusterID) {
5752
++		glog.V(2).Infof("VKE authorizer: DENY the request because it is from a different cluster")
5753
++		return authorizer.DecisionDeny, "", nil
5754
++	}
5755
++	return authorizer.DecisionNoOpinion, "", nil
5756
++}
5757
++
5758
++func isNonClusterNode(attrs authorizer.Attributes, clusterID string) bool {
5759
++	groups := attrs.GetUser().GetGroups()
5760
++	for _, group := range groups {
5761
++		if strings.HasPrefix(group, systemClusterPrefix) {
5762
++			groupParts := strings.Split(group, ":")
5763
++			if clusterID != "" && groupParts[len(groupParts)-1] != clusterID {
5764
++				return true
5765
++			}
5766
++		}
5767
++	}
5768
++
5769
++	return false
5770
++}
5771
+diff -duNr --no-dereference kubernetes-old/staging/src/k8s.io/api/core/v1/generated.pb.go kubernetes/staging/src/k8s.io/api/core/v1/generated.pb.go
5772
+--- kubernetes-old/staging/src/k8s.io/api/core/v1/generated.pb.go	2018-04-26 05:17:57.000000000 -0700
5773
+@@ -35,6 +35,7 @@
5607 5774
  		Binding
5608 5775
  		CSIPersistentVolumeSource
5609 5776
  		Capabilities
... ...
@@ -5612,7 +5616,7 @@ index 85c7b63..b97b2f1 100644
5612 5612
  		CephFSPersistentVolumeSource
5613 5613
  		CephFSVolumeSource
5614 5614
  		CinderVolumeSource
5615
-@@ -262,9 +263,11 @@ func (m *AvoidPods) Reset()                    { *m = AvoidPods{} }
5615
+@@ -262,9 +263,11 @@
5616 5616
  func (*AvoidPods) ProtoMessage()               {}
5617 5617
  func (*AvoidPods) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} }
5618 5618
  
... ...
@@ -5627,7 +5631,7 @@ index 85c7b63..b97b2f1 100644
5627 5627
  
5628 5628
  func (m *AzureFilePersistentVolumeSource) Reset()      { *m = AzureFilePersistentVolumeSource{} }
5629 5629
  func (*AzureFilePersistentVolumeSource) ProtoMessage() {}
5630
-@@ -1052,6 +1055,11 @@ func (*WeightedPodAffinityTerm) Descriptor() ([]byte, []int) {
5630
+@@ -1052,6 +1055,11 @@
5631 5631
  	return fileDescriptorGenerated, []int{187}
5632 5632
  }
5633 5633
  
... ...
@@ -5639,7 +5643,7 @@ index 85c7b63..b97b2f1 100644
5639 5639
  func init() {
5640 5640
  	proto.RegisterType((*AWSElasticBlockStoreVolumeSource)(nil), "k8s.io.api.core.v1.AWSElasticBlockStoreVolumeSource")
5641 5641
  	proto.RegisterType((*Affinity)(nil), "k8s.io.api.core.v1.Affinity")
5642
-@@ -1063,6 +1071,7 @@ func init() {
5642
+@@ -1063,6 +1071,7 @@
5643 5643
  	proto.RegisterType((*Binding)(nil), "k8s.io.api.core.v1.Binding")
5644 5644
  	proto.RegisterType((*CSIPersistentVolumeSource)(nil), "k8s.io.api.core.v1.CSIPersistentVolumeSource")
5645 5645
  	proto.RegisterType((*Capabilities)(nil), "k8s.io.api.core.v1.Capabilities")
... ...
@@ -5647,7 +5651,7 @@ index 85c7b63..b97b2f1 100644
5647 5647
  	proto.RegisterType((*CephFSPersistentVolumeSource)(nil), "k8s.io.api.core.v1.CephFSPersistentVolumeSource")
5648 5648
  	proto.RegisterType((*CephFSVolumeSource)(nil), "k8s.io.api.core.v1.CephFSVolumeSource")
5649 5649
  	proto.RegisterType((*CinderVolumeSource)(nil), "k8s.io.api.core.v1.CinderVolumeSource")
5650
-@@ -1683,6 +1692,32 @@ func (m *Capabilities) MarshalTo(dAtA []byte) (int, error) {
5650
+@@ -1683,6 +1692,32 @@
5651 5651
  	return i, nil
5652 5652
  }
5653 5653
  
... ...
@@ -5680,7 +5684,7 @@ index 85c7b63..b97b2f1 100644
5680 5680
  func (m *CephFSPersistentVolumeSource) Marshal() (dAtA []byte, err error) {
5681 5681
  	size := m.Size()
5682 5682
  	dAtA = make([]byte, size)
5683
-@@ -6447,13 +6482,13 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) {
5683
+@@ -6447,13 +6482,13 @@
5684 5684
  		}
5685 5685
  		i += n124
5686 5686
  	}
... ...
@@ -5697,7 +5701,7 @@ index 85c7b63..b97b2f1 100644
5697 5697
  		if err != nil {
5698 5698
  			return 0, err
5699 5699
  		}
5700
-@@ -6531,6 +6566,18 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) {
5700
+@@ -6531,6 +6566,18 @@
5701 5701
  		}
5702 5702
  		i += n131
5703 5703
  	}
... ...
@@ -5716,7 +5720,7 @@ index 85c7b63..b97b2f1 100644
5716 5716
  	return i, nil
5717 5717
  }
5718 5718
  
5719
-@@ -10544,13 +10591,13 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
5719
+@@ -10544,13 +10591,13 @@
5720 5720
  		}
5721 5721
  		i += n229
5722 5722
  	}
... ...
@@ -5733,7 +5737,7 @@ index 85c7b63..b97b2f1 100644
5733 5733
  		if err != nil {
5734 5734
  			return 0, err
5735 5735
  		}
5736
-@@ -10616,6 +10663,18 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) {
5736
+@@ -10616,6 +10663,18 @@
5737 5737
  		}
5738 5738
  		i += n235
5739 5739
  	}
... ...
@@ -5752,7 +5756,7 @@ index 85c7b63..b97b2f1 100644
5752 5752
  	return i, nil
5753 5753
  }
5754 5754
  
5755
-@@ -10873,6 +10932,16 @@ func (m *Capabilities) Size() (n int) {
5755
+@@ -10873,6 +10932,16 @@
5756 5756
  	return n
5757 5757
  }
5758 5758
  
... ...
@@ -5769,7 +5773,7 @@ index 85c7b63..b97b2f1 100644
5769 5769
  func (m *CephFSPersistentVolumeSource) Size() (n int) {
5770 5770
  	var l int
5771 5771
  	_ = l
5772
-@@ -12616,8 +12685,8 @@ func (m *PersistentVolumeSource) Size() (n int) {
5772
+@@ -12616,8 +12685,8 @@
5773 5773
  		l = m.Quobyte.Size()
5774 5774
  		n += 1 + l + sovGenerated(uint64(l))
5775 5775
  	}
... ...
@@ -5780,7 +5784,7 @@ index 85c7b63..b97b2f1 100644
5780 5780
  		n += 2 + l + sovGenerated(uint64(l))
5781 5781
  	}
5782 5782
  	if m.PhotonPersistentDisk != nil {
5783
-@@ -12644,6 +12713,10 @@ func (m *PersistentVolumeSource) Size() (n int) {
5783
+@@ -12644,6 +12713,10 @@
5784 5784
  		l = m.CSI.Size()
5785 5785
  		n += 2 + l + sovGenerated(uint64(l))
5786 5786
  	}
... ...
@@ -5791,7 +5795,7 @@ index 85c7b63..b97b2f1 100644
5791 5791
  	return n
5792 5792
  }
5793 5793
  
5794
-@@ -14098,8 +14171,8 @@ func (m *VolumeSource) Size() (n int) {
5794
+@@ -14098,8 +14171,8 @@
5795 5795
  		l = m.Quobyte.Size()
5796 5796
  		n += 2 + l + sovGenerated(uint64(l))
5797 5797
  	}
... ...
@@ -5802,7 +5806,7 @@ index 85c7b63..b97b2f1 100644
5802 5802
  		n += 2 + l + sovGenerated(uint64(l))
5803 5803
  	}
5804 5804
  	if m.PhotonPersistentDisk != nil {
5805
-@@ -14122,6 +14195,10 @@ func (m *VolumeSource) Size() (n int) {
5805
+@@ -14122,6 +14195,10 @@
5806 5806
  		l = m.StorageOS.Size()
5807 5807
  		n += 2 + l + sovGenerated(uint64(l))
5808 5808
  	}
... ...
@@ -5813,7 +5817,7 @@ index 85c7b63..b97b2f1 100644
5813 5813
  	return n
5814 5814
  }
5815 5815
  
5816
-@@ -14296,6 +14373,17 @@ func (this *Capabilities) String() string {
5816
+@@ -14296,6 +14373,17 @@
5817 5817
  	}, "")
5818 5818
  	return s
5819 5819
  }
... ...
@@ -5831,7 +5835,7 @@ index 85c7b63..b97b2f1 100644
5831 5831
  func (this *CephFSPersistentVolumeSource) String() string {
5832 5832
  	if this == nil {
5833 5833
  		return "nil"
5834
-@@ -15695,13 +15783,14 @@ func (this *PersistentVolumeSource) String() string {
5834
+@@ -15695,13 +15783,14 @@
5835 5835
  		`AzureFile:` + strings.Replace(fmt.Sprintf("%v", this.AzureFile), "AzureFilePersistentVolumeSource", "AzureFilePersistentVolumeSource", 1) + `,`,
5836 5836
  		`VsphereVolume:` + strings.Replace(fmt.Sprintf("%v", this.VsphereVolume), "VsphereVirtualDiskVolumeSource", "VsphereVirtualDiskVolumeSource", 1) + `,`,
5837 5837
  		`Quobyte:` + strings.Replace(fmt.Sprintf("%v", this.Quobyte), "QuobyteVolumeSource", "QuobyteVolumeSource", 1) + `,`,
... ...
@@ -5847,7 +5851,7 @@ index 85c7b63..b97b2f1 100644
5847 5847
  		`}`,
5848 5848
  	}, "")
5849 5849
  	return s
5850
-@@ -16843,12 +16932,13 @@ func (this *VolumeSource) String() string {
5850
+@@ -16843,12 +16932,13 @@
5851 5851
  		`ConfigMap:` + strings.Replace(fmt.Sprintf("%v", this.ConfigMap), "ConfigMapVolumeSource", "ConfigMapVolumeSource", 1) + `,`,
5852 5852
  		`VsphereVolume:` + strings.Replace(fmt.Sprintf("%v", this.VsphereVolume), "VsphereVirtualDiskVolumeSource", "VsphereVirtualDiskVolumeSource", 1) + `,`,
5853 5853
  		`Quobyte:` + strings.Replace(fmt.Sprintf("%v", this.Quobyte), "QuobyteVolumeSource", "QuobyteVolumeSource", 1) + `,`,
... ...
@@ -5862,7 +5866,7 @@ index 85c7b63..b97b2f1 100644
5862 5862
  		`}`,
5863 5863
  	}, "")
5864 5864
  	return s
5865
-@@ -35335,7 +35425,7 @@ func (m *PersistentVolumeSource) Unmarshal(dAtA []byte) error {
5865
+@@ -35335,7 +35425,7 @@
5866 5866
  			iNdEx = postIndex
5867 5867
  		case 16:
5868 5868
  			if wireType != 2 {
... ...
@@ -5871,7 +5875,7 @@ index 85c7b63..b97b2f1 100644
5871 5871
  			}
5872 5872
  			var msglen int
5873 5873
  			for shift := uint(0); ; shift += 7 {
5874
-@@ -35359,10 +35449,10 @@ func (m *PersistentVolumeSource) Unmarshal(dAtA []byte) error {
5874
+@@ -35359,10 +35449,10 @@
5875 5875
  			if postIndex > l {
5876 5876
  				return io.ErrUnexpectedEOF
5877 5877
  			}
... ...
@@ -5885,7 +5889,7 @@ index 85c7b63..b97b2f1 100644
5885 5885
  				return err
5886 5886
  			}
5887 5887
  			iNdEx = postIndex
5888
-@@ -35564,6 +35654,39 @@ func (m *PersistentVolumeSource) Unmarshal(dAtA []byte) error {
5888
+@@ -35564,6 +35654,39 @@
5889 5889
  				return err
5890 5890
  			}
5891 5891
  			iNdEx = postIndex
... ...
@@ -5925,7 +5929,7 @@ index 85c7b63..b97b2f1 100644
5925 5925
  		default:
5926 5926
  			iNdEx = preIndex
5927 5927
  			skippy, err := skipGenerated(dAtA[iNdEx:])
5928
-@@ -36135,6 +36258,114 @@ func (m *PersistentVolumeStatus) Unmarshal(dAtA []byte) error {
5928
+@@ -36135,6 +36258,114 @@
5929 5929
  	}
5930 5930
  	return nil
5931 5931
  }
... ...
@@ -6040,7 +6044,7 @@ index 85c7b63..b97b2f1 100644
6040 6040
  func (m *PhotonPersistentDiskVolumeSource) Unmarshal(dAtA []byte) error {
6041 6041
  	l := len(dAtA)
6042 6042
  	iNdEx := 0
6043
-@@ -49741,7 +49972,7 @@ func (m *VolumeSource) Unmarshal(dAtA []byte) error {
6043
+@@ -49741,7 +49972,7 @@
6044 6044
  			iNdEx = postIndex
6045 6045
  		case 22:
6046 6046
  			if wireType != 2 {
... ...
@@ -6049,7 +6053,7 @@ index 85c7b63..b97b2f1 100644
6049 6049
  			}
6050 6050
  			var msglen int
6051 6051
  			for shift := uint(0); ; shift += 7 {
6052
-@@ -49765,10 +49996,10 @@ func (m *VolumeSource) Unmarshal(dAtA []byte) error {
6052
+@@ -49765,10 +49996,10 @@
6053 6053
  			if postIndex > l {
6054 6054
  				return io.ErrUnexpectedEOF
6055 6055
  			}
... ...
@@ -6063,7 +6067,7 @@ index 85c7b63..b97b2f1 100644
6063 6063
  				return err
6064 6064
  			}
6065 6065
  			iNdEx = postIndex
6066
-@@ -49937,6 +50168,39 @@ func (m *VolumeSource) Unmarshal(dAtA []byte) error {
6066
+@@ -49937,6 +50168,39 @@
6067 6067
  				return err
6068 6068
  			}
6069 6069
  			iNdEx = postIndex
... ...
@@ -6103,11 +6107,10 @@ index 85c7b63..b97b2f1 100644
6103 6103
  		default:
6104 6104
  			iNdEx = preIndex
6105 6105
  			skippy, err := skipGenerated(dAtA[iNdEx:])
6106
-diff --git a/staging/src/k8s.io/api/core/v1/types.go b/staging/src/k8s.io/api/core/v1/types.go
6107
-index 08ef419..6fb4d80 100644
6108
-+++ b/staging/src/k8s.io/api/core/v1/types.go
6109
-@@ -333,9 +333,9 @@ type VolumeSource struct {
6106
+diff -duNr --no-dereference kubernetes-old/staging/src/k8s.io/api/core/v1/types.go kubernetes/staging/src/k8s.io/api/core/v1/types.go
6107
+--- kubernetes-old/staging/src/k8s.io/api/core/v1/types.go	2018-04-26 05:17:57.000000000 -0700
6108
+@@ -333,9 +333,9 @@
6110 6109
  	// Quobyte represents a Quobyte mount on the host that shares a pod's lifetime
6111 6110
  	// +optional
6112 6111
  	Quobyte *QuobyteVolumeSource `json:"quobyte,omitempty" protobuf:"bytes,21,opt,name=quobyte"`
... ...
@@ -6119,7 +6122,7 @@ index 08ef419..6fb4d80 100644
6119 6119
  	// PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine
6120 6120
  	PhotonPersistentDisk *PhotonPersistentDiskVolumeSource `json:"photonPersistentDisk,omitempty" protobuf:"bytes,23,opt,name=photonPersistentDisk"`
6121 6121
  	// Items for all in one resources secrets, configmaps, and downward API
6122
-@@ -349,6 +349,9 @@ type VolumeSource struct {
6122
+@@ -349,6 +349,9 @@
6123 6123
  	// StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.
6124 6124
  	// +optional
6125 6125
  	StorageOS *StorageOSVolumeSource `json:"storageos,omitempty" protobuf:"bytes,27,opt,name=storageos"`
... ...
@@ -6129,7 +6132,7 @@ index 08ef419..6fb4d80 100644
6129 6129
  }
6130 6130
  
6131 6131
  // PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace.
6132
-@@ -428,9 +431,9 @@ type PersistentVolumeSource struct {
6132
+@@ -428,9 +431,9 @@
6133 6133
  	// Quobyte represents a Quobyte mount on the host that shares a pod's lifetime
6134 6134
  	// +optional
6135 6135
  	Quobyte *QuobyteVolumeSource `json:"quobyte,omitempty" protobuf:"bytes,15,opt,name=quobyte"`
... ...
@@ -6141,7 +6144,7 @@ index 08ef419..6fb4d80 100644
6141 6141
  	// PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine
6142 6142
  	PhotonPersistentDisk *PhotonPersistentDiskVolumeSource `json:"photonPersistentDisk,omitempty" protobuf:"bytes,17,opt,name=photonPersistentDisk"`
6143 6143
  	// PortworxVolume represents a portworx volume attached and mounted on kubelets host machine
6144
-@@ -449,6 +452,9 @@ type PersistentVolumeSource struct {
6144
+@@ -449,6 +452,9 @@
6145 6145
  	// CSI represents storage that handled by an external CSI driver (Beta feature).
6146 6146
  	// +optional
6147 6147
  	CSI *CSIPersistentVolumeSource `json:"csi,omitempty" protobuf:"bytes,22,opt,name=csi"`
... ...
@@ -6151,7 +6154,7 @@ index 08ef419..6fb4d80 100644
6151 6151
  }
6152 6152
  
6153 6153
  const (
6154
-@@ -1617,6 +1623,16 @@ type StorageOSPersistentVolumeSource struct {
6154
+@@ -1617,6 +1623,16 @@
6155 6155
  	SecretRef *ObjectReference `json:"secretRef,omitempty" protobuf:"bytes,5,opt,name=secretRef"`
6156 6156
  }
6157 6157
  
... ...
@@ -6168,6 +6171,3 @@ index 08ef419..6fb4d80 100644
6168 6168
  // Adapts a ConfigMap into a volume.
6169 6169
  //
6170 6170
  // The contents of the target ConfigMap's Data field will be presented in a
6171
-2.7.4
6172
-
... ...
@@ -1,7 +1,7 @@
1 1
 Summary:        Kubernetes cluster management
2 2
 Name:           kubernetes
3 3
 Version:        1.10.2
4
-Release:        9%{?dist}
4
+Release:        10%{?dist}
5 5
 License:        ASL 2.0
6 6
 URL:            https://github.com/kubernetes/kubernetes/archive/v%{version}.tar.gz
7 7
 Source0:        kubernetes-%{version}.tar.gz
... ...
@@ -207,6 +207,8 @@ fi
207 207
 /opt/vmware/kubernetes/windows/amd64/kubectl.exe
208 208
 
209 209
 %changelog
210
+*   Thu Aug 02 2018 Dheeraj Shetty <dheerajs@vmware.com> 1.10.2-10
211
+-   Update vke patch
210 212
 *   Fri Jul 20 2018 Bo Gan <ganb@vmware.com> 1.10.2-9
211 213
 -   Update vke patch (1f4aedb)
212 214
 *   Tue Jul 03 2018 Bo Gan <ganb@vmware.com> 1.10.2-8