From a046a7a6503620dd781567120126c676f53d3445 Mon Sep 17 00:00:00 2001 From: Daniel Safta Date: Wed, 19 Jan 2022 09:35:50 +0000 Subject: [PATCH] Add kubernetes 1.22.5 pkg Here are the changes needed for adding k8s v1.22.5 in StarlingX alongside with the changes needed for the build environment to find and build the package. The package builds successfully. Deployed an iso with k8s 1.22.5 on AIO-SX and AIO-DX. The deployment phase works and the pods are up and running after the upgrade completes. Story: 2009789 Task: 44305 Signed-off-by: Daniel Safta Change-Id: Ibb9be075fa0b1491b9ab1854ebb1fddf4df53461 --- centos_iso_image.inc | 3 + centos_pkg_dirs | 1 + centos_tarball-dl.lst | 1 + .../kubernetes-1.22.5/centos/Readme.rst | 4 + .../kubernetes-1.22.5/centos/build_srpm.data | 5 + ...th-for-coredns-only-for-default-repo.patch | 117 + ...rt-for-kubernetes-to-ignore-isolcpus.patch | 79 + ...latform-pods-with-zero-CPU-resources.patch | 108 + .../centos/files/kubeadm.conf | 17 + .../centos/files/kubelet-cgroup-setup.sh | 132 + ...er-disable-CFS-quota-throttling-for-.patch | 297 +++ ...er-infrastructure-pods-use-system-re.patch | 160 ++ ...er-introduce-concept-of-isolated-CPU.patch | 564 ++++ ...er-keep-normal-containers-off-reserv.patch | 319 +++ .../kubernetes-1.22.5/centos/kubernetes.spec | 2248 ++++++++++++++++ .../centos/kubernetes.spec.orig | 2282 +++++++++++++++++ 16 files changed, 6337 insertions(+) create mode 100644 kubernetes/kubernetes-1.22.5/centos/Readme.rst create mode 100644 kubernetes/kubernetes-1.22.5/centos/build_srpm.data create mode 100644 kubernetes/kubernetes-1.22.5/centos/files/Revert-use-subpath-for-coredns-only-for-default-repo.patch create mode 100644 kubernetes/kubernetes-1.22.5/centos/files/enable-support-for-kubernetes-to-ignore-isolcpus.patch create mode 100644 kubernetes/kubernetes-1.22.5/centos/files/kubeadm-create-platform-pods-with-zero-CPU-resources.patch create mode 100644 kubernetes/kubernetes-1.22.5/centos/files/kubeadm.conf create mode 100644 kubernetes/kubernetes-1.22.5/centos/files/kubelet-cgroup-setup.sh create mode 100644 kubernetes/kubernetes-1.22.5/centos/files/kubelet-cpumanager-disable-CFS-quota-throttling-for-.patch create mode 100644 kubernetes/kubernetes-1.22.5/centos/files/kubelet-cpumanager-infrastructure-pods-use-system-re.patch create mode 100644 kubernetes/kubernetes-1.22.5/centos/files/kubelet-cpumanager-introduce-concept-of-isolated-CPU.patch create mode 100644 kubernetes/kubernetes-1.22.5/centos/files/kubelet-cpumanager-keep-normal-containers-off-reserv.patch create mode 100644 kubernetes/kubernetes-1.22.5/centos/kubernetes.spec create mode 100644 kubernetes/kubernetes-1.22.5/centos/kubernetes.spec.orig diff --git a/centos_iso_image.inc b/centos_iso_image.inc index eaa84b46e..ab020bb01 100644 --- a/centos_iso_image.inc +++ b/centos_iso_image.inc @@ -168,6 +168,9 @@ kubernetes-1.20.9-client kubernetes-1.21.8-node kubernetes-1.21.8-kubeadm kubernetes-1.21.8-client +kubernetes-1.22.5-node +kubernetes-1.22.5-kubeadm +kubernetes-1.22.5-client containerd k8s-pod-recovery k8s-cni-cache-cleanup diff --git a/centos_pkg_dirs b/centos_pkg_dirs index ec9ffa451..ccc2ffe3b 100644 --- a/centos_pkg_dirs +++ b/centos_pkg_dirs @@ -58,6 +58,7 @@ kubernetes/kubernetes-1.18.1 kubernetes/kubernetes-1.19.13 kubernetes/kubernetes-1.20.9 kubernetes/kubernetes-1.21.8 +kubernetes/kubernetes-1.22.5 kubernetes/kubernetes-unversioned kubernetes/docker-distribution kubernetes/etcd diff --git a/centos_tarball-dl.lst b/centos_tarball-dl.lst index 3b16ee476..9bdc89a5f 100644 --- a/centos_tarball-dl.lst +++ b/centos_tarball-dl.lst @@ -46,6 +46,7 @@ kubernetes-v1.18.1.tar.gz#kubernetes-1.18.1#https://github.com/kubernetes/kubern kubernetes-v1.19.13.tar.gz#kubernetes-1.19.13#https://github.com/kubernetes/kubernetes/archive/refs/tags/v1.19.13.tar.gz#http## kubernetes-v1.20.9.tar.gz#kubernetes-1.20.9#https://github.com/kubernetes/kubernetes/archive/refs/tags/v1.20.9.tar.gz#http## kubernetes-v1.21.8.tar.gz#kubernetes-1.21.8#https://github.com/kubernetes/kubernetes/archive/refs/tags/v1.21.8.tar.gz#http## +kubernetes-v1.22.5.tar.gz#kubernetes-1.22.5#https://github.com/kubernetes/kubernetes/archive/refs/tags/v1.22.5.tar.gz#http## kvm-unit-tests.git-4ea7633.tar.bz2#kvm-unit-tests#https://git.kernel.org/pub/scm/virt/kvm/kvm-unit-tests.git/snapshot/kvm-unit-tests-20171020.tar.gz#http## ldapscripts-2.0.8.tgz#ldapscripts-2.0.8#https://sourceforge.net/projects/ldapscripts/files/ldapscripts/ldapscripts-2.0.8/ldapscripts-2.0.8.tgz/download#http## libbpf-0.5.0.tar.gz#libbpf-0.5.0#https://github.com/libbpf/libbpf/archive/v0.5.0.tar.gz#https## diff --git a/kubernetes/kubernetes-1.22.5/centos/Readme.rst b/kubernetes/kubernetes-1.22.5/centos/Readme.rst new file mode 100644 index 000000000..abb8d7a4b --- /dev/null +++ b/kubernetes/kubernetes-1.22.5/centos/Readme.rst @@ -0,0 +1,4 @@ +The spec file used here was from the kubernetes 1.10.0 src rpm. +The orig file is included to help show modifications made to that +spec file, to help understand which changes were needed and to +assist with future upversioning. diff --git a/kubernetes/kubernetes-1.22.5/centos/build_srpm.data b/kubernetes/kubernetes-1.22.5/centos/build_srpm.data new file mode 100644 index 000000000..445eb3c93 --- /dev/null +++ b/kubernetes/kubernetes-1.22.5/centos/build_srpm.data @@ -0,0 +1,5 @@ +VERSION=1.22.5 +TAR_NAME=kubernetes +TAR="$TAR_NAME-v$VERSION.tar.gz" +COPY_LIST="${CGCS_BASE}/downloads/$TAR $FILES_BASE/*" +TIS_PATCH_VER=PKG_GITREVCOUNT diff --git a/kubernetes/kubernetes-1.22.5/centos/files/Revert-use-subpath-for-coredns-only-for-default-repo.patch b/kubernetes/kubernetes-1.22.5/centos/files/Revert-use-subpath-for-coredns-only-for-default-repo.patch new file mode 100644 index 000000000..c6213de30 --- /dev/null +++ b/kubernetes/kubernetes-1.22.5/centos/files/Revert-use-subpath-for-coredns-only-for-default-repo.patch @@ -0,0 +1,117 @@ +From b90e3858a8d319c7526dd8190ee05edce24ba072 Mon Sep 17 00:00:00 2001 +From: Jim Gauld +Date: Thu, 9 Sep 2021 13:16:26 -0400 +Subject: [PATCH 7/7] Revert "use subpath for coredns only for default + repository" + +This reverts commit 38a41e1557649a7cc763bf737779db9aa03ec75e. +--- + cmd/kubeadm/app/constants/constants.go | 2 +- + cmd/kubeadm/app/images/images.go | 5 --- + cmd/kubeadm/app/images/images_test.go | 50 -------------------------- + 3 files changed, 1 insertion(+), 56 deletions(-) + +diff --git a/cmd/kubeadm/app/constants/constants.go b/cmd/kubeadm/app/constants/constants.go +index b3559734..95338949 100644 +--- a/cmd/kubeadm/app/constants/constants.go ++++ b/cmd/kubeadm/app/constants/constants.go +@@ -322,7 +322,7 @@ const ( + CoreDNSDeploymentName = "coredns" + + // CoreDNSImageName specifies the name of the image for CoreDNS add-on +- CoreDNSImageName = "coredns" ++ CoreDNSImageName = "coredns/coredns" + + // CoreDNSVersion is the version of CoreDNS to be deployed if it is used + CoreDNSVersion = "v1.8.4" +diff --git a/cmd/kubeadm/app/images/images.go b/cmd/kubeadm/app/images/images.go +index 7e97dbc9..187c7189 100644 +--- a/cmd/kubeadm/app/images/images.go ++++ b/cmd/kubeadm/app/images/images.go +@@ -20,7 +20,6 @@ import ( + "fmt" + + kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" +- kubeadmapiv1beta2 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2" + "k8s.io/kubernetes/cmd/kubeadm/app/constants" + kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" + +@@ -48,10 +47,6 @@ func GetDNSImage(cfg *kubeadmapi.ClusterConfiguration) string { + if cfg.DNS.ImageRepository != "" { + dnsImageRepository = cfg.DNS.ImageRepository + } +- // Handle the renaming of the official image from "k8s.gcr.io/coredns" to "k8s.gcr.io/coredns/coredns +- if dnsImageRepository == kubeadmapiv1beta2.DefaultImageRepository { +- dnsImageRepository = fmt.Sprintf("%s/coredns", dnsImageRepository) +- } + // DNS uses an imageTag that corresponds to the DNS version matching the Kubernetes version + dnsImageTag := constants.CoreDNSVersion + +diff --git a/cmd/kubeadm/app/images/images_test.go b/cmd/kubeadm/app/images/images_test.go +index 2fd9d3f5..9f363939 100644 +--- a/cmd/kubeadm/app/images/images_test.go ++++ b/cmd/kubeadm/app/images/images_test.go +@@ -22,7 +22,6 @@ import ( + "testing" + + kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" +- kubeadmapiv1beta2 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2" + "k8s.io/kubernetes/cmd/kubeadm/app/constants" + ) + +@@ -226,52 +225,3 @@ func TestGetAllImages(t *testing.T) { + }) + } + } +- +-func TestGetDNSImage(t *testing.T) { +- var tests = []struct { +- expected string +- cfg *kubeadmapi.ClusterConfiguration +- }{ +- { +- expected: "foo.io/coredns:v1.8.4", +- cfg: &kubeadmapi.ClusterConfiguration{ +- ImageRepository: "foo.io", +- DNS: kubeadmapi.DNS{ +- Type: kubeadmapi.CoreDNS, +- }, +- }, +- }, +- { +- expected: kubeadmapiv1beta2.DefaultImageRepository + "/coredns/coredns:v1.8.4", +- cfg: &kubeadmapi.ClusterConfiguration{ +- ImageRepository: kubeadmapiv1beta2.DefaultImageRepository, +- DNS: kubeadmapi.DNS{ +- Type: kubeadmapi.CoreDNS, +- }, +- }, +- }, +- { +- expected: "foo.io/coredns/coredns:v1.8.4", +- cfg: &kubeadmapi.ClusterConfiguration{ +- ImageRepository: "foo.io", +- DNS: kubeadmapi.DNS{ +- Type: kubeadmapi.CoreDNS, +- ImageMeta: kubeadmapi.ImageMeta{ +- ImageRepository: "foo.io/coredns", +- }, +- }, +- }, +- }, +- } +- +- for _, test := range tests { +- actual := GetDNSImage(test.cfg) +- if actual != test.expected { +- t.Errorf( +- "failed to GetDNSImage:\n\texpected: %s\n\t actual: %s", +- test.expected, +- actual, +- ) +- } +- } +-} +-- +2.17.1 + diff --git a/kubernetes/kubernetes-1.22.5/centos/files/enable-support-for-kubernetes-to-ignore-isolcpus.patch b/kubernetes/kubernetes-1.22.5/centos/files/enable-support-for-kubernetes-to-ignore-isolcpus.patch new file mode 100644 index 000000000..63cdfbdbb --- /dev/null +++ b/kubernetes/kubernetes-1.22.5/centos/files/enable-support-for-kubernetes-to-ignore-isolcpus.patch @@ -0,0 +1,79 @@ +From 087dcfa1a84ec38541fa9870937d76b80a707e2c Mon Sep 17 00:00:00 2001 +From: Chris Friesen +Date: Fri, 23 Oct 2020 17:46:10 -0600 +Subject: [PATCH 6/7] enable support for kubernetes to ignore isolcpus + +The normal mechanisms for allocating isolated CPUs do not allow +a mix of isolated and exclusive CPUs in the same container. In +order to allow this in *very* limited cases where the pod spec +is known in advance we will add the ability to disable the normal +isolcpus behaviour. + +If the file "/etc/kubernetes/ignore_isolcpus" exists, then kubelet +will basically forget everything it knows about isolcpus and just +treat them like regular CPUs. + +The admin user can then rely on the fact that CPU allocation is +deterministic to ensure that the isolcpus they configure end up being +allocated to the correct pods. + +Signed-off-by: Daniel Safta +--- + pkg/kubelet/cm/cpumanager/cpu_manager.go | 8 ++++++++ + pkg/kubelet/cm/cpumanager/policy_static.go | 7 +++++++ + 2 files changed, 15 insertions(+) + +diff --git a/pkg/kubelet/cm/cpumanager/cpu_manager.go b/pkg/kubelet/cm/cpumanager/cpu_manager.go +index 2f5b06dc..d9ec63bb 100644 +--- a/pkg/kubelet/cm/cpumanager/cpu_manager.go ++++ b/pkg/kubelet/cm/cpumanager/cpu_manager.go +@@ -20,6 +20,7 @@ import ( + "fmt" + "io/ioutil" + "math" ++ "os" + "strings" + "sync" + "time" +@@ -55,6 +56,13 @@ const cpuManagerStateFileName = "cpu_manager_state" + + // get the system-level isolated CPUs + func getIsolcpus() cpuset.CPUSet { ++ // This is a gross hack to basically turn off awareness of isolcpus to enable ++ // isolated cpus to be allocated to pods the same way as non-isolated CPUs. ++ if _, err := os.Stat("/etc/kubernetes/ignore_isolcpus"); err == nil { ++ klog.Infof("[cpumanager] turning off isolcpus awareness") ++ return cpuset.NewCPUSet() ++ } ++ + dat, err := ioutil.ReadFile("/sys/devices/system/cpu/isolated") + if err != nil { + klog.Errorf("[cpumanager] unable to read sysfs isolcpus subdir") +diff --git a/pkg/kubelet/cm/cpumanager/policy_static.go b/pkg/kubelet/cm/cpumanager/policy_static.go +index 72a99496..ee389a85 100644 +--- a/pkg/kubelet/cm/cpumanager/policy_static.go ++++ b/pkg/kubelet/cm/cpumanager/policy_static.go +@@ -18,6 +18,7 @@ package cpumanager + + import ( + "fmt" ++ "os" + "strconv" + + v1 "k8s.io/api/core/v1" +@@ -658,6 +659,12 @@ func isKubeInfra(pod *v1.Pod) bool { + + // get the isolated CPUs (if any) from the devices associated with a specific container + func (p *staticPolicy) podIsolCPUs(pod *v1.Pod, container *v1.Container) cpuset.CPUSet { ++ // This is a gross hack to basically turn off awareness of isolcpus to enable ++ // isolated cpus to be allocated to pods the same way as non-isolated CPUs. ++ if _, err := os.Stat("/etc/kubernetes/ignore_isolcpus"); err == nil { ++ return cpuset.NewCPUSet() ++ } ++ + // NOTE: This is required for TestStaticPolicyAdd() since makePod() does + // not create UID. We also need a way to properly stub devicemanager. + if len(string(pod.UID)) == 0 { +-- +2.17.1 + diff --git a/kubernetes/kubernetes-1.22.5/centos/files/kubeadm-create-platform-pods-with-zero-CPU-resources.patch b/kubernetes/kubernetes-1.22.5/centos/files/kubeadm-create-platform-pods-with-zero-CPU-resources.patch new file mode 100644 index 000000000..14e530c73 --- /dev/null +++ b/kubernetes/kubernetes-1.22.5/centos/files/kubeadm-create-platform-pods-with-zero-CPU-resources.patch @@ -0,0 +1,108 @@ +From de653bd0823b248d623a39c17a3872e85ce952b0 Mon Sep 17 00:00:00 2001 +From: Chris Friesen +Date: Fri, 3 Sep 2021 18:05:15 -0400 +Subject: [PATCH 5/7] kubeadm: create platform pods with zero CPU resources + +We want to specify zero CPU resources when creating the manifests +for the static platform pods, as a workaround for the lack of +separate resource tracking for platform resources. + +We also specify zero CPU resources for the coredns deployment. +manifests.go appears to be the main file for this, not sure if the +others are used but I changed them just in case. + +Signed-off-by: Daniel Safta +--- + cluster/addons/dns/coredns/coredns.yaml.base | 2 +- + cluster/addons/dns/coredns/coredns.yaml.in | 2 +- + cluster/addons/dns/coredns/coredns.yaml.sed | 2 +- + cmd/kubeadm/app/phases/addons/dns/manifests.go | 2 +- + cmd/kubeadm/app/phases/controlplane/manifests.go | 6 +++--- + 5 files changed, 7 insertions(+), 7 deletions(-) + +diff --git a/cluster/addons/dns/coredns/coredns.yaml.base b/cluster/addons/dns/coredns/coredns.yaml.base +index 4ee054f8ba5..d2b58f4af0e 100644 +--- a/cluster/addons/dns/coredns/coredns.yaml.base ++++ b/cluster/addons/dns/coredns/coredns.yaml.base +@@ -138,7 +138,7 @@ spec: + limits: + memory: __DNS__MEMORY__LIMIT__ + requests: +- cpu: 100m ++ cpu: 0 + memory: 70Mi + args: [ "-conf", "/etc/coredns/Corefile" ] + volumeMounts: +diff --git a/cluster/addons/dns/coredns/coredns.yaml.in b/cluster/addons/dns/coredns/coredns.yaml.in +index 1f791e447c9..ff03a801646 100644 +--- a/cluster/addons/dns/coredns/coredns.yaml.in ++++ b/cluster/addons/dns/coredns/coredns.yaml.in +@@ -138,7 +138,7 @@ spec: + limits: + memory: 'dns_memory_limit' + requests: +- cpu: 100m ++ cpu: 0 + memory: 70Mi + args: [ "-conf", "/etc/coredns/Corefile" ] + volumeMounts: +diff --git a/cluster/addons/dns/coredns/coredns.yaml.sed b/cluster/addons/dns/coredns/coredns.yaml.sed +index 4d64278aaa4..38fc9196b28 100644 +--- a/cluster/addons/dns/coredns/coredns.yaml.sed ++++ b/cluster/addons/dns/coredns/coredns.yaml.sed +@@ -138,7 +138,7 @@ spec: + limits: + memory: $DNS_MEMORY_LIMIT + requests: +- cpu: 100m ++ cpu: 0 + memory: 70Mi + args: [ "-conf", "/etc/coredns/Corefile" ] + volumeMounts: +diff --git a/cmd/kubeadm/app/phases/addons/dns/manifests.go b/cmd/kubeadm/app/phases/addons/dns/manifests.go +index 3ac6856bfc6..0763b4c63db 100644 +--- a/cmd/kubeadm/app/phases/addons/dns/manifests.go ++++ b/cmd/kubeadm/app/phases/addons/dns/manifests.go +@@ -95,7 +95,7 @@ spec: + limits: + memory: 170Mi + requests: +- cpu: 100m ++ cpu: 0 + memory: 70Mi + args: [ "-conf", "/etc/coredns/Corefile" ] + volumeMounts: +diff --git a/cmd/kubeadm/app/phases/controlplane/manifests.go b/cmd/kubeadm/app/phases/controlplane/manifests.go +index 8181bea63a4..4c4b4448dd4 100644 +--- a/cmd/kubeadm/app/phases/controlplane/manifests.go ++++ b/cmd/kubeadm/app/phases/controlplane/manifests.go +@@ -60,7 +60,7 @@ func GetStaticPodSpecs(cfg *kubeadmapi.ClusterConfiguration, endpoint *kubeadmap + LivenessProbe: staticpodutil.LivenessProbe(staticpodutil.GetAPIServerProbeAddress(endpoint), "/livez", int(endpoint.BindPort), v1.URISchemeHTTPS), + ReadinessProbe: staticpodutil.ReadinessProbe(staticpodutil.GetAPIServerProbeAddress(endpoint), "/readyz", int(endpoint.BindPort), v1.URISchemeHTTPS), + StartupProbe: staticpodutil.StartupProbe(staticpodutil.GetAPIServerProbeAddress(endpoint), "/livez", int(endpoint.BindPort), v1.URISchemeHTTPS, cfg.APIServer.TimeoutForControlPlane), +- Resources: staticpodutil.ComponentResources("250m"), ++ Resources: staticpodutil.ComponentResources("0"), + Env: kubeadmutil.GetProxyEnvVars(), + }, mounts.GetVolumes(kubeadmconstants.KubeAPIServer), + map[string]string{kubeadmconstants.KubeAPIServerAdvertiseAddressEndpointAnnotationKey: endpoint.String()}), +@@ -72,7 +72,7 @@ func GetStaticPodSpecs(cfg *kubeadmapi.ClusterConfiguration, endpoint *kubeadmap + VolumeMounts: staticpodutil.VolumeMountMapToSlice(mounts.GetVolumeMounts(kubeadmconstants.KubeControllerManager)), + LivenessProbe: staticpodutil.LivenessProbe(staticpodutil.GetControllerManagerProbeAddress(cfg), "/healthz", kubeadmconstants.KubeControllerManagerPort, v1.URISchemeHTTPS), + StartupProbe: staticpodutil.StartupProbe(staticpodutil.GetControllerManagerProbeAddress(cfg), "/healthz", kubeadmconstants.KubeControllerManagerPort, v1.URISchemeHTTPS, cfg.APIServer.TimeoutForControlPlane), +- Resources: staticpodutil.ComponentResources("200m"), ++ Resources: staticpodutil.ComponentResources("0"), + Env: kubeadmutil.GetProxyEnvVars(), + }, mounts.GetVolumes(kubeadmconstants.KubeControllerManager), nil), + kubeadmconstants.KubeScheduler: staticpodutil.ComponentPod(v1.Container{ +@@ -83,7 +83,7 @@ func GetStaticPodSpecs(cfg *kubeadmapi.ClusterConfiguration, endpoint *kubeadmap + VolumeMounts: staticpodutil.VolumeMountMapToSlice(mounts.GetVolumeMounts(kubeadmconstants.KubeScheduler)), + LivenessProbe: staticpodutil.LivenessProbe(staticpodutil.GetSchedulerProbeAddress(cfg), "/healthz", kubeadmconstants.KubeSchedulerPort, v1.URISchemeHTTPS), + StartupProbe: staticpodutil.StartupProbe(staticpodutil.GetSchedulerProbeAddress(cfg), "/healthz", kubeadmconstants.KubeSchedulerPort, v1.URISchemeHTTPS, cfg.APIServer.TimeoutForControlPlane), +- Resources: staticpodutil.ComponentResources("100m"), ++ Resources: staticpodutil.ComponentResources("0"), + Env: kubeadmutil.GetProxyEnvVars(), + }, mounts.GetVolumes(kubeadmconstants.KubeScheduler), nil), + } +-- +2.17.1 + diff --git a/kubernetes/kubernetes-1.22.5/centos/files/kubeadm.conf b/kubernetes/kubernetes-1.22.5/centos/files/kubeadm.conf new file mode 100644 index 000000000..2fb25ba27 --- /dev/null +++ b/kubernetes/kubernetes-1.22.5/centos/files/kubeadm.conf @@ -0,0 +1,17 @@ +# Note: This dropin only works with kubeadm and kubelet v1.11+ +[Service] +Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf" +Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml" +# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically +EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env +# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use +# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file. +EnvironmentFile=-/etc/sysconfig/kubelet +ExecStart= +ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS +ExecStartPre=-/usr/bin/kubelet-cgroup-setup.sh +ExecStartPost=/bin/bash -c 'echo $MAINPID > /var/run/kubelet.pid;' +ExecStopPost=/bin/rm -f /var/run/kubelet.pid +Restart=always +StartLimitInterval=0 +RestartSec=10 diff --git a/kubernetes/kubernetes-1.22.5/centos/files/kubelet-cgroup-setup.sh b/kubernetes/kubernetes-1.22.5/centos/files/kubelet-cgroup-setup.sh new file mode 100644 index 000000000..385314bfe --- /dev/null +++ b/kubernetes/kubernetes-1.22.5/centos/files/kubelet-cgroup-setup.sh @@ -0,0 +1,132 @@ +#!/bin/bash +# +# Copyright (c) 2019 Wind River Systems, Inc. +# +# SPDX-License-Identifier: Apache-2.0 +# +# This script does minimal cgroup setup for kubelet. This creates k8s-infra +# cgroup for a minimal set of resource controllers, and configures cpuset +# attributes to span all online cpus and nodes. This will do nothing if +# the k8s-infra cgroup already exists (i.e., assume already configured). +# NOTE: The creation of directories under /sys/fs/cgroup is volatile, and +# does not persist reboots. The cpuset.mems and cpuset.cpus is later updated +# by puppet kubernetes.pp manifest. +# + +# Define minimal path +PATH=/bin:/usr/bin:/usr/local/bin + +# Log info message to /var/log/daemon.log +function LOG { + logger -p daemon.info "$0($$): $@" +} + +# Log error message to /var/log/daemon.log +function ERROR { + logger -s -p daemon.error "$0($$): ERROR: $@" +} + +# Create minimal cgroup directories and configure cpuset attributes if required +function create_cgroup { + local cg_name=$1 + local cg_nodeset=$2 + local cg_cpuset=$3 + + local CGROUP=/sys/fs/cgroup + local CONTROLLERS_AUTO_DELETED=("pids" "hugetlb") + local CONTROLLERS_PRESERVED=("cpuset" "memory" "cpu,cpuacct" "systemd") + local cnt='' + local CGDIR='' + local RC=0 + + # Ensure that these cgroups are created every time as they are auto deleted + for cnt in ${CONTROLLERS_AUTO_DELETED[@]}; do + CGDIR=${CGROUP}/${cnt}/${cg_name} + if [ -d ${CGDIR} ]; then + LOG "Nothing to do, already configured: ${CGDIR}." + continue + fi + LOG "Creating: ${CGDIR}" + mkdir -p ${CGDIR} + RC=$? + if [ ${RC} -ne 0 ]; then + ERROR "Creating: ${CGDIR}, rc=${RC}" + exit ${RC} + fi + done + + # These cgroups are preserved so if any of these are encountered additional + # cgroup setup is not required + for cnt in ${CONTROLLERS_PRESERVED[@]}; do + CGDIR=${CGROUP}/${cnt}/${cg_name} + if [ -d ${CGDIR} ]; then + LOG "Nothing to do, already configured: ${CGDIR}." + exit ${RC} + fi + LOG "Creating: ${CGDIR}" + mkdir -p ${CGDIR} + RC=$? + if [ ${RC} -ne 0 ]; then + ERROR "Creating: ${CGDIR}, rc=${RC}" + exit ${RC} + fi + done + + # Customize cpuset attributes + LOG "Configuring cgroup: ${cg_name}, nodeset: ${cg_nodeset}, cpuset: ${cg_cpuset}" + CGDIR=${CGROUP}/cpuset/${cg_name} + local CGMEMS=${CGDIR}/cpuset.mems + local CGCPUS=${CGDIR}/cpuset.cpus + local CGTASKS=${CGDIR}/tasks + + # Assign cgroup memory nodeset + LOG "Assign nodeset ${cg_nodeset} to ${CGMEMS}" + /bin/echo ${cg_nodeset} > ${CGMEMS} + RC=$? + if [ ${RC} -ne 0 ]; then + ERROR "Unable to write to: ${CGMEMS}, rc=${RC}" + exit ${RC} + fi + + # Assign cgroup cpus + LOG "Assign cpuset ${cg_cpuset} to ${CGCPUS}" + /bin/echo ${cg_cpuset} > ${CGCPUS} + RC=$? + if [ ${RC} -ne 0 ]; then + ERROR "Assigning: ${cg_cpuset} to ${CGCPUS}, rc=${RC}" + exit ${RC} + fi + + # Set file ownership + chown root:root ${CGMEMS} ${CGCPUS} ${CGTASKS} + RC=$? + if [ ${RC} -ne 0 ]; then + ERROR "Setting owner for: ${CGMEMS}, ${CGCPUS}, ${CGTASKS}, rc=${RC}" + exit ${RC} + fi + + # Set file mode permissions + chmod 644 ${CGMEMS} ${CGCPUS} ${CGTASKS} + RC=$? + if [ ${RC} -ne 0 ]; then + ERROR "Setting mode for: ${CGMEMS}, ${CGCPUS}, ${CGTASKS}, rc=${RC}" + exit ${RC} + fi + + return ${RC} +} + +if [ $UID -ne 0 ]; then + ERROR "Require sudo/root." + exit 1 +fi + +# Configure default kubepods cpuset to span all online cpus and nodes. +ONLINE_NODESET=$(/bin/cat /sys/devices/system/node/online) +ONLINE_CPUSET=$(/bin/cat /sys/devices/system/cpu/online) + +# Configure kubelet cgroup to match cgroupRoot. +create_cgroup 'k8s-infra' ${ONLINE_NODESET} ${ONLINE_CPUSET} + +exit $? + diff --git a/kubernetes/kubernetes-1.22.5/centos/files/kubelet-cpumanager-disable-CFS-quota-throttling-for-.patch b/kubernetes/kubernetes-1.22.5/centos/files/kubelet-cpumanager-disable-CFS-quota-throttling-for-.patch new file mode 100644 index 000000000..3394c7a10 --- /dev/null +++ b/kubernetes/kubernetes-1.22.5/centos/files/kubelet-cpumanager-disable-CFS-quota-throttling-for-.patch @@ -0,0 +1,297 @@ +From 3f69868f7bca99f6875dd4d197b3a974d1b558ed Mon Sep 17 00:00:00 2001 +From: Daniel Safta +Date: Wed, 22 Sep 2021 10:09:06 -0400 +Subject: [PATCH 1/7] kubelet cpumanager disable CFS quota throttling for + Guaranteed pods + +This disables CFS CPU quota to avoid performance degradation due to +Linux kernel CFS quota implementation. Note that 4.18 kernel attempts +to solve the CFS throttling problem, but there are reports that it is +not completely effective. + +This disables CFS quota throttling for Guaranteed pods for both +parent and container cgroups by writing -1 to cgroup cpu.cfs_quota_us. +Disabling has a dramatic latency improvement for HTTP response times. + +This patch is refactored in 1.21.3 due to new internal_container_lifecycle +framework. We leverage the same mechanism to set Linux resources as: +cpu manager: specify the container CPU set during the creation +(commit 38dc7509f862f081828e7d9167107b8c6e98ea23). + +Signed-off-by: Daniel Safta +Co-authored-by: Jim Gauld +--- + pkg/kubelet/cm/cpumanager/cpu_manager.go | 7 +++ + pkg/kubelet/cm/cpumanager/fake_cpu_manager.go | 12 +++-- + pkg/kubelet/cm/helpers_linux.go | 12 ++++- + pkg/kubelet/cm/helpers_linux_test.go | 45 ++++++++++--------- + .../cm/internal_container_lifecycle_linux.go | 12 ++++- + 5 files changed, 61 insertions(+), 27 deletions(-) + +diff --git a/pkg/kubelet/cm/cpumanager/cpu_manager.go b/pkg/kubelet/cm/cpumanager/cpu_manager.go +index 4777c132..29194271 100644 +--- a/pkg/kubelet/cm/cpumanager/cpu_manager.go ++++ b/pkg/kubelet/cm/cpumanager/cpu_manager.go +@@ -72,6 +72,9 @@ type Manager interface { + // State returns a read-only interface to the internal CPU manager state. + State() state.Reader + ++ // GetCPUPolicy returns the assigned CPU manager policy ++ GetCPUPolicy() string ++ + // GetTopologyHints implements the topologymanager.HintProvider Interface + // and is consulted to achieve NUMA aware resource alignment among this + // and other resource controllers. +@@ -310,6 +313,10 @@ func (m *manager) State() state.Reader { + return m.state + } + ++func (m *manager) GetCPUPolicy() string { ++ return m.policy.Name() ++} ++ + func (m *manager) GetTopologyHints(pod *v1.Pod, container *v1.Container) map[string][]topologymanager.TopologyHint { + // The pod is during the admission phase. We need to save the pod to avoid it + // being cleaned before the admission ended +diff --git a/pkg/kubelet/cm/cpumanager/fake_cpu_manager.go b/pkg/kubelet/cm/cpumanager/fake_cpu_manager.go +index 28578e64..018f13b6 100644 +--- a/pkg/kubelet/cm/cpumanager/fake_cpu_manager.go ++++ b/pkg/kubelet/cm/cpumanager/fake_cpu_manager.go +@@ -17,7 +17,7 @@ limitations under the License. + package cpumanager + + import ( +- "k8s.io/api/core/v1" ++ v1 "k8s.io/api/core/v1" + "k8s.io/klog/v2" + "k8s.io/kubernetes/pkg/kubelet/cm/containermap" + "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state" +@@ -28,7 +28,8 @@ import ( + ) + + type fakeManager struct { +- state state.State ++ policy Policy ++ state state.State + } + + func (m *fakeManager) Start(activePods ActivePodsFunc, sourcesReady config.SourcesReady, podStatusProvider status.PodStatusProvider, containerRuntime runtimeService, initialContainers containermap.ContainerMap) error { +@@ -70,6 +71,10 @@ func (m *fakeManager) State() state.Reader { + return m.state + } + ++func (m *fakeManager) GetCPUPolicy() string { ++ return m.policy.Name() ++} ++ + func (m *fakeManager) GetCPUs(podUID, containerName string) cpuset.CPUSet { + klog.InfoS("GetCPUs", "podUID", podUID, "containerName", containerName) + return cpuset.CPUSet{} +@@ -83,6 +88,7 @@ func (m *fakeManager) GetAllocatableCPUs() cpuset.CPUSet { + // NewFakeManager creates empty/fake cpu manager + func NewFakeManager() Manager { + return &fakeManager{ +- state: state.NewMemoryState(), ++ policy: &nonePolicy{}, ++ state: state.NewMemoryState(), + } + } +diff --git a/pkg/kubelet/cm/helpers_linux.go b/pkg/kubelet/cm/helpers_linux.go +index 33b14e31..a6e5326b 100644 +--- a/pkg/kubelet/cm/helpers_linux.go ++++ b/pkg/kubelet/cm/helpers_linux.go +@@ -25,7 +25,7 @@ import ( + + libcontainercgroups "github.com/opencontainers/runc/libcontainer/cgroups" + +- "k8s.io/api/core/v1" ++ v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/types" + utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/kubernetes/pkg/api/v1/resource" +@@ -167,6 +167,16 @@ func ResourceConfigForPod(pod *v1.Pod, enforceCPULimits bool, cpuPeriod uint64, + // build the result + result := &ResourceConfig{} + if qosClass == v1.PodQOSGuaranteed { ++ // Disable CFS CPU quota to avoid performance degradation due to ++ // Linux kernel CFS throttle implementation. ++ // NOTE: 4.18 kernel attempts to solve CFS throttling problem, ++ // but there are reports that it is not completely effective. ++ // This will configure cgroup CFS parameters at pod level: ++ // /sys/fs/cgroup/cpu/k8s-infra/kubepods//cpu.cfs_quota_us ++ // /sys/fs/cgroup/cpu/k8s-infra/kubepods//cpu.cfs_period_us ++ cpuQuota = int64(-1) ++ cpuPeriod = uint64(100000) ++ + result.CpuShares = &cpuShares + result.CpuQuota = &cpuQuota + result.CpuPeriod = &cpuPeriod +diff --git a/pkg/kubelet/cm/helpers_linux_test.go b/pkg/kubelet/cm/helpers_linux_test.go +index bdd01ea1..b907f575 100644 +--- a/pkg/kubelet/cm/helpers_linux_test.go ++++ b/pkg/kubelet/cm/helpers_linux_test.go +@@ -1,3 +1,4 @@ ++//go:build linux + // +build linux + + /* +@@ -24,7 +25,7 @@ import ( + "testing" + "time" + +- "k8s.io/api/core/v1" ++ v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" + utilfeature "k8s.io/apiserver/pkg/util/feature" + featuregatetesting "k8s.io/component-base/featuregate/testing" +@@ -63,8 +64,9 @@ func TestResourceConfigForPod(t *testing.T) { + burstablePartialShares := MilliCPUToShares(200) + burstableQuota := MilliCPUToQuota(200, int64(defaultQuotaPeriod)) + guaranteedShares := MilliCPUToShares(100) +- guaranteedQuota := MilliCPUToQuota(100, int64(defaultQuotaPeriod)) +- guaranteedTunedQuota := MilliCPUToQuota(100, int64(tunedQuotaPeriod)) ++ guaranteedQuotaPeriod := uint64(100000) ++ guaranteedQuota := int64(-1) ++ guaranteedTunedQuota := int64(-1) + memoryQuantity = resource.MustParse("100Mi") + cpuNoLimit := int64(-1) + guaranteedMemory := memoryQuantity.Value() +@@ -203,8 +205,8 @@ func TestResourceConfigForPod(t *testing.T) { + }, + }, + enforceCPULimits: true, +- quotaPeriod: defaultQuotaPeriod, +- expected: &ResourceConfig{CpuShares: &guaranteedShares, CpuQuota: &guaranteedQuota, CpuPeriod: &defaultQuotaPeriod, Memory: &guaranteedMemory}, ++ quotaPeriod: guaranteedQuotaPeriod, ++ expected: &ResourceConfig{CpuShares: &guaranteedShares, CpuQuota: &guaranteedQuota, CpuPeriod: &guaranteedQuotaPeriod, Memory: &guaranteedMemory}, + }, + "guaranteed-no-cpu-enforcement": { + pod: &v1.Pod{ +@@ -217,8 +219,8 @@ func TestResourceConfigForPod(t *testing.T) { + }, + }, + enforceCPULimits: false, +- quotaPeriod: defaultQuotaPeriod, +- expected: &ResourceConfig{CpuShares: &guaranteedShares, CpuQuota: &cpuNoLimit, CpuPeriod: &defaultQuotaPeriod, Memory: &guaranteedMemory}, ++ quotaPeriod: guaranteedQuotaPeriod, ++ expected: &ResourceConfig{CpuShares: &guaranteedShares, CpuQuota: &cpuNoLimit, CpuPeriod: &guaranteedQuotaPeriod, Memory: &guaranteedMemory}, + }, + "guaranteed-with-tuned-quota": { + pod: &v1.Pod{ +@@ -231,8 +233,8 @@ func TestResourceConfigForPod(t *testing.T) { + }, + }, + enforceCPULimits: true, +- quotaPeriod: tunedQuotaPeriod, +- expected: &ResourceConfig{CpuShares: &guaranteedShares, CpuQuota: &guaranteedTunedQuota, CpuPeriod: &tunedQuotaPeriod, Memory: &guaranteedMemory}, ++ quotaPeriod: guaranteedQuotaPeriod, ++ expected: &ResourceConfig{CpuShares: &guaranteedShares, CpuQuota: &guaranteedTunedQuota, CpuPeriod: &guaranteedQuotaPeriod, Memory: &guaranteedMemory}, + }, + "guaranteed-no-cpu-enforcement-with-tuned-quota": { + pod: &v1.Pod{ +@@ -245,8 +247,8 @@ func TestResourceConfigForPod(t *testing.T) { + }, + }, + enforceCPULimits: false, +- quotaPeriod: tunedQuotaPeriod, +- expected: &ResourceConfig{CpuShares: &guaranteedShares, CpuQuota: &cpuNoLimit, CpuPeriod: &tunedQuotaPeriod, Memory: &guaranteedMemory}, ++ quotaPeriod: guaranteedQuotaPeriod, ++ expected: &ResourceConfig{CpuShares: &guaranteedShares, CpuQuota: &cpuNoLimit, CpuPeriod: &guaranteedQuotaPeriod, Memory: &guaranteedMemory}, + }, + } + +@@ -283,8 +285,9 @@ func TestResourceConfigForPodWithCustomCPUCFSQuotaPeriod(t *testing.T) { + burstablePartialShares := MilliCPUToShares(200) + burstableQuota := MilliCPUToQuota(200, int64(defaultQuotaPeriod)) + guaranteedShares := MilliCPUToShares(100) +- guaranteedQuota := MilliCPUToQuota(100, int64(defaultQuotaPeriod)) +- guaranteedTunedQuota := MilliCPUToQuota(100, int64(tunedQuotaPeriod)) ++ guaranteedQuotaPeriod := uint64(100000) ++ guaranteedQuota := int64(-1) ++ guaranteedTunedQuota := int64(-1) + memoryQuantity = resource.MustParse("100Mi") + cpuNoLimit := int64(-1) + guaranteedMemory := memoryQuantity.Value() +@@ -423,8 +426,8 @@ func TestResourceConfigForPodWithCustomCPUCFSQuotaPeriod(t *testing.T) { + }, + }, + enforceCPULimits: true, +- quotaPeriod: defaultQuotaPeriod, +- expected: &ResourceConfig{CpuShares: &guaranteedShares, CpuQuota: &guaranteedQuota, CpuPeriod: &defaultQuotaPeriod, Memory: &guaranteedMemory}, ++ quotaPeriod: guaranteedQuotaPeriod, ++ expected: &ResourceConfig{CpuShares: &guaranteedShares, CpuQuota: &guaranteedQuota, CpuPeriod: &guaranteedQuotaPeriod, Memory: &guaranteedMemory}, + }, + "guaranteed-no-cpu-enforcement": { + pod: &v1.Pod{ +@@ -437,8 +440,8 @@ func TestResourceConfigForPodWithCustomCPUCFSQuotaPeriod(t *testing.T) { + }, + }, + enforceCPULimits: false, +- quotaPeriod: defaultQuotaPeriod, +- expected: &ResourceConfig{CpuShares: &guaranteedShares, CpuQuota: &cpuNoLimit, CpuPeriod: &defaultQuotaPeriod, Memory: &guaranteedMemory}, ++ quotaPeriod: guaranteedQuotaPeriod, ++ expected: &ResourceConfig{CpuShares: &guaranteedShares, CpuQuota: &cpuNoLimit, CpuPeriod: &guaranteedQuotaPeriod, Memory: &guaranteedMemory}, + }, + "guaranteed-with-tuned-quota": { + pod: &v1.Pod{ +@@ -451,8 +454,8 @@ func TestResourceConfigForPodWithCustomCPUCFSQuotaPeriod(t *testing.T) { + }, + }, + enforceCPULimits: true, +- quotaPeriod: tunedQuotaPeriod, +- expected: &ResourceConfig{CpuShares: &guaranteedShares, CpuQuota: &guaranteedTunedQuota, CpuPeriod: &tunedQuotaPeriod, Memory: &guaranteedMemory}, ++ quotaPeriod: guaranteedQuotaPeriod, ++ expected: &ResourceConfig{CpuShares: &guaranteedShares, CpuQuota: &guaranteedTunedQuota, CpuPeriod: &guaranteedQuotaPeriod, Memory: &guaranteedMemory}, + }, + "guaranteed-no-cpu-enforcement-with-tuned-quota": { + pod: &v1.Pod{ +@@ -465,8 +468,8 @@ func TestResourceConfigForPodWithCustomCPUCFSQuotaPeriod(t *testing.T) { + }, + }, + enforceCPULimits: false, +- quotaPeriod: tunedQuotaPeriod, +- expected: &ResourceConfig{CpuShares: &guaranteedShares, CpuQuota: &cpuNoLimit, CpuPeriod: &tunedQuotaPeriod, Memory: &guaranteedMemory}, ++ quotaPeriod: guaranteedQuotaPeriod, ++ expected: &ResourceConfig{CpuShares: &guaranteedShares, CpuQuota: &cpuNoLimit, CpuPeriod: &guaranteedQuotaPeriod, Memory: &guaranteedMemory}, + }, + } + +diff --git a/pkg/kubelet/cm/internal_container_lifecycle_linux.go b/pkg/kubelet/cm/internal_container_lifecycle_linux.go +index 9cf41620..2e15d9ba 100644 +--- a/pkg/kubelet/cm/internal_container_lifecycle_linux.go ++++ b/pkg/kubelet/cm/internal_container_lifecycle_linux.go +@@ -1,3 +1,4 @@ ++//go:build linux + // +build linux + + /* +@@ -22,8 +23,9 @@ import ( + "strconv" + "strings" + +- "k8s.io/api/core/v1" ++ v1 "k8s.io/api/core/v1" + runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1alpha2" ++ v1qos "k8s.io/kubernetes/pkg/apis/core/v1/helper/qos" + ) + + func (i *internalContainerLifecycleImpl) PreCreateContainer(pod *v1.Pod, container *v1.Container, containerConfig *runtimeapi.ContainerConfig) error { +@@ -33,7 +35,13 @@ func (i *internalContainerLifecycleImpl) PreCreateContainer(pod *v1.Pod, contain + containerConfig.Linux.Resources.CpusetCpus = allocatedCPUs.String() + } + } +- ++ // Disable cgroup CFS throttle at the container level. ++ // /sys/fs/cgroup/cpu/k8s-infra/kubepods///cpu.cfs_quota_us ++ // /sys/fs/cgroup/cpu/k8s-infra/kubepods///cpu.cfs_period_us ++ if i.cpuManager.GetCPUPolicy() == "static" && v1qos.GetPodQOS(pod) == v1.PodQOSGuaranteed { ++ containerConfig.Linux.Resources.CpuPeriod = int64(100000) ++ containerConfig.Linux.Resources.CpuQuota = int64(-1) ++ } + if i.memoryManager != nil { + numaNodes := i.memoryManager.GetMemoryNUMANodes(pod, container) + if numaNodes.Len() > 0 { +-- +2.17.1 + + diff --git a/kubernetes/kubernetes-1.22.5/centos/files/kubelet-cpumanager-infrastructure-pods-use-system-re.patch b/kubernetes/kubernetes-1.22.5/centos/files/kubelet-cpumanager-infrastructure-pods-use-system-re.patch new file mode 100644 index 000000000..4e8285771 --- /dev/null +++ b/kubernetes/kubernetes-1.22.5/centos/files/kubelet-cpumanager-infrastructure-pods-use-system-re.patch @@ -0,0 +1,160 @@ +From 66f4a61ce77624dcc0b520e01fccacec61dfea37 Mon Sep 17 00:00:00 2001 +From: Jim Gauld +Date: Tue, 7 Sep 2021 14:21:03 -0400 +Subject: [PATCH 3/7] kubelet cpumanager infrastructure pods use system + reserved CPUs + +This assigns system infrastructure pods to the "reserved" cpuset +to isolate them from the shared pool of CPUs. + +Infrastructure pods include any pods that belong to the kube-system, +armada, cert-manager, vault, platform-deployment-manager, portieris, +notification or flux-helm namespaces. + +The implementation is a bit simplistic, it is assumed that the +"reserved" cpuset is large enough to handle all infrastructure pods +CPU allocations. + +This also prevents infrastucture pods from using Guaranteed resources. + +Signed-off-by: Daniel Safta +--- + pkg/kubelet/cm/cpumanager/policy_static.go | 52 ++++++++++++++++--- + .../cm/cpumanager/policy_static_test.go | 19 ++++++- + 2 files changed, 63 insertions(+), 8 deletions(-) + +diff --git a/pkg/kubelet/cm/cpumanager/policy_static.go b/pkg/kubelet/cm/cpumanager/policy_static.go +index 89625fc6..492457b1 100644 +--- a/pkg/kubelet/cm/cpumanager/policy_static.go ++++ b/pkg/kubelet/cm/cpumanager/policy_static.go +@@ -53,6 +53,11 @@ func (e SMTAlignmentError) Type() string { + return ErrorSMTAlignment + } + ++// Define namespaces used by platform infrastructure pods ++var infraNamespaces = [...]string{ ++ "kube-system", "armada", "cert-manager", "platform-deployment-manager", "portieris", "vault", "notification", "flux-helm", ++} ++ + // staticPolicy is a CPU manager policy that does not change CPU + // assignments for exclusively pinned guaranteed containers after the main + // container process starts. +@@ -141,12 +146,12 @@ func NewStaticPolicy(topology *topology.CPUTopology, numReservedCPUs int, reserv + klog.InfoS("Reserved CPUs not available for exclusive assignment", "reservedSize", reserved.Size(), "reserved", reserved) + + return &staticPolicy{ +- topology: topology, +- reserved: reserved, ++ topology: topology, ++ reserved: reserved, + excludeReserved: excludeReserved, +- affinity: affinity, +- cpusToReuse: make(map[string]cpuset.CPUSet), +- options: opts, ++ affinity: affinity, ++ cpusToReuse: make(map[string]cpuset.CPUSet), ++ options: opts, + }, nil + } + +@@ -191,8 +196,8 @@ func (p *staticPolicy) validateState(s state.State) error { + // - user tampered with file + if !p.excludeReserved { + if !p.reserved.Intersection(tmpDefaultCPUset).Equals(p.reserved) { +- return fmt.Errorf("not all reserved cpus: \"%s\" are present in defaultCpuSet: \"%s\"", +- p.reserved.String(), tmpDefaultCPUset.String()) ++ return fmt.Errorf("not all reserved cpus: \"%s\" are present in defaultCpuSet: \"%s\"", ++ p.reserved.String(), tmpDefaultCPUset.String()) + } + } + // 2. Check if state for static policy is consistent +@@ -262,6 +267,25 @@ func (p *staticPolicy) updateCPUsToReuse(pod *v1.Pod, container *v1.Container, c + } + + func (p *staticPolicy) Allocate(s state.State, pod *v1.Pod, container *v1.Container) error { ++ // Process infra pods before guaranteed pods ++ if isKubeInfra(pod) { ++ // Container belongs in reserved pool. ++ // We don't want to fall through to the p.guaranteedCPUs() clause below so return either nil or error. ++ if _, ok := s.GetCPUSet(string(pod.UID), container.Name); ok { ++ klog.Infof("[cpumanager] static policy: reserved container already present in state, skipping (namespace: %s, pod UID: %s, pod: %s, container: %s)", pod.Namespace, string(pod.UID), pod.Name, container.Name) ++ return nil ++ } ++ ++ cpuset := p.reserved ++ if cpuset.IsEmpty() { ++ // If this happens then someone messed up. ++ return fmt.Errorf("[cpumanager] static policy: reserved container unable to allocate cpus (namespace: %s, pod UID: %s, pod: %s, container: %s); cpuset=%v, reserved:%v", pod.Namespace, string(pod.UID), pod.Name, container.Name, cpuset, p.reserved) ++ } ++ s.SetCPUSet(string(pod.UID), container.Name, cpuset) ++ klog.Infof("[cpumanager] static policy: reserved: AddContainer (namespace: %s, pod UID: %s, pod: %s, container: %s); cpuset=%v", pod.Namespace, string(pod.UID), pod.Name, container.Name, cpuset) ++ return nil ++ } ++ + if numCPUs := p.guaranteedCPUs(pod, container); numCPUs != 0 { + klog.InfoS("Static policy: Allocate", "pod", klog.KObj(pod), "containerName", container.Name) + // container belongs in an exclusively allocated pool +@@ -366,6 +390,10 @@ func (p *staticPolicy) guaranteedCPUs(pod *v1.Pod, container *v1.Container) int + if cpuQuantity.Value()*1000 != cpuQuantity.MilliValue() { + return 0 + } ++ // Infrastructure pods use reserved CPUs even if they're in the Guaranteed QoS class ++ if isKubeInfra(pod) { ++ return 0 ++ } + // Safe downcast to do for all systems with < 2.1 billion CPUs. + // Per the language spec, `int` is guaranteed to be at least 32 bits wide. + // https://golang.org/ref/spec#Numeric_types +@@ -568,3 +596,13 @@ func (p *staticPolicy) generateCPUTopologyHints(availableCPUs cpuset.CPUSet, reu + + return hints + } ++ ++// check if a given pod is in a platform infrastructure namespace ++func isKubeInfra(pod *v1.Pod) bool { ++ for _, namespace := range infraNamespaces { ++ if namespace == pod.Namespace { ++ return true ++ } ++ } ++ return false ++} +diff --git a/pkg/kubelet/cm/cpumanager/policy_static_test.go b/pkg/kubelet/cm/cpumanager/policy_static_test.go +index 80bd04a1..34c5a23c 100644 +--- a/pkg/kubelet/cm/cpumanager/policy_static_test.go ++++ b/pkg/kubelet/cm/cpumanager/policy_static_test.go +@@ -830,7 +830,8 @@ func TestStaticPolicyStartWithResvList(t *testing.T) { + } + + func TestStaticPolicyAddWithResvList(t *testing.T) { +- ++ infraPod := makePod("fakePod", "fakeContainer2", "200m", "200m") ++ infraPod.Namespace = "kube-system" + testCases := []staticPolicyTestWithResvList{ + { + description: "GuPodSingleCore, SingleSocketHT, ExpectError", +@@ -872,6 +873,22 @@ func TestStaticPolicyAddWithResvList(t *testing.T) { + expCPUAlloc: true, + expCSet: cpuset.NewCPUSet(4, 5), + }, ++ { ++ description: "InfraPod, SingleSocketHT, ExpectAllocReserved", ++ topo: topoSingleSocketHT, ++ numReservedCPUs: 2, ++ reserved: cpuset.NewCPUSet(0, 1), ++ stAssignments: state.ContainerCPUAssignments{ ++ "fakePod": map[string]cpuset.CPUSet{ ++ "fakeContainer100": cpuset.NewCPUSet(2, 3, 6, 7), ++ }, ++ }, ++ stDefaultCPUSet: cpuset.NewCPUSet(4, 5), ++ pod: infraPod, ++ expErr: nil, ++ expCPUAlloc: true, ++ expCSet: cpuset.NewCPUSet(0, 1), ++ }, + } + + testExcl := true +-- +2.17.1 diff --git a/kubernetes/kubernetes-1.22.5/centos/files/kubelet-cpumanager-introduce-concept-of-isolated-CPU.patch b/kubernetes/kubernetes-1.22.5/centos/files/kubelet-cpumanager-introduce-concept-of-isolated-CPU.patch new file mode 100644 index 000000000..3a9d34cdd --- /dev/null +++ b/kubernetes/kubernetes-1.22.5/centos/files/kubelet-cpumanager-introduce-concept-of-isolated-CPU.patch @@ -0,0 +1,564 @@ +From f3db147d0a40a6f336e9fa6d737e36366f9adf87 Mon Sep 17 00:00:00 2001 +From: Daniel Safta +Date: Thu, 13 Jan 2022 11:08:48 +0200 +Subject: [PATCH 4/7] kubelet cpumanager introduce concept of isolated CPUs + +This introduces the concept of "isolated CPUs", which are CPUs that +have been isolated at the kernel level via the "isolcpus" kernel boot +parameter. + +When starting the kubelet process, two separate sets of reserved CPUs +may be specified. With this change CPUs reserved via +'--system-reserved=cpu' will be used for infrastructure pods while the +isolated CPUs should be reserved via '--kube-reserved=cpu' to cause +kubelet to skip over them for "normal" CPU resource tracking. The +kubelet code will double-check that the specified isolated CPUs match +what the kernel exposes in "/sys/devices/system/cpu/isolated". + +A plugin (outside the scope of this commit) will expose the isolated +CPUs to kubelet via the device plugin API. + +If a pod specifies some number of "isolcpus" resources, the device +manager will allocate them. In this code we check whether such +resources have been allocated, and if so we set the container cpuset to +the isolated CPUs. This does mean that it really only makes sense to +specify "isolcpus" resources for best-effort or burstable pods, not for +guaranteed ones since that would throw off the accounting code. In +order to ensure the accounting still works as designed, if "isolcpus" +are specified for guaranteed pods, the affinity will be set to the +non-isolated CPUs. + +This patch was refactored in 1.21.3 due to upstream API change +node: podresources: make GetDevices() consistent +(commit ad68f9588c72d6477b5a290c548a9031063ac659). + +The routine podIsolCPUs() was refactored in 1.21.3 since the API +p.deviceManager.GetDevices() is returning multiple devices with +a device per cpu. The resultant cpuset needs to be the aggregate. + +The routine NewStaticPolicy was refactored in 1.22.5, adding a new argument +in its signature: cpuPolicyOptions map[string]string. This change is implies +shifting the new arguments(deviceManager, excludeReserved) with one position +to the right. + + +Signed-off-by: Daniel Safta +Co-authored-by: Jim Gauld +Co-authored-by: Chris Friesen +--- + pkg/kubelet/cm/container_manager_linux.go | 2 + + pkg/kubelet/cm/cpumanager/cpu_manager.go | 35 +++++++- + pkg/kubelet/cm/cpumanager/cpu_manager_test.go | 14 +++- + pkg/kubelet/cm/cpumanager/policy_static.go | 82 +++++++++++++++++-- + .../cm/cpumanager/policy_static_test.go | 50 ++++++++--- + 5 files changed, 164 insertions(+), 19 deletions(-) + +diff --git a/pkg/kubelet/cm/container_manager_linux.go b/pkg/kubelet/cm/container_manager_linux.go +index d7aa6270..de68ad98 100644 +--- a/pkg/kubelet/cm/container_manager_linux.go ++++ b/pkg/kubelet/cm/container_manager_linux.go +@@ -1,3 +1,4 @@ ++//go:build linux + // +build linux + + /* +@@ -339,6 +340,7 @@ func NewContainerManager(mountUtil mount.Interface, cadvisorInterface cadvisor.I + cm.GetNodeAllocatableReservation(), + nodeConfig.KubeletRootDir, + cm.topologyManager, ++ cm.deviceManager, + ) + if err != nil { + klog.ErrorS(err, "Failed to initialize cpu manager") +diff --git a/pkg/kubelet/cm/cpumanager/cpu_manager.go b/pkg/kubelet/cm/cpumanager/cpu_manager.go +index fba0bfd1..1d0ff0e4 100644 +--- a/pkg/kubelet/cm/cpumanager/cpu_manager.go ++++ b/pkg/kubelet/cm/cpumanager/cpu_manager.go +@@ -18,7 +18,9 @@ package cpumanager + + import ( + "fmt" ++ "io/ioutil" + "math" ++ "strings" + "sync" + "time" + +@@ -32,6 +34,7 @@ import ( + "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state" + "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology" + "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" ++ "k8s.io/kubernetes/pkg/kubelet/cm/devicemanager" + "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" + "k8s.io/kubernetes/pkg/kubelet/config" + kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" +@@ -50,6 +53,25 @@ type policyName string + // cpuManagerStateFileName is the file name where cpu manager stores its state + const cpuManagerStateFileName = "cpu_manager_state" + ++// get the system-level isolated CPUs ++func getIsolcpus() cpuset.CPUSet { ++ dat, err := ioutil.ReadFile("/sys/devices/system/cpu/isolated") ++ if err != nil { ++ klog.Errorf("[cpumanager] unable to read sysfs isolcpus subdir") ++ return cpuset.NewCPUSet() ++ } ++ ++ // The isolated cpus string ends in a newline ++ cpustring := strings.TrimSuffix(string(dat), "\n") ++ cset, err := cpuset.Parse(cpustring) ++ if err != nil { ++ klog.Errorf("[cpumanager] unable to parse sysfs isolcpus string to cpuset") ++ return cpuset.NewCPUSet() ++ } ++ ++ return cset ++} ++ + // Manager interface provides methods for Kubelet to manage pod cpus. + type Manager interface { + // Start is called during Kubelet initialization. +@@ -149,7 +171,8 @@ func (s *sourcesReadyStub) AddSource(source string) {} + func (s *sourcesReadyStub) AllReady() bool { return true } + + // NewManager creates new cpu manager based on provided policy +-func NewManager(cpuPolicyName string, cpuPolicyOptions map[string]string, reconcilePeriod time.Duration, machineInfo *cadvisorapi.MachineInfo, specificCPUs cpuset.CPUSet, nodeAllocatableReservation v1.ResourceList, stateFileDirectory string, affinity topologymanager.Store) (Manager, error) { ++func NewManager(cpuPolicyName string, cpuPolicyOptions map[string]string, reconcilePeriod time.Duration, machineInfo *cadvisorapi.MachineInfo, specificCPUs cpuset.CPUSet, nodeAllocatableReservation v1.ResourceList, stateFileDirectory string, affinity topologymanager.Store, deviceManager devicemanager.Manager) (Manager, error) { ++ + var topo *topology.CPUTopology + var policy Policy + var err error +@@ -190,7 +213,15 @@ func NewManager(cpuPolicyName string, cpuPolicyOptions map[string]string, reconc + // NOTE: Set excludeReserved unconditionally to exclude reserved CPUs from default cpuset. + // This variable is primarily to make testing easier. + excludeReserved := true +- policy, err = NewStaticPolicy(topo, numReservedCPUs, specificCPUs, affinity, cpuPolicyOptions, excludeReserved) ++ ++ // isolCPUs is the set of kernel-isolated CPUs. They should be a subset of specificCPUs or ++ // of the CPUs that NewStaticPolicy() will pick if numReservedCPUs is set. It's only in the ++ // argument list here for ease of testing, it's really internal to the policy. ++ isolCPUs := getIsolcpus() ++ policy, err = NewStaticPolicy(topo, numReservedCPUs, specificCPUs, isolCPUs, affinity, cpuPolicyOptions, deviceManager, excludeReserved) ++ if err != nil { ++ return nil, fmt.Errorf("new static policy error: %v", err) ++ } + + if err != nil { + return nil, fmt.Errorf("new static policy error: %w", err) +diff --git a/pkg/kubelet/cm/cpumanager/cpu_manager_test.go b/pkg/kubelet/cm/cpumanager/cpu_manager_test.go +index bbfc70b8..39532b1c 100644 +--- a/pkg/kubelet/cm/cpumanager/cpu_manager_test.go ++++ b/pkg/kubelet/cm/cpumanager/cpu_manager_test.go +@@ -37,6 +37,7 @@ import ( + "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state" + "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology" + "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" ++ "k8s.io/kubernetes/pkg/kubelet/cm/devicemanager" + "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" + ) + +@@ -215,6 +216,7 @@ func makeMultiContainerPod(initCPUs, appCPUs []struct{ request, limit string }) + } + + func TestCPUManagerAdd(t *testing.T) { ++ testDM, _ := devicemanager.NewManagerStub() + testExcl := false + testPolicy, _ := NewStaticPolicy( + &topology.CPUTopology{ +@@ -230,8 +232,10 @@ func TestCPUManagerAdd(t *testing.T) { + }, + 0, + cpuset.NewCPUSet(), ++ cpuset.NewCPUSet(), + topologymanager.NewFakeManager(), + nil, ++ testDM, + testExcl) + testCases := []struct { + description string +@@ -482,8 +486,9 @@ func TestCPUManagerAddWithInitContainers(t *testing.T) { + } + + testExcl := false ++ testDM, _ := devicemanager.NewManagerStub() + for _, testCase := range testCases { +- policy, _ := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, cpuset.NewCPUSet(), topologymanager.NewFakeManager(), nil, testExcl) ++ policy, _ := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, cpuset.NewCPUSet(), cpuset.NewCPUSet(), topologymanager.NewFakeManager(), nil, testDM, testExcl) + + mockState := &mockState{ + assignments: testCase.stAssignments, +@@ -638,7 +643,9 @@ func TestCPUManagerGenerate(t *testing.T) { + } + defer os.RemoveAll(sDir) + +- mgr, err := NewManager(testCase.cpuPolicyName, nil, 5*time.Second, machineInfo, cpuset.NewCPUSet(), testCase.nodeAllocatableReservation, sDir, topologymanager.NewFakeManager()) ++ testDM, err := devicemanager.NewManagerStub() ++ mgr, err := NewManager(testCase.cpuPolicyName, nil, 5*time.Second, machineInfo, cpuset.NewCPUSet(), testCase.nodeAllocatableReservation, sDir, topologymanager.NewFakeManager(), testDM) ++ + if testCase.expectedError != nil { + if !strings.Contains(err.Error(), testCase.expectedError.Error()) { + t.Errorf("Unexpected error message. Have: %s wants %s", err.Error(), testCase.expectedError.Error()) +@@ -995,6 +1002,7 @@ func TestReconcileState(t *testing.T) { + // the following tests are with --reserved-cpus configured + func TestCPUManagerAddWithResvList(t *testing.T) { + testExcl := false ++ testDM, _ := devicemanager.NewManagerStub() + testPolicy, _ := NewStaticPolicy( + &topology.CPUTopology{ + NumCPUs: 4, +@@ -1009,8 +1017,10 @@ func TestCPUManagerAddWithResvList(t *testing.T) { + }, + 1, + cpuset.NewCPUSet(0), ++ cpuset.NewCPUSet(), + topologymanager.NewFakeManager(), + nil, ++ testDM, + testExcl) + testCases := []struct { + description string +diff --git a/pkg/kubelet/cm/cpumanager/policy_static.go b/pkg/kubelet/cm/cpumanager/policy_static.go +index 953f41e9..ccac9f08 100644 +--- a/pkg/kubelet/cm/cpumanager/policy_static.go ++++ b/pkg/kubelet/cm/cpumanager/policy_static.go +@@ -18,6 +18,7 @@ package cpumanager + + import ( + "fmt" ++ "strconv" + + v1 "k8s.io/api/core/v1" + "k8s.io/klog/v2" +@@ -25,6 +26,7 @@ import ( + "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state" + "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology" + "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" ++ "k8s.io/kubernetes/pkg/kubelet/cm/devicemanager" + "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" + "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/bitmask" + ) +@@ -101,6 +103,10 @@ type staticPolicy struct { + topology *topology.CPUTopology + // set of CPUs that is not available for exclusive assignment + reserved cpuset.CPUSet ++ // subset of reserved CPUs with isolcpus attribute ++ isolcpus cpuset.CPUSet ++ // parent containerManager, used to get device list ++ deviceManager devicemanager.Manager + // If true, default CPUSet should exclude reserved CPUs + excludeReserved bool + // topology manager reference to get container Topology affinity +@@ -117,7 +123,8 @@ var _ Policy = &staticPolicy{} + // NewStaticPolicy returns a CPU manager policy that does not change CPU + // assignments for exclusively pinned guaranteed containers after the main + // container process starts. +-func NewStaticPolicy(topology *topology.CPUTopology, numReservedCPUs int, reservedCPUs cpuset.CPUSet, affinity topologymanager.Store, cpuPolicyOptions map[string]string, excludeReserved bool) (Policy, error) { ++func NewStaticPolicy(topology *topology.CPUTopology, numReservedCPUs int, reservedCPUs cpuset.CPUSet, isolCPUs cpuset.CPUSet, affinity topologymanager.Store, cpuPolicyOptions map[string]string, deviceManager devicemanager.Manager, excludeReserved bool) (Policy, error) { ++ + opts, err := NewStaticPolicyOptions(cpuPolicyOptions) + if err != nil { + return nil, err +@@ -144,10 +151,17 @@ func NewStaticPolicy(topology *topology.CPUTopology, numReservedCPUs int, reserv + } + + klog.InfoS("Reserved CPUs not available for exclusive assignment", "reservedSize", reserved.Size(), "reserved", reserved) ++ if !isolCPUs.IsSubsetOf(reserved) { ++ klog.Errorf("[cpumanager] isolCPUs %v is not a subset of reserved %v", isolCPUs, reserved) ++ reserved = reserved.Union(isolCPUs) ++ klog.Warningf("[cpumanager] mismatch isolCPUs %v, force reserved %v", isolCPUs, reserved) ++ } + + return &staticPolicy{ + topology: topology, + reserved: reserved, ++ isolcpus: isolCPUs, ++ deviceManager: deviceManager, + excludeReserved: excludeReserved, + affinity: affinity, + cpusToReuse: make(map[string]cpuset.CPUSet), +@@ -185,8 +199,9 @@ func (p *staticPolicy) validateState(s state.State) error { + } else { + s.SetDefaultCPUSet(allCPUs) + } +- klog.Infof("[cpumanager] static policy: CPUSet: allCPUs:%v, reserved:%v, default:%v\n", +- allCPUs, p.reserved, s.GetDefaultCPUSet()) ++ klog.Infof("[cpumanager] static policy: CPUSet: allCPUs:%v, reserved:%v, isolcpus:%v, default:%v\n", ++ allCPUs, p.reserved, p.isolcpus, s.GetDefaultCPUSet()) ++ + return nil + } + +@@ -277,10 +292,11 @@ func (p *staticPolicy) Allocate(s state.State, pod *v1.Pod, container *v1.Contai + return nil + } + +- cpuset := p.reserved ++ cpuset := p.reserved.Clone().Difference(p.isolcpus) + if cpuset.IsEmpty() { + // If this happens then someone messed up. +- return fmt.Errorf("[cpumanager] static policy: reserved container unable to allocate cpus (namespace: %s, pod UID: %s, pod: %s, container: %s); cpuset=%v, reserved:%v", pod.Namespace, string(pod.UID), pod.Name, container.Name, cpuset, p.reserved) ++ return fmt.Errorf("[cpumanager] static policy: reserved container unable to allocate cpus (namespace: %s, pod UID: %s, pod: %s, container: %s); cpuset=%v, reserved:%v, isolcpus:%v", pod.Namespace, string(pod.UID), pod.Name, container.Name, cpuset, p.reserved, p.isolcpus) ++ + } + s.SetCPUSet(string(pod.UID), container.Name, cpuset) + klog.Infof("[cpumanager] static policy: reserved: AddContainer (namespace: %s, pod UID: %s, pod: %s, container: %s); cpuset=%v", pod.Namespace, string(pod.UID), pod.Name, container.Name, cpuset) +@@ -324,8 +340,34 @@ func (p *staticPolicy) Allocate(s state.State, pod *v1.Pod, container *v1.Contai + } + s.SetCPUSet(string(pod.UID), container.Name, cpuset) + p.updateCPUsToReuse(pod, container, cpuset) ++ klog.Infof("[cpumanager] guaranteed: AddContainer "+ ++ "(namespace: %s, pod UID: %s, pod: %s, container: %s); numCPUS=%d, cpuset=%v", ++ pod.Namespace, string(pod.UID), pod.Name, container.Name, numCPUs, cpuset) ++ return nil ++ } + ++ if isolcpus := p.podIsolCPUs(pod, container); isolcpus.Size() > 0 { ++ // container has requested isolated CPUs ++ if set, ok := s.GetCPUSet(string(pod.UID), container.Name); ok { ++ if set.Equals(isolcpus) { ++ klog.Infof("[cpumanager] isolcpus container already present in state, skipping (namespace: %s, pod UID: %s, pod: %s, container: %s)", ++ pod.Namespace, string(pod.UID), pod.Name, container.Name) ++ return nil ++ } else { ++ klog.Infof("[cpumanager] isolcpus container state has cpus %v, should be %v (namespace: %s, pod UID: %s, pod: %s, container: %s)", ++ isolcpus, set, pod.Namespace, string(pod.UID), pod.Name, container.Name) ++ } ++ } ++ // Note that we do not do anything about init containers here. ++ // It looks like devices are allocated per-pod based on effective requests/limits ++ // and extra devices from initContainers are not freed up when the regular containers start. ++ // TODO: confirm this is still true for 1.20 ++ s.SetCPUSet(string(pod.UID), container.Name, isolcpus) ++ klog.Infof("[cpumanager] isolcpus: AddContainer (namespace: %s, pod UID: %s, pod: %s, container: %s); cpuset=%v", ++ pod.Namespace, string(pod.UID), pod.Name, container.Name, isolcpus) ++ return nil + } ++ + // container belongs in the shared pool (nothing to do; use default cpuset) + return nil + } +@@ -607,3 +649,33 @@ func isKubeInfra(pod *v1.Pod) bool { + } + return false + } ++ ++// get the isolated CPUs (if any) from the devices associated with a specific container ++func (p *staticPolicy) podIsolCPUs(pod *v1.Pod, container *v1.Container) cpuset.CPUSet { ++ // NOTE: This is required for TestStaticPolicyAdd() since makePod() does ++ // not create UID. We also need a way to properly stub devicemanager. ++ if len(string(pod.UID)) == 0 { ++ return cpuset.NewCPUSet() ++ } ++ resContDevices := p.deviceManager.GetDevices(string(pod.UID), container.Name) ++ cpuSet := cpuset.NewCPUSet() ++ for resourceName, resourceDevs := range resContDevices { ++ // this resource name needs to match the isolcpus device plugin ++ if resourceName == "windriver.com/isolcpus" { ++ for devID, _ := range resourceDevs { ++ cpuStrList := []string{devID} ++ if len(cpuStrList) > 0 { ++ // loop over the list of strings, convert each one to int, add to cpuset ++ for _, cpuStr := range cpuStrList { ++ cpu, err := strconv.Atoi(cpuStr) ++ if err != nil { ++ panic(err) ++ } ++ cpuSet = cpuSet.Union(cpuset.NewCPUSet(cpu)) ++ } ++ } ++ } ++ } ++ } ++ return cpuSet ++} +diff --git a/pkg/kubelet/cm/cpumanager/policy_static_test.go b/pkg/kubelet/cm/cpumanager/policy_static_test.go +index 34c5a23c..a0eb451b 100644 +--- a/pkg/kubelet/cm/cpumanager/policy_static_test.go ++++ b/pkg/kubelet/cm/cpumanager/policy_static_test.go +@@ -25,6 +25,7 @@ import ( + "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state" + "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology" + "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" ++ "k8s.io/kubernetes/pkg/kubelet/cm/devicemanager" + "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" + "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/bitmask" + ) +@@ -65,8 +66,9 @@ func (spt staticPolicyTest) PseudoClone() staticPolicyTest { + } + + func TestStaticPolicyName(t *testing.T) { ++ testDM, _ := devicemanager.NewManagerStub() + testExcl := false +- policy, _ := NewStaticPolicy(topoSingleSocketHT, 1, cpuset.NewCPUSet(), topologymanager.NewFakeManager(), nil, testExcl) ++ policy, _ := NewStaticPolicy(topoSingleSocketHT, 1, cpuset.NewCPUSet(), cpuset.NewCPUSet(), topologymanager.NewFakeManager(), nil, testDM, testExcl) + + policyName := policy.Name() + if policyName != "static" { +@@ -76,6 +78,7 @@ func TestStaticPolicyName(t *testing.T) { + } + + func TestStaticPolicyStart(t *testing.T) { ++ testDM, _ := devicemanager.NewManagerStub() + testCases := []staticPolicyTest{ + { + description: "non-corrupted state", +@@ -151,7 +154,7 @@ func TestStaticPolicyStart(t *testing.T) { + } + for _, testCase := range testCases { + t.Run(testCase.description, func(t *testing.T) { +- p, _ := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, cpuset.NewCPUSet(), topologymanager.NewFakeManager(), nil, testCase.excludeReserved) ++ p, _ := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, cpuset.NewCPUSet(), cpuset.NewCPUSet(), topologymanager.NewFakeManager(), nil, testDM, testCase.excludeReserved) + + policy := p.(*staticPolicy) + st := &mockState{ +@@ -199,7 +202,7 @@ func TestStaticPolicyAdd(t *testing.T) { + largeTopoCPUSet := largeTopoBuilder.Result() + largeTopoSock0CPUSet := largeTopoSock0Builder.Result() + largeTopoSock1CPUSet := largeTopoSock1Builder.Result() +- ++ testDM, _ := devicemanager.NewManagerStub() + // these are the cases which must behave the same regardless the policy options. + // So we will permutate the options to ensure this holds true. + optionsInsensitiveTestCases := []staticPolicyTest{ +@@ -529,8 +532,9 @@ func TestStaticPolicyAdd(t *testing.T) { + } + + func runStaticPolicyTestCase(t *testing.T, testCase staticPolicyTest) { ++ testDM, _ := devicemanager.NewManagerStub() + testExcl := false +- policy, _ := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, cpuset.NewCPUSet(), topologymanager.NewFakeManager(), testCase.options, testExcl) ++ policy, _ := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, cpuset.NewCPUSet(), cpuset.NewCPUSet(), topologymanager.NewFakeManager(), testCase.options, testDM, testExcl) + + st := &mockState{ + assignments: testCase.stAssignments, +@@ -573,6 +577,7 @@ func runStaticPolicyTestCase(t *testing.T, testCase staticPolicyTest) { + + func TestStaticPolicyRemove(t *testing.T) { + excludeReserved := false ++ testDM, _ := devicemanager.NewManagerStub() + testCases := []staticPolicyTest{ + { + description: "SingleSocketHT, DeAllocOneContainer", +@@ -631,7 +636,7 @@ func TestStaticPolicyRemove(t *testing.T) { + } + + for _, testCase := range testCases { +- policy, _ := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, cpuset.NewCPUSet(), topologymanager.NewFakeManager(), nil, testCase.excludeReserved) ++ policy, _ := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, cpuset.NewCPUSet(), cpuset.NewCPUSet(), topologymanager.NewFakeManager(), nil, testDM, excludeReserved) + + st := &mockState{ + assignments: testCase.stAssignments, +@@ -654,6 +659,7 @@ func TestStaticPolicyRemove(t *testing.T) { + + func TestTopologyAwareAllocateCPUs(t *testing.T) { + excludeReserved := false ++ testDM, _ := devicemanager.NewManagerStub() + testCases := []struct { + description string + topo *topology.CPUTopology +@@ -722,7 +728,8 @@ func TestTopologyAwareAllocateCPUs(t *testing.T) { + }, + } + for _, tc := range testCases { +- p, _ := NewStaticPolicy(tc.topo, 0, cpuset.NewCPUSet(), topologymanager.NewFakeManager(), nil, excludeReserved) ++ p, _ := NewStaticPolicy(tc.topo, 0, cpuset.NewCPUSet(), cpuset.NewCPUSet(), topologymanager.NewFakeManager(), nil, testDM, excludeReserved) ++ + policy := p.(*staticPolicy) + st := &mockState{ + assignments: tc.stAssignments, +@@ -755,6 +762,7 @@ type staticPolicyTestWithResvList struct { + topo *topology.CPUTopology + numReservedCPUs int + reserved cpuset.CPUSet ++ isolcpus cpuset.CPUSet + stAssignments state.ContainerCPUAssignments + stDefaultCPUSet cpuset.CPUSet + pod *v1.Pod +@@ -765,6 +773,8 @@ type staticPolicyTestWithResvList struct { + } + + func TestStaticPolicyStartWithResvList(t *testing.T) { ++ testDM, _ := devicemanager.NewManagerStub() ++ testExcl := false + testCases := []staticPolicyTestWithResvList{ + { + description: "empty cpuset", +@@ -794,11 +804,9 @@ func TestStaticPolicyStartWithResvList(t *testing.T) { + expNewErr: fmt.Errorf("[cpumanager] unable to reserve the required amount of CPUs (size of 0-1 did not equal 1)"), + }, + } +- testExcl := false + for _, testCase := range testCases { + t.Run(testCase.description, func(t *testing.T) { +- p, err := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, testCase.reserved, topologymanager.NewFakeManager(), nil, testExcl) +- ++ p, err := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, testCase.reserved, cpuset.NewCPUSet(), topologymanager.NewFakeManager(), nil, testDM, testExcl) + if !reflect.DeepEqual(err, testCase.expNewErr) { + t.Errorf("StaticPolicy Start() error (%v). expected error: %v but got: %v", + testCase.description, testCase.expNewErr, err) +@@ -838,6 +846,7 @@ func TestStaticPolicyAddWithResvList(t *testing.T) { + topo: topoSingleSocketHT, + numReservedCPUs: 1, + reserved: cpuset.NewCPUSet(0), ++ isolcpus: cpuset.NewCPUSet(), + stAssignments: state.ContainerCPUAssignments{}, + stDefaultCPUSet: cpuset.NewCPUSet(1, 2, 3, 4, 5, 6, 7), + pod: makePod("fakePod", "fakeContainer2", "8000m", "8000m"), +@@ -850,6 +859,7 @@ func TestStaticPolicyAddWithResvList(t *testing.T) { + topo: topoSingleSocketHT, + numReservedCPUs: 2, + reserved: cpuset.NewCPUSet(0, 1), ++ isolcpus: cpuset.NewCPUSet(), + stAssignments: state.ContainerCPUAssignments{}, + stDefaultCPUSet: cpuset.NewCPUSet(2, 3, 4, 5, 6, 7), + pod: makePod("fakePod", "fakeContainer2", "1000m", "1000m"), +@@ -862,6 +872,7 @@ func TestStaticPolicyAddWithResvList(t *testing.T) { + topo: topoSingleSocketHT, + numReservedCPUs: 2, + reserved: cpuset.NewCPUSet(0, 1), ++ isolcpus: cpuset.NewCPUSet(), + stAssignments: state.ContainerCPUAssignments{ + "fakePod": map[string]cpuset.CPUSet{ + "fakeContainer100": cpuset.NewCPUSet(2, 3, 6, 7), +@@ -878,6 +889,7 @@ func TestStaticPolicyAddWithResvList(t *testing.T) { + topo: topoSingleSocketHT, + numReservedCPUs: 2, + reserved: cpuset.NewCPUSet(0, 1), ++ isolcpus: cpuset.NewCPUSet(), + stAssignments: state.ContainerCPUAssignments{ + "fakePod": map[string]cpuset.CPUSet{ + "fakeContainer100": cpuset.NewCPUSet(2, 3, 6, 7), +@@ -889,11 +901,29 @@ func TestStaticPolicyAddWithResvList(t *testing.T) { + expCPUAlloc: true, + expCSet: cpuset.NewCPUSet(0, 1), + }, ++ { ++ description: "InfraPod, SingleSocketHT, Isolcpus, ExpectAllocReserved", ++ topo: topoSingleSocketHT, ++ numReservedCPUs: 2, ++ reserved: cpuset.NewCPUSet(0, 1), ++ isolcpus: cpuset.NewCPUSet(1), ++ stAssignments: state.ContainerCPUAssignments{ ++ "fakePod": map[string]cpuset.CPUSet{ ++ "fakeContainer100": cpuset.NewCPUSet(2, 3, 6, 7), ++ }, ++ }, ++ stDefaultCPUSet: cpuset.NewCPUSet(4, 5), ++ pod: infraPod, ++ expErr: nil, ++ expCPUAlloc: true, ++ expCSet: cpuset.NewCPUSet(0), ++ }, + } + + testExcl := true ++ testDM, _ := devicemanager.NewManagerStub() + for _, testCase := range testCases { +- policy, _ := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, testCase.reserved, topologymanager.NewFakeManager(), nil, testExcl) ++ policy, _ := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, testCase.reserved, testCase.isolcpus, topologymanager.NewFakeManager(), nil, testDM, testExcl) + + st := &mockState{ + assignments: testCase.stAssignments, +-- +2.17.1 + diff --git a/kubernetes/kubernetes-1.22.5/centos/files/kubelet-cpumanager-keep-normal-containers-off-reserv.patch b/kubernetes/kubernetes-1.22.5/centos/files/kubelet-cpumanager-keep-normal-containers-off-reserv.patch new file mode 100644 index 000000000..890f90136 --- /dev/null +++ b/kubernetes/kubernetes-1.22.5/centos/files/kubelet-cpumanager-keep-normal-containers-off-reserv.patch @@ -0,0 +1,319 @@ +From 196f2843fe4e6746ca2ba6f97211d9a54733781c Mon Sep 17 00:00:00 2001 +From: Daniel Safta +Date: Wed, 12 Jan 2022 15:23:37 +0200 +Subject: [PATCH 2/7] kubelet cpumanager keep normal containers off reserved + CPUs + +When starting the kubelet process, two separate sets of reserved CPUs +may be specified. With this change CPUs reserved via '--system-reserved=cpu' +or '--kube-reserved=cpu' will be ignored by kubernetes itself. A small +tweak to the default CPU affinity ensures that "normal" Kubernetes +pods won't run on the reserved CPUs. + +Signed-off-by: Daniel Safta +Co-authored-by: Jim Gauld +--- + pkg/kubelet/cm/cpumanager/cpu_manager.go | 6 ++- + pkg/kubelet/cm/cpumanager/cpu_manager_test.go | 11 ++++-- + pkg/kubelet/cm/cpumanager/policy_static.go | 30 ++++++++++++--- + .../cm/cpumanager/policy_static_test.go | 38 ++++++++++++++----- + 4 files changed, 65 insertions(+), 20 deletions(-) + +diff --git a/pkg/kubelet/cm/cpumanager/cpu_manager.go b/pkg/kubelet/cm/cpumanager/cpu_manager.go +index 29194271..fba0bfd1 100644 +--- a/pkg/kubelet/cm/cpumanager/cpu_manager.go ++++ b/pkg/kubelet/cm/cpumanager/cpu_manager.go +@@ -187,7 +187,11 @@ func NewManager(cpuPolicyName string, cpuPolicyOptions map[string]string, reconc + // exclusively allocated. + reservedCPUsFloat := float64(reservedCPUs.MilliValue()) / 1000 + numReservedCPUs := int(math.Ceil(reservedCPUsFloat)) +- policy, err = NewStaticPolicy(topo, numReservedCPUs, specificCPUs, affinity, cpuPolicyOptions) ++ // NOTE: Set excludeReserved unconditionally to exclude reserved CPUs from default cpuset. ++ // This variable is primarily to make testing easier. ++ excludeReserved := true ++ policy, err = NewStaticPolicy(topo, numReservedCPUs, specificCPUs, affinity, cpuPolicyOptions, excludeReserved) ++ + if err != nil { + return nil, fmt.Errorf("new static policy error: %w", err) + } +diff --git a/pkg/kubelet/cm/cpumanager/cpu_manager_test.go b/pkg/kubelet/cm/cpumanager/cpu_manager_test.go +index db0a3560..bbfc70b8 100644 +--- a/pkg/kubelet/cm/cpumanager/cpu_manager_test.go ++++ b/pkg/kubelet/cm/cpumanager/cpu_manager_test.go +@@ -215,6 +215,7 @@ func makeMultiContainerPod(initCPUs, appCPUs []struct{ request, limit string }) + } + + func TestCPUManagerAdd(t *testing.T) { ++ testExcl := false + testPolicy, _ := NewStaticPolicy( + &topology.CPUTopology{ + NumCPUs: 4, +@@ -230,7 +231,8 @@ func TestCPUManagerAdd(t *testing.T) { + 0, + cpuset.NewCPUSet(), + topologymanager.NewFakeManager(), +- nil) ++ nil, ++ testExcl) + testCases := []struct { + description string + updateErr error +@@ -479,8 +481,9 @@ func TestCPUManagerAddWithInitContainers(t *testing.T) { + }, + } + ++ testExcl := false + for _, testCase := range testCases { +- policy, _ := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, cpuset.NewCPUSet(), topologymanager.NewFakeManager(), nil) ++ policy, _ := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, cpuset.NewCPUSet(), topologymanager.NewFakeManager(), nil, testExcl) + + mockState := &mockState{ + assignments: testCase.stAssignments, +@@ -991,6 +994,7 @@ func TestReconcileState(t *testing.T) { + // above test cases are without kubelet --reserved-cpus cmd option + // the following tests are with --reserved-cpus configured + func TestCPUManagerAddWithResvList(t *testing.T) { ++ testExcl := false + testPolicy, _ := NewStaticPolicy( + &topology.CPUTopology{ + NumCPUs: 4, +@@ -1006,7 +1010,8 @@ func TestCPUManagerAddWithResvList(t *testing.T) { + 1, + cpuset.NewCPUSet(0), + topologymanager.NewFakeManager(), +- nil) ++ nil, ++ testExcl) + testCases := []struct { + description string + updateErr error +diff --git a/pkg/kubelet/cm/cpumanager/policy_static.go b/pkg/kubelet/cm/cpumanager/policy_static.go +index f5d275d8..3859ae72 100644 +--- a/pkg/kubelet/cm/cpumanager/policy_static.go ++++ b/pkg/kubelet/cm/cpumanager/policy_static.go +@@ -96,6 +96,8 @@ type staticPolicy struct { + topology *topology.CPUTopology + // set of CPUs that is not available for exclusive assignment + reserved cpuset.CPUSet ++ // If true, default CPUSet should exclude reserved CPUs ++ excludeReserved bool + // topology manager reference to get container Topology affinity + affinity topologymanager.Store + // set of CPUs to reuse across allocations in a pod +@@ -110,7 +112,7 @@ var _ Policy = &staticPolicy{} + // NewStaticPolicy returns a CPU manager policy that does not change CPU + // assignments for exclusively pinned guaranteed containers after the main + // container process starts. +-func NewStaticPolicy(topology *topology.CPUTopology, numReservedCPUs int, reservedCPUs cpuset.CPUSet, affinity topologymanager.Store, cpuPolicyOptions map[string]string) (Policy, error) { ++func NewStaticPolicy(topology *topology.CPUTopology, numReservedCPUs int, reservedCPUs cpuset.CPUSet, affinity topologymanager.Store, cpuPolicyOptions map[string]string, excludeReserved bool) (Policy, error) { + opts, err := NewStaticPolicyOptions(cpuPolicyOptions) + if err != nil { + return nil, err +@@ -141,6 +143,7 @@ func NewStaticPolicy(topology *topology.CPUTopology, numReservedCPUs int, reserv + return &staticPolicy{ + topology: topology, + reserved: reserved, ++ excludeReserved: excludeReserved, + affinity: affinity, + cpusToReuse: make(map[string]cpuset.CPUSet), + options: opts, +@@ -170,7 +173,15 @@ func (p *staticPolicy) validateState(s state.State) error { + } + // state is empty initialize + allCPUs := p.topology.CPUDetails.CPUs() +- s.SetDefaultCPUSet(allCPUs) ++ if p.excludeReserved { ++ // Exclude reserved CPUs from the default CPUSet to keep containers off them ++ // unless explicitly affined. ++ s.SetDefaultCPUSet(allCPUs.Difference(p.reserved)) ++ } else { ++ s.SetDefaultCPUSet(allCPUs) ++ } ++ klog.Infof("[cpumanager] static policy: CPUSet: allCPUs:%v, reserved:%v, default:%v\n", ++ allCPUs, p.reserved, s.GetDefaultCPUSet()) + return nil + } + +@@ -178,11 +189,12 @@ func (p *staticPolicy) validateState(s state.State) error { + // 1. Check if the reserved cpuset is not part of default cpuset because: + // - kube/system reserved have changed (increased) - may lead to some containers not being able to start + // - user tampered with file +- if !p.reserved.Intersection(tmpDefaultCPUset).Equals(p.reserved) { +- return fmt.Errorf("not all reserved cpus: \"%s\" are present in defaultCpuSet: \"%s\"", +- p.reserved.String(), tmpDefaultCPUset.String()) ++ if !p.excludeReserved { ++ if !p.reserved.Intersection(tmpDefaultCPUset).Equals(p.reserved) { ++ return fmt.Errorf("not all reserved cpus: \"%s\" are present in defaultCpuSet: \"%s\"", ++ p.reserved.String(), tmpDefaultCPUset.String()) ++ } + } +- + // 2. Check if state for static policy is consistent + for pod := range tmpAssignments { + for container, cset := range tmpAssignments[pod] { +@@ -209,6 +221,9 @@ func (p *staticPolicy) validateState(s state.State) error { + } + } + totalKnownCPUs = totalKnownCPUs.UnionAll(tmpCPUSets) ++ if p.excludeReserved { ++ totalKnownCPUs = totalKnownCPUs.Union(p.reserved) ++ } + if !totalKnownCPUs.Equals(p.topology.CPUDetails.CPUs()) { + return fmt.Errorf("current set of available CPUs \"%s\" doesn't match with CPUs in state \"%s\"", + p.topology.CPUDetails.CPUs().String(), totalKnownCPUs.String()) +@@ -294,6 +309,9 @@ func (p *staticPolicy) RemoveContainer(s state.State, podUID string, containerNa + klog.InfoS("Static policy: RemoveContainer", "podUID", podUID, "containerName", containerName) + if toRelease, ok := s.GetCPUSet(podUID, containerName); ok { + s.Delete(podUID, containerName) ++ if p.excludeReserved { ++ toRelease = toRelease.Difference(p.reserved) ++ } + // Mutate the shared pool, adding released cpus. + s.SetDefaultCPUSet(s.GetDefaultCPUSet().Union(toRelease)) + } +diff --git a/pkg/kubelet/cm/cpumanager/policy_static_test.go b/pkg/kubelet/cm/cpumanager/policy_static_test.go +index d2b641fe..80bd04a1 100644 +--- a/pkg/kubelet/cm/cpumanager/policy_static_test.go ++++ b/pkg/kubelet/cm/cpumanager/policy_static_test.go +@@ -33,6 +33,7 @@ type staticPolicyTest struct { + description string + topo *topology.CPUTopology + numReservedCPUs int ++ excludeReserved bool + podUID string + options map[string]string + containerName string +@@ -64,7 +65,8 @@ func (spt staticPolicyTest) PseudoClone() staticPolicyTest { + } + + func TestStaticPolicyName(t *testing.T) { +- policy, _ := NewStaticPolicy(topoSingleSocketHT, 1, cpuset.NewCPUSet(), topologymanager.NewFakeManager(), nil) ++ testExcl := false ++ policy, _ := NewStaticPolicy(topoSingleSocketHT, 1, cpuset.NewCPUSet(), topologymanager.NewFakeManager(), nil, testExcl) + + policyName := policy.Name() + if policyName != "static" { +@@ -94,6 +96,15 @@ func TestStaticPolicyStart(t *testing.T) { + stDefaultCPUSet: cpuset.NewCPUSet(), + expCSet: cpuset.NewCPUSet(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11), + }, ++ { ++ description: "empty cpuset exclude reserved", ++ topo: topoDualSocketHT, ++ numReservedCPUs: 2, ++ excludeReserved: true, ++ stAssignments: state.ContainerCPUAssignments{}, ++ stDefaultCPUSet: cpuset.NewCPUSet(), ++ expCSet: cpuset.NewCPUSet(1, 2, 3, 4, 5, 7, 8, 9, 10, 11), ++ }, + { + description: "reserved cores 0 & 6 are not present in available cpuset", + topo: topoDualSocketHT, +@@ -140,7 +151,8 @@ func TestStaticPolicyStart(t *testing.T) { + } + for _, testCase := range testCases { + t.Run(testCase.description, func(t *testing.T) { +- p, _ := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, cpuset.NewCPUSet(), topologymanager.NewFakeManager(), nil) ++ p, _ := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, cpuset.NewCPUSet(), topologymanager.NewFakeManager(), nil, testCase.excludeReserved) ++ + policy := p.(*staticPolicy) + st := &mockState{ + assignments: testCase.stAssignments, +@@ -211,7 +223,7 @@ func TestStaticPolicyAdd(t *testing.T) { + "fakeContainer100": cpuset.NewCPUSet(2, 3, 6, 7), + }, + }, +- stDefaultCPUSet: cpuset.NewCPUSet(0, 1, 4, 5), ++ stDefaultCPUSet: cpuset.NewCPUSet(4, 5), + pod: makePod("fakePod", "fakeContainer3", "2000m", "2000m"), + expErr: nil, + expCPUAlloc: true, +@@ -517,7 +529,8 @@ func TestStaticPolicyAdd(t *testing.T) { + } + + func runStaticPolicyTestCase(t *testing.T, testCase staticPolicyTest) { +- policy, _ := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, cpuset.NewCPUSet(), topologymanager.NewFakeManager(), testCase.options) ++ testExcl := false ++ policy, _ := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, cpuset.NewCPUSet(), topologymanager.NewFakeManager(), testCase.options, testExcl) + + st := &mockState{ + assignments: testCase.stAssignments, +@@ -559,6 +572,7 @@ func runStaticPolicyTestCase(t *testing.T, testCase staticPolicyTest) { + } + + func TestStaticPolicyRemove(t *testing.T) { ++ excludeReserved := false + testCases := []staticPolicyTest{ + { + description: "SingleSocketHT, DeAllocOneContainer", +@@ -617,7 +631,7 @@ func TestStaticPolicyRemove(t *testing.T) { + } + + for _, testCase := range testCases { +- policy, _ := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, cpuset.NewCPUSet(), topologymanager.NewFakeManager(), nil) ++ policy, _ := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, cpuset.NewCPUSet(), topologymanager.NewFakeManager(), nil, testCase.excludeReserved) + + st := &mockState{ + assignments: testCase.stAssignments, +@@ -639,6 +653,7 @@ func TestStaticPolicyRemove(t *testing.T) { + } + + func TestTopologyAwareAllocateCPUs(t *testing.T) { ++ excludeReserved := false + testCases := []struct { + description string + topo *topology.CPUTopology +@@ -707,7 +722,7 @@ func TestTopologyAwareAllocateCPUs(t *testing.T) { + }, + } + for _, tc := range testCases { +- p, _ := NewStaticPolicy(tc.topo, 0, cpuset.NewCPUSet(), topologymanager.NewFakeManager(), nil) ++ p, _ := NewStaticPolicy(tc.topo, 0, cpuset.NewCPUSet(), topologymanager.NewFakeManager(), nil, excludeReserved) + policy := p.(*staticPolicy) + st := &mockState{ + assignments: tc.stAssignments, +@@ -779,9 +794,11 @@ func TestStaticPolicyStartWithResvList(t *testing.T) { + expNewErr: fmt.Errorf("[cpumanager] unable to reserve the required amount of CPUs (size of 0-1 did not equal 1)"), + }, + } ++ testExcl := false + for _, testCase := range testCases { + t.Run(testCase.description, func(t *testing.T) { +- p, err := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, testCase.reserved, topologymanager.NewFakeManager(), nil) ++ p, err := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, testCase.reserved, topologymanager.NewFakeManager(), nil, testExcl) ++ + if !reflect.DeepEqual(err, testCase.expNewErr) { + t.Errorf("StaticPolicy Start() error (%v). expected error: %v but got: %v", + testCase.description, testCase.expNewErr, err) +@@ -821,7 +838,7 @@ func TestStaticPolicyAddWithResvList(t *testing.T) { + numReservedCPUs: 1, + reserved: cpuset.NewCPUSet(0), + stAssignments: state.ContainerCPUAssignments{}, +- stDefaultCPUSet: cpuset.NewCPUSet(0, 1, 2, 3, 4, 5, 6, 7), ++ stDefaultCPUSet: cpuset.NewCPUSet(1, 2, 3, 4, 5, 6, 7), + pod: makePod("fakePod", "fakeContainer2", "8000m", "8000m"), + expErr: fmt.Errorf("not enough cpus available to satisfy request"), + expCPUAlloc: false, +@@ -833,7 +850,7 @@ func TestStaticPolicyAddWithResvList(t *testing.T) { + numReservedCPUs: 2, + reserved: cpuset.NewCPUSet(0, 1), + stAssignments: state.ContainerCPUAssignments{}, +- stDefaultCPUSet: cpuset.NewCPUSet(0, 1, 2, 3, 4, 5, 6, 7), ++ stDefaultCPUSet: cpuset.NewCPUSet(2, 3, 4, 5, 6, 7), + pod: makePod("fakePod", "fakeContainer2", "1000m", "1000m"), + expErr: nil, + expCPUAlloc: true, +@@ -857,8 +874,9 @@ func TestStaticPolicyAddWithResvList(t *testing.T) { + }, + } + ++ testExcl := true + for _, testCase := range testCases { +- policy, _ := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, testCase.reserved, topologymanager.NewFakeManager(), nil) ++ policy, _ := NewStaticPolicy(testCase.topo, testCase.numReservedCPUs, testCase.reserved, topologymanager.NewFakeManager(), nil, testExcl) + + st := &mockState{ + assignments: testCase.stAssignments, +-- +2.17.1 + diff --git a/kubernetes/kubernetes-1.22.5/centos/kubernetes.spec b/kubernetes/kubernetes-1.22.5/centos/kubernetes.spec new file mode 100644 index 000000000..10e44463b --- /dev/null +++ b/kubernetes/kubernetes-1.22.5/centos/kubernetes.spec @@ -0,0 +1,2248 @@ +%if 0%{?fedora} +%global with_devel 1 +%global with_bundled 0 +%global with_debug 1 +%else +%global with_devel 0 +%global with_bundled 1 +%global with_debug 0 +%endif + +%if 0%{?with_debug} +# https://bugzilla.redhat.com/show_bug.cgi?id=995136#c12 +%global _dwz_low_mem_die_limit 0 +%else +%global debug_package %{nil} +%endif + +%global provider github +%global provider_tld com +%global project kubernetes +%global repo kubernetes +# https://github.com/kubernetes/kubernetes + +%global provider_prefix %{provider}.%{provider_tld}/%{project}/%{repo} +%global import_path k8s.io/kubernetes +%global commit 1.22.5 + +%global kube_version 1.22.5 +%global kube_git_version v%{kube_version} + +%global go_version 1.16.12 +%global go_path /usr/lib/golang-%{go_version}-%{go_version}/bin + +# Needed otherwise "version_ldflags=$(kube::version_ldflags)" doesn't work +%global _buildshell /bin/bash +%global _checkshell /bin/bash + +# Used to simplify the paths for install and files +%global _stage1 %{_exec_prefix}/local/kubernetes/%{kube_version}/stage1 +%global _stage2 %{_exec_prefix}/local/kubernetes/%{kube_version}/stage2 + +############################################## +Name: kubernetes-%{kube_version} +Version: %{kube_version} +Release: 1%{?_tis_dist}.%{tis_patch_ver} +Summary: Container cluster management +License: ASL 2.0 +URL: https://%{import_path} +ExclusiveArch: x86_64 aarch64 ppc64le s390x +Source0: %{project}-v%{kube_version}.tar.gz +Source4: kubeadm.conf +Source5: kubelet-cgroup-setup.sh + +Patch1: kubelet-cpumanager-disable-CFS-quota-throttling-for-.patch +Patch2: kubelet-cpumanager-keep-normal-containers-off-reserv.patch +Patch3: kubelet-cpumanager-infrastructure-pods-use-system-re.patch +Patch4: kubelet-cpumanager-introduce-concept-of-isolated-CPU.patch +Patch5: kubeadm-create-platform-pods-with-zero-CPU-resources.patch +Patch6: enable-support-for-kubernetes-to-ignore-isolcpus.patch +Patch7: Revert-use-subpath-for-coredns-only-for-default-repo.patch + + + +# It obsoletes cadvisor but needs its source code (literally integrated) +Obsoletes: cadvisor + +# kubernetes is decomposed into master and node subpackages +# require both of them for updates +Requires: kubernetes-%{kube_version}-master +Requires: kubernetes-%{kube_version}-node + +%description +%{summary} + +%if 0%{?with_devel} +%package devel +Summary: %{summary} +BuildArch: noarch + +Provides: golang(%{import_path}/cmd/genutils) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/kube-apiserver/app) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/kube-apiserver/app/options) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/kube-controller-manager/app) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/kube-controller-manager/app/options) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/kube-proxy/app) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/kube-proxy/app/options) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/kubectl/app) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/kubelet/app) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/kubelet/app/options) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/args) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/client-gen/args) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/client-gen/generators) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/client-gen/generators/fake) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/client-gen/generators/normalization) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/install) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/v1) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/client-gen/testoutput/clientset_generated/test_internalclientset) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/client-gen/testoutput/clientset_generated/test_internalclientset/fake) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/client-gen/testoutput/clientset_generated/test_internalclientset/typed/testgroup.k8s.io/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/client-gen/testoutput/clientset_generated/test_internalclientset/typed/testgroup.k8s.io/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/conversion-gen/generators) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/deepcopy-gen/generators) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/generator) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/go-to-protobuf/protobuf) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/import-boss/generators) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/namer) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/parser) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/set-gen/generators) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/types) = %{version}-%{release} +Provides: golang(%{import_path}/federation/apis/federation) = %{version}-%{release} +Provides: golang(%{import_path}/federation/apis/federation/install) = %{version}-%{release} +Provides: golang(%{import_path}/federation/apis/federation/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_internalclientset) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_internalclientset/fake) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_3) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_3/fake) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_3/typed/core/v1) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_3/typed/core/v1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_3/typed/federation/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_3/typed/federation/v1beta1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_4) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_4/fake) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_4/typed/core/v1) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_4/typed/core/v1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_4/typed/extensions/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_4/typed/extensions/v1beta1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_4/typed/federation/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_4/typed/federation/v1beta1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/federation/pkg/federation-controller/util) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/admission) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/annotations) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/endpoints) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/errors) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/errors/storage) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/meta) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/meta/metatypes) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/pod) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/resource) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/rest) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/rest/resttest) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/service) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/testapi) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/testing/compat) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/unversioned/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/util) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/v1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apimachinery) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apimachinery/registered) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/abac) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/abac/latest) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/abac/v0) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/abac/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/apps) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/apps/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/apps/v1alpha1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/apps/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/authentication) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/authentication/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/authentication/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/authorization) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/authorization/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/authorization/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/authorization/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/autoscaling) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/autoscaling/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/autoscaling/v1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/autoscaling/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/batch) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/batch/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/batch/v1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/batch/v2alpha1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/batch/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/certificates) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/certificates/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/certificates/v1alpha1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/certificates/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/componentconfig) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/componentconfig/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/componentconfig/v1alpha1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/extensions) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/extensions/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/extensions/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/extensions/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/imagepolicy) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/imagepolicy/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/imagepolicy/v1alpha1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/policy) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/policy/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/policy/v1alpha1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/policy/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/rbac) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/rbac/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/rbac/v1alpha1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/rbac/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/storage) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/storage/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/storage/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/storage/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apiserver) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apiserver/audit) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apiserver/authenticator) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apiserver/metrics) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apiserver/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/auth/authenticator) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/auth/authenticator/bearertoken) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/auth/authorizer) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/auth/authorizer/abac) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/auth/authorizer/union) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/auth/handlers) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/auth/user) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/capabilities) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/cache) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/chaosclient) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/core/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_2) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_2/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_2/typed/core/v1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_2/typed/core/v1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_2/typed/extensions/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_2/typed/extensions/v1beta1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_3) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_3/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_3/typed/autoscaling/v1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_3/typed/autoscaling/v1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_3/typed/batch/v1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_3/typed/batch/v1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_3/typed/core/v1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_3/typed/core/v1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_3/typed/extensions/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_3/typed/extensions/v1beta1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/authorization/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/authorization/v1beta1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/autoscaling/v1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/autoscaling/v1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/batch/v1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/batch/v1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/core/v1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/core/v1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/extensions/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/extensions/v1beta1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/policy/v1alpha1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/policy/v1alpha1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/leaderelection) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/metrics) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/metrics/prometheus) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/record) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/restclient) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/testing/core) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/transport) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/typed/discovery) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/typed/discovery/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/typed/dynamic) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned/adapters/internalclientset) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned/auth) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned/clientcmd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned/clientcmd/api) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned/clientcmd/api/latest) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned/clientcmd/api/v1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned/portforward) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned/remotecommand) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned/testclient) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned/testclient/simple) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider/providers) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider/providers/aws) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider/providers/azure) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider/providers/cloudstack) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider/providers/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider/providers/gce) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider/providers/mesos) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider/providers/openstack) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider/providers/ovirt) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider/providers/rackspace) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider/providers/vsphere) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/certificates) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/daemon) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/deployment) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/deployment/util) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/disruption) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/endpoint) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/framework) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/framework/informers) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/garbagecollector) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/garbagecollector/metaonly) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/job) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/namespace) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/node) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/petset) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/podautoscaler) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/podautoscaler/metrics) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/podgc) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/replicaset) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/replicaset/options) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/replication) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/resourcequota) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/route) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/scheduledjob) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/service) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/serviceaccount) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/volume/attachdetach) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/volume/attachdetach/cache) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/volume/attachdetach/populator) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/volume/attachdetach/reconciler) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/volume/attachdetach/statusupdater) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/volume/attachdetach/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/volume/persistentvolume) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/volume/persistentvolume/options) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/conversion) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/conversion/queryparams) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/credentialprovider) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/credentialprovider/aws) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/credentialprovider/gcp) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/dns) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/fieldpath) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/fields) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/genericapiserver) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/genericapiserver/authorizer) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/genericapiserver/openapi) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/genericapiserver/options) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/genericapiserver/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/healthz) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/httplog) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl/cmd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl/cmd/config) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl/cmd/rollout) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl/cmd/set) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl/cmd/templates) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl/cmd/util) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl/cmd/util/editor) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl/cmd/util/jsonmerge) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl/metricsutil) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl/resource) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/api) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/api/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/api/v1alpha1/runtime) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/api/v1alpha1/stats) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/cadvisor) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/cadvisor/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/client) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/cm) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/config) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/container) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/container/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/custommetrics) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/dockershim) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/dockertools) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/envvars) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/events) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/eviction) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/images) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/kuberuntime) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/leaky) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/lifecycle) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/metrics) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/network) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/network/cni) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/network/cni/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/network/exec) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/network/hairpin) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/network/hostport) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/network/hostport/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/network/kubenet) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/network/mock_network) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/network/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/pleg) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/pod) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/pod/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/prober) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/prober/results) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/prober/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/qos) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/remote) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/rkt) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/rkt/mock_os) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/rktshim) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/server) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/server/portforward) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/server/remotecommand) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/server/stats) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/status) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/sysctl) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/types) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/util) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/util/cache) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/util/format) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/util/ioutils) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/util/queue) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/util/sliceutils) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/volumemanager) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/volumemanager/cache) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/volumemanager/populator) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/volumemanager/reconciler) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubemark) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/labels) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/master) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/master/ports) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/metrics) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/probe) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/probe/exec) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/probe/http) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/probe/tcp) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/proxy) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/proxy/config) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/proxy/healthcheck) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/proxy/iptables) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/proxy/userspace) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/quota) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/quota/evaluator/core) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/quota/generic) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/quota/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/authorization/subjectaccessreview) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/authorization/util) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/cachesize) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/certificates) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/certificates/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/clusterrole) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/clusterrole/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/clusterrole/policybased) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/clusterrolebinding) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/clusterrolebinding/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/clusterrolebinding/policybased) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/componentstatus) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/configmap) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/configmap/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/controller) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/controller/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/daemonset) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/daemonset/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/deployment) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/deployment/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/endpoint) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/endpoint/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/event) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/event/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/experimental/controller/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/generic) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/generic/registry) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/generic/rest) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/horizontalpodautoscaler) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/horizontalpodautoscaler/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/ingress) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/ingress/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/job) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/job/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/limitrange) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/limitrange/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/namespace) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/namespace/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/networkpolicy) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/networkpolicy/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/node) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/node/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/node/rest) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/persistentvolume) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/persistentvolume/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/persistentvolumeclaim) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/persistentvolumeclaim/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/petset) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/petset/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/pod) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/pod/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/pod/rest) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/poddisruptionbudget) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/poddisruptionbudget/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/podsecuritypolicy) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/podsecuritypolicy/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/podtemplate) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/podtemplate/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/rangeallocation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/registrytest) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/replicaset) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/replicaset/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/resourcequota) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/resourcequota/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/role) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/role/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/role/policybased) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/rolebinding) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/rolebinding/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/rolebinding/policybased) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/scheduledjob) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/scheduledjob/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/secret) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/secret/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/securitycontextconstraints) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/securitycontextconstraints/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/service) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/service/allocator) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/service/allocator/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/service/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/service/ipallocator) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/service/ipallocator/controller) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/service/ipallocator/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/service/portallocator) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/service/portallocator/controller) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/serviceaccount) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/serviceaccount/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/storageclass) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/storageclass/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/thirdpartyresource) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/thirdpartyresource/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/thirdpartyresourcedata) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/thirdpartyresourcedata/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/tokenreview) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/runtime) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/runtime/serializer) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/runtime/serializer/json) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/runtime/serializer/protobuf) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/runtime/serializer/recognizer) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/runtime/serializer/streaming) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/runtime/serializer/versioning) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/runtime/serializer/yaml) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/security) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/security/apparmor) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/security/podsecuritypolicy) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/security/podsecuritypolicy/apparmor) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/security/podsecuritypolicy/capabilities) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/security/podsecuritypolicy/group) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/security/podsecuritypolicy/selinux) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/security/podsecuritypolicy/sysctl) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/security/podsecuritypolicy/user) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/security/podsecuritypolicy/util) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/securitycontext) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/securitycontextconstraints) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/securitycontextconstraints/capabilities) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/securitycontextconstraints/group) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/securitycontextconstraints/seccomp) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/securitycontextconstraints/selinux) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/securitycontextconstraints/user) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/securitycontextconstraints/util) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/selection) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/serviceaccount) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/ssh) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/storage) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/storage/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/storage/etcd/etcdtest) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/storage/etcd/metrics) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/storage/etcd/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/storage/etcd/testing/testingcert) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/storage/etcd/util) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/storage/etcd3) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/storage/storagebackend) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/storage/storagebackend/factory) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/storage/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/types) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/ui) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/async) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/bandwidth) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/cache) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/certificates) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/chmod) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/chown) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/clock) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/codeinspector) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/config) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/configz) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/crlf) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/crypto) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/dbus) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/diff) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/ebtables) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/env) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/errors) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/exec) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/flag) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/flock) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/flowcontrol) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/flushwriter) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/framer) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/goroutinemap) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/goroutinemap/exponentialbackoff) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/hash) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/homedir) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/httpstream) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/httpstream/spdy) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/integer) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/interrupt) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/intstr) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/io) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/iptables) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/iptables/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/json) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/jsonpath) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/keymutex) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/labels) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/limitwriter) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/logs) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/maps) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/metrics) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/mount) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/net) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/net/sets) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/node) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/oom) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/parsers) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/pod) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/procfs) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/proxy) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/rand) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/replicaset) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/resourcecontainer) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/rlimit) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/runtime) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/selinux) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/sets) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/sets/types) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/slice) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/strategicpatch) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/strings) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/sysctl) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/sysctl/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/system) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/term) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/threading) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/uuid) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/validation/field) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/wait) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/workqueue) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/wsstream) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/yaml) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/version) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/version/prometheus) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/version/verflag) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/aws_ebs) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/azure_dd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/azure_file) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/cephfs) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/cinder) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/configmap) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/downwardapi) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/empty_dir) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/fc) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/flexvolume) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/flocker) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/gce_pd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/git_repo) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/glusterfs) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/host_path) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/iscsi) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/nfs) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/quobyte) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/rbd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/secret) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/util) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/util/nestedpendingoperations) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/util/operationexecutor) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/util/types) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/util/volumehelper) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/vsphere_volume) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/watch) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/watch/json) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/watch/versioned) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/cmd/kube-scheduler/app) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/cmd/kube-scheduler/app/options) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/admit) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/alwayspullimages) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/antiaffinity) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/deny) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/exec) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/imagepolicy) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/initialresources) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/limitranger) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/namespace/autoprovision) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/namespace/exists) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/namespace/lifecycle) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/persistentvolume/label) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/resourcequota) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/security) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/security/podsecuritypolicy) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/securitycontext/scdeny) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/serviceaccount) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/storageclass/default) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/password) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/password/allow) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/password/keystone) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/password/passwordfile) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/request/basicauth) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/request/union) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/request/x509) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/token/oidc) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/token/oidc/testing) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/token/tokenfile) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/token/tokentest) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/token/webhook) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authorizer) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authorizer/rbac) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authorizer/webhook) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/client/auth) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/client/auth/gcp) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/client/auth/oidc) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/algorithm) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/algorithm/predicates) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/algorithm/priorities) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/algorithm/priorities/util) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/algorithmprovider) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/algorithmprovider/defaults) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/api) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/api/latest) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/api/v1) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/api/validation) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/factory) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/metrics) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/schedulercache) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/testing) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/webhook) = %{version}-%{release} + +%description devel +Libraries for building packages importing k8s.io/kubernetes. +Currently, the devel is not suitable for development. +It is meant only as a buildtime dependency for other projects. + +This package contains library source intended for +building other packages which use %{project}/%{repo}. +%endif + +############################################## +%package unit-test +Summary: %{summary} - for running unit tests + +# below Rs used for testing +Requires: golang-%{go_version} +Requires: etcd >= 2.0.9 +Requires: hostname +Requires: rsync +Requires: NetworkManager + +%description unit-test +%{summary} - for running unit tests + +############################################## +%package master +Summary: Kubernetes services for master host + +# Build with the recommended golang for this Kubernetes version +BuildRequires: golang-%{go_version} +BuildRequires: systemd +BuildRequires: rsync +BuildRequires: go-md2man +BuildRequires: go-bindata + +Requires(pre): shadow-utils +Requires: kubernetes-%{kube_version}-client + +%description master +Kubernetes services for master host + +############################################## +%package node +Summary: Kubernetes services for node host + +%if 0%{?fedora} >= 27 +Requires: (docker or docker-ce) +Suggests: docker-ce +%else +Requires: docker-ce +%endif +Requires: conntrack-tools + +BuildRequires: golang-%{go_version} +BuildRequires: systemd +BuildRequires: rsync +BuildRequires: go-md2man +BuildRequires: go-bindata + +Requires(pre): shadow-utils +Requires: socat +Requires: kubernetes-%{kube_version}-client + +%description node +Kubernetes services for node host + +############################################## +%package kubeadm +Summary: Kubernetes tool for standing up clusters +Requires: kubernetes-%{kube_version}-client +Requires: containernetworking-cni + +%description kubeadm +Kubernetes tool for standing up clusters + +############################################## +%package client +Summary: Kubernetes client tools + +BuildRequires: golang-%{go_version} +BuildRequires: go-bindata + +%description client +Kubernetes client tools like kubectl + +############################################## +%package kube-misc +Summary: dummy package +%description kube-misc +Kubernetes dummy package for misc stuff we don't want to +install in production. + +############################################## + +%prep +%setup -q -n %{repo}-%{commit} +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 + + +#src/k8s.io/kubernetes/pkg/util/certificates +# Patch the code to remove eliptic.P224 support +for dir in vendor/github.com/google/certificate-transparency/go/x509 pkg/util/certificates; do + if [ -d "${dir}" ]; then + pushd ${dir} + sed -i "/^[^=]*$/ s/oidNamedCurveP224/oidNamedCurveP256/g" *.go + sed -i "/^[^=]*$/ s/elliptic\.P224/elliptic.P256/g" *.go + popd + fi +done + +# Move all the code under src/k8s.io/kubernetes directory +mkdir -p src/k8s.io/kubernetes +mv $(ls | grep -v "^src$") src/k8s.io/kubernetes/. + +############### + +%build +export PATH=%{go_path}:$PATH +export PBR_VERSION=%{version} +pushd src/k8s.io/kubernetes/ +export KUBE_GIT_TREE_STATE="clean" +export KUBE_GIT_COMMIT=%{commit} +export KUBE_GIT_VERSION=%{kube_git_version} +export KUBE_EXTRA_GOPATH=$(pwd)/Godeps/_workspace + +# Verify the go version we will build against +go version + +# https://bugzilla.redhat.com/show_bug.cgi?id=1392922#c1 +%ifarch ppc64le +export GOLDFLAGS='-linkmode=external' +%endif + +# uncomment these two lines to build unoptimized binaries for debugging. +# export GOLDFLAGS="" +# export GOGCFLAGS="-N -l" +make WHAT="cmd/kube-proxy cmd/kube-apiserver cmd/kube-controller-manager cmd/kubelet cmd/kubeadm cmd/kube-scheduler cmd/kubectl" + +# convert md to man +./hack/generate-docs.sh || true +pushd docs +pushd admin +cp kube-apiserver.md kube-controller-manager.md kube-proxy.md kube-scheduler.md kubelet.md .. +popd +popd + +%install +# go_path required for setup_env golang version check +export PATH=%{go_path}:$PATH +export PBR_VERSION=%{version} +pushd src/k8s.io/kubernetes/ +. hack/lib/init.sh +kube::golang::setup_env + +%ifarch ppc64le +output_path="_output/local/go/bin" +%else +output_path="${KUBE_OUTPUT_BINPATH}/$(kube::golang::host_platform)" +%endif + +install -m 755 -d %{buildroot}%{_bindir} +install -m 755 -d %{buildroot}%{_stage1}%{_bindir} +install -m 755 -d %{buildroot}%{_stage2}%{_bindir} + +echo "+++ INSTALLING kube-apiserver" +install -p -m 754 -t %{buildroot}%{_bindir} ${output_path}/kube-apiserver + +echo "+++ INSTALLING kubeadm" +install -p -m 755 -t %{buildroot}%{_stage1}%{_bindir} ${output_path}/kubeadm +install -d -m 0755 %{buildroot}%{_stage2}%{_sysconfdir}/systemd/system/kubelet.service.d +install -p -m 0644 -t %{buildroot}%{_stage2}%{_sysconfdir}/systemd/system/kubelet.service.d %{SOURCE4} + +echo "+++ INSTALLING kubelet-cgroup-setup.sh" +install -p -m 0700 -t %{buildroot}%{_stage2}%{_bindir} %{SOURCE5} + +echo "+++ INSTALLING kube-apiserver" +install -p -m 754 -t %{buildroot}%{_bindir} ${output_path}/kube-apiserver + +echo "+++ INSTALLING kube-controller-manager" +install -p -m 754 -t %{buildroot}%{_bindir} ${output_path}/kube-controller-manager + +echo "+++ INSTALLING kube-scheduler" +install -p -m 754 -t %{buildroot}%{_bindir} ${output_path}/kube-scheduler + +echo "+++ INSTALLING kube-proxy" +install -p -m 754 -t %{buildroot}%{_bindir} ${output_path}/kube-proxy + +echo "+++ INSTALLING kubelet" +install -p -m 754 -t %{buildroot}%{_stage2}%{_bindir} ${output_path}/kubelet + +echo "+++ INSTALLING kubectl" +install -p -m 754 -t %{buildroot}%{_stage2}%{_bindir} ${output_path}/kubectl + +# install the bash completion +install -d -m 0755 %{buildroot}%{_stage2}%{_datadir}/bash-completion/completions/ +%{buildroot}%{_stage2}%{_bindir}/kubectl completion bash > %{buildroot}%{_stage2}%{_datadir}/bash-completion/completions/kubectl + +# install specific cluster addons for optional use +install -d -m 0755 %{buildroot}%{_sysconfdir}/%{name}/addons +# Addon: volumesnapshots +install -d -m 0755 %{buildroot}%{_sysconfdir}/%{name}/addons/volumesnapshots +install -d -m 0755 %{buildroot}%{_sysconfdir}/%{name}/addons/volumesnapshots/crd +install -m 0644 -t %{buildroot}%{_sysconfdir}/%{name}/addons/volumesnapshots/crd cluster/addons/volumesnapshots/crd/* +install -d -m 0755 %{buildroot}%{_sysconfdir}/%{name}/addons/volumesnapshots/volume-snapshot-controller +install -m 0644 -t %{buildroot}%{_sysconfdir}/%{name}/addons/volumesnapshots/volume-snapshot-controller cluster/addons/volumesnapshots/volume-snapshot-controller/* + +# install manpages +install -d %{buildroot}%{_mandir}/man1 +install -p -m 644 docs/man/man1/* %{buildroot}%{_mandir}/man1 +rm -Rf %{buildroot}%{_mandir}/man1/cloud-controller-manager.* +# from k8s tarball copied docs/man/man1/*.1 + +# source codes for building projects +%if 0%{?with_devel} +install -d -p %{buildroot}/%{gopath}/src/%{import_path}/ +echo "%%dir %%{gopath}/src/%%{import_path}/." >> devel.file-list +# find all *.go but no *_test.go files and generate devel.file-list +for file in $(find . -iname "*.go" \! -iname "*_test.go") ; do + echo "%%dir %%{gopath}/src/%%{import_path}/$(dirname $file)" >> devel.file-list + install -d -p %{buildroot}/%{gopath}/src/%{import_path}/$(dirname $file) + cp -pav $file %{buildroot}/%{gopath}/src/%{import_path}/$file + echo "%%{gopath}/src/%%{import_path}/$file" >> devel.filelist +done +%endif + + +%if 0%{?with_devel} +sort -u -o devel.file-list devel.file-list +%endif + +popd + +%if 0%{?with_devel} +mv src/k8s.io/kubernetes/devel.file-list . +%endif + +mv src/k8s.io/kubernetes/*.md . +mv src/k8s.io/kubernetes/LICENSE . + + +# place files for unit-test rpm +install -d -m 0755 %{buildroot}%{_sharedstatedir}/kubernetes-unit-test/ +# basically, everything from the root directory is needed +# unit-tests needs source code +# integration tests needs docs and other files +# test-cmd.sh atm needs cluster, examples and other +cp -a src %{buildroot}%{_sharedstatedir}/kubernetes-unit-test/ +rm -rf %{buildroot}%{_sharedstatedir}/kubernetes-unit-test/src/k8s.io/kubernetes/_output +cp -a *.md %{buildroot}%{_sharedstatedir}/kubernetes-unit-test/src/k8s.io/kubernetes/ + +%check +# Fedora, RHEL7 and CentOS are tested via unit-test subpackage +if [ 1 != 1 ]; then +echo "******Testing the commands*****" +hack/test-cmd.sh +echo "******Benchmarking kube********" +hack/benchmark-go.sh + +# In Fedora 20 and RHEL7 the go cover tools isn't available correctly +%if 0%{?fedora} >= 21 +echo "******Testing the go code******" +hack/test-go.sh +echo "******Testing integration******" +hack/test-integration.sh --use_go_build +%endif +fi + +############################################## +%files +# empty as it depends on master and node + +############################################## +%files master +%license LICENSE +%doc *.md +%attr(754, -, root) %caps(cap_net_bind_service=ep) %{_bindir}/kube-apiserver +%{_bindir}/kube-controller-manager +%{_bindir}/kube-scheduler +%dir %{_sysconfdir}/%{name} +%dir %{_sysconfdir}/%{name}/addons +%dir %{_sysconfdir}/%{name}/addons/volumesnapshots +%dir %{_sysconfdir}/%{name}/addons/volumesnapshots/crd +%{_sysconfdir}/%{name}/addons/volumesnapshots/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml +%{_sysconfdir}/%{name}/addons/volumesnapshots/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml +%{_sysconfdir}/%{name}/addons/volumesnapshots/crd/snapshot.storage.k8s.io_volumesnapshots.yaml +%dir %{_sysconfdir}/%{name}/addons/volumesnapshots/volume-snapshot-controller +%{_sysconfdir}/%{name}/addons/volumesnapshots/volume-snapshot-controller/volume-snapshot-controller-deployment.yaml +%{_sysconfdir}/%{name}/addons/volumesnapshots/volume-snapshot-controller/rbac-volume-snapshot-controller.yaml + +############################################## +%files node +%license LICENSE +%{_stage2}%{_bindir}/kubelet +%{_stage2}%{_bindir}/kubelet-cgroup-setup.sh + +############################################## +%files kubeadm +%license LICENSE +%{_stage1}%{_bindir}/kubeadm +%dir %{_stage2}%{_sysconfdir}/systemd/system/kubelet.service.d +%config(noreplace) %{_stage2}%{_sysconfdir}/systemd/system/kubelet.service.d/kubeadm.conf + +############################################## +%files client +%license LICENSE +%{_stage2}%{_bindir}/kubectl +%{_stage2}%{_datadir}/bash-completion/completions/kubectl + +############################################## +%files unit-test +%{_sharedstatedir}/kubernetes-unit-test/ + +%if 0%{?with_devel} +%files devel -f devel.file-list +%doc *.md +%dir %{gopath}/src/k8s.io +%endif + +############################################## +%files kube-misc +%{_mandir}/man1/kube-apiserver.1* +%{_mandir}/man1/kube-controller-manager.1* +%{_mandir}/man1/kube-scheduler.1* +%{_mandir}/man1/kube-proxy.1* +%{_bindir}/kube-proxy +%{_mandir}/man1/kubelet.1* +%{_mandir}/man1/kubeadm.1* +%{_mandir}/man1/kubeadm-* +%{_mandir}/man1/kubectl.1* +%{_mandir}/man1/kubectl-* + +############################################## + +%pre master + +%post master +%systemd_post kube-apiserver kube-scheduler kube-controller-manager + +%preun master +%systemd_preun kube-apiserver kube-scheduler kube-controller-manager + +%postun master +%systemd_postun + + +%pre node + +%post node + +%preun node + +%postun node +%systemd_postun + +############################################ +%changelog +* Tue Mar 27 2018 Spyros Trigazis - 1.10.0-1 +- Bump to upstream v1.10.0 + +* Thu Mar 22 2018 Spyros Trigazis - 1.9.6-1 +- Bump to upstream v1.9.6 + +* Tue Mar 20 2018 Jan Chaloupka - 1.9.5-1 +- Bump to upstream v1.9.5 + resolves: #1554420 + +* Sun Feb 11 2018 Spyros Trigazis - 1.9.3-1 +- Bump to upstream v1.9.3 + +* Fri Feb 09 2018 Jan Chaloupka - 1.9.1-5 +- Add --fail-swap-on=false flag to the /etc/kubernetes/kubelet + resolves: #1542476 + +* Thu Feb 08 2018 Igor Gnatenko - 1.9.1-4 +- Escape macro in %%changelog + +* Wed Feb 07 2018 Fedora Release Engineering - 1.9.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Mon Jan 15 2018 Jan Chaloupka - 1.9.1-2 +- If docker is not available, try docker-ce instead (use boolean dependencies) + resolves: #1534508 + +* Fri Jan 12 2018 Spyros Trigazis - 1.9.1-1 +- Update to upstream v1.9.1 + resolves #1533794 + +* Tue Oct 24 2017 Jan Chaloupka - 1.8.1-1 +- Update to upstream v1.8.1 + resolves: #1497135 + +* Mon Oct 02 2017 Jan Chaloupka - 1.8.0-1 +- Update to upstream v1.8.0 + related: #1497625 + +* Mon Oct 02 2017 Jan Chaloupka - 1.7.7-1 +- Update to upstream v1.7.7 + resolves: #1497625 + +* Mon Sep 18 2017 Jan Chaloupka - 1.7.6-1 +- Update to upstream v1.7.6 + resolves: #1492551 + +* Mon Sep 11 2017 Jan Chaloupka - 1.7.5-1 +- Update to upstream v1.7.5 + resolves: #1490316 + +* Fri Aug 18 2017 Jan Chaloupka - 1.7.4-1 +- Fix the version + related: #1482874 + +* Fri Aug 18 2017 Jan Chaloupka - 1.7.3-2 +- Update to upstream v1.7.4 + resolves: #1482874 + +* Tue Aug 08 2017 Jan Chaloupka - 1.7.3-1 +- Update to upstream v1.7.3 + resolves: #1479685 + +* Thu Aug 03 2017 Fedora Release Engineering - 1.7.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Sun Jul 30 2017 Florian Weimer - 1.7.2-3 +- Rebuild with binutils fix for ppc64le (#1475636) + +* Wed Jul 26 2017 Fedora Release Engineering - 1.7.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Mon Jul 24 2017 Jan Chaloupka - 1.7.2-1 +- Update to upstream v1.7.2 + +* Mon Jul 24 2017 Jan Chaloupka - 1.7.1-2 +- Sync kubeadm.conf with upstream service configuration (set Restart,StartLimitInterval,RestartSec) + +* Fri Jul 14 2017 Jan Chaloupka - 1.7.1-1 +- Update to upstream v1.7.1 + resolves: #1471767 + +* Sat Jul 08 2017 Jan Chaloupka - 1.6.7-1 +- Update to upstream v1.6.7 + resolves: #1468823 + resolves: #1468752 + +* Fri May 19 2017 Timothy St. Clair - 1.6.4-1 +- Add kubeadm subpackage to enable upstream deployments + +* Thu May 18 2017 Jan Chaloupka - 1.6.3-1 +- Update to upstream v1.6.3 + resolves: #1452101 + +* Fri May 12 2017 Jan Chaloupka - 1.6.2-2 +- Extend archs with s390x + resolves: #1400000 + +* Tue May 02 2017 Jan Chaloupka - 1.6.2-1 +- Update to upstream v1.6.2 + resolves: #1447338 + +* Tue Apr 11 2017 Jan Chaloupka - 1.6.1-1 +- Update to upstream v1.6.1 + related: #1422889 + +* Fri Mar 31 2017 Jan Chaloupka - 1.5.6-1 +- Update to upstream v1.5.6 + related: #1422889 + +* Mon Mar 27 2017 Jan Chaloupka - 1.5.5-4 +- Update to upstream v1.5.5 + related: #1422889 + +* Mon Mar 27 2017 Jan Chaloupka - 1.5.4-3 +- re-enable debug-info + related: #1422889 + +* Thu Mar 09 2017 Jan Chaloupka - 1.5.4-2 +- Bump to upstream 7243c69eb523aa4377bce883e7c0dd76b84709a1 + related: #1422889 + +* Thu Feb 16 2017 Jan Chaloupka - 1.5.3-1 +- Update to upstream v1.5.3 + resolves: #1422889 + +* Fri Feb 10 2017 Fedora Release Engineering - 1.5.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Wed Jan 18 2017 Jan Chaloupka - 1.5.2-2 +- fix rootScopeNaming generate selfLink + resolves: #1413997 + +* Fri Jan 13 2017 Jan Chaloupka - 1.5.2-1 +- Bump version as well + related: #1412996 + +* Fri Jan 13 2017 Jan Chaloupka - 1.5.1-2 +- Bump to upstream 1.5.2 + resolves: #1412996 + +* Thu Jan 05 2017 Jan Chaloupka - 1.5.1-1 +- Bump to upstream 1.5.1 + resolves: #1410186 + +* Wed Jan 04 2017 Jan Chaloupka - 1.4.7-2 +- Generate the md files before they are converted to man pages + resolves: #1409943 + +* Mon Dec 12 2016 Jan Chaloupka - 1.4.7-1 +- Bump to upstream v1.4.7 + resolves: #1403823 + New conntrack-tools dependency of kube-proxy + Build kubernetes on ppc64le with linkmode=external + resolves: #1392922 + +* Mon Nov 14 2016 jchaloup - 1.4.5-3 +- Patch unit-test subpackage to run tests over k8s distro binaries + +* Wed Nov 09 2016 jchaloup - 1.4.5-2 +- Add missing if devel around generated devel.file-list + related: #1390074 + +* Tue Nov 08 2016 jchaloup - 1.4.5-1 +- Bump to upstream v1.4.5 (flip back to upstream based Kubernetes) + related: #1390074 + +* Mon Oct 31 2016 jchaloup - 1.4.0-0.1.beta3.git52492b4 +- Update to origin v1.4.0-alpha.0 (ppc64le and arm unbuildable with the current golang version) + resolves: #1390074 + +* Mon Oct 24 2016 jchaloup - 1.3.0-0.4.git52492b4 +- Update to origin v1.3.1 + resolves: #1388092 + +* Thu Sep 08 2016 jchaloup - 1.3.0-0.3.rc1.git507d3a7 +- Update to origin v1.3.0-rc1 + resolves: #1374361 + +* Thu Aug 11 2016 Dennis Gilmore -1.3.0-0.2.git4a3f9c5 +- enable armv7hl and aarch64 + +* Tue Aug 09 2016 jchaloup - 1.3.0-0.1.git4a3f9c5 +- Update to origin v1.3.0-alpha.3 + resolves: #1365601 + +* Thu Jul 21 2016 Fedora Release Engineering - 1.2.0-0.27.git4a3f9c5 +- https://fedoraproject.org/wiki/Changes/golang1.7 + +* Sun Jul 17 2016 jchaloup - 1.2.0-0.26.git4a3f9c5 +- Update to origin v1.2.1 + resolves: #1357261 + +* Wed Jul 13 2016 jchaloup - 1.2.0-0.25.git4a3f9c5 +- Enable CPU and Memory accounting on a node + +* Wed Jun 29 2016 jchaloup - 1.2.0-0.24.git4a3f9c5 +- Be more verbose about devel subpackage + resolves: #1269449 + +* Tue Jun 28 2016 jchaloup - 1.2.0-0.23.git4a3f9c5 +- Own /run/kubernetes directory + resolves: #1264699 + +* Sat May 28 2016 jchaloup - 1.2.0-0.22.git4a3f9c5 +- Bump to origin v1.2.0 + resolves: #1340643 + +* Wed May 04 2016 jchaloup - 1.2.0-0.21.git4a3f9c5 +- Extend uni-test subpackage to run other tests + +* Mon Apr 25 2016 jchaloup - 1.2.0-0.20.git4a3f9c5 +- Update support for ppc64le to use go compiler + related: #1306214 + +* Thu Apr 21 2016 jchaloup - 1.2.0-0.19.git4a3f9c5 +- Fix support for ppc64le + related: #1306214 + +* Tue Apr 19 2016 jchaloup - 1.2.0-0.18.git4a3f9c5 +- Bump to origin v1.1.6 + resolves: #1328357 + +* Mon Apr 11 2016 jchaloup - 1.2.0-0.17.alpha6.git4a3f9c5 +- Don't disable extensions/v1beta1 by default to conform with upstream documentation + +* Wed Mar 30 2016 jchaloup - 1.2.0-0.16.alpha6.git4a3f9c5 + Update to origin's v1.1.5 + Build on ppc64le as well + resolves: #1306214 + +* Tue Mar 08 2016 jchaloup - 1.2.0-0.15.alpha6.gitf0cd09a +- hyperkube.server: don't parse args for any command + +* Fri Mar 04 2016 jchaloup - 1.2.0-0.14.alpha6.gitf0cd09a +- Disable extensions/v1beta1 implicitly + +* Tue Mar 01 2016 jchaloup - 1.2.0-0.13.alpha6.gitf0cd09a +- Hyperkube checks flags of individual commands/servers even if it does not define their flags. + Thus resulting in 'uknown shorthand flag' error + +* Mon Feb 29 2016 jchaloup - 1.2.0-0.12.alpha6.gitf0cd09a +- Disable v1beta3 +- hyperkube-kubectl-dont shift os.Args + +* Fri Feb 26 2016 jchaloup - 1.2.0-0.11.alpha6.gitf0cd09a +- add kube- prefix to controller-manager, proxy and scheduler + +* Fri Feb 26 2016 jchaloup - 1.2.0-0.10.alpha6.gitf0cd09a +- Hardlink kube-controller-manager, kuber-scheduler, kubectl, kubelet and kube-proxy into hyperkube +- Keep kube-apiserver binary as it is (it has different permission and capabilities) + +* Thu Feb 25 2016 jchaloup - 1.2.0-0.9.alpha6.gitf0cd09a +- Fix Content-Type of docker client response + resolves: #1311861 + +* Mon Feb 22 2016 Fedora Release Engineering - 1.2.0-0.8.alpha6.gitf0cd09a +- https://fedoraproject.org/wiki/Changes/golang1.6 + +* Mon Feb 22 2016 jchaloup - 1.2.0-0.7.alpha6.git4c8e6f4 +- Bump to origin 1.1.3 + kube-version-change command replaced with kubectl convert (check out docs/admin/cluster-management.md) + related: 1295066 + +* Thu Feb 04 2016 Fedora Release Engineering - 1.2.0-0.6.alpha1.git4c8e6f4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Thu Jan 21 2016 jchaloup - 1.2.0-0.5.alpha1.git4c8e6f4 +- Bump to upstream e1d9873c1d5711b83fd3dd7eefe83a88ceb92c08 + related: #1291860 + +* Thu Jan 07 2016 jchaloup - 1.2.0-0.4.alpha1.git4c8e6f4 +- Move definition of all version, git and commit macros at one place + resolves: #1291860 + +* Fri Jan 01 2016 jchaloup - 1.2.0-0.3.alpha1.git4c8e6f4 +- Bump to upstream bf56e235826baded1772fb340266b8419c3e8f30 + Rebase to origin's "v1.1.0.1 - Security Update to v1.1" release + resolves: #1295066 + +* Thu Nov 26 2015 jchaloup - 1.2.0-0.2.alpha1.git4c8e6f4 +- Bump to origin upstream a41c9ff38d52fd508481c3c2bac13d52871fde02 +- Build kubernetes from origin's Godeps using hack/build-go.sh + origin's Godeps = kubernetes upstream + additional patches + +* Tue Oct 20 2015 jchaloup - 1.2.0-0.1.alpha1.git4c8e6f4 +- Bump to upstream 403de3874fba420fd096f2329b45fe2f5ae97e46 + related: #1211266 + +* Wed Oct 14 2015 jchaloup - 1.1.0-0.41.alpha1.gite9a6ef1 +- Bump to origin upstream e9a6ef1cd4c29d45730289a497d18b19d7ba450d + related: #1211266 + +* Fri Oct 09 2015 jchaloup - 1.1.0-0.40.alpha1.git5f38cb0 +- Add missing short option for --server of kubectl +- Update unit-test-subpackage (only test-cmd.sh atm) + related: #1211266 + +* Fri Oct 09 2015 jchaloup - 1.1.0-0.39.alpha1.git5f38cb0 +- Add normalization of flags + related: #1211266 + +* Fri Oct 02 2015 jchaloup - 1.1.0-0.38.alpha1.git5f38cb0 +- Restore unit-test subpackage (not yet tested) + related: #1211266 + +* Wed Sep 30 2015 jchaloup - 1.1.0-0.37.alpha1.git5f38cb0 +- Do not unset default cluster, otherwise k8s ends with error when no cluster set + related: #1211266 + +* Wed Sep 30 2015 jchaloup - 1.1.0-0.36.alpha0.git5f38cb0 +- Bump to o4n 5f38cb0e98c9e854cafba9c7f98dafd51e955ad8 + related: #1211266 + +* Tue Sep 29 2015 jchaloup - 1.1.0-0.35.alpha1.git2695cdc +- Update git version of k8s and o4n, add macros + related: #1211266 + +* Tue Sep 29 2015 jchaloup - 1.1.0-0.34.alpha1.git2695cdc +- Built k8s from o4n tarball +- Bump to upstream 2695cdcd29a8f11ef60278758e11f4817daf3c7c + related: #1211266 + +* Tue Sep 22 2015 jchaloup - 1.1.0-0.33.alpha1.git09cf38e +- Bump to upstream 09cf38e9a80327e2d41654db277d00f19e2c84d0 + related: #1211266 + +* Thu Sep 17 2015 jchaloup - 1.1.0-0.32.alpha1.git400e685 +- Bump to upstream 400e6856b082ecf4b295568acda68d630fc000f1 + related: #1211266 + +* Wed Sep 16 2015 jchaloup - 1.1.0-0.31.gitd549fc4 +- Bump to upstream d549fc400ac3e5901bd089b40168e1e6fb17341d + related: #1211266 + +* Tue Sep 15 2015 jchaloup - 1.1.0-0.30.gitc9570e3 +- Bump to upstream c9570e34d03c6700d83f796c0125d17c5064e57d + related: #1211266 + +* Mon Sep 14 2015 jchaloup - 1.1.0-0.29.git86b4e77 +- Bump to upstream 86b4e777e1947c1bc00e422306a3ca74cbd54dbe + related: #1211266 + +* Thu Sep 10 2015 jchaloup - 1.1.0-0.28.gitf867ba3 +- Bump to upstream f867ba3ba13e3dad422efd21c74f52b9762de37e + related: #1211266 + +* Wed Sep 09 2015 jchaloup - 1.1.0-0.27.git0f4fa4e +- Bump to upstream 0f4fa4ed25ae9a9d1824fe55aeefb4d4ebfecdfd + related: #1211266 + +* Tue Sep 08 2015 jchaloup - 1.1.0-0.26.git196f58b +- Bump to upstream 196f58b9cb25a2222c7f9aacd624737910b03acb + related: #1211266 + +* Mon Sep 07 2015 jchaloup - 1.1.0-0.25.git96e0ed5 +- Bump to upstream 96e0ed5749608d4cc32f61b3674deb04c8fa90ad + related: #1211266 + +* Sat Sep 05 2015 jchaloup - 1.1.0-0.24.git2e2def3 +- Bump to upstream 2e2def36a904fe9a197da5fc70e433e2e884442f + related: #1211266 + +* Fri Sep 04 2015 jchaloup - 1.1.0-0.23.gite724a52 +- Bump to upstream e724a5210adf717f62a72162621ace1e08730c75 + related: #1211266 + +* Thu Sep 03 2015 jchaloup - 1.1.0-0.22.gitb6f2f39 +- Bump to upstream b6f2f396baec5105ff928cf61903c2c368259b21 + related: #1211266 + +* Wed Sep 02 2015 jchaloup - 1.1.0-0.21.gitb4a3698 +- Bump to upstream b4a3698faed81410468eccf9f328ca6df3d0cca3 + related: #1211266 + +* Tue Sep 01 2015 jchaloup - 1.1.0-0.20.git2f9652c +- Bump to upstream 2f9652c7f1d4b8f333c0b5c8c1270db83b913436 + related: #1211266 + +* Mon Aug 31 2015 jchaloup - 1.1.0-0.19.git66a644b +- Bump to upstream 66a644b275ede9ddb98eb3f76e8d1840cafc2147 + related: #1211266 + +* Thu Aug 27 2015 jchaloup - 1.1.0-0.18.gitab73849 +- Bump to upstream ab7384943748312f5e9294f42d42ed3983c7c96c + related: #1211266 + +* Wed Aug 26 2015 jchaloup - 1.1.0-0.17.git00e3442 +- Bump to upstream 00e34429e0242323ed34347cf0ab65b3d62b21f7 + related: #1211266 + +* Tue Aug 25 2015 jchaloup - 1.1.0-0.16.gita945785 +- Bump to upstream a945785409d5b68f3a2721d2209300edb5abf1ce + related: #1211266 + +* Mon Aug 24 2015 jchaloup - 1.1.0-0.15.git5fe7029 +- Bump to upstream 5fe7029e688e1e5873a0b95a622edda5b5156d2b + related: #1211266 + +* Fri Aug 21 2015 jchaloup - 1.1.0-0.14.gitb6f18c7 +- Bump to upstream b6f18c7ce08714c8d4f6019463879a164a41750e + related: #1211266 + +* Thu Aug 20 2015 jchaloup - 1.1.0-0.13.git44fa48e +- Bump to upstream 44fa48e5af44d3e988fa943d96a2de732d8cc666 + related: #1211266 + +* Wed Aug 19 2015 jchaloup - 1.1.0-0.12.gitb5a4a54 +- Bump to upstream b5a4a548df0cffb99bdcc3b9b9e48d4025d0541c + related: #1211266 + +* Tue Aug 18 2015 jchaloup - 1.1.0-0.11.git919c7e9 +- Bump to upstream 919c7e94e23d2dcd5bdd96896e0a7990f9ae3338 + related: #1211266 + +* Tue Aug 18 2015 jchaloup - 1.1.0-0.10.git280b66c +- Bump to upstream 280b66c9012c21e253acd4e730f8684c39ca08ec + related: #1211266 + +* Mon Aug 17 2015 jchaloup - 1.1.0-0.9.git081d9c6 +- Bump to upstream 081d9c64d25c20ec16035036536511811118173d + related: #1211266 + +* Fri Aug 14 2015 jchaloup - 1.1.0-0.8.git8dcbeba +- Bump to upstream 8dcbebae5ef6a7191d9dfb65c68833c6852a21ad + related: #1211266 + +* Thu Aug 13 2015 jchaloup - 1.1.0-0.7.git968cbbe +- Bump to upstream 968cbbee5d4964bd916ba379904c469abb53d623 + related: #1211266 + +* Wed Aug 12 2015 jchaloup - 1.1.0-0.6.gitc91950f +- Bump to upstream c91950f01cb14ad47486dfcd2fdfb4be3ee7f36b + related: #1211266 + +* Tue Aug 11 2015 jchaloup - 1.1.0-0.5.gite44c8e6 +- Bump to upstream e44c8e6661c931f7fd434911b0d3bca140e1df3a + related: #1211266 + +* Mon Aug 10 2015 jchaloup - 1.1.0-0.4.git2bfa9a1 +- Bump to upstream 2bfa9a1f98147cfdc2e9f4cf50e2c430518d91eb + related: #1243827 + +* Thu Aug 06 2015 jchaloup - 1.1.0-0.3.git4c42e13 +- Bump to upstream 4c42e1302d3b351f3cb6074d32aa420bbd45e07d +- Change import path prefix to k8s.io/kubernetes + related: #1243827 + +* Wed Aug 05 2015 jchaloup - 1.1.0-0.2.git159ba48 +- Bump to upstream 159ba489329e9f6ce422541e13f97e1166090ec8 + related: #1243827 + +* Sat Aug 01 2015 jchaloup - 1.1.0-0.1.git6129d3d +- Bump to upstream 6129d3d4eb80714286650818081a64ce2699afed + related: #1243827 + +* Fri Jul 31 2015 jchaloup - 1.0.0-0.18.gitff058a1 +- Bump to upstream ff058a1afeb63474f7a35805941f3b07c27aae0f + related: #1243827 + +* Thu Jul 30 2015 jchaloup - 1.0.0-0.17.git769230e +- Bump to upstream 769230e735993bb0bf924279a40593c147c9a6ab + related: #1243827 + +* Wed Jul 29 2015 jchaloup - 1.0.0-0.16.gitdde7222 +- Bump to upstream dde72229dc9cbbdacfb2e44b22d9d5b357027020 + related: #1243827 + +* Tue Jul 28 2015 jchaloup - 1.0.0-0.15.gitc5bffaa +- Bump to upstream c5bffaaf3166513da6259c44a5d1ba8e86bea5ce + related: #1243827 + +* Sat Jul 25 2015 jchaloup - 1.0.0-0.14.git5bd82ff +- Bump to upstream 5bd82ffe6da8f4e72e71b362635e558bfc412106 + related: #1243827 + +* Fri Jul 24 2015 jchaloup - 1.0.0-0.13.git291acd1 +- Bump to upstream 291acd1a09ac836ec7524b060a19a6498d9878dd + related: #1243827 + +* Thu Jul 23 2015 jchaloup - 1.0.0-0.12.gitfbed349 +- Bump to upstream fbed3492bfa09e59b1c423fdd7c1ecad333a06ef + related: #1243827 + +* Tue Jul 21 2015 jchaloup - 1.0.0-0.11.gitfbc85e9 +- Add runtime dependency of kubernetes-node on socat (so kubectl port-forward works on AH) + +* Tue Jul 21 2015 jchaloup - 1.0.0-0.10.gitfbc85e9 +- Update the build script for go1.5 as well +- Bump to upstream fbc85e9838f25547be94fbffeeb92a756d908ca0 + related: #1243827 + +* Mon Jul 20 2015 jchaloup - 1.0.0-0.9.git2d88675 +- Bump to upstream 2d88675f2203d316d4bac312c7ccad12991b56c2 +- Change KUBE_ETCD_SERVERS to listen on 2379 ports instead of 4001 + resolves: #1243827 +- Add kubernetes-client to provide kubectl command + resolves: #1241469 + +* Mon Jul 20 2015 jchaloup - 1.0.0-0.8.gitb2dafda +- Fix dependency and tests for go-1.5 +- with_debug off as the builds ends with error "ELFRESERVE too small: ..." + +* Sat Jul 18 2015 Eric Paris - 1.0.0-0.7.gitb2dafda +- Update apiserver binary gid + +* Fri Jul 17 2015 jchaloup - 1.0.0-0.6.gitb2dafda +- Bump to upstream b2dafdaef5aceafad503ab56254b60f80da9e980 + related: #1211266 + +* Thu Jul 16 2015 jchaloup - 1.0.0-0.5.git596a8a4 +- Bump to upstream 596a8a40d12498b5335140f50753980bfaea4f6b + related: #1211266 + +* Wed Jul 15 2015 jchaloup - 1.0.0-0.4.git6ba532b +- Bump to upstream 6ba532b218cb5f5ea3f0e8dce5395182f388536c + related: #1211266 + +* Tue Jul 14 2015 jchaloup - 1.0.0-0.3.gitc616182 +- Bump to upstream c6161824db3784e6156131307a5e94647e5557fd + related: #1211266 + +* Mon Jul 13 2015 jchaloup - 1.0.0-0.2.git2c27b1f +- Bump to upstream 2c27b1fa64f4e70f04575d1b217494f49332390e + related: #1211266 + +* Sat Jul 11 2015 jchaloup - 1.0.0-0.1.git1b37059 +- Bump to upstream 1b370599ccf271741e657335c4943cb8c7dba28b + related: #1211266 + +* Fri Jul 10 2015 jchaloup - 0.21.1-0.2.gitccc4cfc +- Bump to upstream ccc4cfc7e11e0f127ac1cea045017dd799be3c63 + related: #1211266 + +* Wed Jul 08 2015 jchaloup - 0.20.2-0.5.git77be29e +- Bump to upstream 77be29e3da71f0a136b6aa4048b2f0575c2598e4 + related: #1211266 + +* Tue Jul 07 2015 jchaloup - 0.20.2-0.4.git639a7da +- Bump to upstream 639a7dac50a331414cc6c47083323388da0d8756 + related: #1211266 + +* Mon Jul 06 2015 jchaloup - 0.20.2-0.3.gitbb6f2f7 +- Bump to upstream bb6f2f7ad90596d624d84cc691eec0f518e90cc8 + related: #1211266 + +* Fri Jul 03 2015 jchaloup - 0.20.2-0.2.git974377b +- Bump to upstream 974377b3064ac59b6e5694bfa568d67128026171 + related: #1211266 + +* Thu Jul 02 2015 jchaloup - 0.20.2-0.1.gitef41ceb +- Bump to upstream ef41ceb3e477ceada84c5522f429f02ab0f5948e + related: #1211266 + +* Tue Jun 30 2015 jchaloup - 0.20.0-0.3.git835eded +- Bump to upstream 835eded2943dfcf13a89518715e4be842a6a3ac0 +- Generate missing man pages + related: #1211266 + +* Mon Jun 29 2015 jchaloup - 0.20.0-0.2.git1c0b765 +- Bump to upstream 1c0b765df6dabfe9bd0e20489ed3bd18e6b3bda8 + Comment out missing man pages + related: #1211266 + +* Fri Jun 26 2015 jchaloup - 0.20.0-0.1.git8ebd896 +- Bump to upstream 8ebd896351513d446d56bc5785c070d2909226a3 + related: #1211266 + +* Fri Jun 26 2015 jchaloup - 0.19.3-0.6.git712f303 +- Bump to upstream 712f303350b35e70a573f3cb19193c8ec7ee7544 + related: #1211266 + +* Thu Jun 25 2015 jchaloup - 0.19.3-0.5.git2803b86 +- Bump to upstream 2803b86a42bf187afa816a7ce14fec754cc2af51 + related: #1211266 + +* Wed Jun 24 2015 Eric Paris - 0.19.3-0.4.git5b4dc4e +- Set CAP_NET_BIND_SERVICE on the kube-apiserver so it can use 443 + +* Wed Jun 24 2015 jchaloup - 0.19.3-0.3.git5b4dc4e +- Bump to upstream 5b4dc4edaa14e1ab4e3baa19df0388fa54dab344 + pkg/cloudprovider/* packages does not conform to golang language specification + related: #1211266 + +* Tue Jun 23 2015 jchaloup - 0.19.3-0.2.gita2ce3ea +- Bump to upstream a2ce3ea5293553b1fe0db3cbc6d53bdafe061d79 + related: #1211266 + +* Mon Jun 22 2015 jchaloup - 0.19.1-0.1.gitff0546d +- Bump to upstream ff0546da4fc23598de59db9f747c535545036463 + related: #1211266 + +* Fri Jun 19 2015 jchaloup - 0.19.0-0.7.gitb2e9fed +- Bump to upstream b2e9fed3490274509506285bdba309c50afb5c39 + related: #1211266 + +* Thu Jun 18 2015 jchaloup - 0.19.0-0.6.gitf660940 +- Bump to upstream f660940dceb3fe6ffb1b14ba495a47d91b5cd910 + related: #1211266 + +* Wed Jun 17 2015 jchaloup - 0.19.0-0.5.git43889c6 +- Bump to upstream 43889c612c4d396dcd8fbf3fbd217e106eaf5bce + related: #1211266 + +* Tue Jun 16 2015 jchaloup - 0.19.0-0.4.gita8269e3 +- Bump to upstream a8269e38c9e2bf81ba18cd6420e2309745d5b0b9 + related: #1211266 + +* Sun Jun 14 2015 jchaloup - 0.19.0-0.3.git5e5c1d1 +- Bump to upstream 5e5c1d10976f2f26d356ca60ef7d0d715c9f00a2 + related: #1211266 + +* Fri Jun 12 2015 jchaloup - 0.19.0-0.2.git0ca96c3 +- Bump to upstream 0ca96c3ac8b47114169f3b716ae4521ed8c7657c + related: #1211266 + +* Thu Jun 11 2015 jchaloup - 0.19.0-0.1.git5a02fc0 +- Bump to upstream 5a02fc07d8a943132b9e68fe7169778253318487 + related: #1211266 + +* Wed Jun 10 2015 jchaloup - 0.18.2-0.3.git0dfb681 +- Bump to upstream 0dfb681ba5d5dba535895ace9d650667904b5df7 + related: #1211266 + +* Tue Jun 09 2015 jchaloup - 0.18.2-0.2.gitb68e08f +- golang-cover is not needed + +* Tue Jun 09 2015 jchaloup - 0.18.2-0.1.gitb68e08f +- Bump to upstream b68e08f55f5ae566c4ea3905d0993a8735d6d34f + related: #1211266 + +* Sat Jun 06 2015 jchaloup - 0.18.1-0.3.git0f1c4c2 +- Bump to upstream 0f1c4c25c344f70c3592040b2ef092ccdce0244f + related: #1211266 + +* Fri Jun 05 2015 jchaloup - 0.18.1-0.2.git7309e1f +- Bump to upstream 7309e1f707ea5dd08c51f803037d7d22c20e2b92 + related: #1211266 + +* Thu Jun 04 2015 jchaloup - 0.18.1-0.1.gita161edb +- Bump to upstream a161edb3960c01ff6e14813858c2eeb85910009b + related: #1211266 + +* Wed Jun 03 2015 jchaloup - 0.18.0-0.3.gitb5a91bd +- Bump to upstream b5a91bda103ed2459f933959241a2b57331747ba +- Don't run %%check section (kept only for local run). Tests are now handled via CI. + related: #1211266 + +* Tue Jun 02 2015 jchaloup - 0.18.0-0.2.git5520386 +- Bump to upstream 5520386b180d3ddc4fa7b7dfe6f52642cc0c25f3 + related: #1211266 + +* Mon Jun 01 2015 jchaloup - 0.18.0-0.1.git0bb78fe +- Bump to upstream 0bb78fe6c53ce38198cc3805c78308cdd4805ac8 + related: #1211266 + +* Fri May 29 2015 jchaloup - 0.17.1-6 +- Bump to upstream ed4898d98c46869e9cbdb44186dfdeda9ff80cc2 + related: #1211266 + +* Thu May 28 2015 jchaloup - 0.17.1-5 +- Bump to upstream 6fa2777e26559fc008eacac83eb165d25bd9a7de + related: #1211266 + +* Tue May 26 2015 jchaloup - 0.17.1-4 +- Bump to upstream 01fcb58673001e56c69e128ab57e0c3f701aeea5 + related: #1211266 + +* Mon May 25 2015 jchaloup - 0.17.1-3 +- Decompose package into master and node subpackage. + Thanks to Avesh for testing and patience. + related: #1211266 + +* Mon May 25 2015 jchaloup - 0.17.1-2 +- Bump to upstream cf7b0bdc2a41d38613ac7f8eeea91cae23553fa2 + related: #1211266 + +* Fri May 22 2015 jchaloup - 0.17.1-1 +- Bump to upstream d9d12fd3f7036c92606fc3ba9046b365212fcd70 + related: #1211266 + +* Wed May 20 2015 jchaloup - 0.17.0-12 +- Bump to upstream a76bdd97100c66a46e2b49288540dcec58a954c4 + related: #1211266 + +* Tue May 19 2015 jchaloup - 0.17.0-11 +- Bump to upstream 10339d72b66a31592f73797a9983e7c207481b22 + related: #1211266 + +* Mon May 18 2015 jchaloup - 0.17.0-10 +- Bump to upstream efb42b302d871f7217394205d84e5ae82335d786 + related: #1211266 + +* Sat May 16 2015 jchaloup - 0.17.0-9 +- Bump to upstream d51e131726b925e7088b90915e99042459b628e0 + related: #1211266 + +* Fri May 15 2015 jchaloup - 0.17.0-8 +- Bump to upstream 1ee33ac481a14db7b90e3bbac8cec4ceea822bfb + related: #1211266 + +* Fri May 15 2015 jchaloup - 0.17.0-7 +- Bump to upstream d3c6fb0d6a13c0177dcd67556d72963c959234ea + related: #1211266 + +* Fri May 15 2015 jchaloup - 0.17.0-6 +- Bump to upstream f57f31783089f41c0bdca8cb87a1001ca94e1a45 + related: #1211266 + +* Thu May 14 2015 jchaloup - 0.17.0-5 +- Bump to upstream c90d381d0d5cf8ab7b8412106f5a6991d7e13c7d + related: #1211266 + +* Thu May 14 2015 jchaloup - 0.17.0-4 +- Bump to upstream 5010b2dde0f9b9eb820fe047e3b34bc9fa6324de +- Add debug info + related: #1211266 + +* Wed May 13 2015 jchaloup - 0.17.0-3 +- Bump to upstream ec19d41b63f5fe7b2c939e7738a41c0fbe65d796 + related: #1211266 + +* Tue May 12 2015 jchaloup - 0.17.0-2 +- Provide /usr/bin/kube-version-change binary + related: #1211266 + +* Tue May 12 2015 jchaloup - 0.17.0-1 +- Bump to upstream 962f10ee580eea30e5f4ea725c4e9e3743408a58 + related: #1211266 + +* Mon May 11 2015 jchaloup - 0.16.2-7 +- Bump to upstream 63182318c5876b94ac9b264d1224813b2b2ab541 + related: #1211266 + +* Fri May 08 2015 jchaloup - 0.16.2-6 +- Bump to upstream d136728df7e2694df9e082902f6239c11b0f2b00 +- Add NetworkManager as dependency for /etc/resolv.conf + related: #1211266 + +* Thu May 07 2015 jchaloup - 0.16.2-5 +- Bump to upstream ca0f678b9a0a6dc795ac7a595350d0dbe9d0ac3b + related: #1211266 + +* Wed May 06 2015 jchaloup - 0.16.2-4 +- Add docs to kubernetes-unit-test + related: #1211266 + +* Wed May 06 2015 jchaloup - 0.16.2-3 +- Bump to upstream 3a24c0e898cb3060d7905af6df275a3be562451d + related: #1211266 + +* Tue May 05 2015 jchaloup - 0.16.2-2 +- Add api and README.md to kubernetes-unit-test + related: #1211266 + +* Tue May 05 2015 jchaloup - 0.16.2-1 +- Bump to upstream 72048a824ca16c3921354197953fabecede5af47 + related: #1211266 + +* Mon May 04 2015 jchaloup - 0.16.1-2 +- Bump to upstream 1dcd80cdf3f00409d55cea1ef0e7faef0ae1d656 + related: #1211266 + +* Sun May 03 2015 jchaloup - 0.16.1-1 +- Bump to upstream 86751e8c90a3c0e852afb78d26cb6ba8cdbc37ba + related: #1211266 + +* Fri May 01 2015 jchaloup - 0.16.0-2 +- Bump to upstream 72708d74b9801989ddbdc8403fc5ba4aafb7c1ef + related: #1211266 + +* Wed Apr 29 2015 jchaloup - 0.16.0-1 +- Bump to upstream 7dcce2eeb7f28643d599c8b6a244523670d17c93 + related: #1211266 + +* Tue Apr 28 2015 jchaloup - 0.15.0-10 +- Add unit-test subpackage + related: #1211266 + +* Tue Apr 28 2015 jchaloup - 0.15.0-9 +- Bump to upstream 99fc906f78cd2bcb08536c262867fa6803f816d5 + related: #1211266 + +* Mon Apr 27 2015 jchaloup - 0.15.0-8 +- Bump to upstream 051dd96c542799dfab39184d2a7c8bacf9e88d85 + related: #1211266 + +* Fri Apr 24 2015 jchaloup - 0.15.0-7 +- Bump to upstream 9f753c2592481a226d72cea91648db8fb97f0da8 + related: #1211266 + +* Thu Apr 23 2015 jchaloup - 0.15.0-6 +- Bump to upstream cf824ae5e07965ba0b4b15ee88e08e2679f36978 + related: #1211266 + +* Tue Apr 21 2015 jchaloup - 0.15.0-5 +- Bump to upstream 21788d8e6606038a0a465c97f5240b4e66970fbb + related: #1211266 + +* Mon Apr 20 2015 jchaloup - 0.15.0-4 +- Bump to upstream eb1ea269954da2ce557f3305fa88d42e3ade7975 + related: #1211266 + +* Fri Apr 17 2015 jchaloup - 0.15.0-3 +- Obsolete cadvisor as it is integrated in kubelet + related: #1211266 + +* Wed Apr 15 2015 jchaloup - 0.15.0-0.2.git0ea87e4 +- Bump to upstream 0ea87e486407298dc1e3126c47f4076b9022fb09 + related: #1211266 + +* Tue Apr 14 2015 jchaloup - 0.15.0-0.1.gitd02139d +- Bump to upstream d02139d2b454ecc5730cc535d415c1963a7fb2aa + related: #1211266 + +* Sun Apr 12 2015 jchaloup - 0.14.2-0.2.gitd577db9 +- Bump to upstream d577db99873cbf04b8e17b78f17ec8f3a27eca30 + +* Wed Apr 08 2015 jchaloup - 0.14.2-0.1.git2719194 +- Bump to upstream 2719194154ffd38fd1613699a9dd10a00909957e + Use etcd-2.0.8 and higher + +* Tue Apr 07 2015 jchaloup - 0.14.1-0.2.gitd2f4734 +- Bump to upstream d2f473465738e6b6f7935aa704319577f5e890ba + +* Thu Apr 02 2015 jchaloup - 0.14.1-0.1.gita94ffc8 +- Bump to upstream a94ffc8625beb5e2a39edb01edc839cb8e59c444 + +* Wed Apr 01 2015 jchaloup - 0.14.0-0.2.git8168344 +- Bump to upstream 81683441b96537d4b51d146e39929b7003401cd5 + +* Tue Mar 31 2015 jchaloup - 0.14.0-0.1.git9ed8761 +- Bump to upstream 9ed87612d07f75143ac96ad90ff1ff68f13a2c67 +- Remove [B]R from devel branch until the package has stable API + +* Mon Mar 30 2015 jchaloup - 0.13.2-0.6.git8a7a127 +- Bump to upstream 8a7a127352263439e22253a58628d37a93fdaeb2 + +* Fri Mar 27 2015 jchaloup - 0.13.2-0.5.git8d94c43 +- Bump to upstream 8d94c43e705824f23791b66ad5de4ea095d5bb32 + resolves: #1205362 + +* Wed Mar 25 2015 jchaloup - 0.13.2-0.4.git455fe82 +- Bump to upstream 455fe8235be8fd9ba0ce21bf4f50a69d42e18693 + +* Mon Mar 23 2015 jchaloup - 0.13.2-0.3.gitef75888 +- Remove runtime dependency on etcd + resolves: #1202923 + +* Sun Mar 22 2015 jchaloup - 0.13.2-0.2.gitef75888 +- Bump to upstream ef758881d108bb53a128126c503689104d17f477 + +* Fri Mar 20 2015 jchaloup - 0.13.2-0.1.gita8f2cee +- Bump to upstream a8f2cee8c5418676ee33a311fad57d6821d3d29a + +* Fri Mar 13 2015 jchaloup - 0.12.0-0.9.git53b25a7 +- Bump to upstream 53b25a7890e31bdec6f2a95b32200d6cc27ae2ca + fix kube-proxy.service and kubelet + resolves: #1200919 #1200924 + +* Fri Mar 13 2015 jchaloup - 0.12.0-0.8.git39dceb1 +- Bump to upstream 39dceb13a511a83963a766a439cb386d10764310 + +* Thu Mar 12 2015 Eric Paris - 0.12.0-0.7.gita3fd0a9 +- Move from /etc/tmpfiles.d to %%{_tmpfilesdir} + resolves: #1200969 + +* Thu Mar 12 2015 jchaloup - 0.12.0-0.6.gita3fd0a9 +- Place contrib/init/systemd/tmpfiles.d/kubernetes.conf to /etc/tmpfiles.d/kubernetes.conf + +* Thu Mar 12 2015 jchaloup - 0.12.0-0.5.gita3fd0a9 +- Bump to upstream a3fd0a9fd516bb6033f32196ae97aaecf8c096b1 + +* Tue Mar 10 2015 jchaloup - 0.12.0-0.4.gita4d871a +- Bump to upstream a4d871a10086436557f804930812f2566c9d4d39 + +* Fri Mar 06 2015 jchaloup - 0.12.0-0.3.git2700871 +- Bump to upstream 2700871b049d5498167671cea6de8317099ad406 + +* Thu Mar 05 2015 jchaloup - 0.12.0-0.2.git8b627f5 +- Bump to upstream 8b627f516fd3e4f62da90d401ceb3d38de6f8077 + +* Tue Mar 03 2015 jchaloup - 0.12.0-0.1.gitecca426 +- Bump to upstream ecca42643b91a7117de8cd385b64e6bafecefd65 + +* Mon Mar 02 2015 jchaloup - 0.11.0-0.5.git6c5b390 +- Bump to upstream 6c5b390160856cd8334043344ef6e08568b0a5c9 + +* Sat Feb 28 2015 jchaloup - 0.11.0-0.4.git0fec31a +- Bump to upstream 0fec31a11edff14715a1efb27f77262a7c3770f4 + +* Fri Feb 27 2015 jchaloup - 0.11.0-0.3.git08402d7 +- Bump to upstream 08402d798c8f207a2e093de5a670c5e8e673e2de + +* Wed Feb 25 2015 jchaloup - 0.11.0-0.2.git86434b4 +- Bump to upstream 86434b4038ab87ac40219562ad420c3cc58c7c6b + +* Tue Feb 24 2015 jchaloup - 0.11.0-0.1.git754a2a8 +- Bump to upstream 754a2a8305c812121c3845d8293efdd819b6a704 + turn off integration tests until "FAILED: unexpected endpoints: + timed out waiting for the condition" problem is resolved + Adding back devel subpackage ([B]R list outdated) + +* Fri Feb 20 2015 jchaloup - 0.10.1-0.3.git4c87805 +- Bump to upstream 4c87805870b1b22e463c4bd711238ef68c77f0af + +* Tue Feb 17 2015 jchaloup - 0.10.1-0.2.git6f84bda +- Bump to upstream 6f84bdaba853872dbac69c84d3ab4b6964e85d8c + +* Tue Feb 17 2015 jchaloup - 0.10.1-0.1.git7d6130e +- Bump to upstream 7d6130edcdfabd7dd2e6a06fdc8fe5e333f07f5c + +* Sat Feb 07 2015 jchaloup - 0.9.1-0.7.gitc9c98ab +- Bump to upstream c9c98ab19eaa6f0b2ea17152c9a455338853f4d0 + Since some dependencies are broken, we can not build Kubernetes from Fedora deps. + Switching to vendored source codes until Go draft is resolved + +* Wed Feb 04 2015 jchaloup - 0.9.1-0.6.git7f5ed54 +- Bump to upstream 7f5ed541f794348ae6279414cf70523a4d5133cc + +* Tue Feb 03 2015 jchaloup - 0.9.1-0.5.git2ac6bbb +- Bump to upstream 2ac6bbb7eba7e69eac71bd9acd192cda97e67641 + +* Mon Feb 02 2015 jchaloup - 0.9.1-0.4.gite335e2d +- Bump to upstream e335e2d3e26a9a58d3b189ccf41ceb3770d1bfa9 + +* Fri Jan 30 2015 jchaloup - 0.9.1-0.3.git55793ac +- Bump to upstream 55793ac2066745f7243c666316499e1a8cf074f0 + +* Thu Jan 29 2015 jchaloup - 0.9.1-0.2.gitca6de16 +- Bump to upstream ca6de16df7762d4fc9b4ad44baa78d22e3f30742 + +* Tue Jan 27 2015 jchaloup - 0.9.1-0.1.git3623a01 +- Bump to upstream 3623a01bf0e90de6345147eef62894057fe04b29 +- update tests for etcd-2.0 + +* Thu Jan 22 2015 jchaloup - 0.8.2-571.gitb2f287c ++- Bump to upstream b2f287c259d856f4c08052a51cd7772c563aff77 + +* Thu Jan 22 2015 Eric Paris - 0.8.2-570.gitb2f287c +- patch kubelet service file to use docker.service not docker.socket + +* Wed Jan 21 2015 jchaloup - 0.8.2-0.1.git5b04640 +- Bump to upstream 5b046406a957a1e7eda7c0c86dd7a89e9c94fc5f + +* Sun Jan 18 2015 jchaloup - 0.8.0-126.0.git68298f0 +- Add some missing dependencies +- Add devel subpackage + +* Fri Jan 09 2015 Eric Paris - 0.8.0-125.0.git68298f0 +- Bump to upstream 68298f08a4980f95dfbf7b9f58bfec1808fb2670 + +* Tue Dec 16 2014 Eric Paris - 0.7.0-18.0.git52e165a +- Bump to upstream 52e165a4fd720d1703ebc31bd6660e01334227b8 + +* Mon Dec 15 2014 Eric Paris - 0.6-297.0.git5ef34bf +- Bump to upstream 5ef34bf52311901b997119cc49eff944c610081b + +* Wed Dec 03 2014 Eric Paris +- Replace patch to use old googlecode/go.net/ with BuildRequires on golang.org/x/net/ + +* Tue Dec 02 2014 Eric Paris - 0.6-4.0.git993ef88 +- Bump to upstream 993ef88eec9012b221f79abe8f2932ee97997d28 + +* Mon Dec 01 2014 Eric Paris - 0.5-235.0.git6aabd98 +- Bump to upstream 6aabd9804fb75764b70e9172774002d4febcae34 + +* Wed Nov 26 2014 Eric Paris - 0.5-210.0.gitff1e9f4 +- Bump to upstream ff1e9f4c191342c24974c030e82aceaff8ea9c24 + +* Tue Nov 25 2014 Eric Paris - 0.5-174.0.git64e07f7 +- Bump to upstream 64e07f7fe03d8692c685b09770c45f364967a119 + +* Mon Nov 24 2014 Eric Paris - 0.5-125.0.git162e498 +- Bump to upstream 162e4983b947d2f6f858ca7607869d70627f5dff + +* Fri Nov 21 2014 Eric Paris - 0.5-105.0.git3f74a1e +- Bump to upstream 3f74a1e9f56b3c3502762930c0c551ccab0557ea + +* Thu Nov 20 2014 Eric Paris - 0.5-65.0.gitc6158b8 +- Bump to upstream c6158b8aa9c40fbf1732650a8611429536466b21 +- include go-restful build requirement + +* Tue Nov 18 2014 Eric Paris - 0.5-14.0.gitdf0981b +- Bump to upstream df0981bc01c5782ad30fc45cb6f510f365737fc1 + +* Tue Nov 11 2014 Eric Paris - 0.4-680.0.git30fcf24 +- Bump to upstream 30fcf241312f6d0767c7d9305b4c462f1655f790 + +* Mon Nov 10 2014 Eric Paris - 0.4-633.0.git6c70227 +- Bump to upstream 6c70227a2eccc23966d32ea6d558ee05df46e400 + +* Fri Nov 07 2014 Eric Paris - 0.4-595.0.gitb695650 +- Bump to upstream b6956506fa2682afa93770a58ea8c7ba4b4caec1 + +* Thu Nov 06 2014 Eric Paris - 0.4-567.0.git3b1ef73 +- Bump to upstream 3b1ef739d1fb32a822a22216fb965e22cdd28e7f + +* Thu Nov 06 2014 Eric Paris - 0.4-561.0.git06633bf +- Bump to upstream 06633bf4cdc1ebd4fc848f85025e14a794b017b4 +- Make spec file more RHEL/CentOS friendly + +* Tue Nov 04 2014 Eric Paris - 0.4-0.0.git4452163 +- rebase to v0.4 +- include man pages + +* Tue Oct 14 2014 jchaloup - 0.3-0.3.git98ac8e1 +- create /var/lib/kubelet +- Use bash completions from upstream +- Bump to upstream 98ac8e178fcf1627399d659889bcb5fe25abdca4 +- all by Eric Paris + +* Mon Sep 29 2014 Jan Chaloupka - 0.3-0.2.git88fdb65 +- replace * with coresponding files +- remove dependency on gcc + +* Wed Sep 24 2014 Eric Paris - 0.1-0.4.git6ebe69a +- prefer autosetup instead of setup (revert setup change in 0-0.3.git) +https://fedoraproject.org/wiki/Autosetup_packaging_draft +- revert version number to 0.1 + +* Mon Sep 08 2014 Lokesh Mandvekar - 0-0.3.git6ebe69a +- gopath defined in golang package already +- package owns /etc/kubernetes +- bash dependency implicit +- keep buildroot/$RPM_BUILD_ROOT macros consistent +- replace with macros wherever possible +- set version, release and source tarball prep as per +https://fedoraproject.org/wiki/Packaging:SourceURL#Github + +* Mon Sep 08 2014 Eric Paris +- make services restart automatically on error + +* Sat Sep 06 2014 Eric Paris +- update to upstream +- redo build to use project scripts +- use project scripts in %%check +- rework deletion of third_party packages to easily detect changes +- run apiserver and controller-manager as non-root + +* Mon Aug 11 2014 Adam Miller +- update to upstream +- decouple the rest of third_party + +* Thu Aug 7 2014 Eric Paris +- update to head +- update package to include config files + +* Wed Jul 16 2014 Colin Walters +- Initial package diff --git a/kubernetes/kubernetes-1.22.5/centos/kubernetes.spec.orig b/kubernetes/kubernetes-1.22.5/centos/kubernetes.spec.orig new file mode 100644 index 000000000..fd43ef4cd --- /dev/null +++ b/kubernetes/kubernetes-1.22.5/centos/kubernetes.spec.orig @@ -0,0 +1,2282 @@ +%if 0%{?fedora} +%global with_devel 1 +%global with_bundled 0 +%global with_debug 1 +%else +%global with_devel 0 +%global with_bundled 1 +%global with_debug 0 +%endif + +%if 0%{?with_debug} +# https://bugzilla.redhat.com/show_bug.cgi?id=995136#c12 +%global _dwz_low_mem_die_limit 0 +%else +%global debug_package %{nil} +%endif + +%global provider github +%global provider_tld com +%global project kubernetes +%global repo kubernetes +# https://github.com/kubernetes/kubernetes + +%global provider_prefix %{provider}.%{provider_tld}/%{project}/%{repo} +%global import_path k8s.io/kubernetes +%global commit fc32d2f3698e36b93322a3465f63a14e9f0eaead +%global shortcommit %(c=%{commit}; echo ${c:0:7}) + +%global con_provider github +%global con_provider_tld com +%global con_project kubernetes +%global con_repo contrib +# https://github.com/kubernetes/contrib +%global con_provider_prefix %{con_provider}.%{con_provider_tld}/%{con_project}/%{con_repo} +%global con_commit 5b445f1c53aa8d6457523526340077935f62e691 +%global con_shortcommit %(c=%{con_commit}; echo ${c:0:7}) + +%global kube_version 1.10.0 +%global kube_git_version v%{kube_version} + +# Needed otherwise "version_ldflags=$(kube::version_ldflags)" doesn't work +%global _buildshell /bin/bash +%global _checkshell /bin/bash + +############################################## +Name: kubernetes +Version: %{kube_version} +Release: 1%{?dist} +Summary: Container cluster management +License: ASL 2.0 +URL: https://%{import_path} +ExclusiveArch: x86_64 aarch64 ppc64le s390x +Source0: https://%{provider_prefix}/archive/%{commit}/%{repo}-%{shortcommit}.tar.gz +Source1: https://%{con_provider_prefix}/archive/%{con_commit}/%{con_repo}-%{con_shortcommit}.tar.gz +Source3: kubernetes-accounting.conf +Source4: kubeadm.conf + +Source33: genmanpages.sh + +Patch3: build-with-debug-info.patch +#Patch4: make-test-cmd-run-over-hyperkube-based-kubectl.patch +#Patch5: make-e2e_node-run-over-distro-bins.patch + +# ppc64le +Patch16: fix-support-for-ppc64le.patch + +Patch20: use_go_build-is-not-fully-propagated-so-make-it-fixe.patch + +# It obsoletes cadvisor but needs its source code (literally integrated) +Obsoletes: cadvisor + +# kubernetes is decomposed into master and node subpackages +# require both of them for updates +Requires: kubernetes-master = %{version}-%{release} +Requires: kubernetes-node = %{version}-%{release} + +%description +%{summary} + +%if 0%{?with_devel} +%package devel +Summary: %{summary} +BuildArch: noarch + +Provides: golang(%{import_path}/cmd/genutils) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/kube-apiserver/app) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/kube-apiserver/app/options) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/kube-controller-manager/app) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/kube-controller-manager/app/options) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/kube-proxy/app) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/kube-proxy/app/options) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/kubectl/app) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/kubelet/app) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/kubelet/app/options) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/args) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/client-gen/args) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/client-gen/generators) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/client-gen/generators/fake) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/client-gen/generators/normalization) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/install) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/client-gen/test_apis/testgroup.k8s.io/v1) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/client-gen/testoutput/clientset_generated/test_internalclientset) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/client-gen/testoutput/clientset_generated/test_internalclientset/fake) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/client-gen/testoutput/clientset_generated/test_internalclientset/typed/testgroup.k8s.io/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/client-gen/testoutput/clientset_generated/test_internalclientset/typed/testgroup.k8s.io/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/conversion-gen/generators) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/deepcopy-gen/generators) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/generator) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/go-to-protobuf/protobuf) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/import-boss/generators) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/namer) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/parser) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/set-gen/generators) = %{version}-%{release} +Provides: golang(%{import_path}/cmd/libs/go2idl/types) = %{version}-%{release} +Provides: golang(%{import_path}/federation/apis/federation) = %{version}-%{release} +Provides: golang(%{import_path}/federation/apis/federation/install) = %{version}-%{release} +Provides: golang(%{import_path}/federation/apis/federation/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_internalclientset) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_internalclientset/fake) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_3) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_3/fake) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_3/typed/core/v1) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_3/typed/core/v1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_3/typed/federation/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_3/typed/federation/v1beta1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_4) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_4/fake) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_4/typed/core/v1) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_4/typed/core/v1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_4/typed/extensions/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_4/typed/extensions/v1beta1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_4/typed/federation/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/federation/client/clientset_generated/federation_release_1_4/typed/federation/v1beta1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/federation/pkg/federation-controller/util) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/admission) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/annotations) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/endpoints) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/errors) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/errors/storage) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/meta) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/meta/metatypes) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/pod) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/resource) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/rest) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/rest/resttest) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/service) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/testapi) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/testing/compat) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/unversioned/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/util) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/v1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/api/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apimachinery) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apimachinery/registered) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/abac) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/abac/latest) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/abac/v0) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/abac/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/apps) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/apps/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/apps/v1alpha1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/apps/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/authentication) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/authentication/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/authentication/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/authorization) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/authorization/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/authorization/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/authorization/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/autoscaling) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/autoscaling/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/autoscaling/v1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/autoscaling/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/batch) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/batch/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/batch/v1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/batch/v2alpha1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/batch/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/certificates) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/certificates/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/certificates/v1alpha1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/certificates/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/componentconfig) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/componentconfig/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/componentconfig/v1alpha1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/extensions) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/extensions/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/extensions/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/extensions/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/imagepolicy) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/imagepolicy/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/imagepolicy/v1alpha1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/policy) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/policy/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/policy/v1alpha1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/policy/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/rbac) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/rbac/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/rbac/v1alpha1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/rbac/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/storage) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/storage/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/storage/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apis/storage/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apiserver) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apiserver/audit) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apiserver/authenticator) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apiserver/metrics) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/apiserver/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/auth/authenticator) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/auth/authenticator/bearertoken) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/auth/authorizer) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/auth/authorizer/abac) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/auth/authorizer/union) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/auth/handlers) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/auth/user) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/capabilities) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/cache) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/chaosclient) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/core/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_2) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_2/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_2/typed/core/v1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_2/typed/core/v1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_2/typed/extensions/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_2/typed/extensions/v1beta1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_3) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_3/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_3/typed/autoscaling/v1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_3/typed/autoscaling/v1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_3/typed/batch/v1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_3/typed/batch/v1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_3/typed/core/v1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_3/typed/core/v1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_3/typed/extensions/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_3/typed/extensions/v1beta1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/authorization/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/authorization/v1beta1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/autoscaling/v1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/autoscaling/v1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/batch/v1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/batch/v1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/core/v1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/core/v1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/extensions/v1beta1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/extensions/v1beta1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/policy/v1alpha1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/clientset_generated/release_1_4/typed/policy/v1alpha1/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/leaderelection) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/metrics) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/metrics/prometheus) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/record) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/restclient) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/testing/core) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/transport) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/typed/discovery) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/typed/discovery/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/typed/dynamic) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned/adapters/internalclientset) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned/auth) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned/clientcmd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned/clientcmd/api) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned/clientcmd/api/latest) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned/clientcmd/api/v1) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned/portforward) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned/remotecommand) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned/testclient) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/client/unversioned/testclient/simple) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider/providers) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider/providers/aws) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider/providers/azure) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider/providers/cloudstack) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider/providers/fake) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider/providers/gce) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider/providers/mesos) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider/providers/openstack) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider/providers/ovirt) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider/providers/rackspace) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/cloudprovider/providers/vsphere) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/certificates) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/daemon) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/deployment) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/deployment/util) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/disruption) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/endpoint) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/framework) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/framework/informers) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/garbagecollector) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/garbagecollector/metaonly) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/job) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/namespace) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/node) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/petset) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/podautoscaler) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/podautoscaler/metrics) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/podgc) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/replicaset) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/replicaset/options) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/replication) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/resourcequota) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/route) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/scheduledjob) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/service) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/serviceaccount) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/volume/attachdetach) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/volume/attachdetach/cache) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/volume/attachdetach/populator) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/volume/attachdetach/reconciler) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/volume/attachdetach/statusupdater) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/volume/attachdetach/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/volume/persistentvolume) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/controller/volume/persistentvolume/options) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/conversion) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/conversion/queryparams) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/credentialprovider) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/credentialprovider/aws) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/credentialprovider/gcp) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/dns) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/fieldpath) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/fields) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/genericapiserver) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/genericapiserver/authorizer) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/genericapiserver/openapi) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/genericapiserver/options) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/genericapiserver/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/healthz) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/httplog) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/hyperkube) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl/cmd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl/cmd/config) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl/cmd/rollout) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl/cmd/set) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl/cmd/templates) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl/cmd/util) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl/cmd/util/editor) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl/cmd/util/jsonmerge) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl/metricsutil) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl/resource) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubectl/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/api) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/api/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/api/v1alpha1/runtime) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/api/v1alpha1/stats) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/cadvisor) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/cadvisor/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/client) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/cm) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/config) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/container) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/container/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/custommetrics) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/dockershim) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/dockertools) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/envvars) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/events) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/eviction) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/images) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/kuberuntime) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/leaky) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/lifecycle) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/metrics) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/network) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/network/cni) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/network/cni/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/network/exec) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/network/hairpin) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/network/hostport) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/network/hostport/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/network/kubenet) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/network/mock_network) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/network/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/pleg) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/pod) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/pod/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/prober) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/prober/results) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/prober/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/qos) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/remote) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/rkt) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/rkt/mock_os) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/rktshim) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/server) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/server/portforward) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/server/remotecommand) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/server/stats) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/status) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/sysctl) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/types) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/util) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/util/cache) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/util/format) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/util/ioutils) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/util/queue) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/util/sliceutils) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/volumemanager) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/volumemanager/cache) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/volumemanager/populator) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubelet/volumemanager/reconciler) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/kubemark) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/labels) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/master) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/master/ports) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/metrics) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/probe) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/probe/exec) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/probe/http) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/probe/tcp) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/proxy) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/proxy/config) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/proxy/healthcheck) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/proxy/iptables) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/proxy/userspace) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/quota) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/quota/evaluator/core) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/quota/generic) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/quota/install) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/authorization/subjectaccessreview) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/authorization/util) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/cachesize) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/certificates) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/certificates/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/clusterrole) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/clusterrole/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/clusterrole/policybased) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/clusterrolebinding) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/clusterrolebinding/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/clusterrolebinding/policybased) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/componentstatus) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/configmap) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/configmap/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/controller) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/controller/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/daemonset) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/daemonset/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/deployment) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/deployment/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/endpoint) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/endpoint/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/event) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/event/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/experimental/controller/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/generic) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/generic/registry) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/generic/rest) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/horizontalpodautoscaler) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/horizontalpodautoscaler/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/ingress) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/ingress/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/job) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/job/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/limitrange) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/limitrange/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/namespace) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/namespace/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/networkpolicy) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/networkpolicy/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/node) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/node/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/node/rest) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/persistentvolume) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/persistentvolume/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/persistentvolumeclaim) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/persistentvolumeclaim/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/petset) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/petset/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/pod) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/pod/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/pod/rest) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/poddisruptionbudget) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/poddisruptionbudget/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/podsecuritypolicy) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/podsecuritypolicy/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/podtemplate) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/podtemplate/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/rangeallocation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/registrytest) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/replicaset) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/replicaset/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/resourcequota) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/resourcequota/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/role) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/role/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/role/policybased) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/rolebinding) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/rolebinding/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/rolebinding/policybased) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/scheduledjob) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/scheduledjob/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/secret) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/secret/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/securitycontextconstraints) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/securitycontextconstraints/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/service) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/service/allocator) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/service/allocator/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/service/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/service/ipallocator) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/service/ipallocator/controller) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/service/ipallocator/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/service/portallocator) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/service/portallocator/controller) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/serviceaccount) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/serviceaccount/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/storageclass) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/storageclass/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/thirdpartyresource) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/thirdpartyresource/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/thirdpartyresourcedata) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/thirdpartyresourcedata/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/registry/tokenreview) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/runtime) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/runtime/serializer) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/runtime/serializer/json) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/runtime/serializer/protobuf) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/runtime/serializer/recognizer) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/runtime/serializer/streaming) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/runtime/serializer/versioning) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/runtime/serializer/yaml) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/security) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/security/apparmor) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/security/podsecuritypolicy) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/security/podsecuritypolicy/apparmor) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/security/podsecuritypolicy/capabilities) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/security/podsecuritypolicy/group) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/security/podsecuritypolicy/selinux) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/security/podsecuritypolicy/sysctl) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/security/podsecuritypolicy/user) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/security/podsecuritypolicy/util) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/securitycontext) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/securitycontextconstraints) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/securitycontextconstraints/capabilities) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/securitycontextconstraints/group) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/securitycontextconstraints/seccomp) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/securitycontextconstraints/selinux) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/securitycontextconstraints/user) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/securitycontextconstraints/util) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/selection) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/serviceaccount) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/ssh) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/storage) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/storage/etcd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/storage/etcd/etcdtest) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/storage/etcd/metrics) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/storage/etcd/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/storage/etcd/testing/testingcert) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/storage/etcd/util) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/storage/etcd3) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/storage/storagebackend) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/storage/storagebackend/factory) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/storage/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/types) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/ui) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/async) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/bandwidth) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/cache) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/certificates) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/chmod) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/chown) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/clock) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/codeinspector) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/config) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/configz) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/crlf) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/crypto) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/dbus) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/diff) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/ebtables) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/env) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/errors) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/exec) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/flag) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/flock) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/flowcontrol) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/flushwriter) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/framer) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/goroutinemap) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/goroutinemap/exponentialbackoff) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/hash) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/homedir) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/httpstream) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/httpstream/spdy) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/integer) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/interrupt) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/intstr) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/io) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/iptables) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/iptables/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/json) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/jsonpath) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/keymutex) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/labels) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/limitwriter) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/logs) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/maps) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/metrics) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/mount) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/net) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/net/sets) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/node) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/oom) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/parsers) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/pod) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/procfs) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/proxy) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/rand) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/replicaset) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/resourcecontainer) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/rlimit) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/runtime) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/selinux) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/sets) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/sets/types) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/slice) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/strategicpatch) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/strings) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/sysctl) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/sysctl/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/system) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/term) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/threading) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/uuid) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/validation) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/validation/field) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/wait) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/workqueue) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/wsstream) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/util/yaml) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/version) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/version/prometheus) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/version/verflag) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/aws_ebs) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/azure_dd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/azure_file) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/cephfs) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/cinder) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/configmap) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/downwardapi) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/empty_dir) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/fc) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/flexvolume) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/flocker) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/gce_pd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/git_repo) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/glusterfs) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/host_path) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/iscsi) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/nfs) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/quobyte) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/rbd) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/secret) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/testing) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/util) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/util/nestedpendingoperations) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/util/operationexecutor) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/util/types) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/util/volumehelper) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/volume/vsphere_volume) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/watch) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/watch/json) = %{version}-%{release} +Provides: golang(%{import_path}/pkg/watch/versioned) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/cmd/kube-scheduler/app) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/cmd/kube-scheduler/app/options) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/admit) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/alwayspullimages) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/antiaffinity) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/deny) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/exec) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/imagepolicy) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/initialresources) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/limitranger) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/namespace/autoprovision) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/namespace/exists) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/namespace/lifecycle) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/persistentvolume/label) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/resourcequota) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/security) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/security/podsecuritypolicy) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/securitycontext/scdeny) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/serviceaccount) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/admission/storageclass/default) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/password) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/password/allow) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/password/keystone) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/password/passwordfile) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/request/basicauth) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/request/union) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/request/x509) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/token/oidc) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/token/oidc/testing) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/token/tokenfile) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/token/tokentest) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/token/webhook) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authorizer) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authorizer/rbac) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/auth/authorizer/webhook) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/client/auth) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/client/auth/gcp) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/client/auth/oidc) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/algorithm) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/algorithm/predicates) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/algorithm/priorities) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/algorithm/priorities/util) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/algorithmprovider) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/algorithmprovider/defaults) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/api) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/api/latest) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/api/v1) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/api/validation) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/factory) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/metrics) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/schedulercache) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/scheduler/testing) = %{version}-%{release} +Provides: golang(%{import_path}/plugin/pkg/webhook) = %{version}-%{release} + +%description devel +Libraries for building packages importing k8s.io/kubernetes. +Currently, the devel is not suitable for development. +It is meant only as a buildtime dependency for other projects. + +This package contains library source intended for +building other packages which use %{project}/%{repo}. +%endif + +############################################## +%package unit-test +Summary: %{summary} - for running unit tests + +# below Rs used for testing +Requires: golang >= 1.2-7 +Requires: etcd >= 2.0.9 +Requires: hostname +Requires: rsync +Requires: NetworkManager + +%description unit-test +%{summary} - for running unit tests + +############################################## +%package master +Summary: Kubernetes services for master host + +BuildRequires: golang >= 1.2-7 +BuildRequires: systemd +BuildRequires: rsync +BuildRequires: go-md2man +BuildRequires: go-bindata + +Requires(pre): shadow-utils +Requires: kubernetes-client = %{version}-%{release} + +# if node is installed with node, version and release must be the same +Conflicts: kubernetes-node < %{version}-%{release} +Conflicts: kubernetes-node > %{version}-%{release} + +%description master +Kubernetes services for master host + +############################################## +%package node +Summary: Kubernetes services for node host + +%if 0%{?fedora} >= 27 +Requires: (docker or docker-ce) +Suggests: docker +%else +Requires: docker +%endif +Requires: conntrack-tools + +BuildRequires: golang >= 1.2-7 +BuildRequires: systemd +BuildRequires: rsync +BuildRequires: go-md2man +BuildRequires: go-bindata + +Requires(pre): shadow-utils +Requires: socat +Requires: kubernetes-client = %{version}-%{release} + +# if master is installed with node, version and release must be the same +Conflicts: kubernetes-master < %{version}-%{release} +Conflicts: kubernetes-master > %{version}-%{release} + +%description node +Kubernetes services for node host + +############################################## +%package kubeadm +Summary: Kubernetes tool for standing up clusters +Requires: kubernetes-node = %{version}-%{release} +Requires: containernetworking-cni + +%description kubeadm +Kubernetes tool for standing up clusters + +############################################## +%package client +Summary: Kubernetes client tools + +BuildRequires: golang >= 1.2-7 +BuildRequires: go-bindata + +%description client +Kubernetes client tools like kubectl + +############################################## + +%prep +%setup -q -n %{con_repo}-%{con_commit} -T -b 1 +%setup -q -n %{repo}-%{commit} + +%if 0%{?with_debug} +%patch3 -p1 +%endif + +%patch20 -p1 + +# copy contrib folder +mkdir contrib +cp -r ../%{con_repo}-%{con_commit}/init contrib/. + +#src/k8s.io/kubernetes/pkg/util/certificates +# Patch the code to remove eliptic.P224 support +for dir in vendor/github.com/google/certificate-transparency/go/x509 pkg/util/certificates; do + if [ -d "${dir}" ]; then + pushd ${dir} + sed -i "/^[^=]*$/ s/oidNamedCurveP224/oidNamedCurveP256/g" *.go + sed -i "/^[^=]*$/ s/elliptic\.P224/elliptic.P256/g" *.go + popd + fi +done + +# Move all the code under src/k8s.io/kubernetes directory +mkdir -p src/k8s.io/kubernetes +mv $(ls | grep -v "^src$") src/k8s.io/kubernetes/. + +# Patch tests to be run over distro bins +#patch4 -p1 +#patch5 -p1 + +%ifarch ppc64le +%patch16 -p1 +%endif + +############### + +%build +pushd src/k8s.io/kubernetes/ +export KUBE_GIT_TREE_STATE="clean" +export KUBE_GIT_COMMIT=%{commit} +export KUBE_GIT_VERSION=%{kube_git_version} +export KUBE_EXTRA_GOPATH=$(pwd)/Godeps/_workspace + +# https://bugzilla.redhat.com/show_bug.cgi?id=1392922#c1 +%ifarch ppc64le +export GOLDFLAGS='-linkmode=external' +%endif +make WHAT="--use_go_build cmd/hyperkube cmd/kube-apiserver cmd/kubeadm" + +# convert md to man +./hack/generate-docs.sh || true +pushd docs +pushd admin +cp kube-apiserver.md kube-controller-manager.md kube-proxy.md kube-scheduler.md kubelet.md .. +popd +cp %{SOURCE33} genmanpages.sh +bash genmanpages.sh +popd +popd + +%install +pushd src/k8s.io/kubernetes/ +. hack/lib/init.sh +kube::golang::setup_env + +%ifarch ppc64le +output_path="_output/local/go/bin" +%else +output_path="${KUBE_OUTPUT_BINPATH}/$(kube::golang::host_platform)" +%endif + +install -m 755 -d %{buildroot}%{_bindir} + +echo "+++ INSTALLING hyperkube" +install -p -m 755 -t %{buildroot}%{_bindir} ${output_path}/hyperkube + +echo "+++ INSTALLING kube-apiserver" +install -p -m 754 -t %{buildroot}%{_bindir} ${output_path}/kube-apiserver + +echo "+++ INSTALLING kubeadm" +install -p -m 755 -t %{buildroot}%{_bindir} ${output_path}/kubeadm +install -d -m 0755 %{buildroot}/%{_sysconfdir}/systemd/system/kubelet.service.d +install -p -m 0644 -t %{buildroot}/%{_sysconfdir}/systemd/system/kubelet.service.d %{SOURCE4} + +binaries=(kube-controller-manager kube-scheduler kube-proxy kubelet kubectl) +for bin in "${binaries[@]}"; do + echo "+++ HARDLINKING ${bin} to hyperkube" + ln %{buildroot}%{_bindir}/hyperkube %{buildroot}%{_bindir}/${bin} +done + +# install the bash completion +install -d -m 0755 %{buildroot}%{_datadir}/bash-completion/completions/ +%{buildroot}%{_bindir}/kubectl completion bash > %{buildroot}%{_datadir}/bash-completion/completions/kubectl + +# install config files +install -d -m 0755 %{buildroot}%{_sysconfdir}/%{name} +install -m 644 -t %{buildroot}%{_sysconfdir}/%{name} contrib/init/systemd/environ/* + +# install service files +install -d -m 0755 %{buildroot}%{_unitdir} +install -m 0644 -t %{buildroot}%{_unitdir} contrib/init/systemd/*.service + +# install manpages +install -d %{buildroot}%{_mandir}/man1 +install -p -m 644 docs/man/man1/* %{buildroot}%{_mandir}/man1 +rm %{buildroot}%{_mandir}/man1/cloud-controller-manager.* +# from k8s tarball copied docs/man/man1/*.1 + +# install the place the kubelet defaults to put volumes +install -d %{buildroot}%{_sharedstatedir}/kubelet + +# place contrib/init/systemd/tmpfiles.d/kubernetes.conf to /usr/lib/tmpfiles.d/kubernetes.conf +install -d -m 0755 %{buildroot}%{_tmpfilesdir} +install -p -m 0644 -t %{buildroot}/%{_tmpfilesdir} contrib/init/systemd/tmpfiles.d/kubernetes.conf +mkdir -p %{buildroot}/run +install -d -m 0755 %{buildroot}/run/%{name}/ + +# enable CPU and Memory accounting +install -d -m 0755 %{buildroot}/%{_sysconfdir}/systemd/system.conf.d +install -p -m 0644 -t %{buildroot}/%{_sysconfdir}/systemd/system.conf.d %{SOURCE3} + +# source codes for building projects +%if 0%{?with_devel} +install -d -p %{buildroot}/%{gopath}/src/%{import_path}/ +echo "%%dir %%{gopath}/src/%%{import_path}/." >> devel.file-list +# find all *.go but no *_test.go files and generate devel.file-list +for file in $(find . -iname "*.go" \! -iname "*_test.go") ; do + echo "%%dir %%{gopath}/src/%%{import_path}/$(dirname $file)" >> devel.file-list + install -d -p %{buildroot}/%{gopath}/src/%{import_path}/$(dirname $file) + cp -pav $file %{buildroot}/%{gopath}/src/%{import_path}/$file + echo "%%{gopath}/src/%%{import_path}/$file" >> devel.file-list +done +%endif + +%if 0%{?with_devel} +sort -u -o devel.file-list devel.file-list +%endif + +popd + +%if 0%{?with_devel} +mv src/k8s.io/kubernetes/devel.file-list . +%endif + +mv src/k8s.io/kubernetes/*.md . +mv src/k8s.io/kubernetes/LICENSE . + + +# place files for unit-test rpm +install -d -m 0755 %{buildroot}%{_sharedstatedir}/kubernetes-unit-test/ +# basically, everything from the root directory is needed +# unit-tests needs source code +# integration tests needs docs and other files +# test-cmd.sh atm needs cluster, examples and other +cp -a src %{buildroot}%{_sharedstatedir}/kubernetes-unit-test/ +rm -rf %{buildroot}%{_sharedstatedir}/kubernetes-unit-test/src/k8s.io/kubernetes/_output +cp -a *.md %{buildroot}%{_sharedstatedir}/kubernetes-unit-test/src/k8s.io/kubernetes/ + +%check +# Fedora, RHEL7 and CentOS are tested via unit-test subpackage +if [ 1 != 1 ]; then +echo "******Testing the commands*****" +hack/test-cmd.sh +echo "******Benchmarking kube********" +hack/benchmark-go.sh + +# In Fedora 20 and RHEL7 the go cover tools isn't available correctly +%if 0%{?fedora} >= 21 +echo "******Testing the go code******" +hack/test-go.sh +echo "******Testing integration******" +hack/test-integration.sh --use_go_build +%endif +fi + +############################################## +%files +# empty as it depends on master and node + +############################################## +%files master +%license LICENSE +%doc *.md +%{_mandir}/man1/kube-apiserver.1* +%{_mandir}/man1/kube-controller-manager.1* +%{_mandir}/man1/kube-scheduler.1* +%attr(754, -, kube) %caps(cap_net_bind_service=ep) %{_bindir}/kube-apiserver +%{_bindir}/kube-controller-manager +%{_bindir}/kube-scheduler +%{_bindir}/hyperkube +%{_unitdir}/kube-apiserver.service +%{_unitdir}/kube-controller-manager.service +%{_unitdir}/kube-scheduler.service +%dir %{_sysconfdir}/%{name} +%config(noreplace) %{_sysconfdir}/%{name}/apiserver +%config(noreplace) %{_sysconfdir}/%{name}/scheduler +%config(noreplace) %{_sysconfdir}/%{name}/config +%config(noreplace) %{_sysconfdir}/%{name}/controller-manager +%{_tmpfilesdir}/kubernetes.conf +%verify(not size mtime md5) %attr(755, kube,kube) %dir /run/%{name} + +############################################## +%files node +%license LICENSE +%doc *.md +%{_mandir}/man1/kubelet.1* +%{_mandir}/man1/kube-proxy.1* +%{_bindir}/kubelet +%{_bindir}/kube-proxy +%{_bindir}/hyperkube +%{_unitdir}/kube-proxy.service +%{_unitdir}/kubelet.service +%dir %{_sharedstatedir}/kubelet +%dir %{_sysconfdir}/%{name} +%config(noreplace) %{_sysconfdir}/%{name}/config +%config(noreplace) %{_sysconfdir}/%{name}/kubelet +%config(noreplace) %{_sysconfdir}/%{name}/proxy +%config(noreplace) %{_sysconfdir}/systemd/system.conf.d/kubernetes-accounting.conf +%{_tmpfilesdir}/kubernetes.conf +%verify(not size mtime md5) %attr(755, kube,kube) %dir /run/%{name} + +############################################## +%files kubeadm +%license LICENSE +%doc *.md +%{_mandir}/man1/kubeadm.1* +%{_mandir}/man1/kubeadm-* +%{_bindir}/kubeadm +%dir %{_sysconfdir}/systemd/system/kubelet.service.d +%config(noreplace) %{_sysconfdir}/systemd/system/kubelet.service.d/kubeadm.conf + +############################################## +%files client +%license LICENSE +%doc *.md +%{_mandir}/man1/kubectl.1* +%{_mandir}/man1/kubectl-* +%{_bindir}/kubectl +%{_bindir}/hyperkube +%{_datadir}/bash-completion/completions/kubectl + +############################################## +%files unit-test +%{_sharedstatedir}/kubernetes-unit-test/ + +%if 0%{?with_devel} +%files devel -f devel.file-list +%doc *.md +%dir %{gopath}/src/k8s.io +%endif + +############################################## + +%pre master +getent group kube >/dev/null || groupadd -r kube +getent passwd kube >/dev/null || useradd -r -g kube -d / -s /sbin/nologin \ + -c "Kubernetes user" kube + +%post master +%systemd_post kube-apiserver kube-scheduler kube-controller-manager + +%preun master +%systemd_preun kube-apiserver kube-scheduler kube-controller-manager + +%postun master +%systemd_postun + + +%pre node +getent group kube >/dev/null || groupadd -r kube +getent passwd kube >/dev/null || useradd -r -g kube -d / -s /sbin/nologin \ + -c "Kubernetes user" kube + +%post node +%systemd_post kubelet kube-proxy +# If accounting is not currently enabled systemd reexec +if [[ `systemctl show docker kubelet | grep -q -e CPUAccounting=no -e MemoryAccounting=no; echo $?` -eq 0 ]]; then + systemctl daemon-reexec +fi + +%preun node +%systemd_preun kubelet kube-proxy + +%postun node +%systemd_postun + +############################################ +%changelog +* Tue Mar 27 2018 Spyros Trigazis - 1.10.0-1 +- Bump to upstream v1.10.0 + +* Thu Mar 22 2018 Spyros Trigazis - 1.9.6-1 +- Bump to upstream v1.9.6 + +* Tue Mar 20 2018 Jan Chaloupka - 1.9.5-1 +- Bump to upstream v1.9.5 + resolves: #1554420 + +* Sun Feb 11 2018 Spyros Trigazis - 1.9.3-1 +- Bump to upstream v1.9.3 + +* Fri Feb 09 2018 Jan Chaloupka - 1.9.1-5 +- Add --fail-swap-on=false flag to the /etc/kubernetes/kubelet + resolves: #1542476 + +* Thu Feb 08 2018 Igor Gnatenko - 1.9.1-4 +- Escape macro in %%changelog + +* Wed Feb 07 2018 Fedora Release Engineering - 1.9.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Mon Jan 15 2018 Jan Chaloupka - 1.9.1-2 +- If docker is not available, try docker-ce instead (use boolean dependencies) + resolves: #1534508 + +* Fri Jan 12 2018 Spyros Trigazis - 1.9.1-1 +- Update to upstream v1.9.1 + resolves #1533794 + +* Tue Oct 24 2017 Jan Chaloupka - 1.8.1-1 +- Update to upstream v1.8.1 + resolves: #1497135 + +* Mon Oct 02 2017 Jan Chaloupka - 1.8.0-1 +- Update to upstream v1.8.0 + related: #1497625 + +* Mon Oct 02 2017 Jan Chaloupka - 1.7.7-1 +- Update to upstream v1.7.7 + resolves: #1497625 + +* Mon Sep 18 2017 Jan Chaloupka - 1.7.6-1 +- Update to upstream v1.7.6 + resolves: #1492551 + +* Mon Sep 11 2017 Jan Chaloupka - 1.7.5-1 +- Update to upstream v1.7.5 + resolves: #1490316 + +* Fri Aug 18 2017 Jan Chaloupka - 1.7.4-1 +- Fix the version + related: #1482874 + +* Fri Aug 18 2017 Jan Chaloupka - 1.7.3-2 +- Update to upstream v1.7.4 + resolves: #1482874 + +* Tue Aug 08 2017 Jan Chaloupka - 1.7.3-1 +- Update to upstream v1.7.3 + resolves: #1479685 + +* Thu Aug 03 2017 Fedora Release Engineering - 1.7.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Sun Jul 30 2017 Florian Weimer - 1.7.2-3 +- Rebuild with binutils fix for ppc64le (#1475636) + +* Wed Jul 26 2017 Fedora Release Engineering - 1.7.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Mon Jul 24 2017 Jan Chaloupka - 1.7.2-1 +- Update to upstream v1.7.2 + +* Mon Jul 24 2017 Jan Chaloupka - 1.7.1-2 +- Sync kubeadm.conf with upstream service configuration (set Restart,StartLimitInterval,RestartSec) + +* Fri Jul 14 2017 Jan Chaloupka - 1.7.1-1 +- Update to upstream v1.7.1 + resolves: #1471767 + +* Sat Jul 08 2017 Jan Chaloupka - 1.6.7-1 +- Update to upstream v1.6.7 + resolves: #1468823 + resolves: #1468752 + +* Fri May 19 2017 Timothy St. Clair - 1.6.4-1 +- Add kubeadm subpackage to enable upstream deployments + +* Thu May 18 2017 Jan Chaloupka - 1.6.3-1 +- Update to upstream v1.6.3 + resolves: #1452101 + +* Fri May 12 2017 Jan Chaloupka - 1.6.2-2 +- Extend archs with s390x + resolves: #1400000 + +* Tue May 02 2017 Jan Chaloupka - 1.6.2-1 +- Update to upstream v1.6.2 + resolves: #1447338 + +* Tue Apr 11 2017 Jan Chaloupka - 1.6.1-1 +- Update to upstream v1.6.1 + related: #1422889 + +* Fri Mar 31 2017 Jan Chaloupka - 1.5.6-1 +- Update to upstream v1.5.6 + related: #1422889 + +* Mon Mar 27 2017 Jan Chaloupka - 1.5.5-4 +- Update to upstream v1.5.5 + related: #1422889 + +* Mon Mar 27 2017 Jan Chaloupka - 1.5.4-3 +- re-enable debug-info + related: #1422889 + +* Thu Mar 09 2017 Jan Chaloupka - 1.5.4-2 +- Bump to upstream 7243c69eb523aa4377bce883e7c0dd76b84709a1 + related: #1422889 + +* Thu Feb 16 2017 Jan Chaloupka - 1.5.3-1 +- Update to upstream v1.5.3 + resolves: #1422889 + +* Fri Feb 10 2017 Fedora Release Engineering - 1.5.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Wed Jan 18 2017 Jan Chaloupka - 1.5.2-2 +- fix rootScopeNaming generate selfLink + resolves: #1413997 + +* Fri Jan 13 2017 Jan Chaloupka - 1.5.2-1 +- Bump version as well + related: #1412996 + +* Fri Jan 13 2017 Jan Chaloupka - 1.5.1-2 +- Bump to upstream 1.5.2 + resolves: #1412996 + +* Thu Jan 05 2017 Jan Chaloupka - 1.5.1-1 +- Bump to upstream 1.5.1 + resolves: #1410186 + +* Wed Jan 04 2017 Jan Chaloupka - 1.4.7-2 +- Generate the md files before they are converted to man pages + resolves: #1409943 + +* Mon Dec 12 2016 Jan Chaloupka - 1.4.7-1 +- Bump to upstream v1.4.7 + resolves: #1403823 + New conntrack-tools dependency of kube-proxy + Build kubernetes on ppc64le with linkmode=external + resolves: #1392922 + +* Mon Nov 14 2016 jchaloup - 1.4.5-3 +- Patch unit-test subpackage to run tests over k8s distro binaries + +* Wed Nov 09 2016 jchaloup - 1.4.5-2 +- Add missing if devel around generated devel.file-list + related: #1390074 + +* Tue Nov 08 2016 jchaloup - 1.4.5-1 +- Bump to upstream v1.4.5 (flip back to upstream based Kubernetes) + related: #1390074 + +* Mon Oct 31 2016 jchaloup - 1.4.0-0.1.beta3.git52492b4 +- Update to origin v1.4.0-alpha.0 (ppc64le and arm unbuildable with the current golang version) + resolves: #1390074 + +* Mon Oct 24 2016 jchaloup - 1.3.0-0.4.git52492b4 +- Update to origin v1.3.1 + resolves: #1388092 + +* Thu Sep 08 2016 jchaloup - 1.3.0-0.3.rc1.git507d3a7 +- Update to origin v1.3.0-rc1 + resolves: #1374361 + +* Thu Aug 11 2016 Dennis Gilmore -1.3.0-0.2.git4a3f9c5 +- enable armv7hl and aarch64 + +* Tue Aug 09 2016 jchaloup - 1.3.0-0.1.git4a3f9c5 +- Update to origin v1.3.0-alpha.3 + resolves: #1365601 + +* Thu Jul 21 2016 Fedora Release Engineering - 1.2.0-0.27.git4a3f9c5 +- https://fedoraproject.org/wiki/Changes/golang1.7 + +* Sun Jul 17 2016 jchaloup - 1.2.0-0.26.git4a3f9c5 +- Update to origin v1.2.1 + resolves: #1357261 + +* Wed Jul 13 2016 jchaloup - 1.2.0-0.25.git4a3f9c5 +- Enable CPU and Memory accounting on a node + +* Wed Jun 29 2016 jchaloup - 1.2.0-0.24.git4a3f9c5 +- Be more verbose about devel subpackage + resolves: #1269449 + +* Tue Jun 28 2016 jchaloup - 1.2.0-0.23.git4a3f9c5 +- Own /run/kubernetes directory + resolves: #1264699 + +* Sat May 28 2016 jchaloup - 1.2.0-0.22.git4a3f9c5 +- Bump to origin v1.2.0 + resolves: #1340643 + +* Wed May 04 2016 jchaloup - 1.2.0-0.21.git4a3f9c5 +- Extend uni-test subpackage to run other tests + +* Mon Apr 25 2016 jchaloup - 1.2.0-0.20.git4a3f9c5 +- Update support for ppc64le to use go compiler + related: #1306214 + +* Thu Apr 21 2016 jchaloup - 1.2.0-0.19.git4a3f9c5 +- Fix support for ppc64le + related: #1306214 + +* Tue Apr 19 2016 jchaloup - 1.2.0-0.18.git4a3f9c5 +- Bump to origin v1.1.6 + resolves: #1328357 + +* Mon Apr 11 2016 jchaloup - 1.2.0-0.17.alpha6.git4a3f9c5 +- Don't disable extensions/v1beta1 by default to conform with upstream documentation + +* Wed Mar 30 2016 jchaloup - 1.2.0-0.16.alpha6.git4a3f9c5 + Update to origin's v1.1.5 + Build on ppc64le as well + resolves: #1306214 + +* Tue Mar 08 2016 jchaloup - 1.2.0-0.15.alpha6.gitf0cd09a +- hyperkube.server: don't parse args for any command + +* Fri Mar 04 2016 jchaloup - 1.2.0-0.14.alpha6.gitf0cd09a +- Disable extensions/v1beta1 implicitly + +* Tue Mar 01 2016 jchaloup - 1.2.0-0.13.alpha6.gitf0cd09a +- Hyperkube checks flags of individual commands/servers even if it does not define their flags. + Thus resulting in 'uknown shorthand flag' error + +* Mon Feb 29 2016 jchaloup - 1.2.0-0.12.alpha6.gitf0cd09a +- Disable v1beta3 +- hyperkube-kubectl-dont shift os.Args + +* Fri Feb 26 2016 jchaloup - 1.2.0-0.11.alpha6.gitf0cd09a +- add kube- prefix to controller-manager, proxy and scheduler + +* Fri Feb 26 2016 jchaloup - 1.2.0-0.10.alpha6.gitf0cd09a +- Hardlink kube-controller-manager, kuber-scheduler, kubectl, kubelet and kube-proxy into hyperkube +- Keep kube-apiserver binary as it is (it has different permission and capabilities) + +* Thu Feb 25 2016 jchaloup - 1.2.0-0.9.alpha6.gitf0cd09a +- Fix Content-Type of docker client response + resolves: #1311861 + +* Mon Feb 22 2016 Fedora Release Engineering - 1.2.0-0.8.alpha6.gitf0cd09a +- https://fedoraproject.org/wiki/Changes/golang1.6 + +* Mon Feb 22 2016 jchaloup - 1.2.0-0.7.alpha6.git4c8e6f4 +- Bump to origin 1.1.3 + kube-version-change command replaced with kubectl convert (check out docs/admin/cluster-management.md) + related: 1295066 + +* Thu Feb 04 2016 Fedora Release Engineering - 1.2.0-0.6.alpha1.git4c8e6f4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Thu Jan 21 2016 jchaloup - 1.2.0-0.5.alpha1.git4c8e6f4 +- Bump to upstream e1d9873c1d5711b83fd3dd7eefe83a88ceb92c08 + related: #1291860 + +* Thu Jan 07 2016 jchaloup - 1.2.0-0.4.alpha1.git4c8e6f4 +- Move definition of all version, git and commit macros at one place + resolves: #1291860 + +* Fri Jan 01 2016 jchaloup - 1.2.0-0.3.alpha1.git4c8e6f4 +- Bump to upstream bf56e235826baded1772fb340266b8419c3e8f30 + Rebase to origin's "v1.1.0.1 - Security Update to v1.1" release + resolves: #1295066 + +* Thu Nov 26 2015 jchaloup - 1.2.0-0.2.alpha1.git4c8e6f4 +- Bump to origin upstream a41c9ff38d52fd508481c3c2bac13d52871fde02 +- Build kubernetes from origin's Godeps using hack/build-go.sh + origin's Godeps = kubernetes upstream + additional patches + +* Tue Oct 20 2015 jchaloup - 1.2.0-0.1.alpha1.git4c8e6f4 +- Bump to upstream 403de3874fba420fd096f2329b45fe2f5ae97e46 + related: #1211266 + +* Wed Oct 14 2015 jchaloup - 1.1.0-0.41.alpha1.gite9a6ef1 +- Bump to origin upstream e9a6ef1cd4c29d45730289a497d18b19d7ba450d + related: #1211266 + +* Fri Oct 09 2015 jchaloup - 1.1.0-0.40.alpha1.git5f38cb0 +- Add missing short option for --server of kubectl +- Update unit-test-subpackage (only test-cmd.sh atm) + related: #1211266 + +* Fri Oct 09 2015 jchaloup - 1.1.0-0.39.alpha1.git5f38cb0 +- Add normalization of flags + related: #1211266 + +* Fri Oct 02 2015 jchaloup - 1.1.0-0.38.alpha1.git5f38cb0 +- Restore unit-test subpackage (not yet tested) + related: #1211266 + +* Wed Sep 30 2015 jchaloup - 1.1.0-0.37.alpha1.git5f38cb0 +- Do not unset default cluster, otherwise k8s ends with error when no cluster set + related: #1211266 + +* Wed Sep 30 2015 jchaloup - 1.1.0-0.36.alpha0.git5f38cb0 +- Bump to o4n 5f38cb0e98c9e854cafba9c7f98dafd51e955ad8 + related: #1211266 + +* Tue Sep 29 2015 jchaloup - 1.1.0-0.35.alpha1.git2695cdc +- Update git version of k8s and o4n, add macros + related: #1211266 + +* Tue Sep 29 2015 jchaloup - 1.1.0-0.34.alpha1.git2695cdc +- Built k8s from o4n tarball +- Bump to upstream 2695cdcd29a8f11ef60278758e11f4817daf3c7c + related: #1211266 + +* Tue Sep 22 2015 jchaloup - 1.1.0-0.33.alpha1.git09cf38e +- Bump to upstream 09cf38e9a80327e2d41654db277d00f19e2c84d0 + related: #1211266 + +* Thu Sep 17 2015 jchaloup - 1.1.0-0.32.alpha1.git400e685 +- Bump to upstream 400e6856b082ecf4b295568acda68d630fc000f1 + related: #1211266 + +* Wed Sep 16 2015 jchaloup - 1.1.0-0.31.gitd549fc4 +- Bump to upstream d549fc400ac3e5901bd089b40168e1e6fb17341d + related: #1211266 + +* Tue Sep 15 2015 jchaloup - 1.1.0-0.30.gitc9570e3 +- Bump to upstream c9570e34d03c6700d83f796c0125d17c5064e57d + related: #1211266 + +* Mon Sep 14 2015 jchaloup - 1.1.0-0.29.git86b4e77 +- Bump to upstream 86b4e777e1947c1bc00e422306a3ca74cbd54dbe + related: #1211266 + +* Thu Sep 10 2015 jchaloup - 1.1.0-0.28.gitf867ba3 +- Bump to upstream f867ba3ba13e3dad422efd21c74f52b9762de37e + related: #1211266 + +* Wed Sep 09 2015 jchaloup - 1.1.0-0.27.git0f4fa4e +- Bump to upstream 0f4fa4ed25ae9a9d1824fe55aeefb4d4ebfecdfd + related: #1211266 + +* Tue Sep 08 2015 jchaloup - 1.1.0-0.26.git196f58b +- Bump to upstream 196f58b9cb25a2222c7f9aacd624737910b03acb + related: #1211266 + +* Mon Sep 07 2015 jchaloup - 1.1.0-0.25.git96e0ed5 +- Bump to upstream 96e0ed5749608d4cc32f61b3674deb04c8fa90ad + related: #1211266 + +* Sat Sep 05 2015 jchaloup - 1.1.0-0.24.git2e2def3 +- Bump to upstream 2e2def36a904fe9a197da5fc70e433e2e884442f + related: #1211266 + +* Fri Sep 04 2015 jchaloup - 1.1.0-0.23.gite724a52 +- Bump to upstream e724a5210adf717f62a72162621ace1e08730c75 + related: #1211266 + +* Thu Sep 03 2015 jchaloup - 1.1.0-0.22.gitb6f2f39 +- Bump to upstream b6f2f396baec5105ff928cf61903c2c368259b21 + related: #1211266 + +* Wed Sep 02 2015 jchaloup - 1.1.0-0.21.gitb4a3698 +- Bump to upstream b4a3698faed81410468eccf9f328ca6df3d0cca3 + related: #1211266 + +* Tue Sep 01 2015 jchaloup - 1.1.0-0.20.git2f9652c +- Bump to upstream 2f9652c7f1d4b8f333c0b5c8c1270db83b913436 + related: #1211266 + +* Mon Aug 31 2015 jchaloup - 1.1.0-0.19.git66a644b +- Bump to upstream 66a644b275ede9ddb98eb3f76e8d1840cafc2147 + related: #1211266 + +* Thu Aug 27 2015 jchaloup - 1.1.0-0.18.gitab73849 +- Bump to upstream ab7384943748312f5e9294f42d42ed3983c7c96c + related: #1211266 + +* Wed Aug 26 2015 jchaloup - 1.1.0-0.17.git00e3442 +- Bump to upstream 00e34429e0242323ed34347cf0ab65b3d62b21f7 + related: #1211266 + +* Tue Aug 25 2015 jchaloup - 1.1.0-0.16.gita945785 +- Bump to upstream a945785409d5b68f3a2721d2209300edb5abf1ce + related: #1211266 + +* Mon Aug 24 2015 jchaloup - 1.1.0-0.15.git5fe7029 +- Bump to upstream 5fe7029e688e1e5873a0b95a622edda5b5156d2b + related: #1211266 + +* Fri Aug 21 2015 jchaloup - 1.1.0-0.14.gitb6f18c7 +- Bump to upstream b6f18c7ce08714c8d4f6019463879a164a41750e + related: #1211266 + +* Thu Aug 20 2015 jchaloup - 1.1.0-0.13.git44fa48e +- Bump to upstream 44fa48e5af44d3e988fa943d96a2de732d8cc666 + related: #1211266 + +* Wed Aug 19 2015 jchaloup - 1.1.0-0.12.gitb5a4a54 +- Bump to upstream b5a4a548df0cffb99bdcc3b9b9e48d4025d0541c + related: #1211266 + +* Tue Aug 18 2015 jchaloup - 1.1.0-0.11.git919c7e9 +- Bump to upstream 919c7e94e23d2dcd5bdd96896e0a7990f9ae3338 + related: #1211266 + +* Tue Aug 18 2015 jchaloup - 1.1.0-0.10.git280b66c +- Bump to upstream 280b66c9012c21e253acd4e730f8684c39ca08ec + related: #1211266 + +* Mon Aug 17 2015 jchaloup - 1.1.0-0.9.git081d9c6 +- Bump to upstream 081d9c64d25c20ec16035036536511811118173d + related: #1211266 + +* Fri Aug 14 2015 jchaloup - 1.1.0-0.8.git8dcbeba +- Bump to upstream 8dcbebae5ef6a7191d9dfb65c68833c6852a21ad + related: #1211266 + +* Thu Aug 13 2015 jchaloup - 1.1.0-0.7.git968cbbe +- Bump to upstream 968cbbee5d4964bd916ba379904c469abb53d623 + related: #1211266 + +* Wed Aug 12 2015 jchaloup - 1.1.0-0.6.gitc91950f +- Bump to upstream c91950f01cb14ad47486dfcd2fdfb4be3ee7f36b + related: #1211266 + +* Tue Aug 11 2015 jchaloup - 1.1.0-0.5.gite44c8e6 +- Bump to upstream e44c8e6661c931f7fd434911b0d3bca140e1df3a + related: #1211266 + +* Mon Aug 10 2015 jchaloup - 1.1.0-0.4.git2bfa9a1 +- Bump to upstream 2bfa9a1f98147cfdc2e9f4cf50e2c430518d91eb + related: #1243827 + +* Thu Aug 06 2015 jchaloup - 1.1.0-0.3.git4c42e13 +- Bump to upstream 4c42e1302d3b351f3cb6074d32aa420bbd45e07d +- Change import path prefix to k8s.io/kubernetes + related: #1243827 + +* Wed Aug 05 2015 jchaloup - 1.1.0-0.2.git159ba48 +- Bump to upstream 159ba489329e9f6ce422541e13f97e1166090ec8 + related: #1243827 + +* Sat Aug 01 2015 jchaloup - 1.1.0-0.1.git6129d3d +- Bump to upstream 6129d3d4eb80714286650818081a64ce2699afed + related: #1243827 + +* Fri Jul 31 2015 jchaloup - 1.0.0-0.18.gitff058a1 +- Bump to upstream ff058a1afeb63474f7a35805941f3b07c27aae0f + related: #1243827 + +* Thu Jul 30 2015 jchaloup - 1.0.0-0.17.git769230e +- Bump to upstream 769230e735993bb0bf924279a40593c147c9a6ab + related: #1243827 + +* Wed Jul 29 2015 jchaloup - 1.0.0-0.16.gitdde7222 +- Bump to upstream dde72229dc9cbbdacfb2e44b22d9d5b357027020 + related: #1243827 + +* Tue Jul 28 2015 jchaloup - 1.0.0-0.15.gitc5bffaa +- Bump to upstream c5bffaaf3166513da6259c44a5d1ba8e86bea5ce + related: #1243827 + +* Sat Jul 25 2015 jchaloup - 1.0.0-0.14.git5bd82ff +- Bump to upstream 5bd82ffe6da8f4e72e71b362635e558bfc412106 + related: #1243827 + +* Fri Jul 24 2015 jchaloup - 1.0.0-0.13.git291acd1 +- Bump to upstream 291acd1a09ac836ec7524b060a19a6498d9878dd + related: #1243827 + +* Thu Jul 23 2015 jchaloup - 1.0.0-0.12.gitfbed349 +- Bump to upstream fbed3492bfa09e59b1c423fdd7c1ecad333a06ef + related: #1243827 + +* Tue Jul 21 2015 jchaloup - 1.0.0-0.11.gitfbc85e9 +- Add runtime dependency of kubernetes-node on socat (so kubectl port-forward works on AH) + +* Tue Jul 21 2015 jchaloup - 1.0.0-0.10.gitfbc85e9 +- Update the build script for go1.5 as well +- Bump to upstream fbc85e9838f25547be94fbffeeb92a756d908ca0 + related: #1243827 + +* Mon Jul 20 2015 jchaloup - 1.0.0-0.9.git2d88675 +- Bump to upstream 2d88675f2203d316d4bac312c7ccad12991b56c2 +- Change KUBE_ETCD_SERVERS to listen on 2379 ports instead of 4001 + resolves: #1243827 +- Add kubernetes-client to provide kubectl command + resolves: #1241469 + +* Mon Jul 20 2015 jchaloup - 1.0.0-0.8.gitb2dafda +- Fix dependency and tests for go-1.5 +- with_debug off as the builds ends with error "ELFRESERVE too small: ..." + +* Sat Jul 18 2015 Eric Paris - 1.0.0-0.7.gitb2dafda +- Update apiserver binary gid + +* Fri Jul 17 2015 jchaloup - 1.0.0-0.6.gitb2dafda +- Bump to upstream b2dafdaef5aceafad503ab56254b60f80da9e980 + related: #1211266 + +* Thu Jul 16 2015 jchaloup - 1.0.0-0.5.git596a8a4 +- Bump to upstream 596a8a40d12498b5335140f50753980bfaea4f6b + related: #1211266 + +* Wed Jul 15 2015 jchaloup - 1.0.0-0.4.git6ba532b +- Bump to upstream 6ba532b218cb5f5ea3f0e8dce5395182f388536c + related: #1211266 + +* Tue Jul 14 2015 jchaloup - 1.0.0-0.3.gitc616182 +- Bump to upstream c6161824db3784e6156131307a5e94647e5557fd + related: #1211266 + +* Mon Jul 13 2015 jchaloup - 1.0.0-0.2.git2c27b1f +- Bump to upstream 2c27b1fa64f4e70f04575d1b217494f49332390e + related: #1211266 + +* Sat Jul 11 2015 jchaloup - 1.0.0-0.1.git1b37059 +- Bump to upstream 1b370599ccf271741e657335c4943cb8c7dba28b + related: #1211266 + +* Fri Jul 10 2015 jchaloup - 0.21.1-0.2.gitccc4cfc +- Bump to upstream ccc4cfc7e11e0f127ac1cea045017dd799be3c63 + related: #1211266 + +* Thu Jul 09 2015 jchaloup - 0.21.1-0.1.git41f8907 +- Update generating of man pages from md (add genmanpages.sh) +- Bump to upstream 41f89075396329cd46c58495c7d3f7e13adcaa96 + related: #1211266 + +* Wed Jul 08 2015 jchaloup - 0.20.2-0.5.git77be29e +- Bump to upstream 77be29e3da71f0a136b6aa4048b2f0575c2598e4 + related: #1211266 + +* Tue Jul 07 2015 jchaloup - 0.20.2-0.4.git639a7da +- Bump to upstream 639a7dac50a331414cc6c47083323388da0d8756 + related: #1211266 + +* Mon Jul 06 2015 jchaloup - 0.20.2-0.3.gitbb6f2f7 +- Bump to upstream bb6f2f7ad90596d624d84cc691eec0f518e90cc8 + related: #1211266 + +* Fri Jul 03 2015 jchaloup - 0.20.2-0.2.git974377b +- Bump to upstream 974377b3064ac59b6e5694bfa568d67128026171 + related: #1211266 + +* Thu Jul 02 2015 jchaloup - 0.20.2-0.1.gitef41ceb +- Bump to upstream ef41ceb3e477ceada84c5522f429f02ab0f5948e + related: #1211266 + +* Tue Jun 30 2015 jchaloup - 0.20.0-0.3.git835eded +- Bump to upstream 835eded2943dfcf13a89518715e4be842a6a3ac0 +- Generate missing man pages + related: #1211266 + +* Mon Jun 29 2015 jchaloup - 0.20.0-0.2.git1c0b765 +- Bump to upstream 1c0b765df6dabfe9bd0e20489ed3bd18e6b3bda8 + Comment out missing man pages + related: #1211266 + +* Fri Jun 26 2015 jchaloup - 0.20.0-0.1.git8ebd896 +- Bump to upstream 8ebd896351513d446d56bc5785c070d2909226a3 + related: #1211266 + +* Fri Jun 26 2015 jchaloup - 0.19.3-0.6.git712f303 +- Bump to upstream 712f303350b35e70a573f3cb19193c8ec7ee7544 + related: #1211266 + +* Thu Jun 25 2015 jchaloup - 0.19.3-0.5.git2803b86 +- Bump to upstream 2803b86a42bf187afa816a7ce14fec754cc2af51 + related: #1211266 + +* Wed Jun 24 2015 Eric Paris - 0.19.3-0.4.git5b4dc4e +- Set CAP_NET_BIND_SERVICE on the kube-apiserver so it can use 443 + +* Wed Jun 24 2015 jchaloup - 0.19.3-0.3.git5b4dc4e +- Bump to upstream 5b4dc4edaa14e1ab4e3baa19df0388fa54dab344 + pkg/cloudprovider/* packages does not conform to golang language specification + related: #1211266 + +* Tue Jun 23 2015 jchaloup - 0.19.3-0.2.gita2ce3ea +- Bump to upstream a2ce3ea5293553b1fe0db3cbc6d53bdafe061d79 + related: #1211266 + +* Mon Jun 22 2015 jchaloup - 0.19.1-0.1.gitff0546d +- Bump to upstream ff0546da4fc23598de59db9f747c535545036463 + related: #1211266 + +* Fri Jun 19 2015 jchaloup - 0.19.0-0.7.gitb2e9fed +- Bump to upstream b2e9fed3490274509506285bdba309c50afb5c39 + related: #1211266 + +* Thu Jun 18 2015 jchaloup - 0.19.0-0.6.gitf660940 +- Bump to upstream f660940dceb3fe6ffb1b14ba495a47d91b5cd910 + related: #1211266 + +* Wed Jun 17 2015 jchaloup - 0.19.0-0.5.git43889c6 +- Bump to upstream 43889c612c4d396dcd8fbf3fbd217e106eaf5bce + related: #1211266 + +* Tue Jun 16 2015 jchaloup - 0.19.0-0.4.gita8269e3 +- Bump to upstream a8269e38c9e2bf81ba18cd6420e2309745d5b0b9 + related: #1211266 + +* Sun Jun 14 2015 jchaloup - 0.19.0-0.3.git5e5c1d1 +- Bump to upstream 5e5c1d10976f2f26d356ca60ef7d0d715c9f00a2 + related: #1211266 + +* Fri Jun 12 2015 jchaloup - 0.19.0-0.2.git0ca96c3 +- Bump to upstream 0ca96c3ac8b47114169f3b716ae4521ed8c7657c + related: #1211266 + +* Thu Jun 11 2015 jchaloup - 0.19.0-0.1.git5a02fc0 +- Bump to upstream 5a02fc07d8a943132b9e68fe7169778253318487 + related: #1211266 + +* Wed Jun 10 2015 jchaloup - 0.18.2-0.3.git0dfb681 +- Bump to upstream 0dfb681ba5d5dba535895ace9d650667904b5df7 + related: #1211266 + +* Tue Jun 09 2015 jchaloup - 0.18.2-0.2.gitb68e08f +- golang-cover is not needed + +* Tue Jun 09 2015 jchaloup - 0.18.2-0.1.gitb68e08f +- Bump to upstream b68e08f55f5ae566c4ea3905d0993a8735d6d34f + related: #1211266 + +* Sat Jun 06 2015 jchaloup - 0.18.1-0.3.git0f1c4c2 +- Bump to upstream 0f1c4c25c344f70c3592040b2ef092ccdce0244f + related: #1211266 + +* Fri Jun 05 2015 jchaloup - 0.18.1-0.2.git7309e1f +- Bump to upstream 7309e1f707ea5dd08c51f803037d7d22c20e2b92 + related: #1211266 + +* Thu Jun 04 2015 jchaloup - 0.18.1-0.1.gita161edb +- Bump to upstream a161edb3960c01ff6e14813858c2eeb85910009b + related: #1211266 + +* Wed Jun 03 2015 jchaloup - 0.18.0-0.3.gitb5a91bd +- Bump to upstream b5a91bda103ed2459f933959241a2b57331747ba +- Don't run %%check section (kept only for local run). Tests are now handled via CI. + related: #1211266 + +* Tue Jun 02 2015 jchaloup - 0.18.0-0.2.git5520386 +- Bump to upstream 5520386b180d3ddc4fa7b7dfe6f52642cc0c25f3 + related: #1211266 + +* Mon Jun 01 2015 jchaloup - 0.18.0-0.1.git0bb78fe +- Bump to upstream 0bb78fe6c53ce38198cc3805c78308cdd4805ac8 + related: #1211266 + +* Fri May 29 2015 jchaloup - 0.17.1-6 +- Bump to upstream ed4898d98c46869e9cbdb44186dfdeda9ff80cc2 + related: #1211266 + +* Thu May 28 2015 jchaloup - 0.17.1-5 +- Bump to upstream 6fa2777e26559fc008eacac83eb165d25bd9a7de + related: #1211266 + +* Tue May 26 2015 jchaloup - 0.17.1-4 +- Bump to upstream 01fcb58673001e56c69e128ab57e0c3f701aeea5 + related: #1211266 + +* Mon May 25 2015 jchaloup - 0.17.1-3 +- Decompose package into master and node subpackage. + Thanks to Avesh for testing and patience. + related: #1211266 + +* Mon May 25 2015 jchaloup - 0.17.1-2 +- Bump to upstream cf7b0bdc2a41d38613ac7f8eeea91cae23553fa2 + related: #1211266 + +* Fri May 22 2015 jchaloup - 0.17.1-1 +- Bump to upstream d9d12fd3f7036c92606fc3ba9046b365212fcd70 + related: #1211266 + +* Wed May 20 2015 jchaloup - 0.17.0-12 +- Bump to upstream a76bdd97100c66a46e2b49288540dcec58a954c4 + related: #1211266 + +* Tue May 19 2015 jchaloup - 0.17.0-11 +- Bump to upstream 10339d72b66a31592f73797a9983e7c207481b22 + related: #1211266 + +* Mon May 18 2015 jchaloup - 0.17.0-10 +- Bump to upstream efb42b302d871f7217394205d84e5ae82335d786 + related: #1211266 + +* Sat May 16 2015 jchaloup - 0.17.0-9 +- Bump to upstream d51e131726b925e7088b90915e99042459b628e0 + related: #1211266 + +* Fri May 15 2015 jchaloup - 0.17.0-8 +- Bump to upstream 1ee33ac481a14db7b90e3bbac8cec4ceea822bfb + related: #1211266 + +* Fri May 15 2015 jchaloup - 0.17.0-7 +- Bump to upstream d3c6fb0d6a13c0177dcd67556d72963c959234ea + related: #1211266 + +* Fri May 15 2015 jchaloup - 0.17.0-6 +- Bump to upstream f57f31783089f41c0bdca8cb87a1001ca94e1a45 + related: #1211266 + +* Thu May 14 2015 jchaloup - 0.17.0-5 +- Bump to upstream c90d381d0d5cf8ab7b8412106f5a6991d7e13c7d + related: #1211266 + +* Thu May 14 2015 jchaloup - 0.17.0-4 +- Bump to upstream 5010b2dde0f9b9eb820fe047e3b34bc9fa6324de +- Add debug info + related: #1211266 + +* Wed May 13 2015 jchaloup - 0.17.0-3 +- Bump to upstream ec19d41b63f5fe7b2c939e7738a41c0fbe65d796 + related: #1211266 + +* Tue May 12 2015 jchaloup - 0.17.0-2 +- Provide /usr/bin/kube-version-change binary + related: #1211266 + +* Tue May 12 2015 jchaloup - 0.17.0-1 +- Bump to upstream 962f10ee580eea30e5f4ea725c4e9e3743408a58 + related: #1211266 + +* Mon May 11 2015 jchaloup - 0.16.2-7 +- Bump to upstream 63182318c5876b94ac9b264d1224813b2b2ab541 + related: #1211266 + +* Fri May 08 2015 jchaloup - 0.16.2-6 +- Bump to upstream d136728df7e2694df9e082902f6239c11b0f2b00 +- Add NetworkManager as dependency for /etc/resolv.conf + related: #1211266 + +* Thu May 07 2015 jchaloup - 0.16.2-5 +- Bump to upstream ca0f678b9a0a6dc795ac7a595350d0dbe9d0ac3b + related: #1211266 + +* Wed May 06 2015 jchaloup - 0.16.2-4 +- Add docs to kubernetes-unit-test + related: #1211266 + +* Wed May 06 2015 jchaloup - 0.16.2-3 +- Bump to upstream 3a24c0e898cb3060d7905af6df275a3be562451d + related: #1211266 + +* Tue May 05 2015 jchaloup - 0.16.2-2 +- Add api and README.md to kubernetes-unit-test + related: #1211266 + +* Tue May 05 2015 jchaloup - 0.16.2-1 +- Bump to upstream 72048a824ca16c3921354197953fabecede5af47 + related: #1211266 + +* Mon May 04 2015 jchaloup - 0.16.1-2 +- Bump to upstream 1dcd80cdf3f00409d55cea1ef0e7faef0ae1d656 + related: #1211266 + +* Sun May 03 2015 jchaloup - 0.16.1-1 +- Bump to upstream 86751e8c90a3c0e852afb78d26cb6ba8cdbc37ba + related: #1211266 + +* Fri May 01 2015 jchaloup - 0.16.0-2 +- Bump to upstream 72708d74b9801989ddbdc8403fc5ba4aafb7c1ef + related: #1211266 + +* Wed Apr 29 2015 jchaloup - 0.16.0-1 +- Bump to upstream 7dcce2eeb7f28643d599c8b6a244523670d17c93 + related: #1211266 + +* Tue Apr 28 2015 jchaloup - 0.15.0-10 +- Add unit-test subpackage + related: #1211266 + +* Tue Apr 28 2015 jchaloup - 0.15.0-9 +- Bump to upstream 99fc906f78cd2bcb08536c262867fa6803f816d5 + related: #1211266 + +* Mon Apr 27 2015 jchaloup - 0.15.0-8 +- Bump to upstream 051dd96c542799dfab39184d2a7c8bacf9e88d85 + related: #1211266 + +* Fri Apr 24 2015 jchaloup - 0.15.0-7 +- Bump to upstream 9f753c2592481a226d72cea91648db8fb97f0da8 + related: #1211266 + +* Thu Apr 23 2015 jchaloup - 0.15.0-6 +- Bump to upstream cf824ae5e07965ba0b4b15ee88e08e2679f36978 + related: #1211266 + +* Tue Apr 21 2015 jchaloup - 0.15.0-5 +- Bump to upstream 21788d8e6606038a0a465c97f5240b4e66970fbb + related: #1211266 + +* Mon Apr 20 2015 jchaloup - 0.15.0-4 +- Bump to upstream eb1ea269954da2ce557f3305fa88d42e3ade7975 + related: #1211266 + +* Fri Apr 17 2015 jchaloup - 0.15.0-3 +- Obsolete cadvisor as it is integrated in kubelet + related: #1211266 + +* Wed Apr 15 2015 jchaloup - 0.15.0-0.2.git0ea87e4 +- Bump to upstream 0ea87e486407298dc1e3126c47f4076b9022fb09 + related: #1211266 + +* Tue Apr 14 2015 jchaloup - 0.15.0-0.1.gitd02139d +- Bump to upstream d02139d2b454ecc5730cc535d415c1963a7fb2aa + related: #1211266 + +* Sun Apr 12 2015 jchaloup - 0.14.2-0.2.gitd577db9 +- Bump to upstream d577db99873cbf04b8e17b78f17ec8f3a27eca30 + +* Wed Apr 08 2015 jchaloup - 0.14.2-0.1.git2719194 +- Bump to upstream 2719194154ffd38fd1613699a9dd10a00909957e + Use etcd-2.0.8 and higher + +* Tue Apr 07 2015 jchaloup - 0.14.1-0.2.gitd2f4734 +- Bump to upstream d2f473465738e6b6f7935aa704319577f5e890ba + +* Thu Apr 02 2015 jchaloup - 0.14.1-0.1.gita94ffc8 +- Bump to upstream a94ffc8625beb5e2a39edb01edc839cb8e59c444 + +* Wed Apr 01 2015 jchaloup - 0.14.0-0.2.git8168344 +- Bump to upstream 81683441b96537d4b51d146e39929b7003401cd5 + +* Tue Mar 31 2015 jchaloup - 0.14.0-0.1.git9ed8761 +- Bump to upstream 9ed87612d07f75143ac96ad90ff1ff68f13a2c67 +- Remove [B]R from devel branch until the package has stable API + +* Mon Mar 30 2015 jchaloup - 0.13.2-0.6.git8a7a127 +- Bump to upstream 8a7a127352263439e22253a58628d37a93fdaeb2 + +* Fri Mar 27 2015 jchaloup - 0.13.2-0.5.git8d94c43 +- Bump to upstream 8d94c43e705824f23791b66ad5de4ea095d5bb32 + resolves: #1205362 + +* Wed Mar 25 2015 jchaloup - 0.13.2-0.4.git455fe82 +- Bump to upstream 455fe8235be8fd9ba0ce21bf4f50a69d42e18693 + +* Mon Mar 23 2015 jchaloup - 0.13.2-0.3.gitef75888 +- Remove runtime dependency on etcd + resolves: #1202923 + +* Sun Mar 22 2015 jchaloup - 0.13.2-0.2.gitef75888 +- Bump to upstream ef758881d108bb53a128126c503689104d17f477 + +* Fri Mar 20 2015 jchaloup - 0.13.2-0.1.gita8f2cee +- Bump to upstream a8f2cee8c5418676ee33a311fad57d6821d3d29a + +* Fri Mar 13 2015 jchaloup - 0.12.0-0.9.git53b25a7 +- Bump to upstream 53b25a7890e31bdec6f2a95b32200d6cc27ae2ca + fix kube-proxy.service and kubelet + resolves: #1200919 #1200924 + +* Fri Mar 13 2015 jchaloup - 0.12.0-0.8.git39dceb1 +- Bump to upstream 39dceb13a511a83963a766a439cb386d10764310 + +* Thu Mar 12 2015 Eric Paris - 0.12.0-0.7.gita3fd0a9 +- Move from /etc/tmpfiles.d to %%{_tmpfilesdir} + resolves: #1200969 + +* Thu Mar 12 2015 jchaloup - 0.12.0-0.6.gita3fd0a9 +- Place contrib/init/systemd/tmpfiles.d/kubernetes.conf to /etc/tmpfiles.d/kubernetes.conf + +* Thu Mar 12 2015 jchaloup - 0.12.0-0.5.gita3fd0a9 +- Bump to upstream a3fd0a9fd516bb6033f32196ae97aaecf8c096b1 + +* Tue Mar 10 2015 jchaloup - 0.12.0-0.4.gita4d871a +- Bump to upstream a4d871a10086436557f804930812f2566c9d4d39 + +* Fri Mar 06 2015 jchaloup - 0.12.0-0.3.git2700871 +- Bump to upstream 2700871b049d5498167671cea6de8317099ad406 + +* Thu Mar 05 2015 jchaloup - 0.12.0-0.2.git8b627f5 +- Bump to upstream 8b627f516fd3e4f62da90d401ceb3d38de6f8077 + +* Tue Mar 03 2015 jchaloup - 0.12.0-0.1.gitecca426 +- Bump to upstream ecca42643b91a7117de8cd385b64e6bafecefd65 + +* Mon Mar 02 2015 jchaloup - 0.11.0-0.5.git6c5b390 +- Bump to upstream 6c5b390160856cd8334043344ef6e08568b0a5c9 + +* Sat Feb 28 2015 jchaloup - 0.11.0-0.4.git0fec31a +- Bump to upstream 0fec31a11edff14715a1efb27f77262a7c3770f4 + +* Fri Feb 27 2015 jchaloup - 0.11.0-0.3.git08402d7 +- Bump to upstream 08402d798c8f207a2e093de5a670c5e8e673e2de + +* Wed Feb 25 2015 jchaloup - 0.11.0-0.2.git86434b4 +- Bump to upstream 86434b4038ab87ac40219562ad420c3cc58c7c6b + +* Tue Feb 24 2015 jchaloup - 0.11.0-0.1.git754a2a8 +- Bump to upstream 754a2a8305c812121c3845d8293efdd819b6a704 + turn off integration tests until "FAILED: unexpected endpoints: + timed out waiting for the condition" problem is resolved + Adding back devel subpackage ([B]R list outdated) + +* Fri Feb 20 2015 jchaloup - 0.10.1-0.3.git4c87805 +- Bump to upstream 4c87805870b1b22e463c4bd711238ef68c77f0af + +* Tue Feb 17 2015 jchaloup - 0.10.1-0.2.git6f84bda +- Bump to upstream 6f84bdaba853872dbac69c84d3ab4b6964e85d8c + +* Tue Feb 17 2015 jchaloup - 0.10.1-0.1.git7d6130e +- Bump to upstream 7d6130edcdfabd7dd2e6a06fdc8fe5e333f07f5c + +* Sat Feb 07 2015 jchaloup - 0.9.1-0.7.gitc9c98ab +- Bump to upstream c9c98ab19eaa6f0b2ea17152c9a455338853f4d0 + Since some dependencies are broken, we can not build Kubernetes from Fedora deps. + Switching to vendored source codes until Go draft is resolved + +* Wed Feb 04 2015 jchaloup - 0.9.1-0.6.git7f5ed54 +- Bump to upstream 7f5ed541f794348ae6279414cf70523a4d5133cc + +* Tue Feb 03 2015 jchaloup - 0.9.1-0.5.git2ac6bbb +- Bump to upstream 2ac6bbb7eba7e69eac71bd9acd192cda97e67641 + +* Mon Feb 02 2015 jchaloup - 0.9.1-0.4.gite335e2d +- Bump to upstream e335e2d3e26a9a58d3b189ccf41ceb3770d1bfa9 + +* Fri Jan 30 2015 jchaloup - 0.9.1-0.3.git55793ac +- Bump to upstream 55793ac2066745f7243c666316499e1a8cf074f0 + +* Thu Jan 29 2015 jchaloup - 0.9.1-0.2.gitca6de16 +- Bump to upstream ca6de16df7762d4fc9b4ad44baa78d22e3f30742 + +* Tue Jan 27 2015 jchaloup - 0.9.1-0.1.git3623a01 +- Bump to upstream 3623a01bf0e90de6345147eef62894057fe04b29 +- update tests for etcd-2.0 + +* Thu Jan 22 2015 jchaloup - 0.8.2-571.gitb2f287c ++- Bump to upstream b2f287c259d856f4c08052a51cd7772c563aff77 + +* Thu Jan 22 2015 Eric Paris - 0.8.2-570.gitb2f287c +- patch kubelet service file to use docker.service not docker.socket + +* Wed Jan 21 2015 jchaloup - 0.8.2-0.1.git5b04640 +- Bump to upstream 5b046406a957a1e7eda7c0c86dd7a89e9c94fc5f + +* Sun Jan 18 2015 jchaloup - 0.8.0-126.0.git68298f0 +- Add some missing dependencies +- Add devel subpackage + +* Fri Jan 09 2015 Eric Paris - 0.8.0-125.0.git68298f0 +- Bump to upstream 68298f08a4980f95dfbf7b9f58bfec1808fb2670 + +* Tue Dec 16 2014 Eric Paris - 0.7.0-18.0.git52e165a +- Bump to upstream 52e165a4fd720d1703ebc31bd6660e01334227b8 + +* Mon Dec 15 2014 Eric Paris - 0.6-297.0.git5ef34bf +- Bump to upstream 5ef34bf52311901b997119cc49eff944c610081b + +* Wed Dec 03 2014 Eric Paris +- Replace patch to use old googlecode/go.net/ with BuildRequires on golang.org/x/net/ + +* Tue Dec 02 2014 Eric Paris - 0.6-4.0.git993ef88 +- Bump to upstream 993ef88eec9012b221f79abe8f2932ee97997d28 + +* Mon Dec 01 2014 Eric Paris - 0.5-235.0.git6aabd98 +- Bump to upstream 6aabd9804fb75764b70e9172774002d4febcae34 + +* Wed Nov 26 2014 Eric Paris - 0.5-210.0.gitff1e9f4 +- Bump to upstream ff1e9f4c191342c24974c030e82aceaff8ea9c24 + +* Tue Nov 25 2014 Eric Paris - 0.5-174.0.git64e07f7 +- Bump to upstream 64e07f7fe03d8692c685b09770c45f364967a119 + +* Mon Nov 24 2014 Eric Paris - 0.5-125.0.git162e498 +- Bump to upstream 162e4983b947d2f6f858ca7607869d70627f5dff + +* Fri Nov 21 2014 Eric Paris - 0.5-105.0.git3f74a1e +- Bump to upstream 3f74a1e9f56b3c3502762930c0c551ccab0557ea + +* Thu Nov 20 2014 Eric Paris - 0.5-65.0.gitc6158b8 +- Bump to upstream c6158b8aa9c40fbf1732650a8611429536466b21 +- include go-restful build requirement + +* Tue Nov 18 2014 Eric Paris - 0.5-14.0.gitdf0981b +- Bump to upstream df0981bc01c5782ad30fc45cb6f510f365737fc1 + +* Tue Nov 11 2014 Eric Paris - 0.4-680.0.git30fcf24 +- Bump to upstream 30fcf241312f6d0767c7d9305b4c462f1655f790 + +* Mon Nov 10 2014 Eric Paris - 0.4-633.0.git6c70227 +- Bump to upstream 6c70227a2eccc23966d32ea6d558ee05df46e400 + +* Fri Nov 07 2014 Eric Paris - 0.4-595.0.gitb695650 +- Bump to upstream b6956506fa2682afa93770a58ea8c7ba4b4caec1 + +* Thu Nov 06 2014 Eric Paris - 0.4-567.0.git3b1ef73 +- Bump to upstream 3b1ef739d1fb32a822a22216fb965e22cdd28e7f + +* Thu Nov 06 2014 Eric Paris - 0.4-561.0.git06633bf +- Bump to upstream 06633bf4cdc1ebd4fc848f85025e14a794b017b4 +- Make spec file more RHEL/CentOS friendly + +* Tue Nov 04 2014 Eric Paris - 0.4-0.0.git4452163 +- rebase to v0.4 +- include man pages + +* Tue Oct 14 2014 jchaloup - 0.3-0.3.git98ac8e1 +- create /var/lib/kubelet +- Use bash completions from upstream +- Bump to upstream 98ac8e178fcf1627399d659889bcb5fe25abdca4 +- all by Eric Paris + +* Mon Sep 29 2014 Jan Chaloupka - 0.3-0.2.git88fdb65 +- replace * with coresponding files +- remove dependency on gcc + +* Wed Sep 24 2014 Eric Paris - 0.1-0.4.git6ebe69a +- prefer autosetup instead of setup (revert setup change in 0-0.3.git) +https://fedoraproject.org/wiki/Autosetup_packaging_draft +- revert version number to 0.1 + +* Mon Sep 08 2014 Lokesh Mandvekar - 0-0.3.git6ebe69a +- gopath defined in golang package already +- package owns /etc/kubernetes +- bash dependency implicit +- keep buildroot/$RPM_BUILD_ROOT macros consistent +- replace with macros wherever possible +- set version, release and source tarball prep as per +https://fedoraproject.org/wiki/Packaging:SourceURL#Github + +* Mon Sep 08 2014 Eric Paris +- make services restart automatically on error + +* Sat Sep 06 2014 Eric Paris +- update to upstream +- redo build to use project scripts +- use project scripts in %%check +- rework deletion of third_party packages to easily detect changes +- run apiserver and controller-manager as non-root + +* Mon Aug 11 2014 Adam Miller +- update to upstream +- decouple the rest of third_party + +* Thu Aug 7 2014 Eric Paris +- update to head +- update package to include config files + +* Wed Jul 16 2014 Colin Walters +- Initial package