CVE: CVE-2020-8551
- 0db7074e1ad237af1a513bdf51160bf4b4cdc9f1
- 9802bfcec0580169cffce2a3d468689a407fa7dc
- c394d821fdafd719619eb63fcd1065a95ec02ef9
CVE: CVE-2020-8552
- cc3190968b1f14ddf4067abef849fc41bd6068dc
CVE: CVE-2019-11254
- a290fe55cb2f4593eb4ec5bf410cd77b9d925464
Signed-off-by: Sakib Sajal <[email protected]>
---
...-to-fix-kubelet-metrics-memory-issue.patch | 313 +++++++
...dd-new-endpoint-for-resource-metrics.patch | 440 ++++++++++
.../0001-Deal-with-auto-generated-files.patch | 60 ++
...bel-from-apiserver-request-count-met.patch | 171 ++++
...01-update-gopkg.in-yaml.v2-to-v2.2.8.patch | 825 ++++++++++++++++++
.../kubernetes/kubernetes_git.bb | 5 +
6 files changed, 1814 insertions(+)
create mode 100644
recipes-containers/kubernetes/kubernetes/0001-Add-code-to-fix-kubelet-metrics-memory-issue.patch
create mode 100644
recipes-containers/kubernetes/kubernetes/0001-Add-new-endpoint-for-resource-metrics.patch
create mode 100644
recipes-containers/kubernetes/kubernetes/0001-Deal-with-auto-generated-files.patch
create mode 100644
recipes-containers/kubernetes/kubernetes/0001-remove-client-label-from-apiserver-request-count-met.patch
create mode 100644
recipes-containers/kubernetes/kubernetes/0001-update-gopkg.in-yaml.v2-to-v2.2.8.patch
diff --git
a/recipes-containers/kubernetes/kubernetes/0001-Add-code-to-fix-kubelet-metrics-memory-issue.patch
b/recipes-containers/kubernetes/kubernetes/0001-Add-code-to-fix-kubelet-metrics-memory-issue.patch
new file mode 100644
index 0000000..5369f04
--- /dev/null
+++
b/recipes-containers/kubernetes/kubernetes/0001-Add-code-to-fix-kubelet-metrics-memory-issue.patch
@@ -0,0 +1,313 @@
+From 0bf092ccc5fccb06b13afe5da86286a856d96770 Mon Sep 17 00:00:00 2001
+From: Walter Fender <[email protected]>
+Date: Thu, 6 Feb 2020 19:10:18 -0800
+Subject: [PATCH] Add code to fix kubelet/metrics memory issue.
+
+Bucketing url paths based on concept/handling.
+Bucketing code placed by handling code to encourage usage.
+Added unit tests.
+Fix format.
+
+Upstream Status: Backport
[https://github.com/kubernetes/kubernetes/pull/87913/commits/9802bfcec0580169cffce2a3d468689a407fa7dc]
+CVE: CVE-2020-8551
+
+Signed-off-by: Sakib Sajal <[email protected]>
+---
+ pkg/kubelet/server/server.go | 57 ++++++++++++++++++++++++++++---
+ pkg/kubelet/server/server_test.go | 54 ++++++++++++++++++++++++++++-
+ 2 files changed, 106 insertions(+), 5 deletions(-)
+
+diff --git a/src/import/pkg/kubelet/server/server.go
b/src/import/pkg/kubelet/server/server.go
+index 0f953c92502..05c1dc9c701 100644
+--- a/src/import/pkg/kubelet/server/server.go
++++ b/src/import/pkg/kubelet/server/server.go
+@@ -89,6 +89,7 @@ type Server struct {
+ auth AuthInterface
+ host HostInterface
+ restfulCont containerInterface
++ metricsBuckets map[string]bool
+ resourceAnalyzer stats.ResourceAnalyzer
+ redirectContainerStreaming bool
+ }
+@@ -225,6 +226,7 @@ func NewServer(
+ resourceAnalyzer: resourceAnalyzer,
+ auth: auth,
+ restfulCont: &filteringContainer{Container:
restful.NewContainer()},
++ metricsBuckets: make(map[string]bool),
+ redirectContainerStreaming: redirectContainerStreaming,
+ }
+ if auth != nil {
+@@ -280,14 +282,32 @@ func (s *Server) InstallAuthFilter() {
+ })
+ }
+
++// addMetricsBucketMatcher adds a regexp matcher and the relevant bucket to
use when
++// it matches. Please be aware this is not thread safe and should not be used
dynamically
++func (s *Server) addMetricsBucketMatcher(bucket string) {
++ s.metricsBuckets[bucket] = true
++}
++
++// getMetricBucket find the appropriate metrics reporting bucket for the
given path
++func (s *Server) getMetricBucket(path string) string {
++ root := getURLRootPath(path)
++ if s.metricsBuckets[root] == true {
++ return root
++ }
++ return "Invalid path"
++}
++
+ // InstallDefaultHandlers registers the default set of supported HTTP request
+ // patterns with the restful Container.
+ func (s *Server) InstallDefaultHandlers(enableCAdvisorJSONEndpoints bool) {
++ s.addMetricsBucketMatcher("healthz")
+ healthz.InstallHandler(s.restfulCont,
+ healthz.PingHealthz,
+ healthz.LogHealthz,
+ healthz.NamedCheck("syncloop", s.syncLoopHealthCheck),
+ )
++
++ s.addMetricsBucketMatcher("pods")
+ ws := new(restful.WebService)
+ ws.
+ Path("/pods").
+@@ -297,7 +317,14 @@ func (s *Server)
InstallDefaultHandlers(enableCAdvisorJSONEndpoints bool) {
+ Operation("getPods"))
+ s.restfulCont.Add(ws)
+
++ s.addMetricsBucketMatcher("stats")
+ s.restfulCont.Add(stats.CreateHandlers(statsPath, s.host,
s.resourceAnalyzer, enableCAdvisorJSONEndpoints))
++
++ s.addMetricsBucketMatcher("metrics")
++ s.addMetricsBucketMatcher("metrics/cadvisor")
++ s.addMetricsBucketMatcher("metrics/probes")
++ s.addMetricsBucketMatcher("metrics/resource/v1alpha1")
++ s.addMetricsBucketMatcher("metrics/resource")
+ //lint:ignore SA1019
https://github.com/kubernetes/enhancements/issues/1206
+ s.restfulCont.Handle(metricsPath, legacyregistry.Handler())
+
+@@ -320,12 +347,15 @@ func (s *Server)
InstallDefaultHandlers(enableCAdvisorJSONEndpoints bool) {
+ compbasemetrics.HandlerFor(r,
compbasemetrics.HandlerOpts{ErrorHandling: compbasemetrics.ContinueOnError}),
+ )
+
++ // deprecated endpoint which will be removed in release 1.20.0+.
++ s.addMetricsBucketMatcher("metrics/resource/v1alpha1")
+ v1alpha1ResourceRegistry := compbasemetrics.NewKubeRegistry()
+
v1alpha1ResourceRegistry.CustomMustRegister(stats.NewPrometheusResourceMetricCollector(s.resourceAnalyzer,
v1alpha1.Config()))
+ s.restfulCont.Handle(path.Join(resourceMetricsPath, v1alpha1.Version),
+ compbasemetrics.HandlerFor(v1alpha1ResourceRegistry,
compbasemetrics.HandlerOpts{ErrorHandling: compbasemetrics.ContinueOnError}),
+ )
+
++ s.addMetricsBucketMatcher("metrics/resource")
+ resourceRegistry := compbasemetrics.NewKubeRegistry()
+
resourceRegistry.CustomMustRegister(collectors.NewResourceMetricsCollector(s.resourceAnalyzer))
+ s.restfulCont.Handle(resourceMetricsPath,
+@@ -334,6 +364,7 @@ func (s *Server)
InstallDefaultHandlers(enableCAdvisorJSONEndpoints bool) {
+
+ // prober metrics are exposed under a different endpoint
+
++ s.addMetricsBucketMatcher("metrics/probes")
+ p := compbasemetrics.NewKubeRegistry()
+ compbasemetrics.RegisterProcessStartTime(p.RawRegister)
+ p.MustRegister(prober.ProberResults)
+@@ -341,6 +372,7 @@ func (s *Server)
InstallDefaultHandlers(enableCAdvisorJSONEndpoints bool) {
+ compbasemetrics.HandlerFor(p,
compbasemetrics.HandlerOpts{ErrorHandling: compbasemetrics.ContinueOnError}),
+ )
+
++ s.addMetricsBucketMatcher("spec")
+ if enableCAdvisorJSONEndpoints {
+ ws := new(restful.WebService)
+ ws.
+@@ -360,6 +392,7 @@ const pprofBasePath = "/debug/pprof/"
+ func (s *Server) InstallDebuggingHandlers(criHandler http.Handler) {
+ klog.Infof("Adding debug handlers to kubelet server.")
+
++ s.addMetricsBucketMatcher("run")
+ ws := new(restful.WebService)
+ ws.
+ Path("/run")
+@@ -371,6 +404,7 @@ func (s *Server) InstallDebuggingHandlers(criHandler
http.Handler) {
+ Operation("getRun"))
+ s.restfulCont.Add(ws)
+
++ s.addMetricsBucketMatcher("exec")
+ ws = new(restful.WebService)
+ ws.
+ Path("/exec")
+@@ -388,6 +422,7 @@ func (s *Server) InstallDebuggingHandlers(criHandler
http.Handler) {
+ Operation("getExec"))
+ s.restfulCont.Add(ws)
+
++ s.addMetricsBucketMatcher("attach")
+ ws = new(restful.WebService)
+ ws.
+ Path("/attach")
+@@ -405,6 +440,7 @@ func (s *Server) InstallDebuggingHandlers(criHandler
http.Handler) {
+ Operation("getAttach"))
+ s.restfulCont.Add(ws)
+
++ s.addMetricsBucketMatcher("portForward")
+ ws = new(restful.WebService)
+ ws.
+ Path("/portForward")
+@@ -422,6 +458,7 @@ func (s *Server) InstallDebuggingHandlers(criHandler
http.Handler) {
+ Operation("getPortForward"))
+ s.restfulCont.Add(ws)
+
++ s.addMetricsBucketMatcher("logs")
+ ws = new(restful.WebService)
+ ws.
+ Path(logsPath)
+@@ -434,6 +471,7 @@ func (s *Server) InstallDebuggingHandlers(criHandler
http.Handler) {
+ Param(ws.PathParameter("logpath", "path to the
log").DataType("string")))
+ s.restfulCont.Add(ws)
+
++ s.addMetricsBucketMatcher("containerLogs")
+ ws = new(restful.WebService)
+ ws.
+ Path("/containerLogs")
+@@ -442,8 +480,10 @@ func (s *Server) InstallDebuggingHandlers(criHandler
http.Handler) {
+ Operation("getContainerLogs"))
+ s.restfulCont.Add(ws)
+
++ s.addMetricsBucketMatcher("configz")
+ configz.InstallHandler(s.restfulCont)
+
++ s.addMetricsBucketMatcher("debug")
+ handlePprofEndpoint := func(req *restful.Request, resp
*restful.Response) {
+ name := strings.TrimPrefix(req.Request.URL.Path, pprofBasePath)
+ switch name {
+@@ -459,7 +499,6 @@ func (s *Server) InstallDebuggingHandlers(criHandler
http.Handler) {
+ pprof.Index(resp, req.Request)
+ }
+ }
+-
+ // Setup pprof handlers.
+ ws = new(restful.WebService).Path(pprofBasePath)
+ ws.Route(ws.GET("/{subpath:*}").To(func(req *restful.Request, resp
*restful.Response) {
+@@ -472,6 +511,7 @@ func (s *Server) InstallDebuggingHandlers(criHandler
http.Handler) {
+ s.restfulCont.Handle("/debug/flags/v",
routes.StringFlagPutHandler(logs.GlogSetter))
+
+ // The /runningpods endpoint is used for testing only.
++ s.addMetricsBucketMatcher("runningpods")
+ ws = new(restful.WebService)
+ ws.
+ Path("/runningpods/").
+@@ -481,6 +521,7 @@ func (s *Server) InstallDebuggingHandlers(criHandler
http.Handler) {
+ Operation("getRunningPods"))
+ s.restfulCont.Add(ws)
+
++ s.addMetricsBucketMatcher("cri")
+ if criHandler != nil {
+ s.restfulCont.Handle("/cri/", criHandler)
+ }
+@@ -492,6 +533,14 @@ func (s *Server) InstallDebuggingDisabledHandlers() {
+ http.Error(w, "Debug endpoints are disabled.",
http.StatusMethodNotAllowed)
+ })
+
++ s.addMetricsBucketMatcher("run")
++ s.addMetricsBucketMatcher("exec")
++ s.addMetricsBucketMatcher("attach")
++ s.addMetricsBucketMatcher("portForward")
++ s.addMetricsBucketMatcher("containerLogs")
++ s.addMetricsBucketMatcher("runningpods")
++ s.addMetricsBucketMatcher("pprof")
++ s.addMetricsBucketMatcher("logs")
+ paths := []string{
+ "/run/", "/exec/", "/attach/", "/portForward/",
"/containerLogs/",
+ "/runningpods/", pprofBasePath, logsPath}
+@@ -808,10 +857,10 @@ func (s *Server) getPortForward(request
*restful.Request, response *restful.Resp
+ proxyStream(response.ResponseWriter, request.Request, url)
+ }
+
+-// trimURLPath trims a URL path.
++// getURLRootPath trims a URL path.
+ // For paths in the format of "/metrics/xxx", "metrics/xxx" is returned;
+ // For all other paths, the first part of the path is returned.
+-func trimURLPath(path string) string {
++func getURLRootPath(path string) string {
+ parts := strings.SplitN(strings.TrimPrefix(path, "/"), "/", 3)
+ if len(parts) == 0 {
+ return path
+@@ -859,7 +908,7 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, req
*http.Request) {
+ serverType = "readwrite"
+ }
+
+- method, path := req.Method, trimURLPath(req.URL.Path)
++ method, path := req.Method, s.getMetricBucket(req.URL.Path)
+
+ longRunning := strconv.FormatBool(isLongRunningRequest(path))
+
+diff --git a/src/import/pkg/kubelet/server/server_test.go
b/src/import/pkg/kubelet/server/server_test.go
+index eba788b50ea..5e6a1cc0588 100644
+--- a/src/import/pkg/kubelet/server/server_test.go
++++ b/src/import/pkg/kubelet/server/server_test.go
+@@ -1460,6 +1460,58 @@ func TestCRIHandler(t *testing.T) {
+ assert.Equal(t, query, fw.criHandler.RequestReceived.URL.RawQuery)
+ }
+
++func TestMetricBuckets(t *testing.T) {
++ tests := map[string]struct {
++ url string
++ bucket string
++ }{
++ "healthz endpoint": {url: "/healthz", bucket:
"healthz"},
++ "attach": {url:
"/attach/podNamespace/podID/containerName", bucket: "attach"},
++ "attach with uid": {url:
"/attach/podNamespace/podID/uid/containerName", bucket: "attach"},
++ "configz": {url: "/configz", bucket:
"configz"},
++ "containerLogs": {url:
"/containerLogs/podNamespace/podID/containerName", bucket: "containerLogs"},
++ "cri": {url: "/cri/", bucket:
"cri"},
++ "cri with sub": {url: "/cri/foo", bucket:
"cri"},
++ "debug v flags": {url: "/debug/flags/v",
bucket: "debug"},
++ "pprof with sub": {url:
"/debug/pprof/subpath", bucket: "debug"},
++ "exec": {url:
"/exec/podNamespace/podID/containerName", bucket: "exec"},
++ "exec with uid": {url:
"/exec/podNamespace/podID/uid/containerName", bucket: "exec"},
++ "healthz": {url: "/healthz/", bucket:
"healthz"},
++ "healthz log sub": {url: "/healthz/log",
bucket: "healthz"},
++ "healthz ping": {url: "/healthz/ping",
bucket: "healthz"},
++ "healthz sync loop": {url: "/healthz/syncloop",
bucket: "healthz"},
++ "logs": {url: "/logs/", bucket:
"logs"},
++ "logs with path": {url: "/logs/logpath",
bucket: "logs"},
++ "metrics": {url: "/metrics", bucket:
"metrics"},
++ "metrics cadvisor sub": {url: "/metrics/cadvisor",
bucket: "metrics/cadvisor"},
++ "metrics probes sub": {url: "/metrics/probes",
bucket: "metrics/probes"},
++ "metrics resource v1alpha1": {url:
"/metrics/resource/v1alpha1", bucket: "metrics/resource"},
++ "metrics resource sub": {url: "/metrics/resource",
bucket: "metrics/resource"},
++ "pods": {url: "/pods/", bucket:
"pods"},
++ "portForward": {url:
"/portForward/podNamespace/podID", bucket: "portForward"},
++ "portForward with uid": {url:
"/portForward/podNamespace/podID/uid", bucket: "portForward"},
++ "run": {url:
"/run/podNamespace/podID/containerName", bucket: "run"},
++ "run with uid": {url:
"/run/podNamespace/podID/uid/containerName", bucket: "run"},
++ "runningpods": {url: "/runningpods/",
bucket: "runningpods"},
++ "spec": {url: "/spec/", bucket:
"spec"},
++ "stats": {url: "/stats/", bucket:
"stats"},
++ "stats container sub": {url: "/stats/container",
bucket: "stats"},
++ "stats summary sub": {url: "/stats/summary",
bucket: "stats"},
++ "stats containerName with uid": {url:
"/stats/namespace/podName/uid/containerName", bucket: "stats"},
++ "stats containerName": {url:
"/stats/podName/containerName", bucket: "stats"},
++ "invalid path": {url: "/junk", bucket:
"Invalid path"},
++ "invalid path starting with good": {url: "/healthzjunk",
bucket: "Invalid path"},
++ }
++ fw := newServerTest()
++ defer fw.testHTTPServer.Close()
++
++ for _, test := range tests {
++ path := test.url
++ bucket := test.bucket
++ require.Equal(t, fw.serverUnderTest.getMetricBucket(path),
bucket)
++ }
++}
++
+ func TestDebuggingDisabledHandlers(t *testing.T) {
+ fw := newServerTestWithDebug(false, false, nil)
+ defer fw.testHTTPServer.Close()
+@@ -1533,6 +1585,6 @@ func TestTrimURLPath(t *testing.T) {
+ }
+
+ for _, test := range tests {
+- assert.Equal(t, test.expected, trimURLPath(test.path),
fmt.Sprintf("path is: %s", test.path))
++ assert.Equal(t, test.expected, getURLRootPath(test.path),
fmt.Sprintf("path is: %s", test.path))
+ }
+ }
+--
+2.17.1
+
diff --git
a/recipes-containers/kubernetes/kubernetes/0001-Add-new-endpoint-for-resource-metrics.patch
b/recipes-containers/kubernetes/kubernetes/0001-Add-new-endpoint-for-resource-metrics.patch
new file mode 100644
index 0000000..82e5fc6
--- /dev/null
+++
b/recipes-containers/kubernetes/kubernetes/0001-Add-new-endpoint-for-resource-metrics.patch
@@ -0,0 +1,440 @@
+From 0db7074e1ad237af1a513bdf51160bf4b4cdc9f1 Mon Sep 17 00:00:00 2001
+From: RainbowMango <[email protected]>
+Date: Sun, 15 Dec 2019 17:06:13 +0800
+Subject: [PATCH] Add new endpoint for resource metrics.
+
+This commit is required for context to fix CVE-2020-8551.
+
+Upstream Status: Backport
[https://github.com/kubernetes/kubernetes/pull/86282/commits/0db7074e1ad237af1a513bdf51160bf4b4cdc9f1]
+CVE: CVE-2020-8551
+
+Signed-off-by: Sakib Sajal <[email protected]>
+---
+ .../metrics/collectors/resource_metrics.go | 153 ++++++++++++++
+ .../collectors/resource_metrics_test.go | 189 ++++++++++++++++++
+ pkg/kubelet/server/auth_test.go | 1 +
+ pkg/kubelet/server/server.go | 23 ++-
+ 4 files changed, 358 insertions(+), 8 deletions(-)
+ create mode 100644 pkg/kubelet/metrics/collectors/resource_metrics.go
+ create mode 100644 pkg/kubelet/metrics/collectors/resource_metrics_test.go
+
+diff --git a/src/import/pkg/kubelet/metrics/collectors/resource_metrics.go
b/src/import/pkg/kubelet/metrics/collectors/resource_metrics.go
+new file mode 100644
+index 00000000000..a3667127903
+--- /dev/null
++++ b/src/import/pkg/kubelet/metrics/collectors/resource_metrics.go
+@@ -0,0 +1,153 @@
++/*
++Copyright 2019 The Kubernetes Authors.
++
++Licensed under the Apache License, Version 2.0 (the "License");
++you may not use this file except in compliance with the License.
++You may obtain a copy of the License at
++
++ http://www.apache.org/licenses/LICENSE-2.0
++
++Unless required by applicable law or agreed to in writing, software
++distributed under the License is distributed on an "AS IS" BASIS,
++WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++See the License for the specific language governing permissions and
++limitations under the License.
++*/
++
++package collectors
++
++import (
++ "time"
++
++ "k8s.io/component-base/metrics"
++ "k8s.io/klog"
++ summary "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1"
++ "k8s.io/kubernetes/pkg/kubelet/server/stats"
++)
++
++var (
++ nodeCPUUsageDesc = metrics.NewDesc("node_cpu_usage_seconds",
++ "Cumulative cpu time consumed by the node in core-seconds",
++ nil,
++ nil,
++ metrics.ALPHA,
++ "")
++
++ nodeMemoryUsageDesc = metrics.NewDesc("node_memory_working_set_bytes",
++ "Current working set of the node in bytes",
++ nil,
++ nil,
++ metrics.ALPHA,
++ "")
++
++ containerCPUUsageDesc = metrics.NewDesc("container_cpu_usage_seconds",
++ "Cumulative cpu time consumed by the container in core-seconds",
++ []string{"container", "pod", "namespace"},
++ nil,
++ metrics.ALPHA,
++ "")
++
++ containerMemoryUsageDesc =
metrics.NewDesc("container_memory_working_set_bytes",
++ "Current working set of the container in bytes",
++ []string{"container", "pod", "namespace"},
++ nil,
++ metrics.ALPHA,
++ "")
++
++ resouceScrapeResultDesc = metrics.NewDesc("scrape_error",
++ "1 if there was an error while getting container metrics, 0
otherwise",
++ nil,
++ nil,
++ metrics.ALPHA,
++ "")
++)
++
++// NewResourceMetricsCollector returns a metrics.StableCollector which
exports resource metrics
++func NewResourceMetricsCollector(provider stats.SummaryProvider)
metrics.StableCollector {
++ return &resourceMetricsCollector{
++ provider: provider,
++ }
++}
++
++type resourceMetricsCollector struct {
++ metrics.BaseStableCollector
++
++ provider stats.SummaryProvider
++}
++
++// Check if resourceMetricsCollector implements necessary interface
++var _ metrics.StableCollector = &resourceMetricsCollector{}
++
++// DescribeWithStability implements metrics.StableCollector
++func (rc *resourceMetricsCollector) DescribeWithStability(ch chan<-
*metrics.Desc) {
++ ch <- nodeCPUUsageDesc
++ ch <- nodeMemoryUsageDesc
++ ch <- containerCPUUsageDesc
++ ch <- containerMemoryUsageDesc
++ ch <- resouceScrapeResultDesc
++}
++
++// CollectWithStability implements metrics.StableCollector
++// Since new containers are frequently created and removed, using the Gauge
would
++// leak metric collectors for containers or pods that no longer exist.
Instead, implement
++// custom collector in a way that only collects metrics for active containers.
++func (rc *resourceMetricsCollector) CollectWithStability(ch chan<-
metrics.Metric) {
++ var errorCount float64
++ defer func() {
++ ch <- metrics.NewLazyConstMetric(resouceScrapeResultDesc,
metrics.GaugeValue, errorCount)
++ }()
++ statsSummary, err := rc.provider.GetCPUAndMemoryStats()
++ if err != nil {
++ errorCount = 1
++ klog.Warningf("Error getting summary for resourceMetric
prometheus endpoint: %v", err)
++ return
++ }
++
++ rc.collectNodeCPUMetrics(ch, statsSummary.Node)
++ rc.collectNodeMemoryMetrics(ch, statsSummary.Node)
++
++ for _, pod := range statsSummary.Pods {
++ for _, container := range pod.Containers {
++ rc.collectContainerCPUMetrics(ch, pod, container)
++ rc.collectContainerMemoryMetrics(ch, pod, container)
++ }
++ }
++}
++
++func (rc *resourceMetricsCollector) collectNodeCPUMetrics(ch chan<-
metrics.Metric, s summary.NodeStats) {
++ if s.CPU == nil {
++ return
++ }
++
++ ch <- metrics.NewLazyMetricWithTimestamp(s.CPU.Time.Time,
++ metrics.NewLazyConstMetric(nodeCPUUsageDesc,
metrics.GaugeValue, float64(*s.CPU.UsageCoreNanoSeconds)/float64(time.Second)))
++}
++
++func (rc *resourceMetricsCollector) collectNodeMemoryMetrics(ch chan<-
metrics.Metric, s summary.NodeStats) {
++ if s.Memory == nil {
++ return
++ }
++
++ ch <- metrics.NewLazyMetricWithTimestamp(s.Memory.Time.Time,
++ metrics.NewLazyConstMetric(nodeMemoryUsageDesc,
metrics.GaugeValue, float64(*s.Memory.WorkingSetBytes)))
++}
++
++func (rc *resourceMetricsCollector) collectContainerCPUMetrics(ch chan<-
metrics.Metric, pod summary.PodStats, s summary.ContainerStats) {
++ if s.CPU == nil {
++ return
++ }
++
++ ch <- metrics.NewLazyMetricWithTimestamp(s.CPU.Time.Time,
++ metrics.NewLazyConstMetric(containerCPUUsageDesc,
metrics.GaugeValue,
++
float64(*s.CPU.UsageCoreNanoSeconds)/float64(time.Second), s.Name,
pod.PodRef.Name, pod.PodRef.Namespace))
++}
++
++func (rc *resourceMetricsCollector) collectContainerMemoryMetrics(ch chan<-
metrics.Metric, pod summary.PodStats, s summary.ContainerStats) {
++ if s.Memory == nil {
++ return
++ }
++
++ ch <- metrics.NewLazyMetricWithTimestamp(s.Memory.Time.Time,
++ metrics.NewLazyConstMetric(containerMemoryUsageDesc,
metrics.GaugeValue,
++ float64(*s.Memory.WorkingSetBytes), s.Name,
pod.PodRef.Name, pod.PodRef.Namespace))
++}
+diff --git
a/src/import/pkg/kubelet/metrics/collectors/resource_metrics_test.go
b/src/import/pkg/kubelet/metrics/collectors/resource_metrics_test.go
+new file mode 100644
+index 00000000000..b92aabbd675
+--- /dev/null
++++ b/src/import/pkg/kubelet/metrics/collectors/resource_metrics_test.go
+@@ -0,0 +1,189 @@
++/*
++Copyright 2019 The Kubernetes Authors.
++
++Licensed under the Apache License, Version 2.0 (the "License");
++you may not use this file except in compliance with the License.
++You may obtain a copy of the License at
++
++ http://www.apache.org/licenses/LICENSE-2.0
++
++Unless required by applicable law or agreed to in writing, software
++distributed under the License is distributed on an "AS IS" BASIS,
++WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++See the License for the specific language governing permissions and
++limitations under the License.
++*/
++
++package collectors
++
++import (
++ "fmt"
++ "strings"
++ "testing"
++ "time"
++
++ "github.com/stretchr/testify/mock"
++
++ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
++ "k8s.io/component-base/metrics/testutil"
++ statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1"
++)
++
++type mockSummaryProvider struct {
++ mock.Mock
++}
++
++func (m *mockSummaryProvider) Get(updateStats bool) (*statsapi.Summary,
error) {
++ args := m.Called(updateStats)
++ return args.Get(0).(*statsapi.Summary), args.Error(1)
++}
++
++func (m *mockSummaryProvider) GetCPUAndMemoryStats() (*statsapi.Summary,
error) {
++ args := m.Called()
++ return args.Get(0).(*statsapi.Summary), args.Error(1)
++}
++
++func TestCollectResourceMetrics(t *testing.T) {
++ testTime := metav1.NewTime(time.Unix(2, 0)) // a static timestamp: 2000
++ interestedMetrics := []string{
++ "scrape_error",
++ "node_cpu_usage_seconds",
++ "node_memory_working_set_bytes",
++ "container_cpu_usage_seconds",
++ "container_memory_working_set_bytes",
++ }
++
++ tests := []struct {
++ name string
++ summary *statsapi.Summary
++ summaryErr error
++ expectedMetrics string
++ }{
++ {
++ name: "error getting summary",
++ summary: nil,
++ summaryErr: fmt.Errorf("failed to get summary"),
++ expectedMetrics: `
++ # HELP scrape_error [ALPHA] 1 if there was an
error while getting container metrics, 0 otherwise
++ # TYPE scrape_error gauge
++ scrape_error 1
++ `,
++ },
++ {
++ name: "arbitrary node metrics",
++ summary: &statsapi.Summary{
++ Node: statsapi.NodeStats{
++ CPU: &statsapi.CPUStats{
++ Time: testTime,
++ UsageCoreNanoSeconds:
uint64Ptr(10000000000),
++ },
++ Memory: &statsapi.MemoryStats{
++ Time: testTime,
++ WorkingSetBytes:
uint64Ptr(1000),
++ },
++ },
++ },
++ summaryErr: nil,
++ expectedMetrics: `
++ # HELP node_cpu_usage_seconds [ALPHA]
Cumulative cpu time consumed by the node in core-seconds
++ # TYPE node_cpu_usage_seconds gauge
++ node_cpu_usage_seconds 10 2000
++ # HELP node_memory_working_set_bytes [ALPHA]
Current working set of the node in bytes
++ # TYPE node_memory_working_set_bytes gauge
++ node_memory_working_set_bytes 1000 2000
++ # HELP scrape_error [ALPHA] 1 if there was an
error while getting container metrics, 0 otherwise
++ # TYPE scrape_error gauge
++ scrape_error 0
++ `,
++ },
++ {
++ name: "arbitrary container metrics for different
container, pods and namespaces",
++ summary: &statsapi.Summary{
++ Pods: []statsapi.PodStats{
++ {
++ PodRef: statsapi.PodReference{
++ Name: "pod_a",
++ Namespace:
"namespace_a",
++ },
++ Containers:
[]statsapi.ContainerStats{
++ {
++ Name:
"container_a",
++ CPU:
&statsapi.CPUStats{
++ Time:
testTime,
++
UsageCoreNanoSeconds: uint64Ptr(10000000000),
++ },
++ Memory:
&statsapi.MemoryStats{
++ Time:
testTime,
++
WorkingSetBytes: uint64Ptr(1000),
++ },
++ },
++ {
++ Name:
"container_b",
++ CPU:
&statsapi.CPUStats{
++ Time:
testTime,
++
UsageCoreNanoSeconds: uint64Ptr(10000000000),
++ },
++ Memory:
&statsapi.MemoryStats{
++ Time:
testTime,
++
WorkingSetBytes: uint64Ptr(1000),
++ },
++ },
++ },
++ },
++ {
++ PodRef: statsapi.PodReference{
++ Name: "pod_b",
++ Namespace:
"namespace_b",
++ },
++ Containers:
[]statsapi.ContainerStats{
++ {
++ Name:
"container_a",
++ CPU:
&statsapi.CPUStats{
++ Time:
testTime,
++
UsageCoreNanoSeconds: uint64Ptr(10000000000),
++ },
++ Memory:
&statsapi.MemoryStats{
++ Time:
testTime,
++
WorkingSetBytes: uint64Ptr(1000),
++ },
++ },
++ },
++ },
++ },
++ },
++ summaryErr: nil,
++ expectedMetrics: `
++ # HELP scrape_error [ALPHA] 1 if there was an
error while getting container metrics, 0 otherwise
++ # TYPE scrape_error gauge
++ scrape_error 0
++ # HELP container_cpu_usage_seconds [ALPHA]
Cumulative cpu time consumed by the container in core-seconds
++ # TYPE container_cpu_usage_seconds gauge
++
container_cpu_usage_seconds{container="container_a",namespace="namespace_a",pod="pod_a"}
10 2000
++
container_cpu_usage_seconds{container="container_a",namespace="namespace_b",pod="pod_b"}
10 2000
++
container_cpu_usage_seconds{container="container_b",namespace="namespace_a",pod="pod_a"}
10 2000
++ # HELP container_memory_working_set_bytes
[ALPHA] Current working set of the container in bytes
++ # TYPE container_memory_working_set_bytes gauge
++
container_memory_working_set_bytes{container="container_a",namespace="namespace_a",pod="pod_a"}
1000 2000
++
container_memory_working_set_bytes{container="container_a",namespace="namespace_b",pod="pod_b"}
1000 2000
++
container_memory_working_set_bytes{container="container_b",namespace="namespace_a",pod="pod_a"}
1000 2000
++ `,
++ },
++ }
++
++ for _, test := range tests {
++ tc := test
++ t.Run(tc.name, func(t *testing.T) {
++ provider := &mockSummaryProvider{}
++ provider.On("GetCPUAndMemoryStats").Return(tc.summary,
tc.summaryErr)
++ collector := NewResourceMetricsCollector(provider)
++
++ if err := testutil.CustomCollectAndCompare(collector,
strings.NewReader(tc.expectedMetrics), interestedMetrics...); err != nil {
++ t.Fatal(err)
++ }
++ })
++ }
++}
++
++func uint64Ptr(u uint64) *uint64 {
++ return &u
++}
+diff --git a/src/import/pkg/kubelet/server/auth_test.go
b/src/import/pkg/kubelet/server/auth_test.go
+index d598bc3892b..638f3ba2bf0 100644
+--- a/src/import/pkg/kubelet/server/auth_test.go
++++ b/src/import/pkg/kubelet/server/auth_test.go
+@@ -128,6 +128,7 @@ func AuthzTestCases() []AuthzTestCase {
+ "/metrics/cadvisor": "metrics",
+ "/metrics/probes": "metrics",
+ "/metrics/resource/v1alpha1": "metrics",
++ "/metrics/resource": "metrics",
+ "/pods/": "proxy",
+ "/portForward/{podNamespace}/{podID}": "proxy",
+ "/portForward/{podNamespace}/{podID}/{uid}": "proxy",
+diff --git a/src/import/pkg/kubelet/server/server.go
b/src/import/pkg/kubelet/server/server.go
+index 87f3bd28a25..74eeaf10171 100644
+--- a/src/import/pkg/kubelet/server/server.go
++++ b/src/import/pkg/kubelet/server/server.go
+@@ -38,6 +38,7 @@ import (
+ "github.com/google/cadvisor/metrics"
+ "google.golang.org/grpc"
+ "k8s.io/klog"
++ "k8s.io/kubernetes/pkg/kubelet/metrics/collectors"
+
+ "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+@@ -74,13 +75,13 @@ import (
+ )
+
+ const (
+- metricsPath = "/metrics"
+- cadvisorMetricsPath = "/metrics/cadvisor"
+- resourceMetricsPathPrefix = "/metrics/resource"
+- proberMetricsPath = "/metrics/probes"
+- specPath = "/spec/"
+- statsPath = "/stats/"
+- logsPath = "/logs/"
++ metricsPath = "/metrics"
++ cadvisorMetricsPath = "/metrics/cadvisor"
++ resourceMetricsPath = "/metrics/resource"
++ proberMetricsPath = "/metrics/probes"
++ specPath = "/spec/"
++ statsPath = "/stats/"
++ logsPath = "/logs/"
+ )
+
+ // Server is a http.Handler which exposes kubelet functionality over HTTP.
+@@ -321,10 +322,16 @@ func (s *Server)
InstallDefaultHandlers(enableCAdvisorJSONEndpoints bool) {
+
+ v1alpha1ResourceRegistry := compbasemetrics.NewKubeRegistry()
+
v1alpha1ResourceRegistry.CustomMustRegister(stats.NewPrometheusResourceMetricCollector(s.resourceAnalyzer,
v1alpha1.Config()))
+- s.restfulCont.Handle(path.Join(resourceMetricsPathPrefix,
v1alpha1.Version),
++ s.restfulCont.Handle(path.Join(resourceMetricsPath, v1alpha1.Version),
+ compbasemetrics.HandlerFor(v1alpha1ResourceRegistry,
compbasemetrics.HandlerOpts{ErrorHandling: compbasemetrics.ContinueOnError}),
+ )
+
++ resourceRegistry := compbasemetrics.NewKubeRegistry()
++
resourceRegistry.CustomMustRegister(collectors.NewResourceMetricsCollector(s.resourceAnalyzer))
++ s.restfulCont.Handle(resourceMetricsPath,
++ compbasemetrics.HandlerFor(resourceRegistry,
compbasemetrics.HandlerOpts{ErrorHandling: compbasemetrics.ContinueOnError}),
++ )
++
+ // prober metrics are exposed under a different endpoint
+
+ p := compbasemetrics.NewKubeRegistry()
+--
+2.20.1
+
diff --git
a/recipes-containers/kubernetes/kubernetes/0001-Deal-with-auto-generated-files.patch
b/recipes-containers/kubernetes/kubernetes/0001-Deal-with-auto-generated-files.patch
new file mode 100644
index 0000000..f7a5c7c
--- /dev/null
+++
b/recipes-containers/kubernetes/kubernetes/0001-Deal-with-auto-generated-files.patch
@@ -0,0 +1,60 @@
+From c394d821fdafd719619eb63fcd1065a95ec02ef9 Mon Sep 17 00:00:00 2001
+From: RainbowMango <[email protected]>
+Date: Sun, 15 Dec 2019 18:37:38 +0800
+Subject: [PATCH] Deal with auto-generated files: - Update bazel by
+ hack/update-bazel.sh
+
+This commit is needed for context to fix CVE-2020-8551
+
+Upstream Status: Backport
[https://github.com/kubernetes/kubernetes/pull/86282/commits/c394d821fdafd719619eb63fcd1065a95ec02ef9]
+CVE: CVE-2020-8551
+
+Signed-off-by: Sakib Sajal <[email protected]>
+---
+ pkg/kubelet/metrics/collectors/BUILD | 3 +++
+ pkg/kubelet/server/BUILD | 1 +
+ 2 files changed, 4 insertions(+)
+
+diff --git a/src/import/pkg/kubelet/metrics/collectors/BUILD
b/src/import/pkg/kubelet/metrics/collectors/BUILD
+index 00bc335320f..25398793eab 100644
+--- a/src/import/pkg/kubelet/metrics/collectors/BUILD
++++ b/src/import/pkg/kubelet/metrics/collectors/BUILD
+@@ -4,6 +4,7 @@ go_library(
+ name = "go_default_library",
+ srcs = [
+ "log_metrics.go",
++ "resource_metrics.go",
+ "volume_stats.go",
+ ],
+ importpath = "k8s.io/kubernetes/pkg/kubelet/metrics/collectors",
+@@ -22,6 +23,7 @@ go_test(
+ name = "go_default_test",
+ srcs = [
+ "log_metrics_test.go",
++ "resource_metrics_test.go",
+ "volume_stats_test.go",
+ ],
+ embed = [":go_default_library"],
+@@ -30,6 +32,7 @@ go_test(
+ "//pkg/kubelet/server/stats/testing:go_default_library",
+
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
+
"//staging/src/k8s.io/component-base/metrics/testutil:go_default_library",
++ "//vendor/github.com/stretchr/testify/mock:go_default_library",
+ ],
+ )
+
+diff --git a/src/import/pkg/kubelet/server/BUILD
b/src/import/pkg/kubelet/server/BUILD
+index d83619fcbe5..a18f1b5e83b 100644
+--- a/src/import/pkg/kubelet/server/BUILD
++++ b/src/import/pkg/kubelet/server/BUILD
+@@ -22,6 +22,7 @@ go_library(
+ "//pkg/kubelet/apis/podresources/v1alpha1:go_default_library",
+ "//pkg/kubelet/apis/resourcemetrics/v1alpha1:go_default_library",
+ "//pkg/kubelet/container:go_default_library",
++ "//pkg/kubelet/metrics/collectors:go_default_library",
+ "//pkg/kubelet/prober:go_default_library",
+ "//pkg/kubelet/server/metrics:go_default_library",
+ "//pkg/kubelet/server/portforward:go_default_library",
+--
+2.20.1
+
diff --git
a/recipes-containers/kubernetes/kubernetes/0001-remove-client-label-from-apiserver-request-count-met.patch
b/recipes-containers/kubernetes/kubernetes/0001-remove-client-label-from-apiserver-request-count-met.patch
new file mode 100644
index 0000000..d4bf783
--- /dev/null
+++
b/recipes-containers/kubernetes/kubernetes/0001-remove-client-label-from-apiserver-request-count-met.patch
@@ -0,0 +1,171 @@
+From a657089732c0bd5d4515fb9208182c31c6c05790 Mon Sep 17 00:00:00 2001
+From: Han Kang <[email protected]>
+Date: Wed, 29 Jan 2020 12:25:55 -0800
+Subject: [PATCH] remove client label from apiserver request count metric since
+ it is unbounded
+
+Change-Id: I3a9eacebc9d9dc9ed6347260d9378cdcb5743431
+
+Upstream Status: Backport
[https://github.com/kubernetes/kubernetes/pull/87669/commits/cc3190968b1f14ddf4067abef849fc41bd6068dc]
+CVE: CVE-2020-8552
+
+Signed-off-by: Sakib Sajal <[email protected]>
+---
+ .../apiserver/pkg/endpoints/metrics/BUILD | 8 ---
+ .../pkg/endpoints/metrics/metrics.go | 23 ++------
+ .../pkg/endpoints/metrics/metrics_test.go | 54 -------------------
+ 3 files changed, 4 insertions(+), 81 deletions(-)
+ delete mode 100644
staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics_test.go
+
+diff --git
a/src/import/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/BUILD
b/src/import/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/BUILD
+index 8d13a34eadc..8abb3d1a611 100644
+--- a/src/import/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/BUILD
++++ b/src/import/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/BUILD
+@@ -3,13 +3,6 @@ package(default_visibility = ["//visibility:public"])
+ load(
+ "@io_bazel_rules_go//go:def.bzl",
+ "go_library",
+- "go_test",
+-)
+-
+-go_test(
+- name = "go_default_test",
+- srcs = ["metrics_test.go"],
+- embed = [":go_default_library"],
+ )
+
+ go_library(
+@@ -20,7 +13,6 @@ go_library(
+ deps = [
+
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/validation:go_default_library",
+ "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
+- "//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library",
+ "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
+
"//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library",
+ "//staging/src/k8s.io/apiserver/pkg/features:go_default_library",
+diff --git
a/src/import/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go
b/src/import/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go
+index 36ff861da7a..81a9a2c5e6f 100644
+--- a/src/import/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go
++++ b/src/import/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go
+@@ -31,7 +31,6 @@ import (
+
+ "k8s.io/apimachinery/pkg/apis/meta/v1/validation"
+ "k8s.io/apimachinery/pkg/types"
+- utilnet "k8s.io/apimachinery/pkg/util/net"
+ utilsets "k8s.io/apimachinery/pkg/util/sets"
+ "k8s.io/apiserver/pkg/endpoints/request"
+ "k8s.io/apiserver/pkg/features"
+@@ -65,14 +64,14 @@ var (
+ requestCounter = compbasemetrics.NewCounterVec(
+ &compbasemetrics.CounterOpts{
+ Name: "apiserver_request_total",
+- Help: "Counter of apiserver requests broken
out for each verb, dry run value, group, version, resource, scope, component,
client, and HTTP response contentType and code.",
++ Help: "Counter of apiserver requests broken
out for each verb, dry run value, group, version, resource, scope, component,
and HTTP response contentType and code.",
+ StabilityLevel: compbasemetrics.ALPHA,
+ },
+ // The label_name contentType doesn't follow the label_name
convention defined here:
+ //
https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/instrumentation.md
+ // But changing it would break backwards compatibility. Future
label_names
+ // should be all lowercase and separated by underscores.
+- []string{"verb", "dry_run", "group", "version", "resource",
"subresource", "scope", "component", "client", "contentType", "code"},
++ []string{"verb", "dry_run", "group", "version", "resource",
"subresource", "scope", "component", "contentType", "code"},
+ )
+ deprecatedRequestCounter = compbasemetrics.NewCounterVec(
+ &compbasemetrics.CounterOpts{
+@@ -301,11 +300,10 @@ func RecordLongRunning(req *http.Request, requestInfo
*request.RequestInfo, comp
+ func MonitorRequest(req *http.Request, verb, group, version, resource,
subresource, scope, component, contentType string, httpCode, respSize int,
elapsed time.Duration) {
+ reportedVerb := cleanVerb(verb, req)
+ dryRun := cleanDryRun(req.URL)
+- client := cleanUserAgent(utilnet.GetHTTPClient(req))
+ elapsedMicroseconds := float64(elapsed / time.Microsecond)
+ elapsedSeconds := elapsed.Seconds()
+- requestCounter.WithLabelValues(reportedVerb, dryRun, group, version,
resource, subresource, scope, component, client, contentType,
codeToString(httpCode)).Inc()
+- deprecatedRequestCounter.WithLabelValues(reportedVerb, group, version,
resource, subresource, scope, component, client, contentType,
codeToString(httpCode)).Inc()
++ requestCounter.WithLabelValues(reportedVerb, dryRun, group, version,
resource, subresource, scope, component, contentType,
codeToString(httpCode)).Inc()
++ deprecatedRequestCounter.WithLabelValues(reportedVerb, group, version,
resource, subresource, scope, component, contentType,
codeToString(httpCode)).Inc()
+ requestLatencies.WithLabelValues(reportedVerb, dryRun, group, version,
resource, subresource, scope, component).Observe(elapsedSeconds)
+ deprecatedRequestLatencies.WithLabelValues(reportedVerb, group,
version, resource, subresource, scope, component).Observe(elapsedMicroseconds)
+ deprecatedRequestLatenciesSummary.WithLabelValues(reportedVerb, group,
version, resource, subresource, scope, component).Observe(elapsedMicroseconds)
+@@ -425,19 +423,6 @@ func cleanDryRun(u *url.URL) string {
+ return strings.Join(utilsets.NewString(dryRun...).List(), ",")
+ }
+
+-func cleanUserAgent(ua string) string {
+- // We collapse all "web browser"-type user agents into one "browser" to
reduce metric cardinality.
+- if strings.HasPrefix(ua, "Mozilla/") {
+- return "Browser"
+- }
+- // If an old "kubectl.exe" has passed us its full path, we discard the
path portion.
+- if kubectlExeRegexp.MatchString(ua) {
+- // avoid an allocation
+- ua = kubectlExeRegexp.ReplaceAllString(ua, "$1")
+- }
+- return ua
+-}
+-
+ // ResponseWriterDelegator interface wraps http.ResponseWriter to
additionally record content-length, status-code, etc.
+ type ResponseWriterDelegator struct {
+ http.ResponseWriter
+diff --git
a/src/import/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics_test.go
b/src/import/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics_test.go
+deleted file mode 100644
+index 4c0a8aa5d27..00000000000
+---
a/src/import/staging/src/k8s.io/apiserver/pkg/endpoints/metrics/metrics_test.go
++++ /dev/null
+@@ -1,54 +0,0 @@
+-/*
+-Copyright 2015 The Kubernetes Authors.
+-
+-Licensed under the Apache License, Version 2.0 (the "License");
+-you may not use this file except in compliance with the License.
+-You may obtain a copy of the License at
+-
+- http://www.apache.org/licenses/LICENSE-2.0
+-
+-Unless required by applicable law or agreed to in writing, software
+-distributed under the License is distributed on an "AS IS" BASIS,
+-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-See the License for the specific language governing permissions and
+-limitations under the License.
+-*/
+-
+-package metrics
+-
+-import "testing"
+-
+-func TestCleanUserAgent(t *testing.T) {
+- panicBuf := []byte{198, 73, 129, 133, 90, 216, 104, 29, 13, 134, 209,
233, 30, 0, 22}
+-
+- for _, tc := range []struct {
+- In string
+- Out string
+- }{
+- {
+- In: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36",
+- Out: "Browser",
+- },
+- {
+- In: "kubectl/v1.2.4",
+- Out: "kubectl/v1.2.4",
+- },
+- {
+- In: `C:\Users\Kubernetes\kubectl.exe/v1.5.4`,
+- Out: "kubectl.exe/v1.5.4",
+- },
+- {
+- In: `C:\Program Files\kubectl.exe/v1.5.4`,
+- Out: "kubectl.exe/v1.5.4",
+- },
+- {
+- // This malicious input courtesy of enisoc.
+- In: string(panicBuf) + "kubectl.exe",
+- Out: "kubectl.exe",
+- },
+- } {
+- if cleanUserAgent(tc.In) != tc.Out {
+- t.Errorf("Failed to clean User-Agent: %s", tc.In)
+- }
+- }
+-}
+--
+2.17.1
+
diff --git
a/recipes-containers/kubernetes/kubernetes/0001-update-gopkg.in-yaml.v2-to-v2.2.8.patch
b/recipes-containers/kubernetes/kubernetes/0001-update-gopkg.in-yaml.v2-to-v2.2.8.patch
new file mode 100644
index 0000000..2688797
--- /dev/null
+++
b/recipes-containers/kubernetes/kubernetes/0001-update-gopkg.in-yaml.v2-to-v2.2.8.patch
@@ -0,0 +1,825 @@
+From a290fe55cb2f4593eb4ec5bf410cd77b9d925464 Mon Sep 17 00:00:00 2001
+From: CJ Cullen <[email protected]>
+Date: Wed, 22 Jan 2020 11:32:39 -0800
+Subject: [PATCH] update gopkg.in/yaml.v2 to v2.2.8
+
+Upstream Status: Backport
[https://github.com/kubernetes/kubernetes/pull/87637/commits/a290fe55cb2f4593eb4ec5bf410cd77b9d925464]
+CVE: CVE-2019-11254
+
+Signed-off-by: Sakib Sajal <[email protected]>
+---
+ go.mod | 4 +-
+ go.sum | 4 +-
+ staging/src/k8s.io/api/go.sum | 4 +-
+ .../src/k8s.io/apiextensions-apiserver/go.mod | 2 +-
+ .../src/k8s.io/apiextensions-apiserver/go.sum | 2 +
+ staging/src/k8s.io/apimachinery/go.mod | 2 +-
+ staging/src/k8s.io/apimachinery/go.sum | 4 +-
+ staging/src/k8s.io/apiserver/go.mod | 2 +-
+ staging/src/k8s.io/apiserver/go.sum | 4 +-
+ staging/src/k8s.io/cli-runtime/go.sum | 4 +-
+ staging/src/k8s.io/client-go/go.sum | 4 +-
+ staging/src/k8s.io/cloud-provider/go.sum | 4 +-
+ staging/src/k8s.io/cluster-bootstrap/go.sum | 4 +-
+ staging/src/k8s.io/code-generator/go.mod | 2 +-
+ staging/src/k8s.io/code-generator/go.sum | 4 +-
+ staging/src/k8s.io/component-base/go.sum | 4 +-
+ staging/src/k8s.io/cri-api/go.mod | 2 +-
+ staging/src/k8s.io/cri-api/go.sum | 4 +-
+ staging/src/k8s.io/csi-translation-lib/go.sum | 4 +-
+ staging/src/k8s.io/kube-aggregator/go.sum | 4 +-
+ .../src/k8s.io/kube-controller-manager/go.sum | 4 +-
+ staging/src/k8s.io/kube-proxy/go.sum | 4 +-
+ staging/src/k8s.io/kube-scheduler/go.sum | 4 +-
+ staging/src/k8s.io/kubectl/go.mod | 2 +-
+ staging/src/k8s.io/kubectl/go.sum | 4 +-
+ staging/src/k8s.io/kubelet/go.sum | 4 +-
+ .../src/k8s.io/legacy-cloud-providers/go.sum | 4 +-
+ staging/src/k8s.io/metrics/go.sum | 4 +-
+ staging/src/k8s.io/node-api/go.sum | 4 +-
+ staging/src/k8s.io/sample-apiserver/go.sum | 4 +-
+ staging/src/k8s.io/sample-cli-plugin/go.sum | 4 +-
+ staging/src/k8s.io/sample-controller/go.sum | 4 +-
+ vendor/gopkg.in/yaml.v2/.travis.yml | 18 +--
+ vendor/gopkg.in/yaml.v2/decode.go | 14 ++-
+ vendor/gopkg.in/yaml.v2/scannerc.go | 107 +++++++++---------
+ vendor/gopkg.in/yaml.v2/yaml.go | 2 +-
+ vendor/gopkg.in/yaml.v2/yamlh.go | 1 +
+ vendor/modules.txt | 2 +-
+ 38 files changed, 133 insertions(+), 125 deletions(-)
+
+diff --git a/src/import/go.mod b/src/import/go.mod
+index 7d515c2ffb0..28de082aa0d 100644
+--- a/src/import/go.mod
++++ b/src/import/go.mod
+@@ -131,7 +131,7 @@ require (
+ google.golang.org/grpc v1.23.1
+ gopkg.in/gcfg.v1 v1.2.0
+ gopkg.in/square/go-jose.v2 v2.2.2
+- gopkg.in/yaml.v2 v2.2.4
++ gopkg.in/yaml.v2 v2.2.8
+ gotest.tools v2.2.0+incompatible
+ gotest.tools/gotestsum v0.3.5
+ honnef.co/go/tools v0.0.1-2019.2.2
+@@ -518,7 +518,7 @@ replace (
+ gopkg.in/square/go-jose.v2 => gopkg.in/square/go-jose.v2 v2.2.2
+ gopkg.in/tomb.v1 => gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7
+ gopkg.in/warnings.v0 => gopkg.in/warnings.v0 v0.1.1
+- gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.4
++ gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8
+ gotest.tools => gotest.tools v2.2.0+incompatible
+ gotest.tools/gotestsum => gotest.tools/gotestsum v0.3.5
+ grpc.go4.org => grpc.go4.org v0.0.0-20170609214715-11d0a25b4919
+diff --git a/src/import/go.sum b/src/import/go.sum
+index 72d79cb27b2..43aaee0e578 100644
+--- a/src/import/go.sum
++++ b/src/import/go.sum
+@@ -574,8 +574,8 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7
h1:uRGJdciOHaEIrze2W8Q3AKkep
+ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod
h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+ gopkg.in/warnings.v0 v0.1.1 h1:XM28wIgFzaBmeZ5dNHIpWLQpt/9DGKxk+rCg/22nnYE=
+ gopkg.in/warnings.v0 v0.1.1/go.mod
h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gotest.tools v2.2.0+incompatible
h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
+ gotest.tools v2.2.0+incompatible/go.mod
h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
+ gotest.tools/gotestsum v0.3.5 h1:VePOWRsuWFYpfp/G8mbmOZKxO5T3501SEGQRUdvq7h0=
+diff --git a/src/import/staging/src/k8s.io/api/go.sum
b/src/importsrc/import/staging/src/k8s.io/api/go.sum
+index 08ad9edc62a..73199a7c13e 100644
+--- a/src/import/staging/src/k8s.io/api/go.sum
++++ b/src/import/staging/src/k8s.io/api/go.sum
+@@ -95,8 +95,8 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod
h1:dt/ZhP58zS4L8KSrWD
+ gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod
h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+ k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod
h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
+ k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
+diff --git a/src/import/staging/src/k8s.io/apiextensions-apiserver/go.mod
b/src/importsrc/import/staging/src/k8s.io/apiextensions-apiserver/go.mod
+index 97014a76a68..499daf4ffa7 100644
+--- a/src/import/staging/src/k8s.io/apiextensions-apiserver/go.mod
++++ b/src/import/staging/src/k8s.io/apiextensions-apiserver/go.mod
+@@ -20,7 +20,7 @@ require (
+ github.com/stretchr/testify v1.4.0
+ go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738
+ google.golang.org/grpc v1.23.1
+- gopkg.in/yaml.v2 v2.2.4
++ gopkg.in/yaml.v2 v2.2.8
+ k8s.io/api v0.0.0
+ k8s.io/apimachinery v0.0.0
+ k8s.io/apiserver v0.0.0
+diff --git a/src/import/staging/src/k8s.io/apiextensions-apiserver/go.sum
b/src/importstaging/src/k8s.io/apiextensions-apiserver/go.sum
+index 6f8bd4918ce..ef6973e4220 100644
+--- a/src/import/staging/src/k8s.io/apiextensions-apiserver/go.sum
++++ b/src/import/staging/src/k8s.io/apiextensions-apiserver/go.sum
+@@ -449,6 +449,8 @@ gopkg.in/yaml.v2 v2.2.2
h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+ gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gotest.tools v2.2.0+incompatible/go.mod
h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
+ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+diff --git a/src/import/staging/src/k8s.io/apimachinery/go.mod
b/src/importstaging/src/k8s.io/apimachinery/go.mod
+index 85bd7edfc84..569aa8941c4 100644
+--- a/src/import/staging/src/k8s.io/apimachinery/go.mod
++++ b/src/import/staging/src/k8s.io/apimachinery/go.mod
+@@ -30,7 +30,7 @@ require (
+ golang.org/x/text v0.3.2 // indirect
+ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
+ gopkg.in/inf.v0 v0.9.1
+- gopkg.in/yaml.v2 v2.2.4
++ gopkg.in/yaml.v2 v2.2.8
+ k8s.io/klog v1.0.0
+ k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a
+ sigs.k8s.io/yaml v1.1.0
+diff --git a/src/import/staging/src/k8s.io/apimachinery/go.sum
b/src/importstaging/src/k8s.io/apimachinery/go.sum
+index 52ad8335f42..0741a85da3f 100644
+--- a/src/import/staging/src/k8s.io/apimachinery/go.sum
++++ b/src/import/staging/src/k8s.io/apimachinery/go.sum
+@@ -111,8 +111,8 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod
h1:dt/ZhP58zS4L8KSrWD
+ gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod
h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+ k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod
h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
+ k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
+diff --git a/src/import/staging/src/k8s.io/apiserver/go.mod
b/src/importstaging/src/k8s.io/apiserver/go.mod
+index 01b925bab48..6586e6680cb 100644
+--- a/src/import/staging/src/k8s.io/apiserver/go.mod
++++ b/src/import/staging/src/k8s.io/apiserver/go.mod
+@@ -42,7 +42,7 @@ require (
+ google.golang.org/grpc v1.23.1
+ gopkg.in/natefinch/lumberjack.v2 v2.0.0
+ gopkg.in/square/go-jose.v2 v2.2.2
+- gopkg.in/yaml.v2 v2.2.4
++ gopkg.in/yaml.v2 v2.2.8
+ gotest.tools v2.2.0+incompatible // indirect
+ k8s.io/api v0.0.0
+ k8s.io/apimachinery v0.0.0
+diff --git a/src/import/staging/src/k8s.io/apiserver/go.sum
b/src/importstaging/src/k8s.io/apiserver/go.sum
+index a9014243b34..0b216e592e4 100644
+--- a/src/import/staging/src/k8s.io/apiserver/go.sum
++++ b/src/import/staging/src/k8s.io/apiserver/go.sum
+@@ -345,8 +345,8 @@ gopkg.in/yaml.v2 v2.2.1
h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gotest.tools v2.2.0+incompatible
h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
+ gotest.tools v2.2.0+incompatible/go.mod
h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
+ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+diff --git a/src/import/staging/src/k8s.io/cli-runtime/go.sum
b/src/importstaging/src/k8s.io/cli-runtime/go.sum
+index a5eef73070b..c6c2d0d9231 100644
+--- a/src/import/staging/src/k8s.io/cli-runtime/go.sum
++++ b/src/import/staging/src/k8s.io/cli-runtime/go.sum
+@@ -234,8 +234,8 @@ gopkg.in/yaml.v2 v2.2.1
h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod
h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+diff --git a/src/import/staging/src/k8s.io/client-go/go.sum
b/src/importstaging/src/k8s.io/client-go/go.sum
+index d0df7473b3e..f8f205a69d7 100644
+--- a/src/import/staging/src/k8s.io/client-go/go.sum
++++ b/src/import/staging/src/k8s.io/client-go/go.sum
+@@ -189,8 +189,8 @@ gopkg.in/yaml.v2 v2.2.1
h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod
h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+diff --git a/src/import/staging/src/k8s.io/cloud-provider/go.sum
b/src/importstaging/src/k8s.io/cloud-provider/go.sum
+index 8ccf452dc8d..74228199881 100644
+--- a/src/import/staging/src/k8s.io/cloud-provider/go.sum
++++ b/src/import/staging/src/k8s.io/cloud-provider/go.sum
+@@ -171,8 +171,8 @@ gopkg.in/yaml.v2 v2.2.1
h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod
h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+diff --git a/src/import/staging/src/k8s.io/cluster-bootstrap/go.sum
b/src/importstaging/src/k8s.io/cluster-bootstrap/go.sum
+index 8d81d0563ea..4c58905c7d8 100644
+--- a/src/import/staging/src/k8s.io/cluster-bootstrap/go.sum
++++ b/src/import/staging/src/k8s.io/cluster-bootstrap/go.sum
+@@ -99,8 +99,8 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod
h1:dt/ZhP58zS4L8KSrWD
+ gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod
h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+ k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod
h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
+ k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
+diff --git a/src/import/staging/src/k8s.io/code-generator/go.mod
b/src/importstaging/src/k8s.io/code-generator/go.mod
+index 69a9e1cd9f2..2436804e8f0 100644
+--- a/src/import/staging/src/k8s.io/code-generator/go.mod
++++ b/src/import/staging/src/k8s.io/code-generator/go.mod
+@@ -18,7 +18,7 @@ require (
+ golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72 // indirect
+ gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485
+ gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e // indirect
+- gopkg.in/yaml.v2 v2.2.4 // indirect
++ gopkg.in/yaml.v2 v2.2.8 // indirect
+ k8s.io/gengo v0.0.0-20190822140433-26a664648505
+ k8s.io/klog v1.0.0
+ k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a
+diff --git a/src/import/staging/src/k8s.io/code-generator/go.sum
b/src/importstaging/src/k8s.io/code-generator/go.sum
+index 7bab2c9efd3..afc21aae562 100644
+--- a/src/import/staging/src/k8s.io/code-generator/go.sum
++++ b/src/import/staging/src/k8s.io/code-generator/go.sum
+@@ -114,8 +114,8 @@ gopkg.in/check.v1
v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8
+ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6
h1:4s3/R4+OYYYUKptXPhZKjQ04WJ6EhQQVFdjOFvCazDk=
+ k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod
h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+ k8s.io/gengo v0.0.0-20190822140433-26a664648505
h1:ZY6yclUKVbZ+SdWnkfY+Je5vrMpKOxmGeKRbsXVmqYM=
+diff --git a/src/import/staging/src/k8s.io/component-base/go.sum
b/src/importstaging/src/k8s.io/component-base/go.sum
+index b6af501ac2e..6c54e8b74e0 100644
+--- a/src/import/staging/src/k8s.io/component-base/go.sum
++++ b/src/import/staging/src/k8s.io/component-base/go.sum
+@@ -210,8 +210,8 @@ gopkg.in/yaml.v2 v2.2.1
h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod
h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+diff --git a/src/import/staging/src/k8s.io/cri-api/go.mod
b/src/importstaging/src/k8s.io/cri-api/go.mod
+index de2050e54af..4f8315dcfcc 100644
+--- a/src/import/staging/src/k8s.io/cri-api/go.mod
++++ b/src/import/staging/src/k8s.io/cri-api/go.mod
+@@ -16,7 +16,7 @@ require (
+ google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873 //
indirect
+ google.golang.org/grpc v1.23.1
+ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
+- gopkg.in/yaml.v2 v2.2.4 // indirect
++ gopkg.in/yaml.v2 v2.2.8 // indirect
+ )
+
+ replace (
+diff --git a/src/import/staging/src/k8s.io/cri-api/go.sum
b/src/importstaging/src/k8s.io/cri-api/go.sum
+index 880169cf1dc..5340741af79 100644
+--- a/src/import/staging/src/k8s.io/cri-api/go.sum
++++ b/src/import/staging/src/k8s.io/cri-api/go.sum
+@@ -59,7 +59,7 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod
h1:Co6ibVJAznAaIkqp8
+ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127
h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
+ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+diff --git a/src/import/staging/src/k8s.io/csi-translation-lib/go.sum
b/src/importstaging/src/k8s.io/csi-translation-lib/go.sum
+index 2cb7a51b2a4..f918afd9078 100644
+--- a/src/import/staging/src/k8s.io/csi-translation-lib/go.sum
++++ b/src/import/staging/src/k8s.io/csi-translation-lib/go.sum
+@@ -154,8 +154,8 @@ gopkg.in/yaml.v2 v2.2.1
h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod
h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+diff --git a/src/import/staging/src/k8s.io/kube-aggregator/go.sum
b/src/importstaging/src/k8s.io/kube-aggregator/go.sum
+index bfcd7b4aa8a..d29c2136442 100644
+--- a/src/import/staging/src/k8s.io/kube-aggregator/go.sum
++++ b/src/import/staging/src/k8s.io/kube-aggregator/go.sum
+@@ -378,8 +378,8 @@ gopkg.in/yaml.v2 v2.2.1
h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gotest.tools v2.2.0+incompatible/go.mod
h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
+ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+diff --git a/src/import/staging/src/k8s.io/kube-controller-manager/go.sum
b/src/importstaging/src/k8s.io/kube-controller-manager/go.sum
+index 5303a3606b3..b238ae9cbbb 100644
+--- a/src/import/staging/src/k8s.io/kube-controller-manager/go.sum
++++ b/src/import/staging/src/k8s.io/kube-controller-manager/go.sum
+@@ -184,8 +184,8 @@ gopkg.in/yaml.v2 v2.2.1
h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod
h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+diff --git a/src/import/staging/src/k8s.io/kube-proxy/go.sum
b/src/importstaging/src/k8s.io/kube-proxy/go.sum
+index 5303a3606b3..b238ae9cbbb 100644
+--- a/src/import/staging/src/k8s.io/kube-proxy/go.sum
++++ b/src/import/staging/src/k8s.io/kube-proxy/go.sum
+@@ -184,8 +184,8 @@ gopkg.in/yaml.v2 v2.2.1
h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod
h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+diff --git a/src/import/staging/src/k8s.io/kube-scheduler/go.sum
b/src/importstaging/src/k8s.io/kube-scheduler/go.sum
+index 5303a3606b3..b238ae9cbbb 100644
+--- a/src/import/staging/src/k8s.io/kube-scheduler/go.sum
++++ b/src/import/staging/src/k8s.io/kube-scheduler/go.sum
+@@ -184,8 +184,8 @@ gopkg.in/yaml.v2 v2.2.1
h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod
h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+diff --git a/src/import/staging/src/k8s.io/kubectl/go.mod
b/src/importstaging/src/k8s.io/kubectl/go.mod
+index e0111ac16bf..c646296ebb1 100644
+--- a/src/import/staging/src/k8s.io/kubectl/go.mod
++++ b/src/import/staging/src/k8s.io/kubectl/go.mod
+@@ -34,7 +34,7 @@ require (
+ github.com/stretchr/testify v1.4.0
+ github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1 // indirect
+ golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456
+- gopkg.in/yaml.v2 v2.2.4
++ gopkg.in/yaml.v2 v2.2.8
+ gotest.tools v2.2.0+incompatible // indirect
+ k8s.io/api v0.0.0
+ k8s.io/apimachinery v0.0.0
+diff --git a/src/import/staging/src/k8s.io/kubectl/go.sum
b/src/importstaging/src/k8s.io/kubectl/go.sum
+index 95ba529852c..1db9943f53c 100644
+--- a/src/import/staging/src/k8s.io/kubectl/go.sum
++++ b/src/import/staging/src/k8s.io/kubectl/go.sum
+@@ -317,8 +317,8 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod
h1:dt/ZhP58zS4L8KSrWD
+ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gotest.tools v2.2.0+incompatible
h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
+ gotest.tools v2.2.0+incompatible/go.mod
h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
+ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+diff --git a/src/import/staging/src/k8s.io/kubelet/go.sum
b/src/importstaging/src/k8s.io/kubelet/go.sum
+index f42a61078c9..57a0c633583 100644
+--- a/src/import/staging/src/k8s.io/kubelet/go.sum
++++ b/src/import/staging/src/k8s.io/kubelet/go.sum
+@@ -119,8 +119,8 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod
h1:dt/ZhP58zS4L8KSrWD
+ gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod
h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+diff --git a/src/import/staging/src/k8s.io/legacy-cloud-providers/go.sum
b/src/importstaging/src/k8s.io/legacy-cloud-providers/go.sum
+index 99f76dac0cc..9e990dff888 100644
+--- a/src/import/staging/src/k8s.io/legacy-cloud-providers/go.sum
++++ b/src/import/staging/src/k8s.io/legacy-cloud-providers/go.sum
+@@ -340,8 +340,8 @@ gopkg.in/yaml.v2 v2.2.1
h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gotest.tools v2.2.0+incompatible/go.mod
h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
+ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+diff --git a/src/import/staging/src/k8s.io/metrics/go.sum
b/src/importstaging/src/k8s.io/metrics/go.sum
+index 99df273ff9e..d9b2c94fdbe 100644
+--- a/src/import/staging/src/k8s.io/metrics/go.sum
++++ b/src/import/staging/src/k8s.io/metrics/go.sum
+@@ -211,8 +211,8 @@ gopkg.in/yaml.v2 v2.2.1
h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6
h1:4s3/R4+OYYYUKptXPhZKjQ04WJ6EhQQVFdjOFvCazDk=
+diff --git a/src/import/staging/src/k8s.io/node-api/go.sum
b/src/importstaging/src/k8s.io/node-api/go.sum
+index 77f0a21fa7d..1cb50186d99 100644
+--- a/src/import/staging/src/k8s.io/node-api/go.sum
++++ b/src/import/staging/src/k8s.io/node-api/go.sum
+@@ -215,8 +215,8 @@ gopkg.in/yaml.v2 v2.2.1
h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6
h1:4s3/R4+OYYYUKptXPhZKjQ04WJ6EhQQVFdjOFvCazDk=
+diff --git a/src/import/staging/src/k8s.io/sample-apiserver/go.sum
b/src/importstaging/src/k8s.io/sample-apiserver/go.sum
+index 3ea72ac63e9..236ee4b1e88 100644
+--- a/src/import/staging/src/k8s.io/sample-apiserver/go.sum
++++ b/src/import/staging/src/k8s.io/sample-apiserver/go.sum
+@@ -375,8 +375,8 @@ gopkg.in/yaml.v2 v2.2.1
h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gotest.tools v2.2.0+incompatible/go.mod
h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
+ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+diff --git a/src/import/staging/src/k8s.io/sample-cli-plugin/go.sum
b/src/importstaging/src/k8s.io/sample-cli-plugin/go.sum
+index a5eef73070b..c6c2d0d9231 100644
+--- a/src/import/staging/src/k8s.io/sample-cli-plugin/go.sum
++++ b/src/import/staging/src/k8s.io/sample-cli-plugin/go.sum
+@@ -234,8 +234,8 @@ gopkg.in/yaml.v2 v2.2.1
h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod
h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+diff --git a/src/import/staging/src/k8s.io/sample-controller/go.sum
b/src/importstaging/src/k8s.io/sample-controller/go.sum
+index 55fa85acf16..3b18f34b5a6 100644
+--- a/src/import/staging/src/k8s.io/sample-controller/go.sum
++++ b/src/import/staging/src/k8s.io/sample-controller/go.sum
+@@ -216,8 +216,8 @@ gopkg.in/yaml.v2 v2.2.1
h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE=
+ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+-gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
+-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
++gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
++gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+ k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6
h1:4s3/R4+OYYYUKptXPhZKjQ04WJ6EhQQVFdjOFvCazDk=
+diff --git a/src/import/vendor/gopkg.in/yaml.v2/.travis.yml
b/src/importvendor/gopkg.in/yaml.v2/.travis.yml
+index 9f556934d8b..055480b9ef8 100644
+--- a/src/import/vendor/gopkg.in/yaml.v2/.travis.yml
++++ b/src/import/vendor/gopkg.in/yaml.v2/.travis.yml
+@@ -1,12 +1,16 @@
+ language: go
+
+ go:
+- - 1.4
+- - 1.5
+- - 1.6
+- - 1.7
+- - 1.8
+- - 1.9
+- - tip
++ - "1.4.x"
++ - "1.5.x"
++ - "1.6.x"
++ - "1.7.x"
++ - "1.8.x"
++ - "1.9.x"
++ - "1.10.x"
++ - "1.11.x"
++ - "1.12.x"
++ - "1.13.x"
++ - "tip"
+
+ go_import_path: gopkg.in/yaml.v2
+diff --git a/src/import/vendor/gopkg.in/yaml.v2/decode.go
b/src/importvendor/gopkg.in/yaml.v2/decode.go
+index 53108765555..129bc2a97d3 100644
+--- a/src/import/vendor/gopkg.in/yaml.v2/decode.go
++++ b/src/import/vendor/gopkg.in/yaml.v2/decode.go
+@@ -319,10 +319,14 @@ func (d *decoder) prepare(n *node, out reflect.Value)
(newout reflect.Value, unm
+ }
+
+ const (
+- // 400,000 decode operations is ~500kb of dense object declarations, or
~5kb of dense object declarations with 10000% alias expansion
++ // 400,000 decode operations is ~500kb of dense object declarations, or
++ // ~5kb of dense object declarations with 10000% alias expansion
+ alias_ratio_range_low = 400000
+- // 4,000,000 decode operations is ~5MB of dense object declarations, or
~4.5MB of dense object declarations with 10% alias expansion
++
++ // 4,000,000 decode operations is ~5MB of dense object declarations, or
++ // ~4.5MB of dense object declarations with 10% alias expansion
+ alias_ratio_range_high = 4000000
++
+ // alias_ratio_range is the range over which we scale allowed alias
ratios
+ alias_ratio_range = float64(alias_ratio_range_high -
alias_ratio_range_low)
+ )
+@@ -784,8 +788,7 @@ func (d *decoder) merge(n *node, out reflect.Value) {
+ case mappingNode:
+ d.unmarshal(n, out)
+ case aliasNode:
+- an, ok := d.doc.anchors[n.value]
+- if ok && an.kind != mappingNode {
++ if n.alias != nil && n.alias.kind != mappingNode {
+ failWantMap()
+ }
+ d.unmarshal(n, out)
+@@ -794,8 +797,7 @@ func (d *decoder) merge(n *node, out reflect.Value) {
+ for i := len(n.children) - 1; i >= 0; i-- {
+ ni := n.children[i]
+ if ni.kind == aliasNode {
+- an, ok := d.doc.anchors[ni.value]
+- if ok && an.kind != mappingNode {
++ if ni.alias != nil && ni.alias.kind !=
mappingNode {
+ failWantMap()
+ }
+ } else if ni.kind != mappingNode {
+diff --git a/src/import/vendor/gopkg.in/yaml.v2/scannerc.go
b/src/importvendor/gopkg.in/yaml.v2/scannerc.go
+index 570b8ecd10f..0b9bb6030a0 100644
+--- a/src/import/vendor/gopkg.in/yaml.v2/scannerc.go
++++ b/src/import/vendor/gopkg.in/yaml.v2/scannerc.go
+@@ -626,31 +626,18 @@ func trace(args ...interface{}) func() {
+ func yaml_parser_fetch_more_tokens(parser *yaml_parser_t) bool {
+ // While we need more tokens to fetch, do it.
+ for {
+- // Check if we really need to fetch more tokens.
+- need_more_tokens := false
+-
+- if parser.tokens_head == len(parser.tokens) {
+- // Queue is empty.
+- need_more_tokens = true
+- } else {
+- // Check if any potential simple key may occupy the
head position.
+- if !yaml_parser_stale_simple_keys(parser) {
++ if parser.tokens_head != len(parser.tokens) {
++ // If queue is non-empty, check if any potential simple
key may
++ // occupy the head position.
++ head_tok_idx, ok :=
parser.simple_keys_by_tok[parser.tokens_parsed]
++ if !ok {
++ break
++ } else if valid, ok := yaml_simple_key_is_valid(parser,
&parser.simple_keys[head_tok_idx]); !ok {
+ return false
+- }
+-
+- for i := range parser.simple_keys {
+- simple_key := &parser.simple_keys[i]
+- if simple_key.possible &&
simple_key.token_number == parser.tokens_parsed {
+- need_more_tokens = true
+- break
+- }
++ } else if !valid {
++ break
+ }
+ }
+-
+- // We are finished.
+- if !need_more_tokens {
+- break
+- }
+ // Fetch the next token.
+ if !yaml_parser_fetch_next_token(parser) {
+ return false
+@@ -678,11 +665,6 @@ func yaml_parser_fetch_next_token(parser *yaml_parser_t)
bool {
+ return false
+ }
+
+- // Remove obsolete potential simple keys.
+- if !yaml_parser_stale_simple_keys(parser) {
+- return false
+- }
+-
+ // Check the indentation level against the current column.
+ if !yaml_parser_unroll_indent(parser, parser.mark.column) {
+ return false
+@@ -837,29 +819,30 @@ func yaml_parser_fetch_next_token(parser *yaml_parser_t)
bool {
+ "found character that cannot start any token")
+ }
+
+-// Check the list of potential simple keys and remove the positions that
+-// cannot contain simple keys anymore.
+-func yaml_parser_stale_simple_keys(parser *yaml_parser_t) bool {
+- // Check for a potential simple key for each flow level.
+- for i := range parser.simple_keys {
+- simple_key := &parser.simple_keys[i]
+-
+- // The specification requires that a simple key
+- //
+- // - is limited to a single line,
+- // - is shorter than 1024 characters.
+- if simple_key.possible && (simple_key.mark.line <
parser.mark.line || simple_key.mark.index+1024 < parser.mark.index) {
+-
+- // Check if the potential simple key to be removed is
required.
+- if simple_key.required {
+- return yaml_parser_set_scanner_error(parser,
+- "while scanning a simple key",
simple_key.mark,
+- "could not find expected ':'")
+- }
+- simple_key.possible = false
++func yaml_simple_key_is_valid(parser *yaml_parser_t, simple_key
*yaml_simple_key_t) (valid, ok bool) {
++ if !simple_key.possible {
++ return false, true
++ }
++
++ // The 1.2 specification says:
++ //
++ // "If the ? indicator is omitted, parsing needs to see past the
++ // implicit key to recognize it as such. To limit the amount of
++ // lookahead required, the ???:??? indicator must appear at most
1024
++ // Unicode characters beyond the start of the key. In addition, the
key
++ // is restricted to a single line."
++ //
++ if simple_key.mark.line < parser.mark.line ||
simple_key.mark.index+1024 < parser.mark.index {
++ // Check if the potential simple key to be removed is required.
++ if simple_key.required {
++ return false, yaml_parser_set_scanner_error(parser,
++ "while scanning a simple key", simple_key.mark,
++ "could not find expected ':'")
+ }
++ simple_key.possible = false
++ return false, true
+ }
+- return true
++ return true, true
+ }
+
+ // Check if a simple key may start at the current position and add it if
+@@ -879,13 +862,14 @@ func yaml_parser_save_simple_key(parser *yaml_parser_t)
bool {
+ possible: true,
+ required: required,
+ token_number: parser.tokens_parsed +
(len(parser.tokens) - parser.tokens_head),
++ mark: parser.mark,
+ }
+- simple_key.mark = parser.mark
+
+ if !yaml_parser_remove_simple_key(parser) {
+ return false
+ }
+ parser.simple_keys[len(parser.simple_keys)-1] = simple_key
++ parser.simple_keys_by_tok[simple_key.token_number] =
len(parser.simple_keys) - 1
+ }
+ return true
+ }
+@@ -900,9 +884,10 @@ func yaml_parser_remove_simple_key(parser *yaml_parser_t)
bool {
+ "while scanning a simple key",
parser.simple_keys[i].mark,
+ "could not find expected ':'")
+ }
++ // Remove the key from the stack.
++ parser.simple_keys[i].possible = false
++ delete(parser.simple_keys_by_tok,
parser.simple_keys[i].token_number)
+ }
+- // Remove the key from the stack.
+- parser.simple_keys[i].possible = false
+ return true
+ }
+
+@@ -912,7 +897,12 @@ const max_flow_level = 10000
+ // Increase the flow level and resize the simple key list if needed.
+ func yaml_parser_increase_flow_level(parser *yaml_parser_t) bool {
+ // Reset the simple key on the next level.
+- parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{})
++ parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{
++ possible: false,
++ required: false,
++ token_number: parser.tokens_parsed + (len(parser.tokens) -
parser.tokens_head),
++ mark: parser.mark,
++ })
+
+ // Increase the flow level.
+ parser.flow_level++
+@@ -928,7 +918,9 @@ func yaml_parser_increase_flow_level(parser
*yaml_parser_t) bool {
+ func yaml_parser_decrease_flow_level(parser *yaml_parser_t) bool {
+ if parser.flow_level > 0 {
+ parser.flow_level--
+- parser.simple_keys =
parser.simple_keys[:len(parser.simple_keys)-1]
++ last := len(parser.simple_keys) - 1
++ delete(parser.simple_keys_by_tok,
parser.simple_keys[last].token_number)
++ parser.simple_keys = parser.simple_keys[:last]
+ }
+ return true
+ }
+@@ -1005,6 +997,8 @@ func yaml_parser_fetch_stream_start(parser
*yaml_parser_t) bool {
+ // Initialize the simple key stack.
+ parser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{})
+
++ parser.simple_keys_by_tok = make(map[int]int)
++
+ // A simple key is allowed at the beginning of the stream.
+ parser.simple_key_allowed = true
+
+@@ -1286,7 +1280,11 @@ func yaml_parser_fetch_value(parser *yaml_parser_t)
bool {
+ simple_key := &parser.simple_keys[len(parser.simple_keys)-1]
+
+ // Have we found a simple key?
+- if simple_key.possible {
++ if valid, ok := yaml_simple_key_is_valid(parser, simple_key); !ok {
++ return false
++
++ } else if valid {
++
+ // Create the KEY token and insert it into the queue.
+ token := yaml_token_t{
+ typ: yaml_KEY_TOKEN,
+@@ -1304,6 +1302,7 @@ func yaml_parser_fetch_value(parser *yaml_parser_t) bool
{
+
+ // Remove the simple key.
+ simple_key.possible = false
++ delete(parser.simple_keys_by_tok, simple_key.token_number)
+
+ // A simple key cannot follow another simple key.
+ parser.simple_key_allowed = false
+diff --git a/src/import/vendor/gopkg.in/yaml.v2/yaml.go
b/src/importvendor/gopkg.in/yaml.v2/yaml.go
+index de85aa4cdb7..89650e293ac 100644
+--- a/src/import/vendor/gopkg.in/yaml.v2/yaml.go
++++ b/src/import/vendor/gopkg.in/yaml.v2/yaml.go
+@@ -89,7 +89,7 @@ func UnmarshalStrict(in []byte, out interface{}) (err error)
{
+ return unmarshal(in, out, true)
+ }
+
+-// A Decorder reads and decodes YAML values from an input stream.
++// A Decoder reads and decodes YAML values from an input stream.
+ type Decoder struct {
+ strict bool
+ parser *parser
+diff --git a/src/import/vendor/gopkg.in/yaml.v2/yamlh.go
b/src/importvendor/gopkg.in/yaml.v2/yamlh.go
+index e25cee563be..f6a9c8e34b1 100644
+--- a/src/import/vendor/gopkg.in/yaml.v2/yamlh.go
++++ b/src/import/vendor/gopkg.in/yaml.v2/yamlh.go
+@@ -579,6 +579,7 @@ type yaml_parser_t struct {
+
+ simple_key_allowed bool // May a simple key occur at the
current position?
+ simple_keys []yaml_simple_key_t // The stack of simple keys.
++ simple_keys_by_tok map[int]int // possible simple_key indexes
indexed by token_number
+
+ // Parser stuff
+
+diff --git a/src/import/vendor/modules.txt b/src/importvendor/modules.txt
+index a51796d1ed5..a45f1cd3e3b 100644
+--- a/src/import/vendor/modules.txt
++++ b/src/import/vendor/modules.txt
+@@ -1059,7 +1059,7 @@ gopkg.in/square/go-jose.v2/jwt
+ gopkg.in/tomb.v1
+ # gopkg.in/warnings.v0 v0.1.1 => gopkg.in/warnings.v0 v0.1.1
+ gopkg.in/warnings.v0
+-# gopkg.in/yaml.v2 v2.2.4 => gopkg.in/yaml.v2 v2.2.4
++# gopkg.in/yaml.v2 v2.2.8 => gopkg.in/yaml.v2 v2.2.8
+ gopkg.in/yaml.v2
+ # gotest.tools v2.2.0+incompatible => gotest.tools v2.2.0+incompatible
+ gotest.tools
+--
+2.20.1
+
diff --git a/recipes-containers/kubernetes/kubernetes_git.bb
b/recipes-containers/kubernetes/kubernetes_git.bb
index 76107af..4698874 100644
--- a/recipes-containers/kubernetes/kubernetes_git.bb
+++ b/recipes-containers/kubernetes/kubernetes_git.bb
@@ -11,6 +11,11 @@ SRCREV_kubernetes =
"f45fc1861acab22eb6a4697e3fb831e85ef5ff9c"
SRC_URI =
"git://github.com/kubernetes/kubernetes.git;branch=release-1.17;name=kubernetes
\
file://0001-hack-lib-golang.sh-use-CC-from-environment.patch \
file://0001-cross-don-t-build-tests-by-default.patch \
+ file://0001-Add-new-endpoint-for-resource-metrics.patch \
+ file://0001-update-gopkg.in-yaml.v2-to-v2.2.8.patch \
+
file://0001-remove-client-label-from-apiserver-request-count-met.patch \
+ file://0001-Add-code-to-fix-kubelet-metrics-memory-issue.patch \
+ file://0001-Deal-with-auto-generated-files.patch \
"
DEPENDS += "rsync-native \
--
2.24.1
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#5295):
https://lists.yoctoproject.org/g/meta-virtualization/message/5295
Mute This Topic: https://lists.yoctoproject.org/mt/73358258/21656
Group Owner: [email protected]
Unsubscribe:
https://lists.yoctoproject.org/g/meta-virtualization/leave/6693005/1014668956/xyzzy
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-