On Thu, May 7, 2020 at 10:53 AM <[email protected]> wrote: > > > On 2020-04-29 3:28 p.m., Bruce Ashfield wrote: > > I'm nearly complete on an kubernetes refresh, so I won't merge this > patch to master, and I'm inclined to do the uprev even in dunfell. > > If this patch is destined for dunfell, that should indicated clearly > in the patch subject. > > Cheers, > > Bruce > > > Thank you for taking the time to review the changes. > > What version are you refreshing to?
release-1.18 latest Bruce > > > Sakib > > On Wed, Apr 29, 2020 at 1:49 PM <[email protected]> wrote: > > 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 > > > > > > -- - Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end - "Use the force Harry" - Gandalf, Star Trek II
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#5318): https://lists.yoctoproject.org/g/meta-virtualization/message/5318 Mute This Topic: https://lists.yoctoproject.org/mt/73358258/21656 Group Owner: [email protected] Unsubscribe: https://lists.yoctoproject.org/g/meta-virtualization/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
