From 8a1200040224fc1a87bdb3bd7cca4e03e15bd076 Mon Sep 17 00:00:00 2001 From: deads2k Date: Mon, 30 Jan 2017 13:39:54 -0500 Subject: [PATCH] move client/record --- cmd/cloud-controller-manager/app/BUILD | 7 +- .../app/controllermanager.go | 11 +- cmd/kube-controller-manager/app/BUILD | 5 +- .../app/autoscaling.go | 2 +- .../app/controllermanager.go | 11 +- cmd/kube-proxy/app/BUILD | 5 +- cmd/kube-proxy/app/server.go | 9 +- cmd/kubelet/app/BUILD | 5 +- cmd/kubelet/app/server.go | 12 +- cmd/kubemark/BUILD | 5 +- cmd/kubemark/hollow-node.go | 7 +- .../pkg/federation-controller/configmap/BUILD | 3 +- .../configmap/configmap_controller.go | 5 +- .../pkg/federation-controller/daemonset/BUILD | 4 +- .../daemonset/daemonset_controller.go | 6 +- .../federation-controller/deployment/BUILD | 3 +- .../deployment/deploymentcontroller.go | 5 +- .../pkg/federation-controller/ingress/BUILD | 3 +- .../ingress/ingress_controller.go | 5 +- .../pkg/federation-controller/namespace/BUILD | 3 +- .../namespace/namespace_controller.go | 5 +- .../federation-controller/replicaset/BUILD | 3 +- .../replicaset/replicasetcontroller.go | 5 +- .../pkg/federation-controller/secret/BUILD | 3 +- .../secret/secret_controller.go | 5 +- .../pkg/federation-controller/service/BUILD | 3 +- .../service/servicecontroller.go | 5 +- .../util/deletionhelper/BUILD | 2 +- .../util/deletionhelper/deletion_helper.go | 2 +- .../util/eventsink/BUILD | 8 +- .../util/eventsink/eventsink.go | 91 +- .../util/eventsink/eventsink_test.go | 9 +- pkg/BUILD | 1 - pkg/api/ref.go | 8 +- pkg/api/ref_test.go | 2 +- pkg/api/v1/ref.go | 9 +- .../typed/core/v1/event_expansion.go | 6 +- .../core/v1/fake/fake_event_expansion.go | 2 +- .../core/internalversion/event_expansion.go | 6 +- .../fake/fake_event_expansion.go | 2 +- pkg/client/leaderelection/BUILD | 2 +- .../leaderelection/leaderelection_test.go | 2 +- pkg/client/leaderelection/resourcelock/BUILD | 2 +- .../leaderelection/resourcelock/interface.go | 2 +- pkg/client/record/BUILD | 68 -- pkg/client/record/OWNERS | 27 - pkg/client/record/doc.go | 18 - pkg/client/record/event.go | 316 ------ pkg/client/record/event_test.go | 914 ------------------ pkg/client/record/events_cache.go | 360 ------- pkg/client/record/events_cache_test.go | 254 ----- pkg/client/record/fake.go | 54 -- pkg/controller/BUILD | 5 +- pkg/controller/certificates/BUILD | 4 +- .../certificates/certificate_controller.go | 6 +- pkg/controller/client_builder.go | 35 + pkg/controller/cloud/BUILD | 10 +- pkg/controller/cloud/nodecontroller.go | 10 +- pkg/controller/cloud/nodecontroller_test.go | 6 +- pkg/controller/controller_utils.go | 4 +- pkg/controller/controller_utils_test.go | 2 +- pkg/controller/cronjob/BUILD | 7 +- pkg/controller/cronjob/cronjob_controller.go | 12 +- .../cronjob/cronjob_controller_test.go | 2 +- pkg/controller/cronjob/injection.go | 2 +- pkg/controller/cronjob/utils.go | 2 +- pkg/controller/daemon/BUILD | 6 +- pkg/controller/daemon/daemoncontroller.go | 11 +- .../daemon/daemoncontroller_test.go | 2 + pkg/controller/deployment/BUILD | 7 +- .../deployment/deployment_controller.go | 10 +- .../deployment/deployment_controller_test.go | 2 +- pkg/controller/deployment/recreate_test.go | 2 + pkg/controller/deployment/rolling_test.go | 2 +- pkg/controller/deployment/sync_test.go | 2 +- pkg/controller/disruption/BUILD | 8 +- pkg/controller/disruption/disruption.go | 9 +- pkg/controller/disruption/disruption_test.go | 5 +- pkg/controller/job/BUILD | 6 +- pkg/controller/job/jobcontroller.go | 12 +- pkg/controller/node/BUILD | 5 +- pkg/controller/node/cidr_allocator.go | 6 +- pkg/controller/node/controller_utils.go | 2 +- pkg/controller/node/nodecontroller.go | 9 +- pkg/controller/node/testutil/BUILD | 1 + pkg/controller/node/testutil/test_utils.go | 28 +- pkg/controller/podautoscaler/BUILD | 14 +- pkg/controller/podautoscaler/horizontal.go | 8 +- .../podautoscaler/horizontal_test.go | 59 +- pkg/controller/replicaset/BUILD | 5 +- pkg/controller/replicaset/replica_set.go | 10 +- pkg/controller/replication/BUILD | 5 +- .../replication/replication_controller.go | 10 +- pkg/controller/service/BUILD | 7 +- pkg/controller/service/servicecontroller.go | 10 +- .../service/servicecontroller_test.go | 3 + pkg/controller/statefulset/BUILD | 6 +- pkg/controller/statefulset/fakes.go | 2 +- pkg/controller/statefulset/stateful_set.go | 10 +- pkg/controller/statefulset/statefulpod.go | 2 +- pkg/controller/volume/attachdetach/BUILD | 5 +- .../attachdetach/attach_detach_controller.go | 9 +- .../volume/attachdetach/reconciler/BUILD | 2 +- .../reconciler/reconciler_test.go | 2 +- pkg/controller/volume/persistentvolume/BUILD | 7 +- .../volume/persistentvolume/framework_test.go | 2 +- .../volume/persistentvolume/index_test.go | 3 +- .../volume/persistentvolume/pv_controller.go | 6 +- .../persistentvolume/pv_controller_base.go | 9 +- pkg/genericapiserver/endpoints/watch_test.go | 6 +- pkg/kubectl/cmd/drain_test.go | 2 +- pkg/kubectl/describe.go | 42 +- pkg/kubelet/BUILD | 5 +- pkg/kubelet/active_deadline.go | 2 +- pkg/kubelet/active_deadline_test.go | 2 +- pkg/kubelet/config/BUILD | 5 +- pkg/kubelet/config/config.go | 2 +- pkg/kubelet/config/config_test.go | 5 +- pkg/kubelet/container/BUILD | 3 +- pkg/kubelet/container/helpers.go | 2 +- pkg/kubelet/container/ref.go | 3 +- pkg/kubelet/dockertools/BUILD | 4 +- pkg/kubelet/dockertools/docker_manager.go | 2 +- .../dockertools/docker_manager_linux_test.go | 2 +- .../dockertools/docker_manager_test.go | 2 +- pkg/kubelet/dockertools/docker_test.go | 2 +- pkg/kubelet/dockertools/fake_manager.go | 2 +- pkg/kubelet/eviction/BUILD | 4 +- pkg/kubelet/eviction/eviction_manager.go | 2 +- pkg/kubelet/eviction/eviction_manager_test.go | 2 +- pkg/kubelet/images/BUILD | 4 +- pkg/kubelet/images/image_gc_manager.go | 2 +- pkg/kubelet/images/image_gc_manager_test.go | 2 +- pkg/kubelet/images/image_manager.go | 2 +- pkg/kubelet/images/image_manager_test.go | 2 +- pkg/kubelet/kubelet.go | 5 +- pkg/kubelet/kubelet_network_test.go | 2 +- pkg/kubelet/kubelet_test.go | 2 +- pkg/kubelet/kuberuntime/BUILD | 3 +- .../kuberuntime/fake_kuberuntime_manager.go | 2 +- .../kuberuntime/kuberuntime_manager.go | 5 +- pkg/kubelet/oom_watcher.go | 2 +- pkg/kubelet/oom_watcher_test.go | 2 +- pkg/kubelet/pod_workers.go | 2 +- pkg/kubelet/pod_workers_test.go | 2 +- pkg/kubelet/prober/BUILD | 4 +- pkg/kubelet/prober/common_test.go | 2 +- pkg/kubelet/prober/prober.go | 2 +- pkg/kubelet/prober/prober_manager.go | 2 +- pkg/kubelet/prober/prober_test.go | 2 +- pkg/kubelet/prober/worker_test.go | 2 +- pkg/kubelet/rkt/BUILD | 2 +- pkg/kubelet/rkt/rkt.go | 2 +- pkg/kubelet/runonce_test.go | 2 +- pkg/kubelet/volumemanager/BUILD | 4 +- pkg/kubelet/volumemanager/reconciler/BUILD | 2 +- .../reconciler/reconciler_test.go | 2 +- pkg/kubelet/volumemanager/volume_manager.go | 2 +- .../volumemanager/volume_manager_test.go | 2 +- pkg/kubemark/BUILD | 2 +- pkg/kubemark/hollow_proxy.go | 2 +- pkg/proxy/iptables/BUILD | 2 +- pkg/proxy/iptables/proxier.go | 2 +- pkg/volume/util/operationexecutor/BUILD | 2 +- .../operationexecutor/operation_generator.go | 2 +- plugin/cmd/kube-scheduler/app/BUILD | 7 +- plugin/cmd/kube-scheduler/app/server.go | 11 +- plugin/pkg/scheduler/BUILD | 6 +- plugin/pkg/scheduler/scheduler.go | 2 +- plugin/pkg/scheduler/scheduler_test.go | 8 +- staging/copy.sh | 26 +- .../typed/core/v1/event_expansion.go | 6 +- .../core/v1/fake/fake_event_expansion.go | 2 +- staging/src/k8s.io/client-go/pkg/api/ref.go | 8 +- .../src/k8s.io/client-go/pkg/api/v1/ref.go | 9 +- .../k8s.io/client-go/tools/record/event.go | 9 +- .../client-go/tools/record/event_test.go | 15 +- test/e2e/common/sysctl.go | 3 +- test/e2e/cronjob.go | 3 +- test/e2e/framework/util.go | 4 +- test/integration/framework/BUILD | 2 +- test/integration/framework/master_utils.go | 2 +- test/integration/quota/quota_test.go | 2 +- test/integration/scheduler/extender_test.go | 9 +- test/integration/scheduler/scheduler_test.go | 21 +- test/integration/scheduler_perf/BUILD | 5 +- test/integration/scheduler_perf/util.go | 9 +- .../volume/persistent_volumes_test.go | 4 +- vendor/BUILD | 1 + 189 files changed, 661 insertions(+), 2447 deletions(-) delete mode 100644 pkg/client/record/BUILD delete mode 100755 pkg/client/record/OWNERS delete mode 100644 pkg/client/record/doc.go delete mode 100644 pkg/client/record/event.go delete mode 100644 pkg/client/record/event_test.go delete mode 100644 pkg/client/record/events_cache.go delete mode 100644 pkg/client/record/events_cache_test.go delete mode 100644 pkg/client/record/fake.go diff --git a/cmd/cloud-controller-manager/app/BUILD b/cmd/cloud-controller-manager/app/BUILD index f3a1fc2387c..bd911aa7c9c 100644 --- a/cmd/cloud-controller-manager/app/BUILD +++ b/cmd/cloud-controller-manager/app/BUILD @@ -13,12 +13,10 @@ go_library( tags = ["automanaged"], deps = [ "//cmd/cloud-controller-manager/app/options:go_default_library", - "//pkg/api/v1:go_default_library", + "//pkg/api:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", "//pkg/client/leaderelection:go_default_library", "//pkg/client/leaderelection/resourcelock:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/cloudprovider:go_default_library", "//pkg/controller:go_default_library", "//pkg/controller/cloud:go_default_library", @@ -33,8 +31,11 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/apiserver/pkg/server/healthz", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/rest", "//vendor:k8s.io/client-go/tools/clientcmd", + "//vendor:k8s.io/client-go/tools/record", ], ) diff --git a/cmd/cloud-controller-manager/app/controllermanager.go b/cmd/cloud-controller-manager/app/controllermanager.go index 9946ff65d39..2060155834f 100644 --- a/cmd/cloud-controller-manager/app/controllermanager.go +++ b/cmd/cloud-controller-manager/app/controllermanager.go @@ -28,15 +28,16 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apiserver/pkg/server/healthz" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/cmd/cloud-controller-manager/app/options" - "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" "k8s.io/kubernetes/pkg/client/leaderelection" "k8s.io/kubernetes/pkg/client/leaderelection/resourcelock" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/controller" nodecontroller "k8s.io/kubernetes/pkg/controller/cloud" @@ -123,8 +124,8 @@ func Run(s *options.CloudControllerManagerServer, cloud cloudprovider.Interface) eventBroadcaster := record.NewBroadcaster() eventBroadcaster.StartLogging(glog.Infof) - eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: kubeClient.Core().Events("")}) - recorder := eventBroadcaster.NewRecorder(v1.EventSource{Component: "cloud-controller-manager"}) + eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: v1core.New(kubeClient.Core().RESTClient()).Events("")}) + recorder := eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "cloud-controller-manager"}) run := func(stop <-chan struct{}) { rootClientBuilder := controller.SimpleControllerClientBuilder{ diff --git a/cmd/kube-controller-manager/app/BUILD b/cmd/kube-controller-manager/app/BUILD index 760bb0de6b4..640a59dc240 100644 --- a/cmd/kube-controller-manager/app/BUILD +++ b/cmd/kube-controller-manager/app/BUILD @@ -30,10 +30,8 @@ go_library( "//pkg/apis/componentconfig:go_default_library", "//pkg/apis/extensions:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", "//pkg/client/leaderelection:go_default_library", "//pkg/client/leaderelection/resourcelock:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/cloudprovider:go_default_library", "//pkg/cloudprovider/providers:go_default_library", "//pkg/cloudprovider/providers/aws:go_default_library", @@ -99,8 +97,11 @@ go_library( "//vendor:k8s.io/apiserver/pkg/util/feature", "//vendor:k8s.io/client-go/discovery", "//vendor:k8s.io/client-go/dynamic", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/rest", "//vendor:k8s.io/client-go/tools/clientcmd", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/cert", ], ) diff --git a/cmd/kube-controller-manager/app/autoscaling.go b/cmd/kube-controller-manager/app/autoscaling.go index 106db7f99fd..c3a42c5780e 100644 --- a/cmd/kube-controller-manager/app/autoscaling.go +++ b/cmd/kube-controller-manager/app/autoscaling.go @@ -40,7 +40,7 @@ func startHPAController(ctx ControllerContext) (bool, error) { ) replicaCalc := podautoscaler.NewReplicaCalculator(metricsClient, hpaClient.Core()) go podautoscaler.NewHorizontalController( - hpaClient.Core(), + ctx.ClientBuilder.ClientGoClientOrDie("horizontal-pod-autoscaler").Core(), hpaClient.Extensions(), hpaClient.Autoscaling(), replicaCalc, diff --git a/cmd/kube-controller-manager/app/controllermanager.go b/cmd/kube-controller-manager/app/controllermanager.go index ed72d2a8c49..6c77d4f2d6c 100644 --- a/cmd/kube-controller-manager/app/controllermanager.go +++ b/cmd/kube-controller-manager/app/controllermanager.go @@ -37,16 +37,17 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apiserver/pkg/server/healthz" "k8s.io/client-go/discovery" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" + "k8s.io/client-go/tools/record" certutil "k8s.io/client-go/util/cert" "k8s.io/kubernetes/cmd/kube-controller-manager/app/options" - "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" "k8s.io/kubernetes/pkg/client/leaderelection" "k8s.io/kubernetes/pkg/client/leaderelection/resourcelock" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller/informers" @@ -144,8 +145,8 @@ func Run(s *options.CMServer) error { eventBroadcaster := record.NewBroadcaster() eventBroadcaster.StartLogging(glog.Infof) - eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: kubeClient.Core().Events("")}) - recorder := eventBroadcaster.NewRecorder(v1.EventSource{Component: "controller-manager"}) + eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: v1core.New(kubeClient.Core().RESTClient()).Events("")}) + recorder := eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "controller-manager"}) run := func(stop <-chan struct{}) { rootClientBuilder := controller.SimpleControllerClientBuilder{ diff --git a/cmd/kube-proxy/app/BUILD b/cmd/kube-proxy/app/BUILD index 1a1c68ea7a5..2725f9851bf 100644 --- a/cmd/kube-proxy/app/BUILD +++ b/cmd/kube-proxy/app/BUILD @@ -20,8 +20,6 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library", - "//pkg/client/clientset_generated/internalclientset/typed/core/internalversion:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/proxy:go_default_library", "//pkg/proxy/config:go_default_library", "//pkg/proxy/iptables:go_default_library", @@ -44,8 +42,11 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/types", "//vendor:k8s.io/apimachinery/pkg/util/net", "//vendor:k8s.io/apimachinery/pkg/util/wait", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/clientcmd", "//vendor:k8s.io/client-go/tools/clientcmd/api", + "//vendor:k8s.io/client-go/tools/record", ], ) diff --git a/cmd/kube-proxy/app/server.go b/cmd/kube-proxy/app/server.go index 58009c4079e..c1e82c957c8 100644 --- a/cmd/kube-proxy/app/server.go +++ b/cmd/kube-proxy/app/server.go @@ -32,14 +32,15 @@ import ( "k8s.io/apimachinery/pkg/types" utilnet "k8s.io/apimachinery/pkg/util/net" "k8s.io/apimachinery/pkg/util/wait" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/cmd/kube-proxy/app/options" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" - unversionedcore "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/proxy" proxyconfig "k8s.io/kubernetes/pkg/proxy/config" "k8s.io/kubernetes/pkg/proxy/iptables" @@ -205,7 +206,7 @@ func NewProxyServerDefault(config *options.ProxyServerConfig) (*ProxyServer, err // Create event recorder hostname := nodeutil.GetHostname(config.HostnameOverride) eventBroadcaster := record.NewBroadcaster() - recorder := eventBroadcaster.NewRecorder(v1.EventSource{Component: "kube-proxy", Host: hostname}) + recorder := eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "kube-proxy", Host: hostname}) var proxier proxy.ProxyProvider var endpointsHandler proxyconfig.EndpointsConfigHandler @@ -326,7 +327,7 @@ func (s *ProxyServer) Run() error { return nil } - s.Broadcaster.StartRecordingToSink(&unversionedcore.EventSinkImpl{Interface: s.Client.Core().Events("")}) + s.Broadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: v1core.New(s.Client.Core().RESTClient()).Events("")}) // Start up a webserver if requested if s.Config.HealthzPort > 0 { diff --git a/cmd/kubelet/app/BUILD b/cmd/kubelet/app/BUILD index a44bac058f1..6a149d91d67 100644 --- a/cmd/kubelet/app/BUILD +++ b/cmd/kubelet/app/BUILD @@ -45,8 +45,6 @@ go_library( "//pkg/client/chaosclient:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/clientset_generated/clientset/typed/certificates/v1beta1:go_default_library", - "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/cloudprovider:go_default_library", "//pkg/cloudprovider/providers:go_default_library", "//pkg/credentialprovider:go_default_library", @@ -115,10 +113,13 @@ go_library( "//vendor:k8s.io/client-go/kubernetes", "//vendor:k8s.io/client-go/kubernetes/typed/authentication/v1beta1", "//vendor:k8s.io/client-go/kubernetes/typed/authorization/v1beta1", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/rest", "//vendor:k8s.io/client-go/tools/auth", "//vendor:k8s.io/client-go/tools/clientcmd", "//vendor:k8s.io/client-go/tools/clientcmd/api", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/cert", ], ) diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go index afb41136f87..5d8d22324e2 100644 --- a/cmd/kubelet/app/server.go +++ b/cmd/kubelet/app/server.go @@ -44,10 +44,13 @@ import ( "k8s.io/apiserver/pkg/server/healthz" utilfeature "k8s.io/apiserver/pkg/util/feature" clientgoclientset "k8s.io/client-go/kubernetes" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" restclient "k8s.io/client-go/rest" clientauth "k8s.io/client-go/tools/auth" "k8s.io/client-go/tools/clientcmd" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" + "k8s.io/client-go/tools/record" certutil "k8s.io/client-go/util/cert" "k8s.io/kubernetes/cmd/kubelet/app/options" "k8s.io/kubernetes/pkg/api" @@ -57,8 +60,6 @@ import ( "k8s.io/kubernetes/pkg/capabilities" "k8s.io/kubernetes/pkg/client/chaosclient" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/credentialprovider" "k8s.io/kubernetes/pkg/features" @@ -362,7 +363,8 @@ func run(s *options.KubeletServer, kubeDeps *kubelet.KubeletDeps) (err error) { } if kubeDeps == nil { - var kubeClient, eventClient *clientset.Clientset + var kubeClient *clientset.Clientset + var eventClient v1core.EventsGetter var externalKubeClient clientgoclientset.Interface var cloud cloudprovider.Interface @@ -398,7 +400,7 @@ func run(s *options.KubeletServer, kubeDeps *kubelet.KubeletDeps) (err error) { eventClientConfig := *clientConfig eventClientConfig.QPS = float32(s.EventRecordQPS) eventClientConfig.Burst = int(s.EventBurst) - eventClient, err = clientset.NewForConfig(&eventClientConfig) + eventClient, err = clientgoclientset.NewForConfig(&eventClientConfig) if err != nil { glog.Warningf("Failed to create API Server client: %v", err) } @@ -698,7 +700,7 @@ func RunKubelet(kubeCfg *componentconfig.KubeletConfiguration, kubeDeps *kubelet } eventBroadcaster := record.NewBroadcaster() - kubeDeps.Recorder = eventBroadcaster.NewRecorder(v1.EventSource{Component: "kubelet", Host: string(nodeName)}) + kubeDeps.Recorder = eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "kubelet", Host: string(nodeName)}) eventBroadcaster.StartLogging(glog.V(3).Infof) if kubeDeps.EventClient != nil { glog.V(4).Infof("Sending events to api server.") diff --git a/cmd/kubemark/BUILD b/cmd/kubemark/BUILD index 8855b676c23..f240eda3256 100644 --- a/cmd/kubemark/BUILD +++ b/cmd/kubemark/BUILD @@ -19,11 +19,10 @@ go_library( srcs = ["hollow-node.go"], tags = ["automanaged"], deps = [ - "//pkg/api/v1:go_default_library", + "//pkg/api:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library", "//pkg/client/metrics/prometheus:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/kubelet/cadvisor/testing:go_default_library", "//pkg/kubelet/cm:go_default_library", "//pkg/kubelet/dockertools:go_default_library", @@ -35,8 +34,10 @@ go_library( "//vendor:github.com/spf13/pflag", "//vendor:k8s.io/apimachinery/pkg/util/sets", "//vendor:k8s.io/apiserver/pkg/util/flag", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/rest", "//vendor:k8s.io/client-go/tools/clientcmd", + "//vendor:k8s.io/client-go/tools/record", ], ) diff --git a/cmd/kubemark/hollow-node.go b/cmd/kubemark/hollow-node.go index 47e539ed997..6e0dd89c4ea 100644 --- a/cmd/kubemark/hollow-node.go +++ b/cmd/kubemark/hollow-node.go @@ -21,13 +21,14 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apiserver/pkg/util/flag" + clientv1 "k8s.io/client-go/pkg/api/v1" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" - "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/client-go/tools/record" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" _ "k8s.io/kubernetes/pkg/client/metrics/prometheus" // for client metric registration - "k8s.io/kubernetes/pkg/client/record" cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing" "k8s.io/kubernetes/pkg/kubelet/cm" "k8s.io/kubernetes/pkg/kubelet/dockertools" @@ -129,7 +130,7 @@ func main() { if config.Morph == "proxy" { eventBroadcaster := record.NewBroadcaster() - recorder := eventBroadcaster.NewRecorder(v1.EventSource{Component: "kube-proxy", Host: config.NodeName}) + recorder := eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "kube-proxy", Host: config.NodeName}) iptInterface := fakeiptables.NewFake() diff --git a/federation/pkg/federation-controller/configmap/BUILD b/federation/pkg/federation-controller/configmap/BUILD index f765833a0f8..03ba8351edd 100644 --- a/federation/pkg/federation-controller/configmap/BUILD +++ b/federation/pkg/federation-controller/configmap/BUILD @@ -20,14 +20,15 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller:go_default_library", "//vendor:github.com/golang/glog", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/apimachinery/pkg/types", "//vendor:k8s.io/apimachinery/pkg/watch", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/flowcontrol", ], ) diff --git a/federation/pkg/federation-controller/configmap/configmap_controller.go b/federation/pkg/federation-controller/configmap/configmap_controller.go index 3d5dd7f44b4..90772a307e8 100644 --- a/federation/pkg/federation-controller/configmap/configmap_controller.go +++ b/federation/pkg/federation-controller/configmap/configmap_controller.go @@ -23,7 +23,9 @@ import ( pkgruntime "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/watch" + clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/flowcontrol" federationapi "k8s.io/kubernetes/federation/apis/federation/v1beta1" federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" @@ -32,7 +34,6 @@ import ( "k8s.io/kubernetes/pkg/api" apiv1 "k8s.io/kubernetes/pkg/api/v1" kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/controller" "github.com/golang/glog" @@ -80,7 +81,7 @@ type ConfigMapController struct { func NewConfigMapController(client federationclientset.Interface) *ConfigMapController { broadcaster := record.NewBroadcaster() broadcaster.StartRecordingToSink(eventsink.NewFederatedEventSink(client)) - recorder := broadcaster.NewRecorder(apiv1.EventSource{Component: "federated-configmaps-controller"}) + recorder := broadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "federated-configmaps-controller"}) configmapcontroller := &ConfigMapController{ federatedApiClient: client, diff --git a/federation/pkg/federation-controller/daemonset/BUILD b/federation/pkg/federation-controller/daemonset/BUILD index 48fbb172fb1..3fbaf353322 100644 --- a/federation/pkg/federation-controller/daemonset/BUILD +++ b/federation/pkg/federation-controller/daemonset/BUILD @@ -19,10 +19,8 @@ go_library( "//federation/pkg/federation-controller/util/deletionhelper:go_default_library", "//federation/pkg/federation-controller/util/eventsink:go_default_library", "//pkg/api:go_default_library", - "//pkg/api/v1:go_default_library", "//pkg/apis/extensions/v1beta1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller:go_default_library", "//vendor:github.com/golang/glog", "//vendor:k8s.io/apimachinery/pkg/api/errors", @@ -30,7 +28,9 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/apimachinery/pkg/types", "//vendor:k8s.io/apimachinery/pkg/watch", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/flowcontrol", ], ) diff --git a/federation/pkg/federation-controller/daemonset/daemonset_controller.go b/federation/pkg/federation-controller/daemonset/daemonset_controller.go index 24da3e8bf5a..8614d1d332c 100644 --- a/federation/pkg/federation-controller/daemonset/daemonset_controller.go +++ b/federation/pkg/federation-controller/daemonset/daemonset_controller.go @@ -26,7 +26,9 @@ import ( pkgruntime "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/watch" + clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/flowcontrol" federationapi "k8s.io/kubernetes/federation/apis/federation/v1beta1" federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" @@ -34,10 +36,8 @@ import ( "k8s.io/kubernetes/federation/pkg/federation-controller/util/deletionhelper" "k8s.io/kubernetes/federation/pkg/federation-controller/util/eventsink" "k8s.io/kubernetes/pkg/api" - apiv1 "k8s.io/kubernetes/pkg/api/v1" extensionsv1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/controller" "github.com/golang/glog" @@ -87,7 +87,7 @@ type DaemonSetController struct { func NewDaemonSetController(client federationclientset.Interface) *DaemonSetController { broadcaster := record.NewBroadcaster() broadcaster.StartRecordingToSink(eventsink.NewFederatedEventSink(client)) - recorder := broadcaster.NewRecorder(apiv1.EventSource{Component: "federated-daemonset-controller"}) + recorder := broadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "federated-daemonset-controller"}) daemonsetcontroller := &DaemonSetController{ federatedApiClient: client, diff --git a/federation/pkg/federation-controller/deployment/BUILD b/federation/pkg/federation-controller/deployment/BUILD index 5af892295c4..ef157a249e5 100644 --- a/federation/pkg/federation-controller/deployment/BUILD +++ b/federation/pkg/federation-controller/deployment/BUILD @@ -25,7 +25,6 @@ go_library( "//pkg/api/v1:go_default_library", "//pkg/apis/extensions/v1beta1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller:go_default_library", "//vendor:github.com/golang/glog", "//vendor:k8s.io/apimachinery/pkg/api/errors", @@ -33,7 +32,9 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/apimachinery/pkg/watch", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/flowcontrol", "//vendor:k8s.io/client-go/util/workqueue", ], diff --git a/federation/pkg/federation-controller/deployment/deploymentcontroller.go b/federation/pkg/federation-controller/deployment/deploymentcontroller.go index e354b8e4364..5ec1bb53c2b 100644 --- a/federation/pkg/federation-controller/deployment/deploymentcontroller.go +++ b/federation/pkg/federation-controller/deployment/deploymentcontroller.go @@ -30,7 +30,9 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/watch" + clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/flowcontrol" "k8s.io/client-go/util/workqueue" fed "k8s.io/kubernetes/federation/apis/federation" @@ -45,7 +47,6 @@ import ( apiv1 "k8s.io/kubernetes/pkg/api/v1" extensionsv1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/controller" ) @@ -104,7 +105,7 @@ type DeploymentController struct { func NewDeploymentController(federationClient fedclientset.Interface) *DeploymentController { broadcaster := record.NewBroadcaster() broadcaster.StartRecordingToSink(eventsink.NewFederatedEventSink(federationClient)) - recorder := broadcaster.NewRecorder(apiv1.EventSource{Component: "federated-deployment-controller"}) + recorder := broadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "federated-deployment-controller"}) fdc := &DeploymentController{ fedClient: federationClient, diff --git a/federation/pkg/federation-controller/ingress/BUILD b/federation/pkg/federation-controller/ingress/BUILD index 8a777c053d3..d9b56d57b9b 100644 --- a/federation/pkg/federation-controller/ingress/BUILD +++ b/federation/pkg/federation-controller/ingress/BUILD @@ -22,7 +22,6 @@ go_library( "//pkg/api/v1:go_default_library", "//pkg/apis/extensions/v1beta1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller:go_default_library", "//vendor:github.com/golang/glog", "//vendor:k8s.io/apimachinery/pkg/api/errors", @@ -31,7 +30,9 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/runtime/schema", "//vendor:k8s.io/apimachinery/pkg/types", "//vendor:k8s.io/apimachinery/pkg/watch", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/flowcontrol", ], ) diff --git a/federation/pkg/federation-controller/ingress/ingress_controller.go b/federation/pkg/federation-controller/ingress/ingress_controller.go index 26b9100c7b4..0fee0140fdc 100644 --- a/federation/pkg/federation-controller/ingress/ingress_controller.go +++ b/federation/pkg/federation-controller/ingress/ingress_controller.go @@ -27,7 +27,9 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/watch" + clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/flowcontrol" federationapi "k8s.io/kubernetes/federation/apis/federation/v1beta1" federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" @@ -38,7 +40,6 @@ import ( "k8s.io/kubernetes/pkg/api/v1" extensionsv1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/controller" "github.com/golang/glog" @@ -119,7 +120,7 @@ func NewIngressController(client federationclientset.Interface) *IngressControll glog.V(4).Infof("->NewIngressController V(4)") broadcaster := record.NewBroadcaster() broadcaster.StartRecordingToSink(eventsink.NewFederatedEventSink(client)) - recorder := broadcaster.NewRecorder(v1.EventSource{Component: "federated-ingress-controller"}) + recorder := broadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "federated-ingress-controller"}) ic := &IngressController{ federatedApiClient: client, ingressReviewDelay: time.Second * 10, diff --git a/federation/pkg/federation-controller/namespace/BUILD b/federation/pkg/federation-controller/namespace/BUILD index eea34a707ad..2a572caf23f 100644 --- a/federation/pkg/federation-controller/namespace/BUILD +++ b/federation/pkg/federation-controller/namespace/BUILD @@ -21,14 +21,15 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller:go_default_library", "//vendor:github.com/golang/glog", "//vendor:k8s.io/apimachinery/pkg/api/errors", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/apimachinery/pkg/watch", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/flowcontrol", ], ) diff --git a/federation/pkg/federation-controller/namespace/namespace_controller.go b/federation/pkg/federation-controller/namespace/namespace_controller.go index e540ac69226..0644dac201d 100644 --- a/federation/pkg/federation-controller/namespace/namespace_controller.go +++ b/federation/pkg/federation-controller/namespace/namespace_controller.go @@ -24,7 +24,9 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/watch" + clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/flowcontrol" federationapi "k8s.io/kubernetes/federation/apis/federation/v1beta1" federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" @@ -34,7 +36,6 @@ import ( "k8s.io/kubernetes/pkg/api" apiv1 "k8s.io/kubernetes/pkg/api/v1" kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/controller" "github.com/golang/glog" @@ -84,7 +85,7 @@ type NamespaceController struct { func NewNamespaceController(client federationclientset.Interface) *NamespaceController { broadcaster := record.NewBroadcaster() broadcaster.StartRecordingToSink(eventsink.NewFederatedEventSink(client)) - recorder := broadcaster.NewRecorder(apiv1.EventSource{Component: "federated-namespace-controller"}) + recorder := broadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "federated-namespace-controller"}) nc := &NamespaceController{ federatedApiClient: client, diff --git a/federation/pkg/federation-controller/replicaset/BUILD b/federation/pkg/federation-controller/replicaset/BUILD index 925a8c2c11f..77a0b598c4d 100644 --- a/federation/pkg/federation-controller/replicaset/BUILD +++ b/federation/pkg/federation-controller/replicaset/BUILD @@ -26,7 +26,6 @@ go_library( "//pkg/apis/extensions/v1beta1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/legacylisters:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller:go_default_library", "//vendor:github.com/golang/glog", "//vendor:k8s.io/apimachinery/pkg/api/errors", @@ -34,7 +33,9 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/apimachinery/pkg/watch", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/flowcontrol", "//vendor:k8s.io/client-go/util/workqueue", ], diff --git a/federation/pkg/federation-controller/replicaset/replicasetcontroller.go b/federation/pkg/federation-controller/replicaset/replicasetcontroller.go index 2ae6a842bc3..5e4bde06e41 100644 --- a/federation/pkg/federation-controller/replicaset/replicasetcontroller.go +++ b/federation/pkg/federation-controller/replicaset/replicasetcontroller.go @@ -30,7 +30,9 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/watch" + clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/flowcontrol" "k8s.io/client-go/util/workqueue" fed "k8s.io/kubernetes/federation/apis/federation" @@ -46,7 +48,6 @@ import ( extensionsv1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" "k8s.io/kubernetes/pkg/client/legacylisters" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/controller" ) @@ -107,7 +108,7 @@ type ReplicaSetController struct { func NewReplicaSetController(federationClient fedclientset.Interface) *ReplicaSetController { broadcaster := record.NewBroadcaster() broadcaster.StartRecordingToSink(eventsink.NewFederatedEventSink(federationClient)) - recorder := broadcaster.NewRecorder(apiv1.EventSource{Component: "federated-replicaset-controller"}) + recorder := broadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "federated-replicaset-controller"}) frsc := &ReplicaSetController{ fedClient: federationClient, diff --git a/federation/pkg/federation-controller/secret/BUILD b/federation/pkg/federation-controller/secret/BUILD index fefecdd2764..82b7bbd86c8 100644 --- a/federation/pkg/federation-controller/secret/BUILD +++ b/federation/pkg/federation-controller/secret/BUILD @@ -21,7 +21,6 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller:go_default_library", "//vendor:github.com/golang/glog", "//vendor:k8s.io/apimachinery/pkg/api/errors", @@ -29,7 +28,9 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/apimachinery/pkg/types", "//vendor:k8s.io/apimachinery/pkg/watch", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/flowcontrol", ], ) diff --git a/federation/pkg/federation-controller/secret/secret_controller.go b/federation/pkg/federation-controller/secret/secret_controller.go index a3737228f44..a4962aed8ab 100644 --- a/federation/pkg/federation-controller/secret/secret_controller.go +++ b/federation/pkg/federation-controller/secret/secret_controller.go @@ -25,7 +25,9 @@ import ( pkgruntime "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/watch" + clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/flowcontrol" federationapi "k8s.io/kubernetes/federation/apis/federation/v1beta1" federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" @@ -35,7 +37,6 @@ import ( "k8s.io/kubernetes/pkg/api" apiv1 "k8s.io/kubernetes/pkg/api/v1" kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/controller" "github.com/golang/glog" @@ -85,7 +86,7 @@ type SecretController struct { func NewSecretController(client federationclientset.Interface) *SecretController { broadcaster := record.NewBroadcaster() broadcaster.StartRecordingToSink(eventsink.NewFederatedEventSink(client)) - recorder := broadcaster.NewRecorder(apiv1.EventSource{Component: "federated-secrets-controller"}) + recorder := broadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "federated-secrets-controller"}) secretcontroller := &SecretController{ federatedApiClient: client, diff --git a/federation/pkg/federation-controller/service/BUILD b/federation/pkg/federation-controller/service/BUILD index 212f4ebec0c..bd54106394e 100644 --- a/federation/pkg/federation-controller/service/BUILD +++ b/federation/pkg/federation-controller/service/BUILD @@ -31,7 +31,6 @@ go_library( "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/legacylisters:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller:go_default_library", "//vendor:github.com/golang/glog", "//vendor:k8s.io/apimachinery/pkg/api/errors", @@ -42,8 +41,10 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/sets", "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/apimachinery/pkg/watch", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/rest", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/workqueue", ], ) diff --git a/federation/pkg/federation-controller/service/servicecontroller.go b/federation/pkg/federation-controller/service/servicecontroller.go index 04b33fd8440..f0456d77e40 100644 --- a/federation/pkg/federation-controller/service/servicecontroller.go +++ b/federation/pkg/federation-controller/service/servicecontroller.go @@ -32,7 +32,9 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/watch" + clientv1 "k8s.io/client-go/pkg/api/v1" cache "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/workqueue" v1beta1 "k8s.io/kubernetes/federation/apis/federation/v1beta1" federationcache "k8s.io/kubernetes/federation/client/cache" @@ -45,7 +47,6 @@ import ( v1 "k8s.io/kubernetes/pkg/api/v1" kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" "k8s.io/kubernetes/pkg/client/legacylisters" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/controller" ) @@ -159,7 +160,7 @@ func New(federationClient fedclientset.Interface, dns dnsprovider.Interface, broadcaster := record.NewBroadcaster() // federationClient event is not supported yet // broadcaster.StartRecordingToSink(&unversioned_core.EventSinkImpl{Interface: kubeClient.Core().Events("")}) - recorder := broadcaster.NewRecorder(v1.EventSource{Component: UserAgentName}) + recorder := broadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: UserAgentName}) s := &ServiceController{ dns: dns, diff --git a/federation/pkg/federation-controller/util/deletionhelper/BUILD b/federation/pkg/federation-controller/util/deletionhelper/BUILD index 1188a2d57f2..846780e2129 100644 --- a/federation/pkg/federation-controller/util/deletionhelper/BUILD +++ b/federation/pkg/federation-controller/util/deletionhelper/BUILD @@ -15,9 +15,9 @@ go_library( "//federation/pkg/federation-controller/util:go_default_library", "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", - "//pkg/client/record:go_default_library", "//vendor:github.com/golang/glog", "//vendor:k8s.io/apimachinery/pkg/runtime", + "//vendor:k8s.io/client-go/tools/record", ], ) diff --git a/federation/pkg/federation-controller/util/deletionhelper/deletion_helper.go b/federation/pkg/federation-controller/util/deletionhelper/deletion_helper.go index 461e47082cf..7c34fb6fd1e 100644 --- a/federation/pkg/federation-controller/util/deletionhelper/deletion_helper.go +++ b/federation/pkg/federation-controller/util/deletionhelper/deletion_helper.go @@ -25,10 +25,10 @@ import ( "time" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/federation/pkg/federation-controller/util" "k8s.io/kubernetes/pkg/api" api_v1 "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" "github.com/golang/glog" ) diff --git a/federation/pkg/federation-controller/util/eventsink/BUILD b/federation/pkg/federation-controller/util/eventsink/BUILD index a34497d609f..417a3b436f1 100644 --- a/federation/pkg/federation-controller/util/eventsink/BUILD +++ b/federation/pkg/federation-controller/util/eventsink/BUILD @@ -14,9 +14,14 @@ go_library( tags = ["automanaged"], deps = [ "//federation/client/clientset_generated/federation_clientset:go_default_library", + "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", - "//pkg/client/record:go_default_library", + "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", + "//vendor:k8s.io/apimachinery/pkg/conversion", + "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/apimachinery/pkg/types", + "//vendor:k8s.io/client-go/pkg/api/v1", + "//vendor:k8s.io/client-go/tools/record", ], ) @@ -32,6 +37,7 @@ go_test( "//vendor:github.com/stretchr/testify/assert", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/runtime", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/testing", ], ) diff --git a/federation/pkg/federation-controller/util/eventsink/eventsink.go b/federation/pkg/federation-controller/util/eventsink/eventsink.go index 3793aae7300..213e020371e 100644 --- a/federation/pkg/federation-controller/util/eventsink/eventsink.go +++ b/federation/pkg/federation-controller/util/eventsink/eventsink.go @@ -17,13 +17,20 @@ limitations under the License. package eventsink import ( + "reflect" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/conversion" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" + clientv1 "k8s.io/client-go/pkg/api/v1" + "k8s.io/client-go/tools/record" fedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" - api_v1 "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" + "k8s.io/kubernetes/pkg/api" + kubev1 "k8s.io/kubernetes/pkg/api/v1" ) -// Implements k8s.io/kubernetes/pkg/client/record.EventSink. +// Implements k8s.io/client-go/tools/record.EventSink. type FederatedEventSink struct { clientset fedclientset.Interface } @@ -37,14 +44,80 @@ func NewFederatedEventSink(clientset fedclientset.Interface) *FederatedEventSink } } -func (fes *FederatedEventSink) Create(event *api_v1.Event) (*api_v1.Event, error) { - return fes.clientset.Core().Events(event.Namespace).Create(event) +// TODO this is uses a reflection conversion path and is very expensive. federation should update to use client-go + +var scheme = runtime.NewScheme() + +func init() { + scheme.AddKnownTypes(clientv1.SchemeGroupVersion, + &clientv1.Event{}, + &kubev1.Event{}, + ) + if err := scheme.AddConversionFuncs( + api.Convert_unversioned_Time_To_unversioned_Time, + ); err != nil { + panic(err) + } + if err := scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{ + Fn: metav1.DeepCopy_v1_Time, + InType: reflect.TypeOf(&metav1.Time{}), + }, + ); err != nil { + panic(err) + } } -func (fes *FederatedEventSink) Update(event *api_v1.Event) (*api_v1.Event, error) { - return fes.clientset.Core().Events(event.Namespace).Update(event) +func (fes *FederatedEventSink) Create(event *clientv1.Event) (*clientv1.Event, error) { + kubeEvent := &kubev1.Event{} + if err := scheme.Convert(event, kubeEvent, nil); err != nil { + return nil, err + } + + ret, err := fes.clientset.Core().Events(kubeEvent.Namespace).Create(kubeEvent) + if err != nil { + return nil, err + } + + retEvent := &clientv1.Event{} + if err := scheme.Convert(ret, retEvent, nil); err != nil { + return nil, err + } + return retEvent, nil } -func (fes *FederatedEventSink) Patch(event *api_v1.Event, data []byte) (*api_v1.Event, error) { - return fes.clientset.Core().Events(event.Namespace).Patch(event.Name, types.StrategicMergePatchType, data) +func (fes *FederatedEventSink) Update(event *clientv1.Event) (*clientv1.Event, error) { + kubeEvent := &kubev1.Event{} + if err := scheme.Convert(event, kubeEvent, nil); err != nil { + return nil, err + } + + ret, err := fes.clientset.Core().Events(kubeEvent.Namespace).Update(kubeEvent) + if err != nil { + return nil, err + } + + retEvent := &clientv1.Event{} + if err := scheme.Convert(ret, retEvent, nil); err != nil { + return nil, err + } + return retEvent, nil +} + +func (fes *FederatedEventSink) Patch(event *clientv1.Event, data []byte) (*clientv1.Event, error) { + kubeEvent := &kubev1.Event{} + if err := scheme.Convert(event, kubeEvent, nil); err != nil { + return nil, err + } + + ret, err := fes.clientset.Core().Events(kubeEvent.Namespace).Patch(kubeEvent.Name, types.StrategicMergePatchType, data) + if err != nil { + return nil, err + } + + retEvent := &clientv1.Event{} + if err := scheme.Convert(ret, retEvent, nil); err != nil { + return nil, err + } + return retEvent, nil } diff --git a/federation/pkg/federation-controller/util/eventsink/eventsink_test.go b/federation/pkg/federation-controller/util/eventsink/eventsink_test.go index 0d868bd2cb5..07547f4c372 100644 --- a/federation/pkg/federation-controller/util/eventsink/eventsink_test.go +++ b/federation/pkg/federation-controller/util/eventsink/eventsink_test.go @@ -21,10 +21,11 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + clientv1 "k8s.io/client-go/pkg/api/v1" core "k8s.io/client-go/testing" fakefedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset/fake" . "k8s.io/kubernetes/federation/pkg/federation-controller/util/test" - apiv1 "k8s.io/kubernetes/pkg/api/v1" + kubev1 "k8s.io/kubernetes/pkg/api/v1" "github.com/stretchr/testify/assert" ) @@ -46,7 +47,7 @@ func TestEventSink(t *testing.T) { return true, obj, nil }) - event := apiv1.Event{ + event := clientv1.Event{ ObjectMeta: metav1.ObjectMeta{ Name: "bzium", Namespace: "ns", @@ -55,7 +56,7 @@ func TestEventSink(t *testing.T) { sink := NewFederatedEventSink(fakeFederationClient) eventUpdated, err := sink.Create(&event) assert.NoError(t, err) - eventV1 := GetObjectFromChan(createdChan).(*apiv1.Event) + eventV1 := GetObjectFromChan(createdChan).(*kubev1.Event) assert.NotNil(t, eventV1) // Just some simple sanity checks. assert.Equal(t, event.Name, eventV1.Name) @@ -63,7 +64,7 @@ func TestEventSink(t *testing.T) { eventUpdated, err = sink.Update(&event) assert.NoError(t, err) - eventV1 = GetObjectFromChan(updateChan).(*apiv1.Event) + eventV1 = GetObjectFromChan(updateChan).(*kubev1.Event) assert.NotNil(t, eventV1) // Just some simple sanity checks. assert.Equal(t, event.Name, eventV1.Name) diff --git a/pkg/BUILD b/pkg/BUILD index 55fbd051282..cb0f09c694d 100644 --- a/pkg/BUILD +++ b/pkg/BUILD @@ -67,7 +67,6 @@ filegroup( "//pkg/client/listers/storage/internalversion:all-srcs", "//pkg/client/listers/storage/v1beta1:all-srcs", "//pkg/client/metrics:all-srcs", - "//pkg/client/record:all-srcs", "//pkg/client/retry:all-srcs", "//pkg/client/testdata:all-srcs", "//pkg/client/tests:all-srcs", diff --git a/pkg/api/ref.go b/pkg/api/ref.go index 134bbd26f74..370cf5513a4 100644 --- a/pkg/api/ref.go +++ b/pkg/api/ref.go @@ -37,7 +37,7 @@ var ( // object, or an error if the object doesn't follow the conventions // that would allow this. // TODO: should take a meta.Interface see http://issue.k8s.io/7127 -func GetReference(obj runtime.Object) (*ObjectReference, error) { +func GetReference(scheme *runtime.Scheme, obj runtime.Object) (*ObjectReference, error) { if obj == nil { return nil, ErrNilObject } @@ -53,7 +53,7 @@ func GetReference(obj runtime.Object) (*ObjectReference, error) { kind := gvk.Kind if len(kind) == 0 { // TODO: this is wrong - gvks, _, err := Scheme.ObjectKinds(obj) + gvks, _, err := scheme.ObjectKinds(obj) if err != nil { return nil, err } @@ -111,8 +111,8 @@ func GetReference(obj runtime.Object) (*ObjectReference, error) { } // GetPartialReference is exactly like GetReference, but allows you to set the FieldPath. -func GetPartialReference(obj runtime.Object, fieldPath string) (*ObjectReference, error) { - ref, err := GetReference(obj) +func GetPartialReference(scheme *runtime.Scheme, obj runtime.Object, fieldPath string) (*ObjectReference, error) { + ref, err := GetReference(scheme, obj) if err != nil { return nil, err } diff --git a/pkg/api/ref_test.go b/pkg/api/ref_test.go index ac22a6363e5..ee06a1ed82c 100644 --- a/pkg/api/ref_test.go +++ b/pkg/api/ref_test.go @@ -125,7 +125,7 @@ func TestGetReference(t *testing.T) { } for name, item := range table { - ref, err := GetPartialReference(item.obj, item.fieldPath) + ref, err := GetPartialReference(Scheme, item.obj, item.fieldPath) if e, a := item.shouldErr, (err != nil); e != a { t.Errorf("%v: expected %v, got %v, err %v", name, e, a, err) continue diff --git a/pkg/api/v1/ref.go b/pkg/api/v1/ref.go index d75d724370f..5d33719fefc 100644 --- a/pkg/api/v1/ref.go +++ b/pkg/api/v1/ref.go @@ -23,7 +23,6 @@ import ( "strings" "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/kubernetes/pkg/api" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" @@ -39,7 +38,7 @@ var ( // object, or an error if the object doesn't follow the conventions // that would allow this. // TODO: should take a meta.Interface see http://issue.k8s.io/7127 -func GetReference(obj runtime.Object) (*ObjectReference, error) { +func GetReference(scheme *runtime.Scheme, obj runtime.Object) (*ObjectReference, error) { if obj == nil { return nil, ErrNilObject } @@ -55,7 +54,7 @@ func GetReference(obj runtime.Object) (*ObjectReference, error) { kind := gvk.Kind if len(kind) == 0 { // TODO: this is wrong - gvks, _, err := api.Scheme.ObjectKinds(obj) + gvks, _, err := scheme.ObjectKinds(obj) if err != nil { return nil, err } @@ -113,8 +112,8 @@ func GetReference(obj runtime.Object) (*ObjectReference, error) { } // GetPartialReference is exactly like GetReference, but allows you to set the FieldPath. -func GetPartialReference(obj runtime.Object, fieldPath string) (*ObjectReference, error) { - ref, err := GetReference(obj) +func GetPartialReference(scheme *runtime.Scheme, obj runtime.Object, fieldPath string) (*ObjectReference, error) { + ref, err := GetReference(scheme, obj) if err != nil { return nil, err } diff --git a/pkg/client/clientset_generated/clientset/typed/core/v1/event_expansion.go b/pkg/client/clientset_generated/clientset/typed/core/v1/event_expansion.go index d6ac1b57540..918c8df0768 100644 --- a/pkg/client/clientset_generated/clientset/typed/core/v1/event_expansion.go +++ b/pkg/client/clientset_generated/clientset/typed/core/v1/event_expansion.go @@ -35,7 +35,7 @@ type EventExpansion interface { UpdateWithEventNamespace(event *v1.Event) (*v1.Event, error) PatchWithEventNamespace(event *v1.Event, data []byte) (*v1.Event, error) // Search finds events about the specified object - Search(objOrRef runtime.Object) (*v1.EventList, error) + Search(scheme *runtime.Scheme, objOrRef runtime.Object) (*v1.EventList, error) // Returns the appropriate field selector based on the API version being used to communicate with the server. // The returned field selector can be used with List and Watch to filter desired events. GetFieldSelector(involvedObjectName, involvedObjectNamespace, involvedObjectKind, involvedObjectUID *string) fields.Selector @@ -99,8 +99,8 @@ func (e *events) PatchWithEventNamespace(incompleteEvent *v1.Event, data []byte) // Search finds events about the specified object. The namespace of the // object must match this event's client namespace unless the event client // was made with the "" namespace. -func (e *events) Search(objOrRef runtime.Object) (*v1.EventList, error) { - ref, err := api.GetReference(objOrRef) +func (e *events) Search(scheme *runtime.Scheme, objOrRef runtime.Object) (*v1.EventList, error) { + ref, err := api.GetReference(scheme, objOrRef) if err != nil { return nil, err } diff --git a/pkg/client/clientset_generated/clientset/typed/core/v1/fake/fake_event_expansion.go b/pkg/client/clientset_generated/clientset/typed/core/v1/fake/fake_event_expansion.go index 584898e935e..c29efc5fa4e 100644 --- a/pkg/client/clientset_generated/clientset/typed/core/v1/fake/fake_event_expansion.go +++ b/pkg/client/clientset_generated/clientset/typed/core/v1/fake/fake_event_expansion.go @@ -66,7 +66,7 @@ func (c *FakeEvents) PatchWithEventNamespace(event *v1.Event, data []byte) (*v1. } // Search returns a list of events matching the specified object. -func (c *FakeEvents) Search(objOrRef runtime.Object) (*v1.EventList, error) { +func (c *FakeEvents) Search(scheme *runtime.Scheme, objOrRef runtime.Object) (*v1.EventList, error) { action := core.NewRootListAction(eventsResource, api.ListOptions{}) if c.ns != "" { action = core.NewListAction(eventsResource, c.ns, api.ListOptions{}) diff --git a/pkg/client/clientset_generated/internalclientset/typed/core/internalversion/event_expansion.go b/pkg/client/clientset_generated/internalclientset/typed/core/internalversion/event_expansion.go index 6d78f82bc6a..7d0c407b96c 100644 --- a/pkg/client/clientset_generated/internalclientset/typed/core/internalversion/event_expansion.go +++ b/pkg/client/clientset_generated/internalclientset/typed/core/internalversion/event_expansion.go @@ -35,7 +35,7 @@ type EventExpansion interface { UpdateWithEventNamespace(event *api.Event) (*api.Event, error) PatchWithEventNamespace(event *api.Event, data []byte) (*api.Event, error) // Search finds events about the specified object - Search(objOrRef runtime.Object) (*api.EventList, error) + Search(scheme *runtime.Scheme, objOrRef runtime.Object) (*api.EventList, error) // Returns the appropriate field selector based on the API version being used to communicate with the server. // The returned field selector can be used with List and Watch to filter desired events. GetFieldSelector(involvedObjectName, involvedObjectNamespace, involvedObjectKind, involvedObjectUID *string) fields.Selector @@ -99,8 +99,8 @@ func (e *events) PatchWithEventNamespace(incompleteEvent *api.Event, data []byte // Search finds events about the specified object. The namespace of the // object must match this event's client namespace unless the event client // was made with the "" namespace. -func (e *events) Search(objOrRef runtime.Object) (*api.EventList, error) { - ref, err := api.GetReference(objOrRef) +func (e *events) Search(scheme *runtime.Scheme, objOrRef runtime.Object) (*api.EventList, error) { + ref, err := api.GetReference(scheme, objOrRef) if err != nil { return nil, err } diff --git a/pkg/client/clientset_generated/internalclientset/typed/core/internalversion/fake/fake_event_expansion.go b/pkg/client/clientset_generated/internalclientset/typed/core/internalversion/fake/fake_event_expansion.go index 1e0de5ff435..33aa40932d9 100644 --- a/pkg/client/clientset_generated/internalclientset/typed/core/internalversion/fake/fake_event_expansion.go +++ b/pkg/client/clientset_generated/internalclientset/typed/core/internalversion/fake/fake_event_expansion.go @@ -66,7 +66,7 @@ func (c *FakeEvents) PatchWithEventNamespace(event *api.Event, data []byte) (*ap } // Search returns a list of events matching the specified object. -func (c *FakeEvents) Search(objOrRef runtime.Object) (*api.EventList, error) { +func (c *FakeEvents) Search(scheme *runtime.Scheme, objOrRef runtime.Object) (*api.EventList, error) { action := core.NewRootListAction(eventsResource, metav1.ListOptions{}) if c.ns != "" { action = core.NewListAction(eventsResource, c.ns, metav1.ListOptions{}) diff --git a/pkg/client/leaderelection/BUILD b/pkg/client/leaderelection/BUILD index 36ec8e074ed..5247c392319 100644 --- a/pkg/client/leaderelection/BUILD +++ b/pkg/client/leaderelection/BUILD @@ -33,11 +33,11 @@ go_test( "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset/fake:go_default_library", "//pkg/client/leaderelection/resourcelock:go_default_library", - "//pkg/client/record:go_default_library", "//vendor:k8s.io/apimachinery/pkg/api/errors", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/client-go/testing", + "//vendor:k8s.io/client-go/tools/record", ], ) diff --git a/pkg/client/leaderelection/leaderelection_test.go b/pkg/client/leaderelection/leaderelection_test.go index b4387d66461..3b75dc6ebd3 100644 --- a/pkg/client/leaderelection/leaderelection_test.go +++ b/pkg/client/leaderelection/leaderelection_test.go @@ -30,10 +30,10 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" core "k8s.io/client-go/testing" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" fakeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake" rl "k8s.io/kubernetes/pkg/client/leaderelection/resourcelock" - "k8s.io/kubernetes/pkg/client/record" ) func TestTryAcquireOrRenew(t *testing.T) { diff --git a/pkg/client/leaderelection/resourcelock/BUILD b/pkg/client/leaderelection/resourcelock/BUILD index ffc3a4ab2c1..bb0588a30a8 100644 --- a/pkg/client/leaderelection/resourcelock/BUILD +++ b/pkg/client/leaderelection/resourcelock/BUILD @@ -17,8 +17,8 @@ go_library( deps = [ "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/record:go_default_library", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", + "//vendor:k8s.io/client-go/tools/record", ], ) diff --git a/pkg/client/leaderelection/resourcelock/interface.go b/pkg/client/leaderelection/resourcelock/interface.go index 2fa808ef5e6..7b3775b9b29 100644 --- a/pkg/client/leaderelection/resourcelock/interface.go +++ b/pkg/client/leaderelection/resourcelock/interface.go @@ -18,7 +18,7 @@ package resourcelock import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/kubernetes/pkg/client/record" + "k8s.io/client-go/tools/record" ) const ( diff --git a/pkg/client/record/BUILD b/pkg/client/record/BUILD deleted file mode 100644 index 28487e56fbe..00000000000 --- a/pkg/client/record/BUILD +++ /dev/null @@ -1,68 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -licenses(["notice"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", - "go_test", -) - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "event.go", - "events_cache.go", - "fake.go", - ], - tags = ["automanaged"], - deps = [ - "//pkg/api/v1:go_default_library", - "//vendor:github.com/golang/glog", - "//vendor:github.com/golang/groupcache/lru", - "//vendor:k8s.io/apimachinery/pkg/api/errors", - "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", - "//vendor:k8s.io/apimachinery/pkg/runtime", - "//vendor:k8s.io/apimachinery/pkg/util/runtime", - "//vendor:k8s.io/apimachinery/pkg/util/sets", - "//vendor:k8s.io/apimachinery/pkg/util/strategicpatch", - "//vendor:k8s.io/apimachinery/pkg/watch", - "//vendor:k8s.io/client-go/rest", - "//vendor:k8s.io/client-go/util/clock", - ], -) - -go_test( - name = "go_default_test", - srcs = [ - "event_test.go", - "events_cache_test.go", - ], - library = ":go_default_library", - tags = ["automanaged"], - deps = [ - "//pkg/api/install:go_default_library", - "//pkg/api/v1:go_default_library", - "//vendor:k8s.io/apimachinery/pkg/api/errors", - "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", - "//vendor:k8s.io/apimachinery/pkg/runtime", - "//vendor:k8s.io/apimachinery/pkg/util/diff", - "//vendor:k8s.io/apimachinery/pkg/util/strategicpatch", - "//vendor:k8s.io/client-go/rest", - "//vendor:k8s.io/client-go/util/clock", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) diff --git a/pkg/client/record/OWNERS b/pkg/client/record/OWNERS deleted file mode 100755 index 4dd54bbce98..00000000000 --- a/pkg/client/record/OWNERS +++ /dev/null @@ -1,27 +0,0 @@ -reviewers: -- lavalamp -- smarterclayton -- wojtek-t -- deads2k -- derekwaynecarr -- caesarxuchao -- vishh -- mikedanese -- liggitt -- nikhiljindal -- erictune -- pmorie -- dchen1107 -- saad-ali -- luxas -- yifan-gu -- eparis -- mwielgus -- timothysc -- jsafrane -- dims -- krousey -- a-robinson -- aveshagarwal -- resouer -- cjcullen diff --git a/pkg/client/record/doc.go b/pkg/client/record/doc.go deleted file mode 100644 index 4c1fbaff390..00000000000 --- a/pkg/client/record/doc.go +++ /dev/null @@ -1,18 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package record has all client logic for recording and reporting events. -package record // import "k8s.io/kubernetes/pkg/client/record" diff --git a/pkg/client/record/event.go b/pkg/client/record/event.go deleted file mode 100644 index d3ece3f377b..00000000000 --- a/pkg/client/record/event.go +++ /dev/null @@ -1,316 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package record - -import ( - "fmt" - "math/rand" - "time" - - "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apimachinery/pkg/watch" - restclient "k8s.io/client-go/rest" - "k8s.io/client-go/util/clock" - "k8s.io/kubernetes/pkg/api/v1" - - "net/http" - - "github.com/golang/glog" -) - -const maxTriesPerEvent = 12 - -var defaultSleepDuration = 10 * time.Second - -const maxQueuedEvents = 1000 - -// EventSink knows how to store events (client.Client implements it.) -// EventSink must respect the namespace that will be embedded in 'event'. -// It is assumed that EventSink will return the same sorts of errors as -// pkg/client's REST client. -type EventSink interface { - Create(event *v1.Event) (*v1.Event, error) - Update(event *v1.Event) (*v1.Event, error) - Patch(oldEvent *v1.Event, data []byte) (*v1.Event, error) -} - -// EventRecorder knows how to record events on behalf of an EventSource. -type EventRecorder interface { - // Event constructs an event from the given information and puts it in the queue for sending. - // 'object' is the object this event is about. Event will make a reference-- or you may also - // pass a reference to the object directly. - // 'type' of this event, and can be one of Normal, Warning. New types could be added in future - // 'reason' is the reason this event is generated. 'reason' should be short and unique; it - // should be in UpperCamelCase format (starting with a capital letter). "reason" will be used - // to automate handling of events, so imagine people writing switch statements to handle them. - // You want to make that easy. - // 'message' is intended to be human readable. - // - // The resulting event will be created in the same namespace as the reference object. - Event(object runtime.Object, eventtype, reason, message string) - - // Eventf is just like Event, but with Sprintf for the message field. - Eventf(object runtime.Object, eventtype, reason, messageFmt string, args ...interface{}) - - // PastEventf is just like Eventf, but with an option to specify the event's 'timestamp' field. - PastEventf(object runtime.Object, timestamp metav1.Time, eventtype, reason, messageFmt string, args ...interface{}) -} - -// EventBroadcaster knows how to receive events and send them to any EventSink, watcher, or log. -type EventBroadcaster interface { - // StartEventWatcher starts sending events received from this EventBroadcaster to the given - // event handler function. The return value can be ignored or used to stop recording, if - // desired. - StartEventWatcher(eventHandler func(*v1.Event)) watch.Interface - - // StartRecordingToSink starts sending events received from this EventBroadcaster to the given - // sink. The return value can be ignored or used to stop recording, if desired. - StartRecordingToSink(sink EventSink) watch.Interface - - // StartLogging starts sending events received from this EventBroadcaster to the given logging - // function. The return value can be ignored or used to stop recording, if desired. - StartLogging(logf func(format string, args ...interface{})) watch.Interface - - // NewRecorder returns an EventRecorder that can be used to send events to this EventBroadcaster - // with the event source set to the given event source. - NewRecorder(source v1.EventSource) EventRecorder -} - -// Creates a new event broadcaster. -func NewBroadcaster() EventBroadcaster { - return &eventBroadcasterImpl{watch.NewBroadcaster(maxQueuedEvents, watch.DropIfChannelFull), defaultSleepDuration} -} - -func NewBroadcasterForTests(sleepDuration time.Duration) EventBroadcaster { - return &eventBroadcasterImpl{watch.NewBroadcaster(maxQueuedEvents, watch.DropIfChannelFull), sleepDuration} -} - -type eventBroadcasterImpl struct { - *watch.Broadcaster - sleepDuration time.Duration -} - -// StartRecordingToSink starts sending events received from the specified eventBroadcaster to the given sink. -// The return value can be ignored or used to stop recording, if desired. -// TODO: make me an object with parameterizable queue length and retry interval -func (eventBroadcaster *eventBroadcasterImpl) StartRecordingToSink(sink EventSink) watch.Interface { - // The default math/rand package functions aren't thread safe, so create a - // new Rand object for each StartRecording call. - randGen := rand.New(rand.NewSource(time.Now().UnixNano())) - eventCorrelator := NewEventCorrelator(clock.RealClock{}) - return eventBroadcaster.StartEventWatcher( - func(event *v1.Event) { - recordToSink(sink, event, eventCorrelator, randGen, eventBroadcaster.sleepDuration) - }) -} - -func recordToSink(sink EventSink, event *v1.Event, eventCorrelator *EventCorrelator, randGen *rand.Rand, sleepDuration time.Duration) { - // Make a copy before modification, because there could be multiple listeners. - // Events are safe to copy like this. - eventCopy := *event - event = &eventCopy - result, err := eventCorrelator.EventCorrelate(event) - if err != nil { - utilruntime.HandleError(err) - } - if result.Skip { - return - } - tries := 0 - for { - if recordEvent(sink, result.Event, result.Patch, result.Event.Count > 1, eventCorrelator) { - break - } - tries++ - if tries >= maxTriesPerEvent { - glog.Errorf("Unable to write event '%#v' (retry limit exceeded!)", event) - break - } - // Randomize the first sleep so that various clients won't all be - // synced up if the master goes down. - if tries == 1 { - time.Sleep(time.Duration(float64(sleepDuration) * randGen.Float64())) - } else { - time.Sleep(sleepDuration) - } - } -} - -func isKeyNotFoundError(err error) bool { - statusErr, _ := err.(*errors.StatusError) - - if statusErr != nil && statusErr.Status().Code == http.StatusNotFound { - return true - } - - return false -} - -// recordEvent attempts to write event to a sink. It returns true if the event -// was successfully recorded or discarded, false if it should be retried. -// If updateExistingEvent is false, it creates a new event, otherwise it updates -// existing event. -func recordEvent(sink EventSink, event *v1.Event, patch []byte, updateExistingEvent bool, eventCorrelator *EventCorrelator) bool { - var newEvent *v1.Event - var err error - if updateExistingEvent { - newEvent, err = sink.Patch(event, patch) - } - // Update can fail because the event may have been removed and it no longer exists. - if !updateExistingEvent || (updateExistingEvent && isKeyNotFoundError(err)) { - // Making sure that ResourceVersion is empty on creation - event.ResourceVersion = "" - newEvent, err = sink.Create(event) - } - if err == nil { - // we need to update our event correlator with the server returned state to handle name/resourceversion - eventCorrelator.UpdateState(newEvent) - return true - } - - // If we can't contact the server, then hold everything while we keep trying. - // Otherwise, something about the event is malformed and we should abandon it. - switch err.(type) { - case *restclient.RequestConstructionError: - // We will construct the request the same next time, so don't keep trying. - glog.Errorf("Unable to construct event '%#v': '%v' (will not retry!)", event, err) - return true - case *errors.StatusError: - if errors.IsAlreadyExists(err) { - glog.V(5).Infof("Server rejected event '%#v': '%v' (will not retry!)", event, err) - } else { - glog.Errorf("Server rejected event '%#v': '%v' (will not retry!)", event, err) - } - return true - case *errors.UnexpectedObjectError: - // We don't expect this; it implies the server's response didn't match a - // known pattern. Go ahead and retry. - default: - // This case includes actual http transport errors. Go ahead and retry. - } - glog.Errorf("Unable to write event: '%v' (may retry after sleeping)", err) - return false -} - -// StartLogging starts sending events received from this EventBroadcaster to the given logging function. -// The return value can be ignored or used to stop recording, if desired. -func (eventBroadcaster *eventBroadcasterImpl) StartLogging(logf func(format string, args ...interface{})) watch.Interface { - return eventBroadcaster.StartEventWatcher( - func(e *v1.Event) { - logf("Event(%#v): type: '%v' reason: '%v' %v", e.InvolvedObject, e.Type, e.Reason, e.Message) - }) -} - -// StartEventWatcher starts sending events received from this EventBroadcaster to the given event handler function. -// The return value can be ignored or used to stop recording, if desired. -func (eventBroadcaster *eventBroadcasterImpl) StartEventWatcher(eventHandler func(*v1.Event)) watch.Interface { - watcher := eventBroadcaster.Watch() - go func() { - defer utilruntime.HandleCrash() - for { - watchEvent, open := <-watcher.ResultChan() - if !open { - return - } - event, ok := watchEvent.Object.(*v1.Event) - if !ok { - // This is all local, so there's no reason this should - // ever happen. - continue - } - eventHandler(event) - } - }() - return watcher -} - -// NewRecorder returns an EventRecorder that records events with the given event source. -func (eventBroadcaster *eventBroadcasterImpl) NewRecorder(source v1.EventSource) EventRecorder { - return &recorderImpl{source, eventBroadcaster.Broadcaster, clock.RealClock{}} -} - -type recorderImpl struct { - source v1.EventSource - *watch.Broadcaster - clock clock.Clock -} - -func (recorder *recorderImpl) generateEvent(object runtime.Object, timestamp metav1.Time, eventtype, reason, message string) { - ref, err := v1.GetReference(object) - if err != nil { - glog.Errorf("Could not construct reference to: '%#v' due to: '%v'. Will not report event: '%v' '%v' '%v'", object, err, eventtype, reason, message) - return - } - - if !validateEventType(eventtype) { - glog.Errorf("Unsupported event type: '%v'", eventtype) - return - } - - event := recorder.makeEvent(ref, eventtype, reason, message) - event.Source = recorder.source - - go func() { - // NOTE: events should be a non-blocking operation - defer utilruntime.HandleCrash() - recorder.Action(watch.Added, event) - }() -} - -func validateEventType(eventtype string) bool { - switch eventtype { - case v1.EventTypeNormal, v1.EventTypeWarning: - return true - } - return false -} - -func (recorder *recorderImpl) Event(object runtime.Object, eventtype, reason, message string) { - recorder.generateEvent(object, metav1.Now(), eventtype, reason, message) -} - -func (recorder *recorderImpl) Eventf(object runtime.Object, eventtype, reason, messageFmt string, args ...interface{}) { - recorder.Event(object, eventtype, reason, fmt.Sprintf(messageFmt, args...)) -} - -func (recorder *recorderImpl) PastEventf(object runtime.Object, timestamp metav1.Time, eventtype, reason, messageFmt string, args ...interface{}) { - recorder.generateEvent(object, timestamp, eventtype, reason, fmt.Sprintf(messageFmt, args...)) -} - -func (recorder *recorderImpl) makeEvent(ref *v1.ObjectReference, eventtype, reason, message string) *v1.Event { - t := metav1.Time{Time: recorder.clock.Now()} - namespace := ref.Namespace - if namespace == "" { - namespace = metav1.NamespaceDefault - } - return &v1.Event{ - ObjectMeta: metav1.ObjectMeta{ - Name: fmt.Sprintf("%v.%x", ref.Name, t.UnixNano()), - Namespace: namespace, - }, - InvolvedObject: *ref, - Reason: reason, - Message: message, - FirstTimestamp: t, - LastTimestamp: t, - Count: 1, - Type: eventtype, - } -} diff --git a/pkg/client/record/event_test.go b/pkg/client/record/event_test.go deleted file mode 100644 index b7111c6b579..00000000000 --- a/pkg/client/record/event_test.go +++ /dev/null @@ -1,914 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package record - -import ( - "encoding/json" - "fmt" - "math/rand" - "net/http" - "strconv" - "testing" - "time" - - "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - k8sruntime "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/util/strategicpatch" - restclient "k8s.io/client-go/rest" - "k8s.io/client-go/util/clock" - _ "k8s.io/kubernetes/pkg/api/install" // To register api.Pod used in tests below - "k8s.io/kubernetes/pkg/api/v1" -) - -type testEventSink struct { - OnCreate func(e *v1.Event) (*v1.Event, error) - OnUpdate func(e *v1.Event) (*v1.Event, error) - OnPatch func(e *v1.Event, p []byte) (*v1.Event, error) -} - -// CreateEvent records the event for testing. -func (t *testEventSink) Create(e *v1.Event) (*v1.Event, error) { - if t.OnCreate != nil { - return t.OnCreate(e) - } - return e, nil -} - -// UpdateEvent records the event for testing. -func (t *testEventSink) Update(e *v1.Event) (*v1.Event, error) { - if t.OnUpdate != nil { - return t.OnUpdate(e) - } - return e, nil -} - -// PatchEvent records the event for testing. -func (t *testEventSink) Patch(e *v1.Event, p []byte) (*v1.Event, error) { - if t.OnPatch != nil { - return t.OnPatch(e, p) - } - return e, nil -} - -type OnCreateFunc func(*v1.Event) (*v1.Event, error) - -func OnCreateFactory(testCache map[string]*v1.Event, createEvent chan<- *v1.Event) OnCreateFunc { - return func(event *v1.Event) (*v1.Event, error) { - testCache[getEventKey(event)] = event - createEvent <- event - return event, nil - } -} - -type OnPatchFunc func(*v1.Event, []byte) (*v1.Event, error) - -func OnPatchFactory(testCache map[string]*v1.Event, patchEvent chan<- *v1.Event) OnPatchFunc { - return func(event *v1.Event, patch []byte) (*v1.Event, error) { - cachedEvent, found := testCache[getEventKey(event)] - if !found { - return nil, fmt.Errorf("unexpected error: couldn't find Event in testCache.") - } - originalData, err := json.Marshal(cachedEvent) - if err != nil { - return nil, fmt.Errorf("unexpected error: %v", err) - } - patched, err := strategicpatch.StrategicMergePatch(originalData, patch, event) - if err != nil { - return nil, fmt.Errorf("unexpected error: %v", err) - } - patchedObj := &v1.Event{} - err = json.Unmarshal(patched, patchedObj) - if err != nil { - return nil, fmt.Errorf("unexpected error: %v", err) - } - patchEvent <- patchedObj - return patchedObj, nil - } -} - -func TestEventf(t *testing.T) { - testPod := &v1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - SelfLink: "/api/version/pods/foo", - Name: "foo", - Namespace: "baz", - UID: "bar", - }, - } - testPod2 := &v1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - SelfLink: "/api/version/pods/foo", - Name: "foo", - Namespace: "baz", - UID: "differentUid", - }, - } - testRef, err := v1.GetPartialReference(testPod, "spec.containers[2]") - testRef2, err := v1.GetPartialReference(testPod2, "spec.containers[3]") - if err != nil { - t.Fatal(err) - } - table := []struct { - obj k8sruntime.Object - eventtype string - reason string - messageFmt string - elements []interface{} - expect *v1.Event - expectLog string - expectUpdate bool - }{ - { - obj: testRef, - eventtype: v1.EventTypeNormal, - reason: "Started", - messageFmt: "some verbose message: %v", - elements: []interface{}{1}, - expect: &v1.Event{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "baz", - }, - InvolvedObject: v1.ObjectReference{ - Kind: "Pod", - Name: "foo", - Namespace: "baz", - UID: "bar", - APIVersion: "version", - FieldPath: "spec.containers[2]", - }, - Reason: "Started", - Message: "some verbose message: 1", - Source: v1.EventSource{Component: "eventTest"}, - Count: 1, - Type: v1.EventTypeNormal, - }, - expectLog: `Event(v1.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"bar", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[2]"}): type: 'Normal' reason: 'Started' some verbose message: 1`, - expectUpdate: false, - }, - { - obj: testPod, - eventtype: v1.EventTypeNormal, - reason: "Killed", - messageFmt: "some other verbose message: %v", - elements: []interface{}{1}, - expect: &v1.Event{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "baz", - }, - InvolvedObject: v1.ObjectReference{ - Kind: "Pod", - Name: "foo", - Namespace: "baz", - UID: "bar", - APIVersion: "version", - }, - Reason: "Killed", - Message: "some other verbose message: 1", - Source: v1.EventSource{Component: "eventTest"}, - Count: 1, - Type: v1.EventTypeNormal, - }, - expectLog: `Event(v1.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"bar", APIVersion:"version", ResourceVersion:"", FieldPath:""}): type: 'Normal' reason: 'Killed' some other verbose message: 1`, - expectUpdate: false, - }, - { - obj: testRef, - eventtype: v1.EventTypeNormal, - reason: "Started", - messageFmt: "some verbose message: %v", - elements: []interface{}{1}, - expect: &v1.Event{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "baz", - }, - InvolvedObject: v1.ObjectReference{ - Kind: "Pod", - Name: "foo", - Namespace: "baz", - UID: "bar", - APIVersion: "version", - FieldPath: "spec.containers[2]", - }, - Reason: "Started", - Message: "some verbose message: 1", - Source: v1.EventSource{Component: "eventTest"}, - Count: 2, - Type: v1.EventTypeNormal, - }, - expectLog: `Event(v1.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"bar", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[2]"}): type: 'Normal' reason: 'Started' some verbose message: 1`, - expectUpdate: true, - }, - { - obj: testRef2, - eventtype: v1.EventTypeNormal, - reason: "Started", - messageFmt: "some verbose message: %v", - elements: []interface{}{1}, - expect: &v1.Event{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "baz", - }, - InvolvedObject: v1.ObjectReference{ - Kind: "Pod", - Name: "foo", - Namespace: "baz", - UID: "differentUid", - APIVersion: "version", - FieldPath: "spec.containers[3]", - }, - Reason: "Started", - Message: "some verbose message: 1", - Source: v1.EventSource{Component: "eventTest"}, - Count: 1, - Type: v1.EventTypeNormal, - }, - expectLog: `Event(v1.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"differentUid", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[3]"}): type: 'Normal' reason: 'Started' some verbose message: 1`, - expectUpdate: false, - }, - { - obj: testRef, - eventtype: v1.EventTypeNormal, - reason: "Started", - messageFmt: "some verbose message: %v", - elements: []interface{}{1}, - expect: &v1.Event{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "baz", - }, - InvolvedObject: v1.ObjectReference{ - Kind: "Pod", - Name: "foo", - Namespace: "baz", - UID: "bar", - APIVersion: "version", - FieldPath: "spec.containers[2]", - }, - Reason: "Started", - Message: "some verbose message: 1", - Source: v1.EventSource{Component: "eventTest"}, - Count: 3, - Type: v1.EventTypeNormal, - }, - expectLog: `Event(v1.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"bar", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[2]"}): type: 'Normal' reason: 'Started' some verbose message: 1`, - expectUpdate: true, - }, - { - obj: testRef2, - eventtype: v1.EventTypeNormal, - reason: "Stopped", - messageFmt: "some verbose message: %v", - elements: []interface{}{1}, - expect: &v1.Event{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "baz", - }, - InvolvedObject: v1.ObjectReference{ - Kind: "Pod", - Name: "foo", - Namespace: "baz", - UID: "differentUid", - APIVersion: "version", - FieldPath: "spec.containers[3]", - }, - Reason: "Stopped", - Message: "some verbose message: 1", - Source: v1.EventSource{Component: "eventTest"}, - Count: 1, - Type: v1.EventTypeNormal, - }, - expectLog: `Event(v1.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"differentUid", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[3]"}): type: 'Normal' reason: 'Stopped' some verbose message: 1`, - expectUpdate: false, - }, - { - obj: testRef2, - eventtype: v1.EventTypeNormal, - reason: "Stopped", - messageFmt: "some verbose message: %v", - elements: []interface{}{1}, - expect: &v1.Event{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "baz", - }, - InvolvedObject: v1.ObjectReference{ - Kind: "Pod", - Name: "foo", - Namespace: "baz", - UID: "differentUid", - APIVersion: "version", - FieldPath: "spec.containers[3]", - }, - Reason: "Stopped", - Message: "some verbose message: 1", - Source: v1.EventSource{Component: "eventTest"}, - Count: 2, - Type: v1.EventTypeNormal, - }, - expectLog: `Event(v1.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"differentUid", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[3]"}): type: 'Normal' reason: 'Stopped' some verbose message: 1`, - expectUpdate: true, - }, - } - - testCache := map[string]*v1.Event{} - logCalled := make(chan struct{}) - createEvent := make(chan *v1.Event) - updateEvent := make(chan *v1.Event) - patchEvent := make(chan *v1.Event) - testEvents := testEventSink{ - OnCreate: OnCreateFactory(testCache, createEvent), - OnUpdate: func(event *v1.Event) (*v1.Event, error) { - updateEvent <- event - return event, nil - }, - OnPatch: OnPatchFactory(testCache, patchEvent), - } - eventBroadcaster := NewBroadcasterForTests(0) - sinkWatcher := eventBroadcaster.StartRecordingToSink(&testEvents) - - clock := clock.NewFakeClock(time.Now()) - recorder := recorderWithFakeClock(v1.EventSource{Component: "eventTest"}, eventBroadcaster, clock) - for index, item := range table { - clock.Step(1 * time.Second) - logWatcher := eventBroadcaster.StartLogging(func(formatter string, args ...interface{}) { - if e, a := item.expectLog, fmt.Sprintf(formatter, args...); e != a { - t.Errorf("Expected '%v', got '%v'", e, a) - } - logCalled <- struct{}{} - }) - recorder.Eventf(item.obj, item.eventtype, item.reason, item.messageFmt, item.elements...) - - <-logCalled - - // validate event - if item.expectUpdate { - actualEvent := <-patchEvent - validateEvent(strconv.Itoa(index), actualEvent, item.expect, t) - } else { - actualEvent := <-createEvent - validateEvent(strconv.Itoa(index), actualEvent, item.expect, t) - } - logWatcher.Stop() - } - sinkWatcher.Stop() -} - -func recorderWithFakeClock(eventSource v1.EventSource, eventBroadcaster EventBroadcaster, clock clock.Clock) EventRecorder { - return &recorderImpl{eventSource, eventBroadcaster.(*eventBroadcasterImpl).Broadcaster, clock} -} - -func TestWriteEventError(t *testing.T) { - type entry struct { - timesToSendError int - attemptsWanted int - err error - } - table := map[string]*entry{ - "giveUp1": { - timesToSendError: 1000, - attemptsWanted: 1, - err: &restclient.RequestConstructionError{}, - }, - "giveUp2": { - timesToSendError: 1000, - attemptsWanted: 1, - err: &errors.StatusError{}, - }, - "retry1": { - timesToSendError: 1000, - attemptsWanted: 12, - err: &errors.UnexpectedObjectError{}, - }, - "retry2": { - timesToSendError: 1000, - attemptsWanted: 12, - err: fmt.Errorf("A weird error"), - }, - "succeedEventually": { - timesToSendError: 2, - attemptsWanted: 2, - err: fmt.Errorf("A weird error"), - }, - } - - eventCorrelator := NewEventCorrelator(clock.RealClock{}) - randGen := rand.New(rand.NewSource(time.Now().UnixNano())) - - for caseName, ent := range table { - attempts := 0 - sink := &testEventSink{ - OnCreate: func(event *v1.Event) (*v1.Event, error) { - attempts++ - if attempts < ent.timesToSendError { - return nil, ent.err - } - return event, nil - }, - } - ev := &v1.Event{} - recordToSink(sink, ev, eventCorrelator, randGen, 0) - if attempts != ent.attemptsWanted { - t.Errorf("case %v: wanted %d, got %d attempts", caseName, ent.attemptsWanted, attempts) - } - } -} - -func TestUpdateExpiredEvent(t *testing.T) { - eventCorrelator := NewEventCorrelator(clock.RealClock{}) - randGen := rand.New(rand.NewSource(time.Now().UnixNano())) - - var createdEvent *v1.Event - - sink := &testEventSink{ - OnPatch: func(*v1.Event, []byte) (*v1.Event, error) { - return nil, &errors.StatusError{ - ErrStatus: metav1.Status{ - Code: http.StatusNotFound, - Reason: metav1.StatusReasonNotFound, - }} - }, - OnCreate: func(event *v1.Event) (*v1.Event, error) { - createdEvent = event - return event, nil - }, - } - - ev := &v1.Event{} - ev.ResourceVersion = "updated-resource-version" - ev.Count = 2 - recordToSink(sink, ev, eventCorrelator, randGen, 0) - - if createdEvent == nil { - t.Error("Event did not get created after patch failed") - return - } - - if createdEvent.ResourceVersion != "" { - t.Errorf("Event did not have its resource version cleared, was %s", createdEvent.ResourceVersion) - } -} - -func TestLotsOfEvents(t *testing.T) { - recorderCalled := make(chan struct{}) - loggerCalled := make(chan struct{}) - - // Fail each event a few times to ensure there's some load on the tested code. - var counts [1000]int - testEvents := testEventSink{ - OnCreate: func(event *v1.Event) (*v1.Event, error) { - num, err := strconv.Atoi(event.Message) - if err != nil { - t.Error(err) - return event, nil - } - counts[num]++ - if counts[num] < 5 { - return nil, fmt.Errorf("fake error") - } - recorderCalled <- struct{}{} - return event, nil - }, - } - - eventBroadcaster := NewBroadcasterForTests(0) - sinkWatcher := eventBroadcaster.StartRecordingToSink(&testEvents) - logWatcher := eventBroadcaster.StartLogging(func(formatter string, args ...interface{}) { - loggerCalled <- struct{}{} - }) - recorder := eventBroadcaster.NewRecorder(v1.EventSource{Component: "eventTest"}) - ref := &v1.ObjectReference{ - Kind: "Pod", - Name: "foo", - Namespace: "baz", - UID: "bar", - APIVersion: "version", - } - for i := 0; i < maxQueuedEvents; i++ { - // we need to vary the reason to prevent aggregation - go recorder.Eventf(ref, v1.EventTypeNormal, "Reason-"+string(i), strconv.Itoa(i)) - } - // Make sure no events were dropped by either of the listeners. - for i := 0; i < maxQueuedEvents; i++ { - <-recorderCalled - <-loggerCalled - } - // Make sure that every event was attempted 5 times - for i := 0; i < maxQueuedEvents; i++ { - if counts[i] < 5 { - t.Errorf("Only attempted to record event '%d' %d times.", i, counts[i]) - } - } - sinkWatcher.Stop() - logWatcher.Stop() -} - -func TestEventfNoNamespace(t *testing.T) { - testPod := &v1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - SelfLink: "/api/version/pods/foo", - Name: "foo", - UID: "bar", - }, - } - testRef, err := v1.GetPartialReference(testPod, "spec.containers[2]") - if err != nil { - t.Fatal(err) - } - table := []struct { - obj k8sruntime.Object - eventtype string - reason string - messageFmt string - elements []interface{} - expect *v1.Event - expectLog string - expectUpdate bool - }{ - { - obj: testRef, - eventtype: v1.EventTypeNormal, - reason: "Started", - messageFmt: "some verbose message: %v", - elements: []interface{}{1}, - expect: &v1.Event{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "default", - }, - InvolvedObject: v1.ObjectReference{ - Kind: "Pod", - Name: "foo", - Namespace: "", - UID: "bar", - APIVersion: "version", - FieldPath: "spec.containers[2]", - }, - Reason: "Started", - Message: "some verbose message: 1", - Source: v1.EventSource{Component: "eventTest"}, - Count: 1, - Type: v1.EventTypeNormal, - }, - expectLog: `Event(v1.ObjectReference{Kind:"Pod", Namespace:"", Name:"foo", UID:"bar", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[2]"}): type: 'Normal' reason: 'Started' some verbose message: 1`, - expectUpdate: false, - }, - } - - testCache := map[string]*v1.Event{} - logCalled := make(chan struct{}) - createEvent := make(chan *v1.Event) - updateEvent := make(chan *v1.Event) - patchEvent := make(chan *v1.Event) - testEvents := testEventSink{ - OnCreate: OnCreateFactory(testCache, createEvent), - OnUpdate: func(event *v1.Event) (*v1.Event, error) { - updateEvent <- event - return event, nil - }, - OnPatch: OnPatchFactory(testCache, patchEvent), - } - eventBroadcaster := NewBroadcasterForTests(0) - sinkWatcher := eventBroadcaster.StartRecordingToSink(&testEvents) - - clock := clock.NewFakeClock(time.Now()) - recorder := recorderWithFakeClock(v1.EventSource{Component: "eventTest"}, eventBroadcaster, clock) - - for index, item := range table { - clock.Step(1 * time.Second) - logWatcher := eventBroadcaster.StartLogging(func(formatter string, args ...interface{}) { - if e, a := item.expectLog, fmt.Sprintf(formatter, args...); e != a { - t.Errorf("Expected '%v', got '%v'", e, a) - } - logCalled <- struct{}{} - }) - recorder.Eventf(item.obj, item.eventtype, item.reason, item.messageFmt, item.elements...) - - <-logCalled - - // validate event - if item.expectUpdate { - actualEvent := <-patchEvent - validateEvent(strconv.Itoa(index), actualEvent, item.expect, t) - } else { - actualEvent := <-createEvent - validateEvent(strconv.Itoa(index), actualEvent, item.expect, t) - } - - logWatcher.Stop() - } - sinkWatcher.Stop() -} - -func TestMultiSinkCache(t *testing.T) { - testPod := &v1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - SelfLink: "/api/version/pods/foo", - Name: "foo", - Namespace: "baz", - UID: "bar", - }, - } - testPod2 := &v1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - SelfLink: "/api/version/pods/foo", - Name: "foo", - Namespace: "baz", - UID: "differentUid", - }, - } - testRef, err := v1.GetPartialReference(testPod, "spec.containers[2]") - testRef2, err := v1.GetPartialReference(testPod2, "spec.containers[3]") - if err != nil { - t.Fatal(err) - } - table := []struct { - obj k8sruntime.Object - eventtype string - reason string - messageFmt string - elements []interface{} - expect *v1.Event - expectLog string - expectUpdate bool - }{ - { - obj: testRef, - eventtype: v1.EventTypeNormal, - reason: "Started", - messageFmt: "some verbose message: %v", - elements: []interface{}{1}, - expect: &v1.Event{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "baz", - }, - InvolvedObject: v1.ObjectReference{ - Kind: "Pod", - Name: "foo", - Namespace: "baz", - UID: "bar", - APIVersion: "version", - FieldPath: "spec.containers[2]", - }, - Reason: "Started", - Message: "some verbose message: 1", - Source: v1.EventSource{Component: "eventTest"}, - Count: 1, - Type: v1.EventTypeNormal, - }, - expectLog: `Event(v1.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"bar", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[2]"}): type: 'Normal' reason: 'Started' some verbose message: 1`, - expectUpdate: false, - }, - { - obj: testPod, - eventtype: v1.EventTypeNormal, - reason: "Killed", - messageFmt: "some other verbose message: %v", - elements: []interface{}{1}, - expect: &v1.Event{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "baz", - }, - InvolvedObject: v1.ObjectReference{ - Kind: "Pod", - Name: "foo", - Namespace: "baz", - UID: "bar", - APIVersion: "version", - }, - Reason: "Killed", - Message: "some other verbose message: 1", - Source: v1.EventSource{Component: "eventTest"}, - Count: 1, - Type: v1.EventTypeNormal, - }, - expectLog: `Event(v1.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"bar", APIVersion:"version", ResourceVersion:"", FieldPath:""}): type: 'Normal' reason: 'Killed' some other verbose message: 1`, - expectUpdate: false, - }, - { - obj: testRef, - eventtype: v1.EventTypeNormal, - reason: "Started", - messageFmt: "some verbose message: %v", - elements: []interface{}{1}, - expect: &v1.Event{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "baz", - }, - InvolvedObject: v1.ObjectReference{ - Kind: "Pod", - Name: "foo", - Namespace: "baz", - UID: "bar", - APIVersion: "version", - FieldPath: "spec.containers[2]", - }, - Reason: "Started", - Message: "some verbose message: 1", - Source: v1.EventSource{Component: "eventTest"}, - Count: 2, - Type: v1.EventTypeNormal, - }, - expectLog: `Event(v1.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"bar", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[2]"}): type: 'Normal' reason: 'Started' some verbose message: 1`, - expectUpdate: true, - }, - { - obj: testRef2, - eventtype: v1.EventTypeNormal, - reason: "Started", - messageFmt: "some verbose message: %v", - elements: []interface{}{1}, - expect: &v1.Event{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "baz", - }, - InvolvedObject: v1.ObjectReference{ - Kind: "Pod", - Name: "foo", - Namespace: "baz", - UID: "differentUid", - APIVersion: "version", - FieldPath: "spec.containers[3]", - }, - Reason: "Started", - Message: "some verbose message: 1", - Source: v1.EventSource{Component: "eventTest"}, - Count: 1, - Type: v1.EventTypeNormal, - }, - expectLog: `Event(v1.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"differentUid", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[3]"}): type: 'Normal' reason: 'Started' some verbose message: 1`, - expectUpdate: false, - }, - { - obj: testRef, - eventtype: v1.EventTypeNormal, - reason: "Started", - messageFmt: "some verbose message: %v", - elements: []interface{}{1}, - expect: &v1.Event{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "baz", - }, - InvolvedObject: v1.ObjectReference{ - Kind: "Pod", - Name: "foo", - Namespace: "baz", - UID: "bar", - APIVersion: "version", - FieldPath: "spec.containers[2]", - }, - Reason: "Started", - Message: "some verbose message: 1", - Source: v1.EventSource{Component: "eventTest"}, - Count: 3, - Type: v1.EventTypeNormal, - }, - expectLog: `Event(v1.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"bar", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[2]"}): type: 'Normal' reason: 'Started' some verbose message: 1`, - expectUpdate: true, - }, - { - obj: testRef2, - eventtype: v1.EventTypeNormal, - reason: "Stopped", - messageFmt: "some verbose message: %v", - elements: []interface{}{1}, - expect: &v1.Event{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "baz", - }, - InvolvedObject: v1.ObjectReference{ - Kind: "Pod", - Name: "foo", - Namespace: "baz", - UID: "differentUid", - APIVersion: "version", - FieldPath: "spec.containers[3]", - }, - Reason: "Stopped", - Message: "some verbose message: 1", - Source: v1.EventSource{Component: "eventTest"}, - Count: 1, - Type: v1.EventTypeNormal, - }, - expectLog: `Event(v1.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"differentUid", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[3]"}): type: 'Normal' reason: 'Stopped' some verbose message: 1`, - expectUpdate: false, - }, - { - obj: testRef2, - eventtype: v1.EventTypeNormal, - reason: "Stopped", - messageFmt: "some verbose message: %v", - elements: []interface{}{1}, - expect: &v1.Event{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "baz", - }, - InvolvedObject: v1.ObjectReference{ - Kind: "Pod", - Name: "foo", - Namespace: "baz", - UID: "differentUid", - APIVersion: "version", - FieldPath: "spec.containers[3]", - }, - Reason: "Stopped", - Message: "some verbose message: 1", - Source: v1.EventSource{Component: "eventTest"}, - Count: 2, - Type: v1.EventTypeNormal, - }, - expectLog: `Event(v1.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"differentUid", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[3]"}): type: 'Normal' reason: 'Stopped' some verbose message: 1`, - expectUpdate: true, - }, - } - - testCache := map[string]*v1.Event{} - createEvent := make(chan *v1.Event) - updateEvent := make(chan *v1.Event) - patchEvent := make(chan *v1.Event) - testEvents := testEventSink{ - OnCreate: OnCreateFactory(testCache, createEvent), - OnUpdate: func(event *v1.Event) (*v1.Event, error) { - updateEvent <- event - return event, nil - }, - OnPatch: OnPatchFactory(testCache, patchEvent), - } - - testCache2 := map[string]*v1.Event{} - createEvent2 := make(chan *v1.Event) - updateEvent2 := make(chan *v1.Event) - patchEvent2 := make(chan *v1.Event) - testEvents2 := testEventSink{ - OnCreate: OnCreateFactory(testCache2, createEvent2), - OnUpdate: func(event *v1.Event) (*v1.Event, error) { - updateEvent2 <- event - return event, nil - }, - OnPatch: OnPatchFactory(testCache2, patchEvent2), - } - - eventBroadcaster := NewBroadcasterForTests(0) - clock := clock.NewFakeClock(time.Now()) - recorder := recorderWithFakeClock(v1.EventSource{Component: "eventTest"}, eventBroadcaster, clock) - - sinkWatcher := eventBroadcaster.StartRecordingToSink(&testEvents) - for index, item := range table { - clock.Step(1 * time.Second) - recorder.Eventf(item.obj, item.eventtype, item.reason, item.messageFmt, item.elements...) - - // validate event - if item.expectUpdate { - actualEvent := <-patchEvent - validateEvent(strconv.Itoa(index), actualEvent, item.expect, t) - } else { - actualEvent := <-createEvent - validateEvent(strconv.Itoa(index), actualEvent, item.expect, t) - } - } - - // Another StartRecordingToSink call should start to record events with new clean cache. - sinkWatcher2 := eventBroadcaster.StartRecordingToSink(&testEvents2) - for index, item := range table { - clock.Step(1 * time.Second) - recorder.Eventf(item.obj, item.eventtype, item.reason, item.messageFmt, item.elements...) - - // validate event - if item.expectUpdate { - actualEvent := <-patchEvent2 - validateEvent(strconv.Itoa(index), actualEvent, item.expect, t) - } else { - actualEvent := <-createEvent2 - validateEvent(strconv.Itoa(index), actualEvent, item.expect, t) - } - } - - sinkWatcher.Stop() - sinkWatcher2.Stop() -} diff --git a/pkg/client/record/events_cache.go b/pkg/client/record/events_cache.go deleted file mode 100644 index 468a7f473fe..00000000000 --- a/pkg/client/record/events_cache.go +++ /dev/null @@ -1,360 +0,0 @@ -/* -Copyright 2015 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package record - -import ( - "encoding/json" - "fmt" - "strings" - "sync" - "time" - - "github.com/golang/groupcache/lru" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apimachinery/pkg/util/strategicpatch" - "k8s.io/client-go/util/clock" - "k8s.io/kubernetes/pkg/api/v1" -) - -const ( - maxLruCacheEntries = 4096 - - // if we see the same event that varies only by message - // more than 10 times in a 10 minute period, aggregate the event - defaultAggregateMaxEvents = 10 - defaultAggregateIntervalInSeconds = 600 -) - -// getEventKey builds unique event key based on source, involvedObject, reason, message -func getEventKey(event *v1.Event) string { - return strings.Join([]string{ - event.Source.Component, - event.Source.Host, - event.InvolvedObject.Kind, - event.InvolvedObject.Namespace, - event.InvolvedObject.Name, - string(event.InvolvedObject.UID), - event.InvolvedObject.APIVersion, - event.Type, - event.Reason, - event.Message, - }, - "") -} - -// EventFilterFunc is a function that returns true if the event should be skipped -type EventFilterFunc func(event *v1.Event) bool - -// DefaultEventFilterFunc returns false for all incoming events -func DefaultEventFilterFunc(event *v1.Event) bool { - return false -} - -// EventAggregatorKeyFunc is responsible for grouping events for aggregation -// It returns a tuple of the following: -// aggregateKey - key the identifies the aggregate group to bucket this event -// localKey - key that makes this event in the local group -type EventAggregatorKeyFunc func(event *v1.Event) (aggregateKey string, localKey string) - -// EventAggregatorByReasonFunc aggregates events by exact match on event.Source, event.InvolvedObject, event.Type and event.Reason -func EventAggregatorByReasonFunc(event *v1.Event) (string, string) { - return strings.Join([]string{ - event.Source.Component, - event.Source.Host, - event.InvolvedObject.Kind, - event.InvolvedObject.Namespace, - event.InvolvedObject.Name, - string(event.InvolvedObject.UID), - event.InvolvedObject.APIVersion, - event.Type, - event.Reason, - }, - ""), event.Message -} - -// EventAggregatorMessageFunc is responsible for producing an aggregation message -type EventAggregatorMessageFunc func(event *v1.Event) string - -// EventAggregratorByReasonMessageFunc returns an aggregate message by prefixing the incoming message -func EventAggregatorByReasonMessageFunc(event *v1.Event) string { - return "(events with common reason combined)" -} - -// EventAggregator identifies similar events and aggregates them into a single event -type EventAggregator struct { - sync.RWMutex - - // The cache that manages aggregation state - cache *lru.Cache - - // The function that groups events for aggregation - keyFunc EventAggregatorKeyFunc - - // The function that generates a message for an aggregate event - messageFunc EventAggregatorMessageFunc - - // The maximum number of events in the specified interval before aggregation occurs - maxEvents int - - // The amount of time in seconds that must transpire since the last occurrence of a similar event before it's considered new - maxIntervalInSeconds int - - // clock is used to allow for testing over a time interval - clock clock.Clock -} - -// NewEventAggregator returns a new instance of an EventAggregator -func NewEventAggregator(lruCacheSize int, keyFunc EventAggregatorKeyFunc, messageFunc EventAggregatorMessageFunc, - maxEvents int, maxIntervalInSeconds int, clock clock.Clock) *EventAggregator { - return &EventAggregator{ - cache: lru.New(lruCacheSize), - keyFunc: keyFunc, - messageFunc: messageFunc, - maxEvents: maxEvents, - maxIntervalInSeconds: maxIntervalInSeconds, - clock: clock, - } -} - -// aggregateRecord holds data used to perform aggregation decisions -type aggregateRecord struct { - // we track the number of unique local keys we have seen in the aggregate set to know when to actually aggregate - // if the size of this set exceeds the max, we know we need to aggregate - localKeys sets.String - // The last time at which the aggregate was recorded - lastTimestamp metav1.Time -} - -// EventAggregate identifies similar events and groups into a common event if required -func (e *EventAggregator) EventAggregate(newEvent *v1.Event) (*v1.Event, error) { - aggregateKey, localKey := e.keyFunc(newEvent) - now := metav1.NewTime(e.clock.Now()) - record := aggregateRecord{localKeys: sets.NewString(), lastTimestamp: now} - e.Lock() - defer e.Unlock() - value, found := e.cache.Get(aggregateKey) - if found { - record = value.(aggregateRecord) - } - - // if the last event was far enough in the past, it is not aggregated, and we must reset state - maxInterval := time.Duration(e.maxIntervalInSeconds) * time.Second - interval := now.Time.Sub(record.lastTimestamp.Time) - if interval > maxInterval { - record = aggregateRecord{localKeys: sets.NewString()} - } - record.localKeys.Insert(localKey) - record.lastTimestamp = now - e.cache.Add(aggregateKey, record) - - if record.localKeys.Len() < e.maxEvents { - return newEvent, nil - } - - // do not grow our local key set any larger than max - record.localKeys.PopAny() - - // create a new aggregate event - eventCopy := &v1.Event{ - ObjectMeta: metav1.ObjectMeta{ - Name: fmt.Sprintf("%v.%x", newEvent.InvolvedObject.Name, now.UnixNano()), - Namespace: newEvent.Namespace, - }, - Count: 1, - FirstTimestamp: now, - InvolvedObject: newEvent.InvolvedObject, - LastTimestamp: now, - Message: e.messageFunc(newEvent), - Type: newEvent.Type, - Reason: newEvent.Reason, - Source: newEvent.Source, - } - return eventCopy, nil -} - -// eventLog records data about when an event was observed -type eventLog struct { - // The number of times the event has occurred since first occurrence. - count int - - // The time at which the event was first recorded. - firstTimestamp metav1.Time - - // The unique name of the first occurrence of this event - name string - - // Resource version returned from previous interaction with server - resourceVersion string -} - -// eventLogger logs occurrences of an event -type eventLogger struct { - sync.RWMutex - cache *lru.Cache - clock clock.Clock -} - -// newEventLogger observes events and counts their frequencies -func newEventLogger(lruCacheEntries int, clock clock.Clock) *eventLogger { - return &eventLogger{cache: lru.New(lruCacheEntries), clock: clock} -} - -// eventObserve records the event, and determines if its frequency should update -func (e *eventLogger) eventObserve(newEvent *v1.Event) (*v1.Event, []byte, error) { - var ( - patch []byte - err error - ) - key := getEventKey(newEvent) - eventCopy := *newEvent - event := &eventCopy - - e.Lock() - defer e.Unlock() - - lastObservation := e.lastEventObservationFromCache(key) - - // we have seen this event before, so we must prepare a patch - if lastObservation.count > 0 { - // update the event based on the last observation so patch will work as desired - event.Name = lastObservation.name - event.ResourceVersion = lastObservation.resourceVersion - event.FirstTimestamp = lastObservation.firstTimestamp - event.Count = int32(lastObservation.count) + 1 - - eventCopy2 := *event - eventCopy2.Count = 0 - eventCopy2.LastTimestamp = metav1.NewTime(time.Unix(0, 0)) - - newData, _ := json.Marshal(event) - oldData, _ := json.Marshal(eventCopy2) - patch, err = strategicpatch.CreateTwoWayMergePatch(oldData, newData, event) - } - - // record our new observation - e.cache.Add( - key, - eventLog{ - count: int(event.Count), - firstTimestamp: event.FirstTimestamp, - name: event.Name, - resourceVersion: event.ResourceVersion, - }, - ) - return event, patch, err -} - -// updateState updates its internal tracking information based on latest server state -func (e *eventLogger) updateState(event *v1.Event) { - key := getEventKey(event) - e.Lock() - defer e.Unlock() - // record our new observation - e.cache.Add( - key, - eventLog{ - count: int(event.Count), - firstTimestamp: event.FirstTimestamp, - name: event.Name, - resourceVersion: event.ResourceVersion, - }, - ) -} - -// lastEventObservationFromCache returns the event from the cache, reads must be protected via external lock -func (e *eventLogger) lastEventObservationFromCache(key string) eventLog { - value, ok := e.cache.Get(key) - if ok { - observationValue, ok := value.(eventLog) - if ok { - return observationValue - } - } - return eventLog{} -} - -// EventCorrelator processes all incoming events and performs analysis to avoid overwhelming the system. It can filter all -// incoming events to see if the event should be filtered from further processing. It can aggregate similar events that occur -// frequently to protect the system from spamming events that are difficult for users to distinguish. It performs de-duplication -// to ensure events that are observed multiple times are compacted into a single event with increasing counts. -type EventCorrelator struct { - // the function to filter the event - filterFunc EventFilterFunc - // the object that performs event aggregation - aggregator *EventAggregator - // the object that observes events as they come through - logger *eventLogger -} - -// EventCorrelateResult is the result of a Correlate -type EventCorrelateResult struct { - // the event after correlation - Event *v1.Event - // if provided, perform a strategic patch when updating the record on the server - Patch []byte - // if true, do no further processing of the event - Skip bool -} - -// NewEventCorrelator returns an EventCorrelator configured with default values. -// -// The EventCorrelator is responsible for event filtering, aggregating, and counting -// prior to interacting with the API server to record the event. -// -// The default behavior is as follows: -// * No events are filtered from being recorded -// * Aggregation is performed if a similar event is recorded 10 times in a -// in a 10 minute rolling interval. A similar event is an event that varies only by -// the Event.Message field. Rather than recording the precise event, aggregation -// will create a new event whose message reports that it has combined events with -// the same reason. -// * Events are incrementally counted if the exact same event is encountered multiple -// times. -func NewEventCorrelator(clock clock.Clock) *EventCorrelator { - cacheSize := maxLruCacheEntries - return &EventCorrelator{ - filterFunc: DefaultEventFilterFunc, - aggregator: NewEventAggregator( - cacheSize, - EventAggregatorByReasonFunc, - EventAggregatorByReasonMessageFunc, - defaultAggregateMaxEvents, - defaultAggregateIntervalInSeconds, - clock), - logger: newEventLogger(cacheSize, clock), - } -} - -// EventCorrelate filters, aggregates, counts, and de-duplicates all incoming events -func (c *EventCorrelator) EventCorrelate(newEvent *v1.Event) (*EventCorrelateResult, error) { - if c.filterFunc(newEvent) { - return &EventCorrelateResult{Skip: true}, nil - } - aggregateEvent, err := c.aggregator.EventAggregate(newEvent) - if err != nil { - return &EventCorrelateResult{}, err - } - observedEvent, patch, err := c.logger.eventObserve(aggregateEvent) - return &EventCorrelateResult{Event: observedEvent, Patch: patch}, err -} - -// UpdateState based on the latest observed state from server -func (c *EventCorrelator) UpdateState(event *v1.Event) { - c.logger.updateState(event) -} diff --git a/pkg/client/record/events_cache_test.go b/pkg/client/record/events_cache_test.go deleted file mode 100644 index 0ccc18745a0..00000000000 --- a/pkg/client/record/events_cache_test.go +++ /dev/null @@ -1,254 +0,0 @@ -/* -Copyright 2015 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package record - -import ( - "reflect" - "strings" - "testing" - "time" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/diff" - "k8s.io/client-go/util/clock" - "k8s.io/kubernetes/pkg/api/v1" -) - -func makeObjectReference(kind, name, namespace string) v1.ObjectReference { - return v1.ObjectReference{ - Kind: kind, - Name: name, - Namespace: namespace, - UID: "C934D34AFB20242", - APIVersion: "version", - } -} - -func makeEvent(reason, message string, involvedObject v1.ObjectReference) v1.Event { - eventTime := metav1.Now() - event := v1.Event{ - Reason: reason, - Message: message, - InvolvedObject: involvedObject, - Source: v1.EventSource{ - Component: "kubelet", - Host: "kublet.node1", - }, - Count: 1, - FirstTimestamp: eventTime, - LastTimestamp: eventTime, - Type: v1.EventTypeNormal, - } - return event -} - -func makeEvents(num int, template v1.Event) []v1.Event { - events := []v1.Event{} - for i := 0; i < num; i++ { - events = append(events, template) - } - return events -} - -func makeUniqueEvents(num int) []v1.Event { - events := []v1.Event{} - kind := "Pod" - for i := 0; i < num; i++ { - reason := strings.Join([]string{"reason", string(i)}, "-") - message := strings.Join([]string{"message", string(i)}, "-") - name := strings.Join([]string{"pod", string(i)}, "-") - namespace := strings.Join([]string{"ns", string(i)}, "-") - involvedObject := makeObjectReference(kind, name, namespace) - events = append(events, makeEvent(reason, message, involvedObject)) - } - return events -} - -func makeSimilarEvents(num int, template v1.Event, messagePrefix string) []v1.Event { - events := makeEvents(num, template) - for i := range events { - events[i].Message = strings.Join([]string{messagePrefix, string(i), events[i].Message}, "-") - } - return events -} - -func setCount(event v1.Event, count int) v1.Event { - event.Count = int32(count) - return event -} - -func validateEvent(messagePrefix string, actualEvent *v1.Event, expectedEvent *v1.Event, t *testing.T) (*v1.Event, error) { - recvEvent := *actualEvent - expectCompression := expectedEvent.Count > 1 - t.Logf("%v - expectedEvent.Count is %d\n", messagePrefix, expectedEvent.Count) - // Just check that the timestamp was set. - if recvEvent.FirstTimestamp.IsZero() || recvEvent.LastTimestamp.IsZero() { - t.Errorf("%v - timestamp wasn't set: %#v", messagePrefix, recvEvent) - } - actualFirstTimestamp := recvEvent.FirstTimestamp - actualLastTimestamp := recvEvent.LastTimestamp - if actualFirstTimestamp.Equal(actualLastTimestamp) { - if expectCompression { - t.Errorf("%v - FirstTimestamp (%q) and LastTimestamp (%q) must be different to indicate event compression happened, but were the same. Actual Event: %#v", messagePrefix, actualFirstTimestamp, actualLastTimestamp, recvEvent) - } - } else { - if expectedEvent.Count == 1 { - t.Errorf("%v - FirstTimestamp (%q) and LastTimestamp (%q) must be equal to indicate only one occurrence of the event, but were different. Actual Event: %#v", messagePrefix, actualFirstTimestamp, actualLastTimestamp, recvEvent) - } - } - // Temp clear time stamps for comparison because actual values don't matter for comparison - recvEvent.FirstTimestamp = expectedEvent.FirstTimestamp - recvEvent.LastTimestamp = expectedEvent.LastTimestamp - // Check that name has the right prefix. - if n, en := recvEvent.Name, expectedEvent.Name; !strings.HasPrefix(n, en) { - t.Errorf("%v - Name '%v' does not contain prefix '%v'", messagePrefix, n, en) - } - recvEvent.Name = expectedEvent.Name - if e, a := expectedEvent, &recvEvent; !reflect.DeepEqual(e, a) { - t.Errorf("%v - diff: %s", messagePrefix, diff.ObjectGoPrintDiff(e, a)) - } - recvEvent.FirstTimestamp = actualFirstTimestamp - recvEvent.LastTimestamp = actualLastTimestamp - return actualEvent, nil -} - -// TestDefaultEventFilterFunc ensures that no events are filtered -func TestDefaultEventFilterFunc(t *testing.T) { - event := makeEvent("end-of-world", "it was fun", makeObjectReference("Pod", "pod1", "other")) - if DefaultEventFilterFunc(&event) { - t.Fatalf("DefaultEventFilterFunc should always return false") - } -} - -// TestEventAggregatorByReasonFunc ensures that two events are aggregated if they vary only by event.message -func TestEventAggregatorByReasonFunc(t *testing.T) { - event1 := makeEvent("end-of-world", "it was fun", makeObjectReference("Pod", "pod1", "other")) - event2 := makeEvent("end-of-world", "it was awful", makeObjectReference("Pod", "pod1", "other")) - event3 := makeEvent("nevermind", "it was a bug", makeObjectReference("Pod", "pod1", "other")) - - aggKey1, localKey1 := EventAggregatorByReasonFunc(&event1) - aggKey2, localKey2 := EventAggregatorByReasonFunc(&event2) - aggKey3, _ := EventAggregatorByReasonFunc(&event3) - - if aggKey1 != aggKey2 { - t.Errorf("Expected %v equal %v", aggKey1, aggKey2) - } - if localKey1 == localKey2 { - t.Errorf("Expected %v to not equal %v", aggKey1, aggKey3) - } - if aggKey1 == aggKey3 { - t.Errorf("Expected %v to not equal %v", aggKey1, aggKey3) - } -} - -// TestEventAggregatorByReasonMessageFunc validates the proper output for an aggregate message -func TestEventAggregatorByReasonMessageFunc(t *testing.T) { - expected := "(events with common reason combined)" - event1 := makeEvent("end-of-world", "it was fun", makeObjectReference("Pod", "pod1", "other")) - if actual := EventAggregatorByReasonMessageFunc(&event1); expected != actual { - t.Errorf("Expected %v got %v", expected, actual) - } -} - -// TestEventCorrelator validates proper counting, aggregation of events -func TestEventCorrelator(t *testing.T) { - firstEvent := makeEvent("first", "i am first", makeObjectReference("Pod", "my-pod", "my-ns")) - duplicateEvent := makeEvent("duplicate", "me again", makeObjectReference("Pod", "my-pod", "my-ns")) - uniqueEvent := makeEvent("unique", "snowflake", makeObjectReference("Pod", "my-pod", "my-ns")) - similarEvent := makeEvent("similar", "similar message", makeObjectReference("Pod", "my-pod", "my-ns")) - aggregateEvent := makeEvent(similarEvent.Reason, EventAggregatorByReasonMessageFunc(&similarEvent), similarEvent.InvolvedObject) - scenario := map[string]struct { - previousEvents []v1.Event - newEvent v1.Event - expectedEvent v1.Event - intervalSeconds int - }{ - "create-a-single-event": { - previousEvents: []v1.Event{}, - newEvent: firstEvent, - expectedEvent: setCount(firstEvent, 1), - intervalSeconds: 5, - }, - "the-same-event-should-just-count": { - previousEvents: makeEvents(1, duplicateEvent), - newEvent: duplicateEvent, - expectedEvent: setCount(duplicateEvent, 2), - intervalSeconds: 5, - }, - "the-same-event-should-just-count-even-if-more-than-aggregate": { - previousEvents: makeEvents(defaultAggregateMaxEvents, duplicateEvent), - newEvent: duplicateEvent, - expectedEvent: setCount(duplicateEvent, defaultAggregateMaxEvents+1), - intervalSeconds: 5, - }, - "create-many-unique-events": { - previousEvents: makeUniqueEvents(30), - newEvent: uniqueEvent, - expectedEvent: setCount(uniqueEvent, 1), - intervalSeconds: 5, - }, - "similar-events-should-aggregate-event": { - previousEvents: makeSimilarEvents(defaultAggregateMaxEvents-1, similarEvent, similarEvent.Message), - newEvent: similarEvent, - expectedEvent: setCount(aggregateEvent, 1), - intervalSeconds: 5, - }, - "similar-events-many-times-should-count-the-aggregate": { - previousEvents: makeSimilarEvents(defaultAggregateMaxEvents, similarEvent, similarEvent.Message), - newEvent: similarEvent, - expectedEvent: setCount(aggregateEvent, 2), - intervalSeconds: 5, - }, - "similar-events-whose-interval-is-greater-than-aggregate-interval-do-not-aggregate": { - previousEvents: makeSimilarEvents(defaultAggregateMaxEvents-1, similarEvent, similarEvent.Message), - newEvent: similarEvent, - expectedEvent: setCount(similarEvent, 1), - intervalSeconds: defaultAggregateIntervalInSeconds, - }, - } - - for testScenario, testInput := range scenario { - eventInterval := time.Duration(testInput.intervalSeconds) * time.Second - clock := clock.IntervalClock{Time: time.Now(), Duration: eventInterval} - correlator := NewEventCorrelator(&clock) - for i := range testInput.previousEvents { - event := testInput.previousEvents[i] - now := metav1.NewTime(clock.Now()) - event.FirstTimestamp = now - event.LastTimestamp = now - result, err := correlator.EventCorrelate(&event) - if err != nil { - t.Errorf("scenario %v: unexpected error playing back prevEvents %v", testScenario, err) - } - correlator.UpdateState(result.Event) - } - - // update the input to current clock value - now := metav1.NewTime(clock.Now()) - testInput.newEvent.FirstTimestamp = now - testInput.newEvent.LastTimestamp = now - result, err := correlator.EventCorrelate(&testInput.newEvent) - if err != nil { - t.Errorf("scenario %v: unexpected error correlating input event %v", testScenario, err) - } - - _, err = validateEvent(testScenario, result.Event, &testInput.expectedEvent, t) - if err != nil { - t.Errorf("scenario %v: unexpected error validating result %v", testScenario, err) - } - } -} diff --git a/pkg/client/record/fake.go b/pkg/client/record/fake.go deleted file mode 100644 index c0e8eedbb73..00000000000 --- a/pkg/client/record/fake.go +++ /dev/null @@ -1,54 +0,0 @@ -/* -Copyright 2015 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package record - -import ( - "fmt" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" -) - -// FakeRecorder is used as a fake during tests. It is thread safe. It is usable -// when created manually and not by NewFakeRecorder, however all events may be -// thrown away in this case. -type FakeRecorder struct { - Events chan string -} - -func (f *FakeRecorder) Event(object runtime.Object, eventtype, reason, message string) { - if f.Events != nil { - f.Events <- fmt.Sprintf("%s %s %s", eventtype, reason, message) - } -} - -func (f *FakeRecorder) Eventf(object runtime.Object, eventtype, reason, messageFmt string, args ...interface{}) { - if f.Events != nil { - f.Events <- fmt.Sprintf(eventtype+" "+reason+" "+messageFmt, args...) - } -} - -func (f *FakeRecorder) PastEventf(object runtime.Object, timestamp metav1.Time, eventtype, reason, messageFmt string, args ...interface{}) { -} - -// NewFakeRecorder creates new fake event recorder with event channel with -// buffer of given size. -func NewFakeRecorder(bufferSize int) *FakeRecorder { - return &FakeRecorder{ - Events: make(chan string, bufferSize), - } -} diff --git a/pkg/controller/BUILD b/pkg/controller/BUILD index c46548798ff..1d70433670a 100644 --- a/pkg/controller/BUILD +++ b/pkg/controller/BUILD @@ -25,7 +25,6 @@ go_library( "//pkg/apis/extensions/v1beta1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/serviceaccount:go_default_library", "//pkg/util/hash:go_default_library", "//vendor:github.com/golang/glog", @@ -41,8 +40,10 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/sets", "//vendor:k8s.io/apimachinery/pkg/watch", "//vendor:k8s.io/apiserver/pkg/authentication/serviceaccount", + "//vendor:k8s.io/client-go/kubernetes", "//vendor:k8s.io/client-go/rest", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/clock", "//vendor:k8s.io/client-go/util/integer", ], @@ -58,7 +59,6 @@ go_test( "//pkg/api/testapi:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/securitycontext:go_default_library", "//vendor:k8s.io/apimachinery/pkg/api/equality", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", @@ -67,6 +67,7 @@ go_test( "//vendor:k8s.io/apimachinery/pkg/util/uuid", "//vendor:k8s.io/client-go/rest", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/clock", "//vendor:k8s.io/client-go/util/testing", ], diff --git a/pkg/controller/certificates/BUILD b/pkg/controller/certificates/BUILD index 9729602e39e..54df3e450ca 100644 --- a/pkg/controller/certificates/BUILD +++ b/pkg/controller/certificates/BUILD @@ -22,9 +22,7 @@ go_library( "//pkg/apis/certificates/v1beta1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/clientset_generated/clientset/typed/certificates/v1beta1:go_default_library", - "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", "//pkg/client/legacylisters:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller:go_default_library", "//vendor:github.com/cloudflare/cfssl/config", "//vendor:github.com/cloudflare/cfssl/helpers", @@ -36,7 +34,9 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/runtime", "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/apimachinery/pkg/watch", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/workqueue", ], ) diff --git a/pkg/controller/certificates/certificate_controller.go b/pkg/controller/certificates/certificate_controller.go index 5a3fb0cccc6..94de94f37b4 100644 --- a/pkg/controller/certificates/certificate_controller.go +++ b/pkg/controller/certificates/certificate_controller.go @@ -25,13 +25,13 @@ import ( utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/watch" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/workqueue" certificates "k8s.io/kubernetes/pkg/apis/certificates/v1beta1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" "k8s.io/kubernetes/pkg/client/legacylisters" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/controller" "github.com/golang/glog" @@ -64,7 +64,7 @@ func NewCertificateController(kubeClient clientset.Interface, syncPeriod time.Du // Send events to the apiserver eventBroadcaster := record.NewBroadcaster() eventBroadcaster.StartLogging(glog.Infof) - eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: kubeClient.Core().Events("")}) + eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: v1core.New(kubeClient.Core().RESTClient()).Events("")}) s, err := NewCFSSLSigner(caCertFile, caKeyFile) if err != nil { diff --git a/pkg/controller/client_builder.go b/pkg/controller/client_builder.go index f68ae349f66..b3d5d44efd7 100644 --- a/pkg/controller/client_builder.go +++ b/pkg/controller/client_builder.go @@ -26,6 +26,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/watch" apiserverserviceaccount "k8s.io/apiserver/pkg/authentication/serviceaccount" + clientgoclientset "k8s.io/client-go/kubernetes" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/cache" "k8s.io/kubernetes/pkg/api" @@ -43,6 +44,8 @@ type ControllerClientBuilder interface { ConfigOrDie(name string) *restclient.Config Client(name string) (clientset.Interface, error) ClientOrDie(name string) clientset.Interface + ClientGoClient(name string) (clientgoclientset.Interface, error) + ClientGoClientOrDie(name string) clientgoclientset.Interface } // SimpleControllerClientBuilder returns a fixed client with different user agents @@ -80,6 +83,22 @@ func (b SimpleControllerClientBuilder) ClientOrDie(name string) clientset.Interf return client } +func (b SimpleControllerClientBuilder) ClientGoClient(name string) (clientgoclientset.Interface, error) { + clientConfig, err := b.Config(name) + if err != nil { + return nil, err + } + return clientgoclientset.NewForConfig(clientConfig) +} + +func (b SimpleControllerClientBuilder) ClientGoClientOrDie(name string) clientgoclientset.Interface { + client, err := b.ClientGoClient(name) + if err != nil { + glog.Fatal(err) + } + return client +} + // SAControllerClientBuilder is a ControllerClientBuilder that returns clients identifying as // service accounts type SAControllerClientBuilder struct { @@ -184,3 +203,19 @@ func (b SAControllerClientBuilder) ClientOrDie(name string) clientset.Interface } return client } + +func (b SAControllerClientBuilder) ClientGoClient(name string) (clientgoclientset.Interface, error) { + clientConfig, err := b.Config(name) + if err != nil { + return nil, err + } + return clientgoclientset.NewForConfig(clientConfig) +} + +func (b SAControllerClientBuilder) ClientGoClientOrDie(name string) clientgoclientset.Interface { + client, err := b.ClientGoClient(name) + if err != nil { + glog.Fatal(err) + } + return client +} diff --git a/pkg/controller/cloud/BUILD b/pkg/controller/cloud/BUILD index dd3cc6c78f6..657b01230b6 100644 --- a/pkg/controller/cloud/BUILD +++ b/pkg/controller/cloud/BUILD @@ -13,10 +13,9 @@ go_library( srcs = ["nodecontroller.go"], tags = ["automanaged"], deps = [ + "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/cloudprovider:go_default_library", "//pkg/controller/informers:go_default_library", "//vendor:github.com/golang/glog", @@ -24,6 +23,9 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/types", "//vendor:k8s.io/apimachinery/pkg/util/runtime", "//vendor:k8s.io/apimachinery/pkg/util/wait", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", + "//vendor:k8s.io/client-go/pkg/api/v1", + "//vendor:k8s.io/client-go/tools/record", ], ) @@ -33,9 +35,9 @@ go_test( library = ":go_default_library", tags = ["automanaged"], deps = [ + "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset/fake:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/cloudprovider:go_default_library", "//pkg/cloudprovider/providers/fake:go_default_library", "//pkg/controller:go_default_library", @@ -44,6 +46,8 @@ go_test( "//vendor:github.com/golang/glog", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/util/wait", + "//vendor:k8s.io/client-go/pkg/api/v1", + "//vendor:k8s.io/client-go/tools/record", ], ) diff --git a/pkg/controller/cloud/nodecontroller.go b/pkg/controller/cloud/nodecontroller.go index f79880178fe..fac2a7b7217 100644 --- a/pkg/controller/cloud/nodecontroller.go +++ b/pkg/controller/cloud/nodecontroller.go @@ -26,10 +26,12 @@ import ( "k8s.io/apimachinery/pkg/types" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" + "k8s.io/client-go/tools/record" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/controller/informers" ) @@ -63,11 +65,11 @@ func NewCloudNodeController( nodeMonitorPeriod time.Duration) (*CloudNodeController, error) { eventBroadcaster := record.NewBroadcaster() - recorder := eventBroadcaster.NewRecorder(v1.EventSource{Component: "cloudcontrollermanager"}) + recorder := eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "cloudcontrollermanager"}) eventBroadcaster.StartLogging(glog.Infof) if kubeClient != nil { glog.V(0).Infof("Sending events to api server.") - eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: kubeClient.Core().Events("")}) + eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: v1core.New(kubeClient.Core().RESTClient()).Events("")}) } else { glog.V(0).Infof("No api server defined - no events will be sent to API server.") } diff --git a/pkg/controller/cloud/nodecontroller_test.go b/pkg/controller/cloud/nodecontroller_test.go index fd4fe84d1a6..9eea3afc042 100644 --- a/pkg/controller/cloud/nodecontroller_test.go +++ b/pkg/controller/cloud/nodecontroller_test.go @@ -27,7 +27,9 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/kubernetes/pkg/client/record" + clientv1 "k8s.io/client-go/pkg/api/v1" + "k8s.io/client-go/tools/record" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/cloudprovider" fakecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/fake" "k8s.io/kubernetes/pkg/controller" @@ -105,7 +107,7 @@ func TestNodeDeleted(t *testing.T) { nodeInformer: factory.Nodes(), cloud: &fakecloud.FakeCloud{Err: cloudprovider.InstanceNotFound}, nodeMonitorPeriod: 5 * time.Second, - recorder: eventBroadcaster.NewRecorder(v1.EventSource{Component: "controllermanager"}), + recorder: eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "controllermanager"}), } eventBroadcaster.StartLogging(glog.Infof) diff --git a/pkg/controller/controller_utils.go b/pkg/controller/controller_utils.go index cce223efbbc..5b827a78ce8 100644 --- a/pkg/controller/controller_utils.go +++ b/pkg/controller/controller_utils.go @@ -31,6 +31,7 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/clock" "k8s.io/client-go/util/integer" "k8s.io/kubernetes/pkg/api" @@ -38,7 +39,6 @@ import ( "k8s.io/kubernetes/pkg/api/validation" extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/client/record" ) const ( @@ -424,7 +424,7 @@ func getPodsAnnotationSet(template *v1.PodTemplateSpec, object runtime.Object) ( for k, v := range template.Annotations { desiredAnnotations[k] = v } - createdByRef, err := v1.GetReference(object) + createdByRef, err := v1.GetReference(api.Scheme, object) if err != nil { return desiredAnnotations, fmt.Errorf("unable to get controller reference: %v", err) } diff --git a/pkg/controller/controller_utils_test.go b/pkg/controller/controller_utils_test.go index a3d6df03d5a..919f091a0fb 100644 --- a/pkg/controller/controller_utils_test.go +++ b/pkg/controller/controller_utils_test.go @@ -34,13 +34,13 @@ import ( "k8s.io/apimachinery/pkg/util/uuid" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/clock" utiltesting "k8s.io/client-go/util/testing" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/securitycontext" ) diff --git a/pkg/controller/cronjob/BUILD b/pkg/controller/cronjob/BUILD index 9bed55e210a..872ef91103a 100644 --- a/pkg/controller/cronjob/BUILD +++ b/pkg/controller/cronjob/BUILD @@ -22,8 +22,6 @@ go_library( "//pkg/api/v1:go_default_library", "//pkg/apis/batch/v2alpha1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/util/metrics:go_default_library", "//vendor:github.com/golang/glog", "//vendor:github.com/robfig/cron", @@ -36,6 +34,9 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/errors", "//vendor:k8s.io/apimachinery/pkg/util/runtime", "//vendor:k8s.io/apimachinery/pkg/util/wait", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", + "//vendor:k8s.io/client-go/pkg/api/v1", + "//vendor:k8s.io/client-go/tools/record", ], ) @@ -50,9 +51,9 @@ go_test( deps = [ "//pkg/api/v1:go_default_library", "//pkg/apis/batch/v2alpha1:go_default_library", - "//pkg/client/record:go_default_library", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/types", + "//vendor:k8s.io/client-go/tools/record", ], ) diff --git a/pkg/controller/cronjob/cronjob_controller.go b/pkg/controller/cronjob/cronjob_controller.go index 01bc1c4dc4e..b8b778d5e55 100644 --- a/pkg/controller/cronjob/cronjob_controller.go +++ b/pkg/controller/cronjob/cronjob_controller.go @@ -41,11 +41,13 @@ import ( utilerrors "k8s.io/apimachinery/pkg/util/errors" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" + "k8s.io/client-go/tools/record" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" batch "k8s.io/kubernetes/pkg/apis/batch/v2alpha1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/util/metrics" ) @@ -63,7 +65,7 @@ func NewCronJobController(kubeClient clientset.Interface) *CronJobController { eventBroadcaster := record.NewBroadcaster() eventBroadcaster.StartLogging(glog.Infof) // TODO: remove the wrapper when every clients have moved to use the clientset. - eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: kubeClient.Core().Events("")}) + eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: v1core.New(kubeClient.Core().RESTClient()).Events("")}) if kubeClient != nil && kubeClient.Core().RESTClient().GetRateLimiter() != nil { metrics.RegisterMetricAndTrackRateLimiterUsage("cronjob_controller", kubeClient.Core().RESTClient().GetRateLimiter()) @@ -74,7 +76,7 @@ func NewCronJobController(kubeClient clientset.Interface) *CronJobController { jobControl: realJobControl{KubeClient: kubeClient}, sjControl: &realSJControl{KubeClient: kubeClient}, podControl: &realPodControl{KubeClient: kubeClient}, - recorder: eventBroadcaster.NewRecorder(v1.EventSource{Component: "cronjob-controller"}), + recorder: eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "cronjob-controller"}), } return jm @@ -308,5 +310,5 @@ func SyncOne(sj batch.CronJob, js []batch.Job, now time.Time, jc jobControlInter } func getRef(object runtime.Object) (*v1.ObjectReference, error) { - return v1.GetReference(object) + return v1.GetReference(api.Scheme, object) } diff --git a/pkg/controller/cronjob/cronjob_controller_test.go b/pkg/controller/cronjob/cronjob_controller_test.go index c51491b86b3..f3843f77b41 100644 --- a/pkg/controller/cronjob/cronjob_controller_test.go +++ b/pkg/controller/cronjob/cronjob_controller_test.go @@ -23,9 +23,9 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" batch "k8s.io/kubernetes/pkg/apis/batch/v2alpha1" - "k8s.io/kubernetes/pkg/client/record" ) // schedule is hourly on the hour diff --git a/pkg/controller/cronjob/injection.go b/pkg/controller/cronjob/injection.go index a717d45e918..dcbd1ae8c6c 100644 --- a/pkg/controller/cronjob/injection.go +++ b/pkg/controller/cronjob/injection.go @@ -22,10 +22,10 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" batch "k8s.io/kubernetes/pkg/apis/batch/v2alpha1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/client/record" ) // sjControlInterface is an interface that knows how to update CronJob status diff --git a/pkg/controller/cronjob/utils.go b/pkg/controller/cronjob/utils.go index c599239568e..a2837b2d535 100644 --- a/pkg/controller/cronjob/utils.go +++ b/pkg/controller/cronjob/utils.go @@ -215,7 +215,7 @@ func getTimeHash(scheduledTime time.Time) int64 { // makeCreatedByRefJson makes a json string with an object reference for use in "created-by" annotation value func makeCreatedByRefJson(object runtime.Object) (string, error) { - createdByRef, err := v1.GetReference(object) + createdByRef, err := v1.GetReference(api.Scheme, object) if err != nil { return "", fmt.Errorf("unable to get controller reference: %v", err) } diff --git a/pkg/controller/daemon/BUILD b/pkg/controller/daemon/BUILD index 229a5df236f..36d6aa9f47f 100644 --- a/pkg/controller/daemon/BUILD +++ b/pkg/controller/daemon/BUILD @@ -20,10 +20,8 @@ go_library( "//pkg/api/v1:go_default_library", "//pkg/apis/extensions/v1beta1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", "//pkg/client/clientset_generated/clientset/typed/extensions/v1beta1:go_default_library", "//pkg/client/legacylisters:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller:go_default_library", "//pkg/controller/informers:go_default_library", "//pkg/util/metrics:go_default_library", @@ -35,7 +33,10 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/errors", "//vendor:k8s.io/apimachinery/pkg/util/runtime", "//vendor:k8s.io/apimachinery/pkg/util/wait", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/workqueue", ], ) @@ -60,6 +61,7 @@ go_test( "//vendor:k8s.io/apiserver/pkg/storage/names", "//vendor:k8s.io/client-go/testing", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", ], ) diff --git a/pkg/controller/daemon/daemoncontroller.go b/pkg/controller/daemon/daemoncontroller.go index 9fdbeb89b05..d0c54ff8e8c 100644 --- a/pkg/controller/daemon/daemoncontroller.go +++ b/pkg/controller/daemon/daemoncontroller.go @@ -28,16 +28,17 @@ import ( utilerrors "k8s.io/apimachinery/pkg/util/errors" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/workqueue" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" unversionedextensions "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/extensions/v1beta1" "k8s.io/kubernetes/pkg/client/legacylisters" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller/informers" "k8s.io/kubernetes/pkg/util/metrics" @@ -99,17 +100,17 @@ func NewDaemonSetsController(daemonSetInformer informers.DaemonSetInformer, podI eventBroadcaster := record.NewBroadcaster() eventBroadcaster.StartLogging(glog.Infof) // TODO: remove the wrapper when every clients have moved to use the clientset. - eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: kubeClient.Core().Events("")}) + eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: v1core.New(kubeClient.Core().RESTClient()).Events("")}) if kubeClient != nil && kubeClient.Core().RESTClient().GetRateLimiter() != nil { metrics.RegisterMetricAndTrackRateLimiterUsage("daemon_controller", kubeClient.Core().RESTClient().GetRateLimiter()) } dsc := &DaemonSetsController{ kubeClient: kubeClient, - eventRecorder: eventBroadcaster.NewRecorder(v1.EventSource{Component: "daemonset-controller"}), + eventRecorder: eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "daemonset-controller"}), podControl: controller.RealPodControl{ KubeClient: kubeClient, - Recorder: eventBroadcaster.NewRecorder(v1.EventSource{Component: "daemon-set"}), + Recorder: eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "daemon-set"}), }, burstReplicas: BurstReplicas, expectations: controller.NewControllerExpectations(), diff --git a/pkg/controller/daemon/daemoncontroller_test.go b/pkg/controller/daemon/daemoncontroller_test.go index 4e495e18773..7f714d516b7 100644 --- a/pkg/controller/daemon/daemoncontroller_test.go +++ b/pkg/controller/daemon/daemoncontroller_test.go @@ -26,6 +26,7 @@ import ( "k8s.io/apiserver/pkg/storage/names" core "k8s.io/client-go/testing" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/v1" @@ -151,6 +152,7 @@ func newTestController(initialObjects ...runtime.Object) (*DaemonSetsController, informerFactory := informers.NewSharedInformerFactory(clientset, nil, controller.NoResyncPeriodFunc()) manager := NewDaemonSetsController(informerFactory.DaemonSets(), informerFactory.Pods(), informerFactory.Nodes(), clientset, 0) + manager.eventRecorder = record.NewFakeRecorder(100) manager.podStoreSynced = alwaysReady manager.nodeStoreSynced = alwaysReady diff --git a/pkg/controller/deployment/BUILD b/pkg/controller/deployment/BUILD index 6c876e6f309..11377f3248a 100644 --- a/pkg/controller/deployment/BUILD +++ b/pkg/controller/deployment/BUILD @@ -24,9 +24,7 @@ go_library( "//pkg/api/v1:go_default_library", "//pkg/apis/extensions/v1beta1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", "//pkg/client/legacylisters:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller:go_default_library", "//pkg/controller/deployment/util:go_default_library", "//pkg/controller/informers:go_default_library", @@ -41,7 +39,10 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/errors", "//vendor:k8s.io/apimachinery/pkg/util/runtime", "//vendor:k8s.io/apimachinery/pkg/util/wait", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/integer", "//vendor:k8s.io/client-go/util/workqueue", ], @@ -62,7 +63,6 @@ go_test( "//pkg/api/v1:go_default_library", "//pkg/apis/extensions/v1beta1:go_default_library", "//pkg/client/clientset_generated/clientset/fake:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller:go_default_library", "//pkg/controller/deployment/util:go_default_library", "//pkg/controller/informers:go_default_library", @@ -72,6 +72,7 @@ go_test( "//vendor:k8s.io/apimachinery/pkg/util/intstr", "//vendor:k8s.io/apimachinery/pkg/util/uuid", "//vendor:k8s.io/client-go/testing", + "//vendor:k8s.io/client-go/tools/record", ], ) diff --git a/pkg/controller/deployment/deployment_controller.go b/pkg/controller/deployment/deployment_controller.go index c8b96a9cc0f..4a6470a1e4f 100644 --- a/pkg/controller/deployment/deployment_controller.go +++ b/pkg/controller/deployment/deployment_controller.go @@ -35,14 +35,16 @@ import ( utilerrors "k8s.io/apimachinery/pkg/util/errors" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/workqueue" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" "k8s.io/kubernetes/pkg/client/legacylisters" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller/deployment/util" "k8s.io/kubernetes/pkg/controller/informers" @@ -105,14 +107,14 @@ func NewDeploymentController(dInformer informers.DeploymentInformer, rsInformer eventBroadcaster := record.NewBroadcaster() eventBroadcaster.StartLogging(glog.Infof) // TODO: remove the wrapper when every clients have moved to use the clientset. - eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: client.Core().Events("")}) + eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: v1core.New(client.Core().RESTClient()).Events("")}) if client != nil && client.Core().RESTClient().GetRateLimiter() != nil { metrics.RegisterMetricAndTrackRateLimiterUsage("deployment_controller", client.Core().RESTClient().GetRateLimiter()) } dc := &DeploymentController{ client: client, - eventRecorder: eventBroadcaster.NewRecorder(v1.EventSource{Component: "deployment-controller"}), + eventRecorder: eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "deployment-controller"}), queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "deployment"), progressQueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "progress-check"), } diff --git a/pkg/controller/deployment/deployment_controller_test.go b/pkg/controller/deployment/deployment_controller_test.go index 805152b7429..08c7fd55f66 100644 --- a/pkg/controller/deployment/deployment_controller_test.go +++ b/pkg/controller/deployment/deployment_controller_test.go @@ -27,11 +27,11 @@ import ( "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/uuid" core "k8s.io/client-go/testing" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller/deployment/util" "k8s.io/kubernetes/pkg/controller/informers" diff --git a/pkg/controller/deployment/recreate_test.go b/pkg/controller/deployment/recreate_test.go index 8fbcbc1ab0e..2d048c37fdd 100644 --- a/pkg/controller/deployment/recreate_test.go +++ b/pkg/controller/deployment/recreate_test.go @@ -21,6 +21,7 @@ import ( "testing" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api" extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake" @@ -69,6 +70,7 @@ func TestScaleDownOldReplicaSets(t *testing.T) { kc := fake.NewSimpleClientset(expected...) informers := informers.NewSharedInformerFactory(kc, nil, controller.NoResyncPeriodFunc()) c := NewDeploymentController(informers.Deployments(), informers.ReplicaSets(), informers.Pods(), kc) + c.eventRecorder = &record.FakeRecorder{} c.scaleDownOldReplicaSetsForRecreate(oldRSs, test.d) for j := range oldRSs { diff --git a/pkg/controller/deployment/rolling_test.go b/pkg/controller/deployment/rolling_test.go index 0da9b2babbb..7eec433683c 100644 --- a/pkg/controller/deployment/rolling_test.go +++ b/pkg/controller/deployment/rolling_test.go @@ -21,9 +21,9 @@ import ( "k8s.io/apimachinery/pkg/util/intstr" core "k8s.io/client-go/testing" + "k8s.io/client-go/tools/record" extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake" - "k8s.io/kubernetes/pkg/client/record" ) func TestDeploymentController_reconcileNewReplicaSet(t *testing.T) { diff --git a/pkg/controller/deployment/sync_test.go b/pkg/controller/deployment/sync_test.go index 9e25457d4fb..a2dc827b837 100644 --- a/pkg/controller/deployment/sync_test.go +++ b/pkg/controller/deployment/sync_test.go @@ -23,9 +23,9 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" testclient "k8s.io/client-go/testing" + "k8s.io/client-go/tools/record" extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/controller" deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util" "k8s.io/kubernetes/pkg/controller/informers" diff --git a/pkg/controller/disruption/BUILD b/pkg/controller/disruption/BUILD index e27160658dd..efe808fd79f 100644 --- a/pkg/controller/disruption/BUILD +++ b/pkg/controller/disruption/BUILD @@ -19,10 +19,8 @@ go_library( "//pkg/apis/extensions/v1beta1:go_default_library", "//pkg/apis/policy/v1beta1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", "//pkg/client/clientset_generated/clientset/typed/policy/v1beta1:go_default_library", "//pkg/client/legacylisters:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller:go_default_library", "//vendor:github.com/golang/glog", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", @@ -32,7 +30,10 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/runtime", "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/apimachinery/pkg/watch", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/workqueue", ], ) @@ -49,12 +50,13 @@ go_test( "//pkg/apis/extensions/v1beta1:go_default_library", "//pkg/apis/policy/v1beta1:go_default_library", "//pkg/client/legacylisters:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller:go_default_library", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/util/intstr", "//vendor:k8s.io/apimachinery/pkg/util/uuid", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/workqueue", ], ) diff --git a/pkg/controller/disruption/disruption.go b/pkg/controller/disruption/disruption.go index e0051338160..89175dc7593 100644 --- a/pkg/controller/disruption/disruption.go +++ b/pkg/controller/disruption/disruption.go @@ -28,7 +28,10 @@ import ( utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/watch" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/workqueue" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" @@ -36,10 +39,8 @@ import ( extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" policy "k8s.io/kubernetes/pkg/apis/policy/v1beta1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" policyclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/policy/v1beta1" "k8s.io/kubernetes/pkg/client/legacylisters" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/controller" "github.com/golang/glog" @@ -115,7 +116,7 @@ func NewDisruptionController(podInformer cache.SharedIndexInformer, kubeClient c recheckQueue: workqueue.NewNamedDelayingQueue("disruption-recheck"), broadcaster: record.NewBroadcaster(), } - dc.recorder = dc.broadcaster.NewRecorder(v1.EventSource{Component: "controllermanager"}) + dc.recorder = dc.broadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "controllermanager"}) dc.getUpdater = func() updater { return dc.writePdbStatus } @@ -319,7 +320,7 @@ func (dc *DisruptionController) Run(stopCh <-chan struct{}) { glog.V(0).Infof("Starting disruption controller") if dc.kubeClient != nil { glog.V(0).Infof("Sending events to api server.") - dc.broadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: dc.kubeClient.Core().Events("")}) + dc.broadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: v1core.New(dc.kubeClient.Core().RESTClient()).Events("")}) } else { glog.V(0).Infof("No api server defined - no events will be sent to API server.") } diff --git a/pkg/controller/disruption/disruption_test.go b/pkg/controller/disruption/disruption_test.go index 72b1fa58bfe..2990a4b62df 100644 --- a/pkg/controller/disruption/disruption_test.go +++ b/pkg/controller/disruption/disruption_test.go @@ -26,7 +26,9 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/uuid" + clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/workqueue" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" @@ -34,7 +36,6 @@ import ( extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" policy "k8s.io/kubernetes/pkg/apis/policy/v1beta1" "k8s.io/kubernetes/pkg/client/legacylisters" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/controller" ) @@ -98,7 +99,7 @@ func newFakeDisruptionController() (*DisruptionController, *pdbStates) { broadcaster: record.NewBroadcaster(), } - dc.recorder = dc.broadcaster.NewRecorder(v1.EventSource{Component: "disruption_test"}) + dc.recorder = dc.broadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "disruption_test"}) return dc, ps } diff --git a/pkg/controller/job/BUILD b/pkg/controller/job/BUILD index 9956fd115df..03e7817b1c9 100644 --- a/pkg/controller/job/BUILD +++ b/pkg/controller/job/BUILD @@ -17,13 +17,12 @@ go_library( ], tags = ["automanaged"], deps = [ + "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/apis/batch/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", "//pkg/client/legacylisters:go_default_library", "//pkg/client/listers/batch/v1:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller:go_default_library", "//pkg/controller/informers:go_default_library", "//pkg/util/metrics:go_default_library", @@ -32,7 +31,10 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/util/runtime", "//vendor:k8s.io/apimachinery/pkg/util/wait", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/workqueue", ], ) diff --git a/pkg/controller/job/jobcontroller.go b/pkg/controller/job/jobcontroller.go index cc45261cd3d..ffa0493a753 100644 --- a/pkg/controller/job/jobcontroller.go +++ b/pkg/controller/job/jobcontroller.go @@ -27,15 +27,17 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/workqueue" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" batch "k8s.io/kubernetes/pkg/apis/batch/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" "k8s.io/kubernetes/pkg/client/legacylisters" batchv1listers "k8s.io/kubernetes/pkg/client/listers/batch/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller/informers" "k8s.io/kubernetes/pkg/util/metrics" @@ -76,7 +78,7 @@ func NewJobController(podInformer cache.SharedIndexInformer, jobInformer informe eventBroadcaster := record.NewBroadcaster() eventBroadcaster.StartLogging(glog.Infof) // TODO: remove the wrapper when every clients have moved to use the clientset. - eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: kubeClient.Core().Events("")}) + eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: v1core.New(kubeClient.Core().RESTClient()).Events("")}) if kubeClient != nil && kubeClient.Core().RESTClient().GetRateLimiter() != nil { metrics.RegisterMetricAndTrackRateLimiterUsage("job_controller", kubeClient.Core().RESTClient().GetRateLimiter()) @@ -86,11 +88,11 @@ func NewJobController(podInformer cache.SharedIndexInformer, jobInformer informe kubeClient: kubeClient, podControl: controller.RealPodControl{ KubeClient: kubeClient, - Recorder: eventBroadcaster.NewRecorder(v1.EventSource{Component: "job-controller"}), + Recorder: eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "job-controller"}), }, expectations: controller.NewControllerExpectations(), queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "job"), - recorder: eventBroadcaster.NewRecorder(v1.EventSource{Component: "job-controller"}), + recorder: eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "job-controller"}), } jobInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ diff --git a/pkg/controller/node/BUILD b/pkg/controller/node/BUILD index f7b288d0b03..44456c772f1 100644 --- a/pkg/controller/node/BUILD +++ b/pkg/controller/node/BUILD @@ -24,9 +24,7 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", "//pkg/client/legacylisters:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/cloudprovider:go_default_library", "//pkg/controller/informers:go_default_library", "//pkg/kubelet/util/format:go_default_library", @@ -46,7 +44,10 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/runtime", "//vendor:k8s.io/apimachinery/pkg/util/sets", "//vendor:k8s.io/apimachinery/pkg/util/wait", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/flowcontrol", ], ) diff --git a/pkg/controller/node/cidr_allocator.go b/pkg/controller/node/cidr_allocator.go index 2d2e118d11e..22d7e7d0efd 100644 --- a/pkg/controller/node/cidr_allocator.go +++ b/pkg/controller/node/cidr_allocator.go @@ -26,9 +26,11 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" + clientv1 "k8s.io/client-go/pkg/api/v1" + "k8s.io/client-go/tools/record" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/client/record" "github.com/golang/glog" ) @@ -75,7 +77,7 @@ type rangeAllocator struct { // can initialize its CIDR map. NodeList is only nil in testing. func NewCIDRRangeAllocator(client clientset.Interface, clusterCIDR *net.IPNet, serviceCIDR *net.IPNet, subNetMaskSize int, nodeList *v1.NodeList) (CIDRAllocator, error) { eventBroadcaster := record.NewBroadcaster() - recorder := eventBroadcaster.NewRecorder(v1.EventSource{Component: "cidrAllocator"}) + recorder := eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "cidrAllocator"}) eventBroadcaster.StartLogging(glog.Infof) ra := &rangeAllocator{ diff --git a/pkg/controller/node/controller_utils.go b/pkg/controller/node/controller_utils.go index 3cfcbc6cb00..b7f570edaca 100644 --- a/pkg/controller/node/controller_utils.go +++ b/pkg/controller/node/controller_utils.go @@ -27,11 +27,11 @@ import ( utilerrors "k8s.io/apimachinery/pkg/util/errors" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" "k8s.io/kubernetes/pkg/client/legacylisters" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/kubelet/util/format" "k8s.io/kubernetes/pkg/util/node" diff --git a/pkg/controller/node/nodecontroller.go b/pkg/controller/node/nodecontroller.go index 49be5766e50..10a171428bf 100644 --- a/pkg/controller/node/nodecontroller.go +++ b/pkg/controller/node/nodecontroller.go @@ -31,14 +31,15 @@ import ( "k8s.io/apimachinery/pkg/types" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/flowcontrol" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" "k8s.io/kubernetes/pkg/client/legacylisters" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/controller/informers" "k8s.io/kubernetes/pkg/util/metrics" @@ -186,11 +187,11 @@ func NewNodeController( nodeCIDRMaskSize int, allocateNodeCIDRs bool) (*NodeController, error) { eventBroadcaster := record.NewBroadcaster() - recorder := eventBroadcaster.NewRecorder(v1.EventSource{Component: "controllermanager"}) + recorder := eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "controllermanager"}) eventBroadcaster.StartLogging(glog.Infof) if kubeClient != nil { glog.V(0).Infof("Sending events to api server.") - eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: kubeClient.Core().Events("")}) + eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: v1core.New(kubeClient.Core().RESTClient()).Events("")}) } else { glog.V(0).Infof("No api server defined - no events will be sent to API server.") } diff --git a/pkg/controller/node/testutil/BUILD b/pkg/controller/node/testutil/BUILD index f3454c41318..db907d22f1b 100644 --- a/pkg/controller/node/testutil/BUILD +++ b/pkg/controller/node/testutil/BUILD @@ -24,6 +24,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/types", "//vendor:k8s.io/apimachinery/pkg/util/sets", "//vendor:k8s.io/apimachinery/pkg/watch", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/util/clock", ], ) diff --git a/pkg/controller/node/testutil/test_utils.go b/pkg/controller/node/testutil/test_utils.go index b84558d8b62..3f7a809a932 100644 --- a/pkg/controller/node/testutil/test_utils.go +++ b/pkg/controller/node/testutil/test_utils.go @@ -29,6 +29,7 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/watch" + clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/util/clock" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" @@ -226,8 +227,8 @@ func (m *FakeNodeHandler) Patch(name string, pt types.PatchType, data []byte, su // FakeRecorder is used as a fake during testing. type FakeRecorder struct { - source v1.EventSource - Events []*v1.Event + source clientv1.EventSource + Events []*clientv1.Event clock clock.Clock } @@ -246,7 +247,7 @@ func (f *FakeRecorder) PastEventf(obj runtime.Object, timestamp metav1.Time, eve } func (f *FakeRecorder) generateEvent(obj runtime.Object, timestamp metav1.Time, eventtype, reason, message string) { - ref, err := v1.GetReference(obj) + ref, err := v1.GetReference(api.Scheme, obj) if err != nil { return } @@ -258,19 +259,30 @@ func (f *FakeRecorder) generateEvent(obj runtime.Object, timestamp metav1.Time, } } -func (f *FakeRecorder) makeEvent(ref *v1.ObjectReference, eventtype, reason, message string) *v1.Event { +func (f *FakeRecorder) makeEvent(ref *v1.ObjectReference, eventtype, reason, message string) *clientv1.Event { fmt.Println("make event") t := metav1.Time{Time: f.clock.Now()} namespace := ref.Namespace if namespace == "" { namespace = metav1.NamespaceDefault } - return &v1.Event{ + + clientref := clientv1.ObjectReference{ + Kind: ref.Kind, + Namespace: ref.Namespace, + Name: ref.Name, + UID: ref.UID, + APIVersion: ref.APIVersion, + ResourceVersion: ref.ResourceVersion, + FieldPath: ref.FieldPath, + } + + return &clientv1.Event{ ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("%v.%x", ref.Name, t.UnixNano()), Namespace: namespace, }, - InvolvedObject: *ref, + InvolvedObject: clientref, Reason: reason, Message: message, FirstTimestamp: t, @@ -283,8 +295,8 @@ func (f *FakeRecorder) makeEvent(ref *v1.ObjectReference, eventtype, reason, mes // NewFakeRecorder returns a pointer to a newly constructed FakeRecorder. func NewFakeRecorder() *FakeRecorder { return &FakeRecorder{ - source: v1.EventSource{Component: "nodeControllerTest"}, - Events: []*v1.Event{}, + source: clientv1.EventSource{Component: "nodeControllerTest"}, + Events: []*clientv1.Event{}, clock: clock.NewFakeClock(time.Now()), } } diff --git a/pkg/controller/podautoscaler/BUILD b/pkg/controller/podautoscaler/BUILD index dfc3f0c6cc4..14a225e0534 100644 --- a/pkg/controller/podautoscaler/BUILD +++ b/pkg/controller/podautoscaler/BUILD @@ -17,13 +17,13 @@ go_library( ], tags = ["automanaged"], deps = [ + "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/apis/autoscaling/v1:go_default_library", "//pkg/apis/extensions/v1beta1:go_default_library", "//pkg/client/clientset_generated/clientset/typed/autoscaling/v1:go_default_library", "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", "//pkg/client/clientset_generated/clientset/typed/extensions/v1beta1:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller/podautoscaler/metrics:go_default_library", "//vendor:github.com/golang/glog", "//vendor:k8s.io/apimachinery/pkg/api/resource", @@ -33,7 +33,10 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/runtime", "//vendor:k8s.io/apimachinery/pkg/util/sets", "//vendor:k8s.io/apimachinery/pkg/watch", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", ], ) @@ -46,13 +49,14 @@ go_test( library = ":go_default_library", tags = ["automanaged"], deps = [ + "//pkg/api:go_default_library", "//pkg/api/unversioned:go_default_library", "//pkg/api/v1:go_default_library", + "//pkg/apis/autoscaling/install:go_default_library", "//pkg/apis/autoscaling/v1:go_default_library", + "//pkg/apis/extensions/install:go_default_library", "//pkg/apis/extensions/v1beta1:go_default_library", "//pkg/client/clientset_generated/clientset/fake:go_default_library", - "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller/podautoscaler/metrics:go_default_library", "//vendor:github.com/stretchr/testify/assert", "//vendor:github.com/stretchr/testify/require", @@ -60,8 +64,12 @@ go_test( "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/apimachinery/pkg/watch", + "//vendor:k8s.io/client-go/kubernetes/fake", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/rest", "//vendor:k8s.io/client-go/testing", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/heapster/metrics/api/v1/types", "//vendor:k8s.io/heapster/metrics/apis/metrics/v1alpha1", ], diff --git a/pkg/controller/podautoscaler/horizontal.go b/pkg/controller/podautoscaler/horizontal.go index 1d9c05cd798..27fb772eae0 100644 --- a/pkg/controller/podautoscaler/horizontal.go +++ b/pkg/controller/podautoscaler/horizontal.go @@ -28,14 +28,16 @@ import ( "k8s.io/apimachinery/pkg/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/watch" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" autoscaling "k8s.io/kubernetes/pkg/apis/autoscaling/v1" extensionsv1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" unversionedautoscaling "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/autoscaling/v1" - v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" unversionedextensions "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/extensions/v1beta1" - "k8s.io/kubernetes/pkg/client/record" ) const ( @@ -112,7 +114,7 @@ func newInformer(controller *HorizontalController, resyncPeriod time.Duration) ( func NewHorizontalController(evtNamespacer v1core.EventsGetter, scaleNamespacer unversionedextensions.ScalesGetter, hpaNamespacer unversionedautoscaling.HorizontalPodAutoscalersGetter, replicaCalc *ReplicaCalculator, resyncPeriod time.Duration) *HorizontalController { broadcaster := record.NewBroadcaster() broadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: evtNamespacer.Events("")}) - recorder := broadcaster.NewRecorder(v1.EventSource{Component: "horizontal-pod-autoscaler"}) + recorder := broadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "horizontal-pod-autoscaler"}) controller := &HorizontalController{ replicaCalc: replicaCalc, diff --git a/pkg/controller/podautoscaler/horizontal_test.go b/pkg/controller/podautoscaler/horizontal_test.go index 30749dddbee..7c0fe0cd319 100644 --- a/pkg/controller/podautoscaler/horizontal_test.go +++ b/pkg/controller/podautoscaler/horizontal_test.go @@ -31,21 +31,27 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/watch" + clientfake "k8s.io/client-go/kubernetes/fake" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" restclient "k8s.io/client-go/rest" core "k8s.io/client-go/testing" + "k8s.io/client-go/tools/record" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/api/v1" autoscaling "k8s.io/kubernetes/pkg/apis/autoscaling/v1" extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake" - v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/controller/podautoscaler/metrics" heapster "k8s.io/heapster/metrics/api/v1/types" metricsapi "k8s.io/heapster/metrics/apis/metrics/v1alpha1" "github.com/stretchr/testify/assert" + + _ "k8s.io/kubernetes/pkg/apis/autoscaling/install" + _ "k8s.io/kubernetes/pkg/apis/extensions/install" ) func (w fakeResponseWrapper) DoRaw() ([]byte, error) { @@ -418,28 +424,6 @@ func (tc *testCase) prepareTestClient(t *testing.T) *fake.Clientset { return true, obj, nil }) - fakeClient.AddReactor("*", "events", func(action core.Action) (handled bool, ret runtime.Object, err error) { - tc.Lock() - defer tc.Unlock() - - obj := action.(core.CreateAction).GetObject().(*v1.Event) - if tc.verifyEvents { - switch obj.Reason { - case "SuccessfulRescale": - assert.Equal(t, fmt.Sprintf("New size: %d; reason: CPU utilization above target", tc.desiredReplicas), obj.Message) - case "DesiredReplicasComputed": - assert.Equal(t, fmt.Sprintf( - "Computed the desired num of replicas: %d (avgCPUutil: %d, current replicas: %d)", - tc.desiredReplicas, - (int64(tc.reportedLevels[0])*100)/tc.reportedCPURequests[0].MilliValue(), tc.initialReplicas), obj.Message) - default: - assert.False(t, true, fmt.Sprintf("Unexpected event: %s / %s", obj.Reason, obj.Message)) - } - } - tc.eventCreated = true - return true, obj, nil - }) - fakeWatch := watch.NewFake() fakeClient.AddWatchReactor("*", core.DefaultWatchReactor(fakeWatch, nil)) @@ -461,9 +445,32 @@ func (tc *testCase) runTest(t *testing.T) { testClient := tc.prepareTestClient(t) metricsClient := metrics.NewHeapsterMetricsClient(testClient, metrics.DefaultHeapsterNamespace, metrics.DefaultHeapsterScheme, metrics.DefaultHeapsterService, metrics.DefaultHeapsterPort) + eventClient := &clientfake.Clientset{} + eventClient.AddReactor("*", "events", func(action core.Action) (handled bool, ret runtime.Object, err error) { + tc.Lock() + defer tc.Unlock() + + obj := action.(core.CreateAction).GetObject().(*clientv1.Event) + if tc.verifyEvents { + switch obj.Reason { + case "SuccessfulRescale": + assert.Equal(t, fmt.Sprintf("New size: %d; reason: CPU utilization above target", tc.desiredReplicas), obj.Message) + case "DesiredReplicasComputed": + assert.Equal(t, fmt.Sprintf( + "Computed the desired num of replicas: %d (avgCPUutil: %d, current replicas: %d)", + tc.desiredReplicas, + (int64(tc.reportedLevels[0])*100)/tc.reportedCPURequests[0].MilliValue(), tc.initialReplicas), obj.Message) + default: + assert.False(t, true, fmt.Sprintf("Unexpected event: %s / %s", obj.Reason, obj.Message)) + } + } + tc.eventCreated = true + return true, obj, nil + }) + broadcaster := record.NewBroadcasterForTests(0) - broadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: testClient.Core().Events("")}) - recorder := broadcaster.NewRecorder(v1.EventSource{Component: "horizontal-pod-autoscaler"}) + broadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: eventClient.Core().Events("")}) + recorder := broadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "horizontal-pod-autoscaler"}) replicaCalc := &ReplicaCalculator{ metricsClient: metricsClient, diff --git a/pkg/controller/replicaset/BUILD b/pkg/controller/replicaset/BUILD index e841df4bfa6..945789dc4ab 100644 --- a/pkg/controller/replicaset/BUILD +++ b/pkg/controller/replicaset/BUILD @@ -21,10 +21,8 @@ go_library( "//pkg/api/v1:go_default_library", "//pkg/apis/extensions/v1beta1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", "//pkg/client/clientset_generated/clientset/typed/extensions/v1beta1:go_default_library", "//pkg/client/legacylisters:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller:go_default_library", "//pkg/controller/informers:go_default_library", "//pkg/util/metrics:go_default_library", @@ -36,7 +34,10 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/errors", "//vendor:k8s.io/apimachinery/pkg/util/runtime", "//vendor:k8s.io/apimachinery/pkg/util/wait", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/workqueue", ], ) diff --git a/pkg/controller/replicaset/replica_set.go b/pkg/controller/replicaset/replica_set.go index 8bd03b80ab2..6a26722c57a 100644 --- a/pkg/controller/replicaset/replica_set.go +++ b/pkg/controller/replicaset/replica_set.go @@ -33,15 +33,17 @@ import ( utilerrors "k8s.io/apimachinery/pkg/util/errors" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/workqueue" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" "k8s.io/kubernetes/pkg/client/legacylisters" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller/informers" "k8s.io/kubernetes/pkg/util/metrics" @@ -100,13 +102,13 @@ func NewReplicaSetController(rsInformer informers.ReplicaSetInformer, podInforme } eventBroadcaster := record.NewBroadcaster() eventBroadcaster.StartLogging(glog.Infof) - eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: kubeClient.Core().Events("")}) + eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: v1core.New(kubeClient.Core().RESTClient()).Events("")}) rsc := &ReplicaSetController{ kubeClient: kubeClient, podControl: controller.RealPodControl{ KubeClient: kubeClient, - Recorder: eventBroadcaster.NewRecorder(v1.EventSource{Component: "replicaset-controller"}), + Recorder: eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "replicaset-controller"}), }, burstReplicas: burstReplicas, expectations: controller.NewUIDTrackingControllerExpectations(controller.NewControllerExpectations()), diff --git a/pkg/controller/replication/BUILD b/pkg/controller/replication/BUILD index c6ed5c51306..d0bdb167424 100644 --- a/pkg/controller/replication/BUILD +++ b/pkg/controller/replication/BUILD @@ -17,11 +17,11 @@ go_library( ], tags = ["automanaged"], deps = [ + "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", "//pkg/client/legacylisters:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller:go_default_library", "//pkg/controller/informers:go_default_library", "//pkg/util/metrics:go_default_library", @@ -34,7 +34,10 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/runtime", "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/apiserver/pkg/util/trace", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/workqueue", ], ) diff --git a/pkg/controller/replication/replication_controller.go b/pkg/controller/replication/replication_controller.go index f4ad4a6de70..454b7fbf669 100644 --- a/pkg/controller/replication/replication_controller.go +++ b/pkg/controller/replication/replication_controller.go @@ -33,13 +33,15 @@ import ( utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" utiltrace "k8s.io/apiserver/pkg/util/trace" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/workqueue" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" "k8s.io/kubernetes/pkg/client/legacylisters" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller/informers" "k8s.io/kubernetes/pkg/util/metrics" @@ -110,13 +112,13 @@ func NewReplicationManager(podInformer, rcInformer cache.SharedIndexInformer, ku eventBroadcaster := record.NewBroadcaster() eventBroadcaster.StartLogging(glog.Infof) - eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: kubeClient.Core().Events("")}) + eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: v1core.New(kubeClient.Core().RESTClient()).Events("")}) rm := &ReplicationManager{ kubeClient: kubeClient, podControl: controller.RealPodControl{ KubeClient: kubeClient, - Recorder: eventBroadcaster.NewRecorder(v1.EventSource{Component: "replication-controller"}), + Recorder: eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "replication-controller"}), }, burstReplicas: burstReplicas, expectations: controller.NewUIDTrackingControllerExpectations(controller.NewControllerExpectations()), diff --git a/pkg/controller/service/BUILD b/pkg/controller/service/BUILD index 247d9298de4..d460f512361 100644 --- a/pkg/controller/service/BUILD +++ b/pkg/controller/service/BUILD @@ -16,11 +16,10 @@ go_library( ], tags = ["automanaged"], deps = [ + "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", "//pkg/client/legacylisters:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/cloudprovider:go_default_library", "//pkg/controller:go_default_library", "//pkg/util/metrics:go_default_library", @@ -32,7 +31,10 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/runtime", "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/apimachinery/pkg/watch", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/workqueue", ], ) @@ -49,6 +51,7 @@ go_test( "//pkg/cloudprovider/providers/fake:go_default_library", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/types", + "//vendor:k8s.io/client-go/tools/record", ], ) diff --git a/pkg/controller/service/servicecontroller.go b/pkg/controller/service/servicecontroller.go index 19ad5afcaf3..6167040b24d 100644 --- a/pkg/controller/service/servicecontroller.go +++ b/pkg/controller/service/servicecontroller.go @@ -32,13 +32,15 @@ import ( "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/watch" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/workqueue" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - unversionedcore "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" "k8s.io/kubernetes/pkg/client/legacylisters" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/util/metrics" @@ -101,8 +103,8 @@ type ServiceController struct { // (like load balancers) in sync with the registry. func New(cloud cloudprovider.Interface, kubeClient clientset.Interface, clusterName string) (*ServiceController, error) { broadcaster := record.NewBroadcaster() - broadcaster.StartRecordingToSink(&unversionedcore.EventSinkImpl{Interface: kubeClient.Core().Events("")}) - recorder := broadcaster.NewRecorder(v1.EventSource{Component: "service-controller"}) + broadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: v1core.New(kubeClient.Core().RESTClient()).Events("")}) + recorder := broadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "service-controller"}) if kubeClient != nil && kubeClient.Core().RESTClient().GetRateLimiter() != nil { metrics.RegisterMetricAndTrackRateLimiterUsage("service_controller", kubeClient.Core().RESTClient().GetRateLimiter()) diff --git a/pkg/controller/service/servicecontroller_test.go b/pkg/controller/service/servicecontroller_test.go index 90549a8fc21..8b1e8bf9c36 100644 --- a/pkg/controller/service/servicecontroller_test.go +++ b/pkg/controller/service/servicecontroller_test.go @@ -22,6 +22,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake" @@ -96,6 +97,7 @@ func TestCreateExternalLoadBalancer(t *testing.T) { cloud.Region = region client := &fake.Clientset{} controller, _ := New(cloud, client, "test-cluster") + controller.eventRecorder = record.NewFakeRecorder(100) controller.init() cloud.Calls = nil // ignore any cloud calls made in init() client.ClearActions() // ignore any client calls made in init() @@ -220,6 +222,7 @@ func TestUpdateNodesInExternalLoadBalancer(t *testing.T) { cloud.Region = region client := &fake.Clientset{} controller, _ := New(cloud, client, "test-cluster2") + controller.eventRecorder = record.NewFakeRecorder(100) controller.init() cloud.Calls = nil // ignore any cloud calls made in init() diff --git a/pkg/controller/statefulset/BUILD b/pkg/controller/statefulset/BUILD index 138575b239a..0fb0c0746f9 100644 --- a/pkg/controller/statefulset/BUILD +++ b/pkg/controller/statefulset/BUILD @@ -20,14 +20,13 @@ go_library( ], tags = ["automanaged"], deps = [ + "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/api/v1/pod:go_default_library", "//pkg/apis/apps/v1beta1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/clientset_generated/clientset/typed/apps/v1beta1:go_default_library", - "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", "//pkg/client/legacylisters:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller:go_default_library", "//vendor:github.com/golang/glog", "//vendor:gopkg.in/inf.v0", @@ -41,7 +40,10 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/sets", "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/apimachinery/pkg/watch", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/workqueue", ], ) diff --git a/pkg/controller/statefulset/fakes.go b/pkg/controller/statefulset/fakes.go index ca847934ca8..fee99a450e2 100644 --- a/pkg/controller/statefulset/fakes.go +++ b/pkg/controller/statefulset/fakes.go @@ -26,10 +26,10 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" apipod "k8s.io/kubernetes/pkg/api/v1/pod" apps "k8s.io/kubernetes/pkg/apis/apps/v1beta1" - "k8s.io/kubernetes/pkg/client/record" ) func dec(i int64, exponent int) *inf.Dec { diff --git a/pkg/controller/statefulset/stateful_set.go b/pkg/controller/statefulset/stateful_set.go index fde4e6eb233..860062bc710 100644 --- a/pkg/controller/statefulset/stateful_set.go +++ b/pkg/controller/statefulset/stateful_set.go @@ -23,13 +23,15 @@ import ( "time" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" apps "k8s.io/kubernetes/pkg/apis/apps/v1beta1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" "k8s.io/kubernetes/pkg/client/legacylisters" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/errors" @@ -87,8 +89,8 @@ type StatefulSetController struct { func NewStatefulSetController(podInformer cache.SharedIndexInformer, kubeClient clientset.Interface, resyncPeriod time.Duration) *StatefulSetController { eventBroadcaster := record.NewBroadcaster() eventBroadcaster.StartLogging(glog.Infof) - eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: kubeClient.Core().Events("")}) - recorder := eventBroadcaster.NewRecorder(v1.EventSource{Component: "statefulset"}) + eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: v1core.New(kubeClient.Core().RESTClient()).Events("")}) + recorder := eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "statefulset"}) pc := &apiServerPetClient{kubeClient, recorder, &defaultPetHealthChecker{}} psc := &StatefulSetController{ diff --git a/pkg/controller/statefulset/statefulpod.go b/pkg/controller/statefulset/statefulpod.go index bb2ea101ef1..7479474ad39 100644 --- a/pkg/controller/statefulset/statefulpod.go +++ b/pkg/controller/statefulset/statefulpod.go @@ -23,10 +23,10 @@ import ( "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" apps "k8s.io/kubernetes/pkg/apis/apps/v1beta1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/client/record" "github.com/golang/glog" ) diff --git a/pkg/controller/volume/attachdetach/BUILD b/pkg/controller/volume/attachdetach/BUILD index 10ff25e02b7..ee42d8e3544 100644 --- a/pkg/controller/volume/attachdetach/BUILD +++ b/pkg/controller/volume/attachdetach/BUILD @@ -16,8 +16,6 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/cloudprovider:go_default_library", "//pkg/controller/volume/attachdetach/cache:go_default_library", "//pkg/controller/volume/attachdetach/populator:go_default_library", @@ -31,7 +29,10 @@ go_library( "//vendor:github.com/golang/glog", "//vendor:k8s.io/apimachinery/pkg/types", "//vendor:k8s.io/apimachinery/pkg/util/runtime", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", ], ) diff --git a/pkg/controller/volume/attachdetach/attach_detach_controller.go b/pkg/controller/volume/attachdetach/attach_detach_controller.go index 982b494eec2..4238074fbe4 100644 --- a/pkg/controller/volume/attachdetach/attach_detach_controller.go +++ b/pkg/controller/volume/attachdetach/attach_detach_controller.go @@ -26,12 +26,13 @@ import ( "github.com/golang/glog" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/runtime" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" kcache "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/controller/volume/attachdetach/cache" "k8s.io/kubernetes/pkg/controller/volume/attachdetach/populator" @@ -116,8 +117,8 @@ func NewAttachDetachController( eventBroadcaster := record.NewBroadcaster() eventBroadcaster.StartLogging(glog.Infof) - eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: kubeClient.Core().Events("")}) - recorder := eventBroadcaster.NewRecorder(v1.EventSource{Component: "attachdetach"}) + eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: v1core.New(kubeClient.Core().RESTClient()).Events("")}) + recorder := eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "attachdetach"}) adc.desiredStateOfWorld = cache.NewDesiredStateOfWorld(&adc.volumePluginMgr) adc.actualStateOfWorld = cache.NewActualStateOfWorld(&adc.volumePluginMgr) diff --git a/pkg/controller/volume/attachdetach/reconciler/BUILD b/pkg/controller/volume/attachdetach/reconciler/BUILD index f634fb25587..b976153ff4f 100644 --- a/pkg/controller/volume/attachdetach/reconciler/BUILD +++ b/pkg/controller/volume/attachdetach/reconciler/BUILD @@ -30,7 +30,6 @@ go_test( tags = ["automanaged"], deps = [ "//pkg/api/v1:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller/informers:go_default_library", "//pkg/controller/volume/attachdetach/cache:go_default_library", "//pkg/controller/volume/attachdetach/statusupdater:go_default_library", @@ -40,6 +39,7 @@ go_test( "//pkg/volume/util/types:go_default_library", "//vendor:k8s.io/apimachinery/pkg/types", "//vendor:k8s.io/apimachinery/pkg/util/wait", + "//vendor:k8s.io/client-go/tools/record", ], ) diff --git a/pkg/controller/volume/attachdetach/reconciler/reconciler_test.go b/pkg/controller/volume/attachdetach/reconciler/reconciler_test.go index 07eab555eb8..bed3ea39d90 100644 --- a/pkg/controller/volume/attachdetach/reconciler/reconciler_test.go +++ b/pkg/controller/volume/attachdetach/reconciler/reconciler_test.go @@ -22,8 +22,8 @@ import ( k8stypes "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/controller/informers" "k8s.io/kubernetes/pkg/controller/volume/attachdetach/cache" "k8s.io/kubernetes/pkg/controller/volume/attachdetach/statusupdater" diff --git a/pkg/controller/volume/persistentvolume/BUILD b/pkg/controller/volume/persistentvolume/BUILD index af978d75f87..799a94f0487 100644 --- a/pkg/controller/volume/persistentvolume/BUILD +++ b/pkg/controller/volume/persistentvolume/BUILD @@ -23,8 +23,6 @@ go_library( "//pkg/apis/storage/v1beta1:go_default_library", "//pkg/apis/storage/v1beta1/util:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/cloudprovider:go_default_library", "//pkg/controller:go_default_library", "//pkg/util/goroutinemap:go_default_library", @@ -40,7 +38,10 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/types", "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/apimachinery/pkg/watch", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/workqueue", ], ) @@ -66,7 +67,6 @@ go_test( "//pkg/apis/storage/v1beta1/util:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/clientset_generated/clientset/fake:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller/volume/persistentvolume/testing:go_default_library", "//pkg/volume:go_default_library", "//vendor:github.com/golang/glog", @@ -78,6 +78,7 @@ go_test( "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/client-go/testing", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", ], ) diff --git a/pkg/controller/volume/persistentvolume/framework_test.go b/pkg/controller/volume/persistentvolume/framework_test.go index 42260724ec1..f22bf556217 100644 --- a/pkg/controller/volume/persistentvolume/framework_test.go +++ b/pkg/controller/volume/persistentvolume/framework_test.go @@ -37,6 +37,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" core "k8s.io/client-go/testing" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/v1" @@ -44,7 +45,6 @@ import ( storageutil "k8s.io/kubernetes/pkg/apis/storage/v1beta1/util" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake" - "k8s.io/kubernetes/pkg/client/record" fcache "k8s.io/kubernetes/pkg/controller/volume/persistentvolume/testing" vol "k8s.io/kubernetes/pkg/volume" ) diff --git a/pkg/controller/volume/persistentvolume/index_test.go b/pkg/controller/volume/persistentvolume/index_test.go index d74100afe42..b0e87e795b5 100644 --- a/pkg/controller/volume/persistentvolume/index_test.go +++ b/pkg/controller/volume/persistentvolume/index_test.go @@ -22,6 +22,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/v1" storageutil "k8s.io/kubernetes/pkg/apis/storage/v1beta1/util" @@ -626,7 +627,7 @@ func TestFindingPreboundVolumes(t *testing.T) { Resources: v1.ResourceRequirements{Requests: v1.ResourceList{v1.ResourceName(v1.ResourceStorage): resource.MustParse("1Gi")}}, }, } - claimRef, err := v1.GetReference(claim) + claimRef, err := v1.GetReference(api.Scheme, claim) if err != nil { t.Errorf("error getting claimRef: %v", err) } diff --git a/pkg/controller/volume/persistentvolume/pv_controller.go b/pkg/controller/volume/persistentvolume/pv_controller.go index 0f9cf6126ce..1d5b54185d9 100644 --- a/pkg/controller/volume/persistentvolume/pv_controller.go +++ b/pkg/controller/volume/persistentvolume/pv_controller.go @@ -24,13 +24,13 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/workqueue" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" storage "k8s.io/kubernetes/pkg/apis/storage/v1beta1" storageutil "k8s.io/kubernetes/pkg/apis/storage/v1beta1/util" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/util/goroutinemap" vol "k8s.io/kubernetes/pkg/volume" @@ -746,7 +746,7 @@ func (ctrl *PersistentVolumeController) bindVolumeToClaim(volume *v1.PersistentV volume.Spec.ClaimRef.Namespace != claim.Namespace || volume.Spec.ClaimRef.UID != claim.UID { - claimRef, err := v1.GetReference(claim) + claimRef, err := v1.GetReference(api.Scheme, claim) if err != nil { return nil, fmt.Errorf("Unexpected error getting claim reference: %v", err) } @@ -1288,7 +1288,7 @@ func (ctrl *PersistentVolumeController) provisionClaimOperation(claimObj interfa // Prepare a claimRef to the claim early (to fail before a volume is // provisioned) - claimRef, err := v1.GetReference(claim) + claimRef, err := v1.GetReference(api.Scheme, claim) if err != nil { glog.V(3).Infof("unexpected error getting claim reference: %v", err) return diff --git a/pkg/controller/volume/persistentvolume/pv_controller_base.go b/pkg/controller/volume/persistentvolume/pv_controller_base.go index 13d78de5407..0c480865274 100644 --- a/pkg/controller/volume/persistentvolume/pv_controller_base.go +++ b/pkg/controller/volume/persistentvolume/pv_controller_base.go @@ -27,14 +27,15 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/watch" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/workqueue" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" storage "k8s.io/kubernetes/pkg/apis/storage/v1beta1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - unversionedcore "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/util/goroutinemap" @@ -66,8 +67,8 @@ func NewController(p ControllerParameters) *PersistentVolumeController { eventRecorder := p.EventRecorder if eventRecorder == nil { broadcaster := record.NewBroadcaster() - broadcaster.StartRecordingToSink(&unversionedcore.EventSinkImpl{Interface: p.KubeClient.Core().Events("")}) - eventRecorder = broadcaster.NewRecorder(v1.EventSource{Component: "persistentvolume-controller"}) + broadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: v1core.New(p.KubeClient.Core().RESTClient()).Events("")}) + eventRecorder = broadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "persistentvolume-controller"}) } controller := &PersistentVolumeController{ diff --git a/pkg/genericapiserver/endpoints/watch_test.go b/pkg/genericapiserver/endpoints/watch_test.go index d94d287cf81..3da84d60f0d 100644 --- a/pkg/genericapiserver/endpoints/watch_test.go +++ b/pkg/genericapiserver/endpoints/watch_test.go @@ -114,7 +114,7 @@ func TestWatchWebsocket(t *testing.T) { if err != nil { t.Fatalf("Decode error: %v\n%v", err, got) } - if _, err := api.GetReference(gotObj); err != nil { + if _, err := api.GetReference(api.Scheme, gotObj); err != nil { t.Errorf("Unable to construct reference: %v", err) } if e, a := object, gotObj; !reflect.DeepEqual(e, a) { @@ -167,7 +167,7 @@ func TestWatchWebsocketClientClose(t *testing.T) { if err != nil { t.Fatalf("Decode error: %v\n%v", err, got) } - if _, err := api.GetReference(gotObj); err != nil { + if _, err := api.GetReference(api.Scheme, gotObj); err != nil { t.Errorf("Unable to construct reference: %v", err) } if e, a := object, gotObj; !reflect.DeepEqual(e, a) { @@ -346,7 +346,7 @@ func TestWatchRead(t *testing.T) { if err != nil { t.Fatalf("%s: Decode error: %v", name, err) } - if _, err := api.GetReference(gotObj); err != nil { + if _, err := api.GetReference(api.Scheme, gotObj); err != nil { t.Errorf("%s: Unable to construct reference: %v", name, err) } if e, a := object, gotObj; !api.Semantic.DeepEqual(e, a) { diff --git a/pkg/kubectl/cmd/drain_test.go b/pkg/kubectl/cmd/drain_test.go index 976b2f34e5c..8bbc503aab7 100644 --- a/pkg/kubectl/cmd/drain_test.go +++ b/pkg/kubectl/cmd/drain_test.go @@ -745,7 +745,7 @@ func (m *MyReq) isFor(method string, path string) bool { } func refJson(t *testing.T, o runtime.Object) string { - ref, err := api.GetReference(o) + ref, err := api.GetReference(api.Scheme, o) if err != nil { t.Fatalf("unexpected error: %v", err) } diff --git a/pkg/kubectl/describe.go b/pkg/kubectl/describe.go index af534e64fb0..86d4c81676a 100644 --- a/pkg/kubectl/describe.go +++ b/pkg/kubectl/describe.go @@ -198,7 +198,7 @@ func (g *genericDescriber) Describe(namespace, name string, describerSettings De var events *api.EventList if describerSettings.ShowEvents { - events, _ = g.events.Events(namespace).Search(obj) + events, _ = g.events.Events(namespace).Search(api.Scheme, obj) } return tabbedString(func(out io.Writer) error { @@ -530,11 +530,11 @@ func (d *PodDescriber) Describe(namespace, name string, describerSettings Descri var events *api.EventList if describerSettings.ShowEvents { - if ref, err := api.GetReference(pod); err != nil { + if ref, err := api.GetReference(api.Scheme, pod); err != nil { glog.Errorf("Unable to construct reference to '%#v': %v", pod, err) } else { ref.Kind = "" - events, _ = d.Core().Events(namespace).Search(ref) + events, _ = d.Core().Events(namespace).Search(api.Scheme, ref) } } @@ -822,7 +822,7 @@ func (d *PersistentVolumeDescriber) Describe(namespace, name string, describerSe var events *api.EventList if describerSettings.ShowEvents { - events, _ = d.Core().Events(namespace).Search(pv) + events, _ = d.Core().Events(namespace).Search(api.Scheme, pv) } return tabbedString(func(out io.Writer) error { @@ -898,7 +898,7 @@ func (d *PersistentVolumeClaimDescriber) Describe(namespace, name string, descri capacity = storage.String() } - events, _ := d.Core().Events(namespace).Search(pvc) + events, _ := d.Core().Events(namespace).Search(api.Scheme, pvc) return tabbedString(func(out io.Writer) error { w := &PrefixWriter{out} @@ -1230,7 +1230,7 @@ func (d *ReplicationControllerDescriber) Describe(namespace, name string, descri var events *api.EventList if describerSettings.ShowEvents { - events, _ = d.Core().Events(namespace).Search(controller) + events, _ = d.Core().Events(namespace).Search(api.Scheme, controller) } return describeReplicationController(controller, events, running, waiting, succeeded, failed) @@ -1304,7 +1304,7 @@ func (d *ReplicaSetDescriber) Describe(namespace, name string, describerSettings var events *api.EventList if describerSettings.ShowEvents { - events, _ = d.Core().Events(namespace).Search(rs) + events, _ = d.Core().Events(namespace).Search(api.Scheme, rs) } return describeReplicaSet(rs, events, running, waiting, succeeded, failed, getPodErr) @@ -1346,7 +1346,7 @@ func (d *JobDescriber) Describe(namespace, name string, describerSettings Descri var events *api.EventList if describerSettings.ShowEvents { - events, _ = d.Core().Events(namespace).Search(job) + events, _ = d.Core().Events(namespace).Search(api.Scheme, job) } return describeJob(job, events) @@ -1395,7 +1395,7 @@ func (d *CronJobDescriber) Describe(namespace, name string, describerSettings De var events *api.EventList if describerSettings.ShowEvents { - events, _ = d.Core().Events(namespace).Search(scheduledJob) + events, _ = d.Core().Events(namespace).Search(api.Scheme, scheduledJob) } return describeCronJob(scheduledJob, events) @@ -1494,7 +1494,7 @@ func (d *DaemonSetDescriber) Describe(namespace, name string, describerSettings var events *api.EventList if describerSettings.ShowEvents { - events, _ = d.Core().Events(namespace).Search(daemon) + events, _ = d.Core().Events(namespace).Search(api.Scheme, daemon) } return describeDaemonSet(daemon, events, running, waiting, succeeded, failed) @@ -1641,7 +1641,7 @@ func (i *IngressDescriber) describeIngress(ing *extensions.Ingress, describerSet describeIngressAnnotations(w, ing.Annotations) if describerSettings.ShowEvents { - events, _ := i.Core().Events(ing.Namespace).Search(ing) + events, _ := i.Core().Events(ing.Namespace).Search(api.Scheme, ing) if events != nil { DescribeEvents(events, w) } @@ -1692,7 +1692,7 @@ func (d *ServiceDescriber) Describe(namespace, name string, describerSettings De endpoints, _ := d.Core().Endpoints(namespace).Get(name, metav1.GetOptions{}) var events *api.EventList if describerSettings.ShowEvents { - events, _ = d.Core().Events(namespace).Search(service) + events, _ = d.Core().Events(namespace).Search(api.Scheme, service) } return describeService(service, endpoints, events) } @@ -1771,7 +1771,7 @@ func (d *EndpointsDescriber) Describe(namespace, name string, describerSettings var events *api.EventList if describerSettings.ShowEvents { - events, _ = d.Core().Events(namespace).Search(ep) + events, _ = d.Core().Events(namespace).Search(api.Scheme, ep) } return describeEndpoints(ep, events) @@ -1967,12 +1967,12 @@ func (d *NodeDescriber) Describe(namespace, name string, describerSettings Descr var events *api.EventList if describerSettings.ShowEvents { - if ref, err := api.GetReference(node); err != nil { + if ref, err := api.GetReference(api.Scheme, node); err != nil { glog.Errorf("Unable to construct reference to '%#v': %v", node, err) } else { // TODO: We haven't decided the namespace for Node object yet. ref.UID = types.UID(ref.Name) - events, _ = d.Core().Events("").Search(ref) + events, _ = d.Core().Events("").Search(api.Scheme, ref) } } @@ -2094,7 +2094,7 @@ func (p *StatefulSetDescriber) Describe(namespace, name string, describerSetting w.Write(LEVEL_0, "Pods Status:\t%d Running / %d Waiting / %d Succeeded / %d Failed\n", running, waiting, succeeded, failed) describeVolumes(ps.Spec.Template.Spec.Volumes, w, "") if describerSettings.ShowEvents { - events, _ := p.client.Core().Events(namespace).Search(ps) + events, _ := p.client.Core().Events(namespace).Search(api.Scheme, ps) if events != nil { DescribeEvents(events, w) } @@ -2163,7 +2163,7 @@ func (p *CertificateSigningRequestDescriber) Describe(namespace, name string, de } if describerSettings.ShowEvents { - events, _ := p.client.Core().Events(namespace).Search(csr) + events, _ := p.client.Core().Events(namespace).Search(api.Scheme, csr) if events != nil { DescribeEvents(events, w) } @@ -2220,7 +2220,7 @@ func (d *HorizontalPodAutoscalerDescriber) Describe(namespace, name string, desc } if describerSettings.ShowEvents { - events, _ := d.client.Core().Events(namespace).Search(hpa) + events, _ := d.client.Core().Events(namespace).Search(api.Scheme, hpa) if events != nil { DescribeEvents(events, w) } @@ -2382,7 +2382,7 @@ func (dd *DeploymentDescriber) Describe(namespace, name string, describerSetting w.Write(LEVEL_0, "!!!WARNING!!! This deployment has overlapping label selector with deployment %q and won't behave as expected. Please fix it before continue.\n", overlapWith) } if describerSettings.ShowEvents { - events, err := dd.Core().Events(namespace).Search(d) + events, err := dd.Core().Events(namespace).Search(api.Scheme, d) if err == nil && events != nil { DescribeEvents(events, w) } @@ -2588,7 +2588,7 @@ func (s *StorageClassDescriber) Describe(namespace, name string, describerSettin w.Write(LEVEL_0, "Provisioner:\t%s\n", sc.Provisioner) w.Write(LEVEL_0, "Parameters:\t%s\n", labels.FormatLabels(sc.Parameters)) if describerSettings.ShowEvents { - events, err := s.Core().Events(namespace).Search(sc) + events, err := s.Core().Events(namespace).Search(api.Scheme, sc) if err != nil { return err } @@ -2624,7 +2624,7 @@ func (p *PodDisruptionBudgetDescriber) Describe(namespace, name string, describe w.Write(LEVEL_2, "Desired:\t%d\n", pdb.Status.DesiredHealthy) w.Write(LEVEL_2, "Total:\t%d\n", pdb.Status.ExpectedPods) if describerSettings.ShowEvents { - events, err := p.Core().Events(namespace).Search(pdb) + events, err := p.Core().Events(namespace).Search(api.Scheme, pdb) if err != nil { return err } diff --git a/pkg/kubelet/BUILD b/pkg/kubelet/BUILD index 46bfaad6be0..04fee365cb8 100644 --- a/pkg/kubelet/BUILD +++ b/pkg/kubelet/BUILD @@ -44,7 +44,6 @@ go_library( "//pkg/capabilities:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/legacylisters:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/cloudprovider:go_default_library", "//pkg/features:go_default_library", "//pkg/fieldpath:go_default_library", @@ -125,7 +124,9 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/apiserver/pkg/util/feature", "//vendor:k8s.io/client-go/kubernetes", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/clock", "//vendor:k8s.io/client-go/util/flowcontrol", "//vendor:k8s.io/client-go/util/integer", @@ -159,7 +160,6 @@ go_test( "//pkg/apis/componentconfig:go_default_library", "//pkg/capabilities:go_default_library", "//pkg/client/clientset_generated/clientset/fake:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/kubelet/cadvisor/testing:go_default_library", "//pkg/kubelet/cm:go_default_library", "//pkg/kubelet/config:go_default_library", @@ -209,6 +209,7 @@ go_test( "//vendor:k8s.io/apimachinery/pkg/util/uuid", "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/client-go/testing", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/clock", "//vendor:k8s.io/client-go/util/flowcontrol", "//vendor:k8s.io/client-go/util/testing", diff --git a/pkg/kubelet/active_deadline.go b/pkg/kubelet/active_deadline.go index 4269016bd18..bf29e3b5695 100644 --- a/pkg/kubelet/active_deadline.go +++ b/pkg/kubelet/active_deadline.go @@ -20,9 +20,9 @@ import ( "fmt" "time" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/clock" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/kubelet/lifecycle" "k8s.io/kubernetes/pkg/kubelet/status" ) diff --git a/pkg/kubelet/active_deadline_test.go b/pkg/kubelet/active_deadline_test.go index 5a98270fd65..aa02259950d 100644 --- a/pkg/kubelet/active_deadline_test.go +++ b/pkg/kubelet/active_deadline_test.go @@ -22,9 +22,9 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/clock" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" ) // mockPodStatusProvider returns the status on the specified pod diff --git a/pkg/kubelet/config/BUILD b/pkg/kubelet/config/BUILD index f6d0db1cea5..5a7b4713b57 100644 --- a/pkg/kubelet/config/BUILD +++ b/pkg/kubelet/config/BUILD @@ -27,7 +27,6 @@ go_library( "//pkg/api/v1/pod:go_default_library", "//pkg/api/validation:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/kubelet/container:go_default_library", "//pkg/kubelet/events:go_default_library", "//pkg/kubelet/types:go_default_library", @@ -45,6 +44,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/apimachinery/pkg/util/yaml", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", ], ) @@ -64,7 +64,6 @@ go_test( "//pkg/api/testapi:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/api/validation:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/kubelet/types:go_default_library", "//pkg/securitycontext:go_default_library", "//vendor:k8s.io/apimachinery/pkg/api/equality", @@ -73,7 +72,9 @@ go_test( "//vendor:k8s.io/apimachinery/pkg/types", "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/apimachinery/pkg/watch", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/testing", ], ) diff --git a/pkg/kubelet/config/config.go b/pkg/kubelet/config/config.go index 99da6ad9ec2..6507f860f95 100644 --- a/pkg/kubelet/config/config.go +++ b/pkg/kubelet/config/config.go @@ -24,11 +24,11 @@ import ( "github.com/golang/glog" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" podutil "k8s.io/kubernetes/pkg/api/v1/pod" "k8s.io/kubernetes/pkg/api/validation" - "k8s.io/kubernetes/pkg/client/record" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/events" kubetypes "k8s.io/kubernetes/pkg/kubelet/types" diff --git a/pkg/kubelet/config/config_test.go b/pkg/kubelet/config/config_test.go index 6d16d29dfad..50c14d7f092 100644 --- a/pkg/kubelet/config/config_test.go +++ b/pkg/kubelet/config/config_test.go @@ -27,9 +27,10 @@ import ( apiequality "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + clientv1 "k8s.io/client-go/pkg/api/v1" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" kubetypes "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/securitycontext" ) @@ -87,7 +88,7 @@ func CreatePodUpdate(op kubetypes.PodOperation, source string, pods ...*v1.Pod) func createPodConfigTester(mode PodConfigNotificationMode) (chan<- interface{}, <-chan kubetypes.PodUpdate, *PodConfig) { eventBroadcaster := record.NewBroadcaster() - config := NewPodConfig(mode, eventBroadcaster.NewRecorder(v1.EventSource{Component: "kubelet"})) + config := NewPodConfig(mode, eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "kubelet"})) channel := config.Channel(TestSource) ch := config.Updates() return channel, ch, config diff --git a/pkg/kubelet/container/BUILD b/pkg/kubelet/container/BUILD index f4d5cce4acb..1f0a5fa2503 100644 --- a/pkg/kubelet/container/BUILD +++ b/pkg/kubelet/container/BUILD @@ -26,8 +26,8 @@ go_library( ], tags = ["automanaged"], deps = [ + "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/kubelet/api/v1alpha1/runtime:go_default_library", "//pkg/kubelet/util/format:go_default_library", "//pkg/kubelet/util/ioutils:go_default_library", @@ -42,6 +42,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/types", "//vendor:k8s.io/apimachinery/pkg/util/errors", "//vendor:k8s.io/apimachinery/pkg/util/runtime", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/flowcontrol", ], ) diff --git a/pkg/kubelet/container/helpers.go b/pkg/kubelet/container/helpers.go index e9170713e4f..b57c0edb99e 100644 --- a/pkg/kubelet/container/helpers.go +++ b/pkg/kubelet/container/helpers.go @@ -29,8 +29,8 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" runtimeapi "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime" "k8s.io/kubernetes/pkg/kubelet/util/format" "k8s.io/kubernetes/pkg/kubelet/util/ioutils" diff --git a/pkg/kubelet/container/ref.go b/pkg/kubelet/container/ref.go index 04d896dcb53..dcd303db3de 100644 --- a/pkg/kubelet/container/ref.go +++ b/pkg/kubelet/container/ref.go @@ -19,6 +19,7 @@ package container import ( "fmt" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" ) @@ -37,7 +38,7 @@ func GenerateContainerRef(pod *v1.Pod, container *v1.Container) (*v1.ObjectRefer // start (like the pod infra container). This is not a good way, ugh. fieldPath = ImplicitContainerPrefix + container.Name } - ref, err := v1.GetPartialReference(pod, fieldPath) + ref, err := v1.GetPartialReference(api.Scheme, pod, fieldPath) if err != nil { return nil, err } diff --git a/pkg/kubelet/dockertools/BUILD b/pkg/kubelet/dockertools/BUILD index 39b7112ecd8..522db59849a 100644 --- a/pkg/kubelet/dockertools/BUILD +++ b/pkg/kubelet/dockertools/BUILD @@ -28,7 +28,6 @@ go_library( deps = [ "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/credentialprovider:go_default_library", "//pkg/kubelet/cm:go_default_library", "//pkg/kubelet/container:go_default_library", @@ -76,6 +75,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/errors", "//vendor:k8s.io/apimachinery/pkg/util/runtime", "//vendor:k8s.io/apimachinery/pkg/util/sets", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/clock", "//vendor:k8s.io/client-go/util/flowcontrol", ], @@ -105,7 +105,6 @@ go_test( "//pkg/api/testapi:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/apis/componentconfig:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/credentialprovider:go_default_library", "//pkg/kubelet/container:go_default_library", "//pkg/kubelet/container/testing:go_default_library", @@ -135,6 +134,7 @@ go_test( "//vendor:k8s.io/apimachinery/pkg/types", "//vendor:k8s.io/apimachinery/pkg/util/intstr", "//vendor:k8s.io/apimachinery/pkg/util/sets", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/clock", "//vendor:k8s.io/client-go/util/flowcontrol", ], diff --git a/pkg/kubelet/dockertools/docker_manager.go b/pkg/kubelet/dockertools/docker_manager.go index fb3375731a1..122965d2b34 100644 --- a/pkg/kubelet/dockertools/docker_manager.go +++ b/pkg/kubelet/dockertools/docker_manager.go @@ -48,10 +48,10 @@ import ( kubetypes "k8s.io/apimachinery/pkg/types" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/flowcontrol" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/kubelet/cm" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/events" diff --git a/pkg/kubelet/dockertools/docker_manager_linux_test.go b/pkg/kubelet/dockertools/docker_manager_linux_test.go index 7c1d3bbbc5a..cb975afb36d 100644 --- a/pkg/kubelet/dockertools/docker_manager_linux_test.go +++ b/pkg/kubelet/dockertools/docker_manager_linux_test.go @@ -28,8 +28,8 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/events" "k8s.io/kubernetes/pkg/kubelet/network" diff --git a/pkg/kubelet/dockertools/docker_manager_test.go b/pkg/kubelet/dockertools/docker_manager_test.go index 37ae5f1d086..958da658f4a 100644 --- a/pkg/kubelet/dockertools/docker_manager_test.go +++ b/pkg/kubelet/dockertools/docker_manager_test.go @@ -43,12 +43,12 @@ import ( kubetypes "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/clock" "k8s.io/client-go/util/flowcontrol" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/apis/componentconfig" - "k8s.io/kubernetes/pkg/client/record" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" containertest "k8s.io/kubernetes/pkg/kubelet/container/testing" "k8s.io/kubernetes/pkg/kubelet/images" diff --git a/pkg/kubelet/dockertools/docker_test.go b/pkg/kubelet/dockertools/docker_test.go index 0cc1ef83bf6..87f873fdd2f 100644 --- a/pkg/kubelet/dockertools/docker_test.go +++ b/pkg/kubelet/dockertools/docker_test.go @@ -34,9 +34,9 @@ import ( cadvisorapi "github.com/google/cadvisor/info/v1" "github.com/stretchr/testify/assert" "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/apis/componentconfig" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/credentialprovider" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" containertest "k8s.io/kubernetes/pkg/kubelet/container/testing" diff --git a/pkg/kubelet/dockertools/fake_manager.go b/pkg/kubelet/dockertools/fake_manager.go index d762950646e..a1b0b9a1fa9 100644 --- a/pkg/kubelet/dockertools/fake_manager.go +++ b/pkg/kubelet/dockertools/fake_manager.go @@ -19,9 +19,9 @@ package dockertools import ( cadvisorapi "github.com/google/cadvisor/info/v1" "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/flowcontrol" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/network" proberesults "k8s.io/kubernetes/pkg/kubelet/prober/results" diff --git a/pkg/kubelet/eviction/BUILD b/pkg/kubelet/eviction/BUILD index 42cc3d889cc..1884faf0fce 100644 --- a/pkg/kubelet/eviction/BUILD +++ b/pkg/kubelet/eviction/BUILD @@ -22,7 +22,6 @@ go_library( deps = [ "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/kubelet/api/v1alpha1/stats:go_default_library", "//pkg/kubelet/cm:go_default_library", "//pkg/kubelet/lifecycle:go_default_library", @@ -37,6 +36,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/util/sets", "//vendor:k8s.io/apimachinery/pkg/util/wait", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/clock", ], ) @@ -52,7 +52,6 @@ go_test( deps = [ "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/kubelet/api/v1alpha1/stats:go_default_library", "//pkg/kubelet/lifecycle:go_default_library", "//pkg/kubelet/types:go_default_library", @@ -60,6 +59,7 @@ go_test( "//vendor:k8s.io/apimachinery/pkg/api/resource", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/types", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/clock", ], ) diff --git a/pkg/kubelet/eviction/eviction_manager.go b/pkg/kubelet/eviction/eviction_manager.go index 2fcd202a84b..50c5f9cdc36 100644 --- a/pkg/kubelet/eviction/eviction_manager.go +++ b/pkg/kubelet/eviction/eviction_manager.go @@ -25,9 +25,9 @@ import ( "github.com/golang/glog" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/clock" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/kubelet/cm" "k8s.io/kubernetes/pkg/kubelet/lifecycle" kubepod "k8s.io/kubernetes/pkg/kubelet/pod" diff --git a/pkg/kubelet/eviction/eviction_manager_test.go b/pkg/kubelet/eviction/eviction_manager_test.go index 8013a079594..6617f8e6b4b 100644 --- a/pkg/kubelet/eviction/eviction_manager_test.go +++ b/pkg/kubelet/eviction/eviction_manager_test.go @@ -22,9 +22,9 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/clock" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" statsapi "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/stats" "k8s.io/kubernetes/pkg/kubelet/lifecycle" kubetypes "k8s.io/kubernetes/pkg/kubelet/types" diff --git a/pkg/kubelet/images/BUILD b/pkg/kubelet/images/BUILD index 85145e5cbd2..b974557f186 100644 --- a/pkg/kubelet/images/BUILD +++ b/pkg/kubelet/images/BUILD @@ -21,7 +21,6 @@ go_library( tags = ["automanaged"], deps = [ "//pkg/api/v1:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/kubelet/cadvisor:go_default_library", "//pkg/kubelet/container:go_default_library", "//pkg/kubelet/events:go_default_library", @@ -31,6 +30,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/errors", "//vendor:k8s.io/apimachinery/pkg/util/sets", "//vendor:k8s.io/apimachinery/pkg/util/wait", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/flowcontrol", ], ) @@ -45,7 +45,6 @@ go_test( tags = ["automanaged"], deps = [ "//pkg/api/v1:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/kubelet/cadvisor/testing:go_default_library", "//pkg/kubelet/container:go_default_library", "//pkg/kubelet/container/testing:go_default_library", @@ -53,6 +52,7 @@ go_test( "//vendor:github.com/stretchr/testify/assert", "//vendor:github.com/stretchr/testify/require", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/clock", "//vendor:k8s.io/client-go/util/flowcontrol", ], diff --git a/pkg/kubelet/images/image_gc_manager.go b/pkg/kubelet/images/image_gc_manager.go index 090c15f64d5..bab60ac99a4 100644 --- a/pkg/kubelet/images/image_gc_manager.go +++ b/pkg/kubelet/images/image_gc_manager.go @@ -27,8 +27,8 @@ import ( "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/kubelet/cadvisor" "k8s.io/kubernetes/pkg/kubelet/container" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" diff --git a/pkg/kubelet/images/image_gc_manager_test.go b/pkg/kubelet/images/image_gc_manager_test.go index 4ef7ff4e108..c9f5e1508b5 100644 --- a/pkg/kubelet/images/image_gc_manager_test.go +++ b/pkg/kubelet/images/image_gc_manager_test.go @@ -24,8 +24,8 @@ import ( cadvisorapiv2 "github.com/google/cadvisor/info/v2" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/clock" - "k8s.io/kubernetes/pkg/client/record" cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing" "k8s.io/kubernetes/pkg/kubelet/container" containertest "k8s.io/kubernetes/pkg/kubelet/container/testing" diff --git a/pkg/kubelet/images/image_manager.go b/pkg/kubelet/images/image_manager.go index a6180913145..c6488fc3376 100644 --- a/pkg/kubelet/images/image_manager.go +++ b/pkg/kubelet/images/image_manager.go @@ -21,9 +21,9 @@ import ( dockerref "github.com/docker/distribution/reference" "github.com/golang/glog" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/flowcontrol" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/events" "k8s.io/kubernetes/pkg/util/parsers" diff --git a/pkg/kubelet/images/image_manager_test.go b/pkg/kubelet/images/image_manager_test.go index a4cb9a3e351..dcc5cd57a96 100644 --- a/pkg/kubelet/images/image_manager_test.go +++ b/pkg/kubelet/images/image_manager_test.go @@ -23,10 +23,10 @@ import ( "github.com/stretchr/testify/assert" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/clock" "k8s.io/client-go/util/flowcontrol" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" . "k8s.io/kubernetes/pkg/kubelet/container" ctest "k8s.io/kubernetes/pkg/kubelet/container/testing" ) diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index 91a8703cc1e..314b34abf64 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -43,7 +43,9 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" utilfeature "k8s.io/apiserver/pkg/util/feature" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/clock" "k8s.io/client-go/util/flowcontrol" "k8s.io/client-go/util/integer" @@ -53,7 +55,6 @@ import ( componentconfigv1alpha1 "k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" "k8s.io/kubernetes/pkg/client/legacylisters" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/features" internalapi "k8s.io/kubernetes/pkg/kubelet/api" @@ -217,7 +218,7 @@ type KubeletDeps struct { Cloud cloudprovider.Interface ContainerManager cm.ContainerManager DockerClient dockertools.DockerInterface - EventClient *clientset.Clientset + EventClient v1core.EventsGetter KubeClient *clientset.Clientset ExternalKubeClient clientgoclientset.Interface Mounter mount.Interface diff --git a/pkg/kubelet/kubelet_network_test.go b/pkg/kubelet/kubelet_network_test.go index 10be66aba6e..6177dc7e414 100644 --- a/pkg/kubelet/kubelet_network_test.go +++ b/pkg/kubelet/kubelet_network_test.go @@ -23,8 +23,8 @@ import ( "strings" "testing" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/util/bandwidth" ) diff --git a/pkg/kubelet/kubelet_test.go b/pkg/kubelet/kubelet_test.go index a60fbe7bbe0..84f16eb6040 100644 --- a/pkg/kubelet/kubelet_test.go +++ b/pkg/kubelet/kubelet_test.go @@ -34,13 +34,13 @@ import ( utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/clock" "k8s.io/client-go/util/flowcontrol" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/apis/componentconfig" "k8s.io/kubernetes/pkg/capabilities" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake" - "k8s.io/kubernetes/pkg/client/record" cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing" "k8s.io/kubernetes/pkg/kubelet/cm" "k8s.io/kubernetes/pkg/kubelet/config" diff --git a/pkg/kubelet/kuberuntime/BUILD b/pkg/kubelet/kuberuntime/BUILD index 49a0e599f40..644cc23c96b 100644 --- a/pkg/kubelet/kuberuntime/BUILD +++ b/pkg/kubelet/kuberuntime/BUILD @@ -27,8 +27,8 @@ go_library( ], tags = ["automanaged"], deps = [ + "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/credentialprovider:go_default_library", "//pkg/kubelet/api:go_default_library", "//pkg/kubelet/api/v1alpha1/runtime:go_default_library", @@ -59,6 +59,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/errors", "//vendor:k8s.io/apimachinery/pkg/util/runtime", "//vendor:k8s.io/apimachinery/pkg/util/sets", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/flowcontrol", ], ) diff --git a/pkg/kubelet/kuberuntime/fake_kuberuntime_manager.go b/pkg/kubelet/kuberuntime/fake_kuberuntime_manager.go index 78d5146393b..78f7fd8796f 100644 --- a/pkg/kubelet/kuberuntime/fake_kuberuntime_manager.go +++ b/pkg/kubelet/kuberuntime/fake_kuberuntime_manager.go @@ -24,9 +24,9 @@ import ( cadvisorapi "github.com/google/cadvisor/info/v1" "k8s.io/apimachinery/pkg/types" kubetypes "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/flowcontrol" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/credentialprovider" internalapi "k8s.io/kubernetes/pkg/kubelet/api" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" diff --git a/pkg/kubelet/kuberuntime/kuberuntime_manager.go b/pkg/kubelet/kuberuntime/kuberuntime_manager.go index a9e45923bf9..e6218394594 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_manager.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_manager.go @@ -28,9 +28,10 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kubetypes "k8s.io/apimachinery/pkg/types" utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/flowcontrol" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/credentialprovider" internalapi "k8s.io/kubernetes/pkg/kubelet/api" runtimeapi "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime" @@ -547,7 +548,7 @@ func (m *kubeGenericRuntimeManager) SyncPod(pod *v1.Pod, _ v1.PodStatus, podStat podContainerChanges := m.computePodContainerChanges(pod, podStatus) glog.V(3).Infof("computePodContainerChanges got %+v for pod %q", podContainerChanges, format.Pod(pod)) if podContainerChanges.CreateSandbox { - ref, err := v1.GetReference(pod) + ref, err := v1.GetReference(api.Scheme, pod) if err != nil { glog.Errorf("Couldn't make a ref to pod %q: '%v'", format.Pod(pod), err) } diff --git a/pkg/kubelet/oom_watcher.go b/pkg/kubelet/oom_watcher.go index 19837cfcd04..2e5dfeac2a3 100644 --- a/pkg/kubelet/oom_watcher.go +++ b/pkg/kubelet/oom_watcher.go @@ -22,8 +22,8 @@ import ( cadvisorapi "github.com/google/cadvisor/info/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/kubelet/cadvisor" ) diff --git a/pkg/kubelet/oom_watcher_test.go b/pkg/kubelet/oom_watcher_test.go index 6d43bb05d45..f00efbe619d 100644 --- a/pkg/kubelet/oom_watcher_test.go +++ b/pkg/kubelet/oom_watcher_test.go @@ -19,8 +19,8 @@ package kubelet import ( "testing" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing" ) diff --git a/pkg/kubelet/pod_workers.go b/pkg/kubelet/pod_workers.go index 606fc55516a..957bd6b1bc9 100644 --- a/pkg/kubelet/pod_workers.go +++ b/pkg/kubelet/pod_workers.go @@ -25,8 +25,8 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/events" "k8s.io/kubernetes/pkg/kubelet/eviction" diff --git a/pkg/kubelet/pod_workers_test.go b/pkg/kubelet/pod_workers_test.go index f337dd24daa..c20d6023984 100644 --- a/pkg/kubelet/pod_workers_test.go +++ b/pkg/kubelet/pod_workers_test.go @@ -24,9 +24,9 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/clock" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" containertest "k8s.io/kubernetes/pkg/kubelet/container/testing" kubetypes "k8s.io/kubernetes/pkg/kubelet/types" diff --git a/pkg/kubelet/prober/BUILD b/pkg/kubelet/prober/BUILD index 836128ed8c9..b1713519dd6 100644 --- a/pkg/kubelet/prober/BUILD +++ b/pkg/kubelet/prober/BUILD @@ -18,7 +18,6 @@ go_library( tags = ["automanaged"], deps = [ "//pkg/api/v1:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/kubelet/container:go_default_library", "//pkg/kubelet/events:go_default_library", "//pkg/kubelet/prober/results:go_default_library", @@ -35,6 +34,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/runtime", "//vendor:k8s.io/apimachinery/pkg/util/sets", "//vendor:k8s.io/apimachinery/pkg/util/wait", + "//vendor:k8s.io/client-go/tools/record", ], ) @@ -51,7 +51,6 @@ go_test( deps = [ "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset/fake:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/kubelet/container:go_default_library", "//pkg/kubelet/container/testing:go_default_library", "//pkg/kubelet/pod:go_default_library", @@ -65,6 +64,7 @@ go_test( "//vendor:k8s.io/apimachinery/pkg/util/intstr", "//vendor:k8s.io/apimachinery/pkg/util/runtime", "//vendor:k8s.io/apimachinery/pkg/util/wait", + "//vendor:k8s.io/client-go/tools/record", ], ) diff --git a/pkg/kubelet/prober/common_test.go b/pkg/kubelet/prober/common_test.go index 2dcc972c6ef..6a3b4157502 100644 --- a/pkg/kubelet/prober/common_test.go +++ b/pkg/kubelet/prober/common_test.go @@ -21,9 +21,9 @@ import ( "sync" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake" - "k8s.io/kubernetes/pkg/client/record" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" kubepod "k8s.io/kubernetes/pkg/kubelet/pod" "k8s.io/kubernetes/pkg/kubelet/prober/results" diff --git a/pkg/kubelet/prober/prober.go b/pkg/kubelet/prober/prober.go index e69bff9db0f..29a76a53c01 100644 --- a/pkg/kubelet/prober/prober.go +++ b/pkg/kubelet/prober/prober.go @@ -27,8 +27,8 @@ import ( "time" "k8s.io/apimachinery/pkg/util/intstr" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/events" "k8s.io/kubernetes/pkg/kubelet/prober/results" diff --git a/pkg/kubelet/prober/prober_manager.go b/pkg/kubelet/prober/prober_manager.go index 7a401de50e0..a8518f69581 100644 --- a/pkg/kubelet/prober/prober_manager.go +++ b/pkg/kubelet/prober/prober_manager.go @@ -23,8 +23,8 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/prober/results" "k8s.io/kubernetes/pkg/kubelet/status" diff --git a/pkg/kubelet/prober/prober_test.go b/pkg/kubelet/prober/prober_test.go index aa109f04d9f..5f4393ded77 100644 --- a/pkg/kubelet/prober/prober_test.go +++ b/pkg/kubelet/prober/prober_test.go @@ -24,8 +24,8 @@ import ( "testing" "k8s.io/apimachinery/pkg/util/intstr" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" containertest "k8s.io/kubernetes/pkg/kubelet/container/testing" "k8s.io/kubernetes/pkg/kubelet/prober/results" diff --git a/pkg/kubelet/prober/worker_test.go b/pkg/kubelet/prober/worker_test.go index 590756a3249..6239dc0f213 100644 --- a/pkg/kubelet/prober/worker_test.go +++ b/pkg/kubelet/prober/worker_test.go @@ -24,9 +24,9 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake" - "k8s.io/kubernetes/pkg/client/record" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" kubepod "k8s.io/kubernetes/pkg/kubelet/pod" "k8s.io/kubernetes/pkg/kubelet/prober/results" diff --git a/pkg/kubelet/rkt/BUILD b/pkg/kubelet/rkt/BUILD index 873cc8bec6c..b2ce390c7af 100644 --- a/pkg/kubelet/rkt/BUILD +++ b/pkg/kubelet/rkt/BUILD @@ -24,7 +24,6 @@ go_library( tags = ["automanaged"], deps = [ "//pkg/api/v1:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/credentialprovider:go_default_library", "//pkg/kubelet/container:go_default_library", "//pkg/kubelet/events:go_default_library", @@ -57,6 +56,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/errors", "//vendor:k8s.io/apimachinery/pkg/util/uuid", "//vendor:k8s.io/apimachinery/pkg/util/wait", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/flowcontrol", ], ) diff --git a/pkg/kubelet/rkt/rkt.go b/pkg/kubelet/rkt/rkt.go index de620f97a50..e3fea86420b 100644 --- a/pkg/kubelet/rkt/rkt.go +++ b/pkg/kubelet/rkt/rkt.go @@ -46,9 +46,9 @@ import ( "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/uuid" utilwait "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/flowcontrol" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/credentialprovider" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/events" diff --git a/pkg/kubelet/runonce_test.go b/pkg/kubelet/runonce_test.go index 1a1e39e90ab..96e5d783d09 100644 --- a/pkg/kubelet/runonce_test.go +++ b/pkg/kubelet/runonce_test.go @@ -25,12 +25,12 @@ import ( cadvisorapiv2 "github.com/google/cadvisor/info/v2" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/clock" utiltesting "k8s.io/client-go/util/testing" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/apis/componentconfig" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake" - "k8s.io/kubernetes/pkg/client/record" cadvisortest "k8s.io/kubernetes/pkg/kubelet/cadvisor/testing" "k8s.io/kubernetes/pkg/kubelet/cm" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" diff --git a/pkg/kubelet/volumemanager/BUILD b/pkg/kubelet/volumemanager/BUILD index 90d1bffa405..dd82d53fc25 100644 --- a/pkg/kubelet/volumemanager/BUILD +++ b/pkg/kubelet/volumemanager/BUILD @@ -15,7 +15,6 @@ go_library( deps = [ "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/kubelet/config:go_default_library", "//pkg/kubelet/container:go_default_library", "//pkg/kubelet/pod:go_default_library", @@ -33,6 +32,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/util/runtime", "//vendor:k8s.io/apimachinery/pkg/util/sets", "//vendor:k8s.io/apimachinery/pkg/util/wait", + "//vendor:k8s.io/client-go/tools/record", ], ) @@ -45,7 +45,6 @@ go_test( "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/clientset_generated/clientset/fake:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/kubelet/config:go_default_library", "//pkg/kubelet/container/testing:go_default_library", "//pkg/kubelet/pod:go_default_library", @@ -58,6 +57,7 @@ go_test( "//pkg/volume/util/volumehelper:go_default_library", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/util/sets", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/testing", ], ) diff --git a/pkg/kubelet/volumemanager/reconciler/BUILD b/pkg/kubelet/volumemanager/reconciler/BUILD index b4470d3c07c..d8212e6ac73 100644 --- a/pkg/kubelet/volumemanager/reconciler/BUILD +++ b/pkg/kubelet/volumemanager/reconciler/BUILD @@ -42,7 +42,6 @@ go_test( deps = [ "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset/fake:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/kubelet/config:go_default_library", "//pkg/kubelet/volumemanager/cache:go_default_library", "//pkg/util/mount:go_default_library", @@ -57,6 +56,7 @@ go_test( "//vendor:k8s.io/apimachinery/pkg/util/sets", "//vendor:k8s.io/apimachinery/pkg/util/wait", "//vendor:k8s.io/client-go/testing", + "//vendor:k8s.io/client-go/tools/record", ], ) diff --git a/pkg/kubelet/volumemanager/reconciler/reconciler_test.go b/pkg/kubelet/volumemanager/reconciler/reconciler_test.go index 1467eb2776a..6b027e2b93b 100644 --- a/pkg/kubelet/volumemanager/reconciler/reconciler_test.go +++ b/pkg/kubelet/volumemanager/reconciler/reconciler_test.go @@ -28,9 +28,9 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" core "k8s.io/client-go/testing" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/kubelet/config" "k8s.io/kubernetes/pkg/kubelet/volumemanager/cache" "k8s.io/kubernetes/pkg/util/mount" diff --git a/pkg/kubelet/volumemanager/volume_manager.go b/pkg/kubelet/volumemanager/volume_manager.go index 12aa1694013..fc330c4f83f 100644 --- a/pkg/kubelet/volumemanager/volume_manager.go +++ b/pkg/kubelet/volumemanager/volume_manager.go @@ -26,9 +26,9 @@ import ( "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/kubelet/config" "k8s.io/kubernetes/pkg/kubelet/container" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" diff --git a/pkg/kubelet/volumemanager/volume_manager_test.go b/pkg/kubelet/volumemanager/volume_manager_test.go index 36a63c5f251..88fdf0849b5 100644 --- a/pkg/kubelet/volumemanager/volume_manager_test.go +++ b/pkg/kubelet/volumemanager/volume_manager_test.go @@ -25,11 +25,11 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/client-go/tools/record" utiltesting "k8s.io/client-go/util/testing" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/kubelet/config" containertest "k8s.io/kubernetes/pkg/kubelet/container/testing" "k8s.io/kubernetes/pkg/kubelet/pod" diff --git a/pkg/kubemark/BUILD b/pkg/kubemark/BUILD index 72dde32f894..1058f05aa75 100644 --- a/pkg/kubemark/BUILD +++ b/pkg/kubemark/BUILD @@ -24,7 +24,6 @@ go_library( "//pkg/apis/componentconfig/v1alpha1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/kubelet:go_default_library", "//pkg/kubelet/cadvisor:go_default_library", "//pkg/kubelet/cm:go_default_library", @@ -43,6 +42,7 @@ go_library( "//vendor:github.com/golang/glog", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/types", + "//vendor:k8s.io/client-go/tools/record", ], ) diff --git a/pkg/kubemark/hollow_proxy.go b/pkg/kubemark/hollow_proxy.go index 65481412d89..9547101207c 100644 --- a/pkg/kubemark/hollow_proxy.go +++ b/pkg/kubemark/hollow_proxy.go @@ -20,12 +20,12 @@ import ( "time" "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/tools/record" proxyapp "k8s.io/kubernetes/cmd/kube-proxy/app" "k8s.io/kubernetes/cmd/kube-proxy/app/options" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" - "k8s.io/kubernetes/pkg/client/record" proxyconfig "k8s.io/kubernetes/pkg/proxy/config" "k8s.io/kubernetes/pkg/util" utiliptables "k8s.io/kubernetes/pkg/util/iptables" diff --git a/pkg/proxy/iptables/BUILD b/pkg/proxy/iptables/BUILD index 85db5e56ac1..f9366d0198d 100644 --- a/pkg/proxy/iptables/BUILD +++ b/pkg/proxy/iptables/BUILD @@ -16,7 +16,6 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/service:go_default_library", "//pkg/api/v1:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/features:go_default_library", "//pkg/proxy:go_default_library", "//pkg/proxy/healthcheck:go_default_library", @@ -30,6 +29,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/types", "//vendor:k8s.io/apimachinery/pkg/util/sets", "//vendor:k8s.io/apiserver/pkg/util/feature", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/flowcontrol", ], ) diff --git a/pkg/proxy/iptables/proxier.go b/pkg/proxy/iptables/proxier.go index 265387c0d09..6f63fb80d08 100644 --- a/pkg/proxy/iptables/proxier.go +++ b/pkg/proxy/iptables/proxier.go @@ -38,11 +38,11 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/client-go/tools/record" "k8s.io/client-go/util/flowcontrol" "k8s.io/kubernetes/pkg/api" apiservice "k8s.io/kubernetes/pkg/api/service" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/proxy" "k8s.io/kubernetes/pkg/proxy/healthcheck" diff --git a/pkg/volume/util/operationexecutor/BUILD b/pkg/volume/util/operationexecutor/BUILD index 5f34087b1d7..6bed7977c83 100644 --- a/pkg/volume/util/operationexecutor/BUILD +++ b/pkg/volume/util/operationexecutor/BUILD @@ -18,7 +18,6 @@ go_library( deps = [ "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/kubelet/events:go_default_library", "//pkg/util/mount:go_default_library", "//pkg/volume:go_default_library", @@ -29,6 +28,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/api/errors", "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/types", + "//vendor:k8s.io/client-go/tools/record", ], ) diff --git a/pkg/volume/util/operationexecutor/operation_generator.go b/pkg/volume/util/operationexecutor/operation_generator.go index 9766be8cff0..029e5543ba7 100644 --- a/pkg/volume/util/operationexecutor/operation_generator.go +++ b/pkg/volume/util/operationexecutor/operation_generator.go @@ -24,9 +24,9 @@ import ( "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - "k8s.io/kubernetes/pkg/client/record" kevents "k8s.io/kubernetes/pkg/kubelet/events" "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/volume" diff --git a/plugin/cmd/kube-scheduler/app/BUILD b/plugin/cmd/kube-scheduler/app/BUILD index 2c75cbe9969..10a3a6ae539 100644 --- a/plugin/cmd/kube-scheduler/app/BUILD +++ b/plugin/cmd/kube-scheduler/app/BUILD @@ -12,12 +12,10 @@ go_library( srcs = ["server.go"], tags = ["automanaged"], deps = [ - "//pkg/api/v1:go_default_library", + "//pkg/api:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", "//pkg/client/leaderelection:go_default_library", "//pkg/client/leaderelection/resourcelock:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/util/configz:go_default_library", "//plugin/cmd/kube-scheduler/app/options:go_default_library", "//plugin/pkg/scheduler:go_default_library", @@ -32,8 +30,11 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/apiserver/pkg/server/healthz", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/rest", "//vendor:k8s.io/client-go/tools/clientcmd", + "//vendor:k8s.io/client-go/tools/record", ], ) diff --git a/plugin/cmd/kube-scheduler/app/server.go b/plugin/cmd/kube-scheduler/app/server.go index e3106e44b51..e1bee444da2 100644 --- a/plugin/cmd/kube-scheduler/app/server.go +++ b/plugin/cmd/kube-scheduler/app/server.go @@ -30,14 +30,15 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apiserver/pkg/server/healthz" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" - "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/client-go/tools/record" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" "k8s.io/kubernetes/pkg/client/leaderelection" "k8s.io/kubernetes/pkg/client/leaderelection/resourcelock" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/util/configz" "k8s.io/kubernetes/plugin/cmd/kube-scheduler/app/options" "k8s.io/kubernetes/plugin/pkg/scheduler" @@ -126,8 +127,8 @@ func Run(s *options.SchedulerServer) error { func createRecorder(kubecli *clientset.Clientset, s *options.SchedulerServer) record.EventRecorder { eventBroadcaster := record.NewBroadcaster() eventBroadcaster.StartLogging(glog.Infof) - eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: kubecli.Core().Events("")}) - return eventBroadcaster.NewRecorder(v1.EventSource{Component: s.SchedulerName}) + eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: v1core.New(kubecli.Core().RESTClient()).Events("")}) + return eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: s.SchedulerName}) } func startHTTP(s *options.SchedulerServer) { diff --git a/plugin/pkg/scheduler/BUILD b/plugin/pkg/scheduler/BUILD index e037b495470..55a2b4887d4 100644 --- a/plugin/pkg/scheduler/BUILD +++ b/plugin/pkg/scheduler/BUILD @@ -20,7 +20,6 @@ go_library( deps = [ "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/util/hash:go_default_library", "//plugin/pkg/scheduler/algorithm:go_default_library", "//plugin/pkg/scheduler/algorithm/predicates:go_default_library", @@ -38,6 +37,7 @@ go_library( "//vendor:k8s.io/apiserver/pkg/util/trace", "//vendor:k8s.io/client-go/rest", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", "//vendor:k8s.io/client-go/util/workqueue", ], ) @@ -52,10 +52,10 @@ go_test( library = ":go_default_library", tags = ["automanaged"], deps = [ + "//pkg/api:go_default_library", "//pkg/api/testapi:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/apis/extensions/v1beta1:go_default_library", - "//pkg/client/record:go_default_library", "//plugin/pkg/scheduler/algorithm:go_default_library", "//plugin/pkg/scheduler/algorithm/predicates:go_default_library", "//plugin/pkg/scheduler/algorithm/priorities:go_default_library", @@ -69,7 +69,9 @@ go_test( "//vendor:k8s.io/apimachinery/pkg/util/diff", "//vendor:k8s.io/apimachinery/pkg/util/sets", "//vendor:k8s.io/apimachinery/pkg/util/wait", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/tools/cache", + "//vendor:k8s.io/client-go/tools/record", ], ) diff --git a/plugin/pkg/scheduler/scheduler.go b/plugin/pkg/scheduler/scheduler.go index 0999687e5e4..6d5b33fc78f 100644 --- a/plugin/pkg/scheduler/scheduler.go +++ b/plugin/pkg/scheduler/scheduler.go @@ -21,8 +21,8 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/plugin/pkg/scheduler/algorithm" schedulerapi "k8s.io/kubernetes/plugin/pkg/scheduler/api" "k8s.io/kubernetes/plugin/pkg/scheduler/metrics" diff --git a/plugin/pkg/scheduler/scheduler_test.go b/plugin/pkg/scheduler/scheduler_test.go index 0b0b5699e4e..a6d19895ebb 100644 --- a/plugin/pkg/scheduler/scheduler_test.go +++ b/plugin/pkg/scheduler/scheduler_test.go @@ -28,10 +28,12 @@ import ( "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/util/diff" "k8s.io/apimachinery/pkg/util/wait" + clientv1 "k8s.io/client-go/pkg/api/v1" clientcache "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/plugin/pkg/scheduler/algorithm" "k8s.io/kubernetes/plugin/pkg/scheduler/algorithm/predicates" "k8s.io/kubernetes/plugin/pkg/scheduler/schedulercache" @@ -166,11 +168,11 @@ func TestScheduler(t *testing.T) { NextPod: func() *v1.Pod { return item.sendPod }, - Recorder: eventBroadcaster.NewRecorder(v1.EventSource{Component: "scheduler"}), + Recorder: eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "scheduler"}), } s := New(c) called := make(chan struct{}) - events := eventBroadcaster.StartEventWatcher(func(e *v1.Event) { + events := eventBroadcaster.StartEventWatcher(func(e *clientv1.Event) { if e, a := item.eventReason, e.Reason; e != a { t.Errorf("%v: expected %v, got %v", i, e, a) } diff --git a/staging/copy.sh b/staging/copy.sh index a43c3cc4d16..7a6e4e0a4bd 100755 --- a/staging/copy.sh +++ b/staging/copy.sh @@ -81,11 +81,7 @@ save "discovery" save "dynamic" save "rest" save "testing" -save "tools/auth" -save "tools/cache" -save "tools/clientcmd" -save "tools/metrics" -save "tools/portforward" +save "tools" save "transport" save "third_party" save "plugin" @@ -106,7 +102,6 @@ mkdir -p "${CLIENT_REPO_TEMP}/pkg/version" find "${MAIN_REPO}/pkg/version" -maxdepth 1 -type f | xargs -I{} cp {} "${CLIENT_REPO_TEMP}/pkg/version" # need to copy clientsets, though later we should copy APIs and later generate clientsets mkcp "pkg/client/clientset_generated/${CLIENTSET}" "pkg/client/clientset_generated" -mkcp "/pkg/client/record" "/pkg/client" pushd "${CLIENT_REPO_TEMP}" > /dev/null echo "generating vendor/" @@ -129,24 +124,6 @@ grep -Rl "\"${MAIN_REPO_FROM_SRC}" "${CLIENT_REPO_TEMP}" | \ grep -v "vendor/" | \ xargs ${SED} -i "s|\"${MAIN_REPO_FROM_SRC}|\"${CLIENT_REPO_FROM_SRC}|g" -echo "converting pkg/client/record to v1" -# need a v1 version of ref.go -cp "${CLIENT_REPO_TEMP}"/pkg/api/ref.go "${CLIENT_REPO_TEMP}"/pkg/api/v1/ref.go -gofmt -w -r 'api.a -> v1.a' "${CLIENT_REPO_TEMP}"/pkg/api/v1/ref.go -gofmt -w -r 'Scheme -> api.Scheme' "${CLIENT_REPO_TEMP}"/pkg/api/v1/ref.go -# rewriting package name to v1 -${SED} -i 's/package api/package v1/g' "${CLIENT_REPO_TEMP}"/pkg/api/v1/ref.go -# ref.go refers api.Scheme, so manually import /pkg/api -${SED} -i "s,import (,import (\n\"${CLIENT_REPO_FROM_SRC}/pkg/api\",g" "${CLIENT_REPO_TEMP}"/pkg/api/v1/ref.go -gofmt -w "${CLIENT_REPO_TEMP}"/pkg/api/v1/ref.go -# rewrite pkg/client/record to v1 -gofmt -w -r 'api.a -> v1.a' "${CLIENT_REPO_TEMP}"/pkg/client/record -# need to call sed to rewrite the strings in test cases... -find "${CLIENT_REPO_TEMP}"/pkg/client/record -type f -name "*.go" -print0 | xargs -0 ${SED} -i "s/api.ObjectReference/v1.ObjectReference/g" -# rewrite the imports -find "${CLIENT_REPO_TEMP}"/pkg/client/record -type f -name "*.go" -print0 | xargs -0 ${SED} -i 's,pkg/api",pkg/api/v1",g' -# gofmt the changed files - echo "rewrite proto names in proto.RegisterType" find "${CLIENT_REPO_TEMP}" -type f -name "generated.pb.go" -print0 | xargs -0 ${SED} -i "s/k8s\.io\.kubernetes/k8s.io.client-go/g" @@ -184,7 +161,6 @@ function mvfolder { } mvfolder "pkg/client/clientset_generated/${CLIENTSET}" kubernetes -mvfolder pkg/client/record tools/record if [ "$(find "${CLIENT_REPO_TEMP}"/pkg/client -type f -name "*.go")" ]; then echo "${CLIENT_REPO_TEMP}/pkg/client is expected to be empty" exit 1 diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/event_expansion.go b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/event_expansion.go index e18f25417e9..be4664ded06 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/event_expansion.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/event_expansion.go @@ -35,7 +35,7 @@ type EventExpansion interface { UpdateWithEventNamespace(event *v1.Event) (*v1.Event, error) PatchWithEventNamespace(event *v1.Event, data []byte) (*v1.Event, error) // Search finds events about the specified object - Search(objOrRef runtime.Object) (*v1.EventList, error) + Search(scheme *runtime.Scheme, objOrRef runtime.Object) (*v1.EventList, error) // Returns the appropriate field selector based on the API version being used to communicate with the server. // The returned field selector can be used with List and Watch to filter desired events. GetFieldSelector(involvedObjectName, involvedObjectNamespace, involvedObjectKind, involvedObjectUID *string) fields.Selector @@ -99,8 +99,8 @@ func (e *events) PatchWithEventNamespace(incompleteEvent *v1.Event, data []byte) // Search finds events about the specified object. The namespace of the // object must match this event's client namespace unless the event client // was made with the "" namespace. -func (e *events) Search(objOrRef runtime.Object) (*v1.EventList, error) { - ref, err := api.GetReference(objOrRef) +func (e *events) Search(scheme *runtime.Scheme, objOrRef runtime.Object) (*v1.EventList, error) { + ref, err := api.GetReference(scheme, objOrRef) if err != nil { return nil, err } diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_event_expansion.go b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_event_expansion.go index 3195eadef62..b4de7bcda8b 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_event_expansion.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_event_expansion.go @@ -66,7 +66,7 @@ func (c *FakeEvents) PatchWithEventNamespace(event *v1.Event, data []byte) (*v1. } // Search returns a list of events matching the specified object. -func (c *FakeEvents) Search(objOrRef runtime.Object) (*v1.EventList, error) { +func (c *FakeEvents) Search(scheme *runtime.Scheme, objOrRef runtime.Object) (*v1.EventList, error) { action := core.NewRootListAction(eventsResource, api.ListOptions{}) if c.ns != "" { action = core.NewListAction(eventsResource, c.ns, api.ListOptions{}) diff --git a/staging/src/k8s.io/client-go/pkg/api/ref.go b/staging/src/k8s.io/client-go/pkg/api/ref.go index 134bbd26f74..370cf5513a4 100644 --- a/staging/src/k8s.io/client-go/pkg/api/ref.go +++ b/staging/src/k8s.io/client-go/pkg/api/ref.go @@ -37,7 +37,7 @@ var ( // object, or an error if the object doesn't follow the conventions // that would allow this. // TODO: should take a meta.Interface see http://issue.k8s.io/7127 -func GetReference(obj runtime.Object) (*ObjectReference, error) { +func GetReference(scheme *runtime.Scheme, obj runtime.Object) (*ObjectReference, error) { if obj == nil { return nil, ErrNilObject } @@ -53,7 +53,7 @@ func GetReference(obj runtime.Object) (*ObjectReference, error) { kind := gvk.Kind if len(kind) == 0 { // TODO: this is wrong - gvks, _, err := Scheme.ObjectKinds(obj) + gvks, _, err := scheme.ObjectKinds(obj) if err != nil { return nil, err } @@ -111,8 +111,8 @@ func GetReference(obj runtime.Object) (*ObjectReference, error) { } // GetPartialReference is exactly like GetReference, but allows you to set the FieldPath. -func GetPartialReference(obj runtime.Object, fieldPath string) (*ObjectReference, error) { - ref, err := GetReference(obj) +func GetPartialReference(scheme *runtime.Scheme, obj runtime.Object, fieldPath string) (*ObjectReference, error) { + ref, err := GetReference(scheme, obj) if err != nil { return nil, err } diff --git a/staging/src/k8s.io/client-go/pkg/api/v1/ref.go b/staging/src/k8s.io/client-go/pkg/api/v1/ref.go index 1b145b03e6f..8a9555b3de0 100644 --- a/staging/src/k8s.io/client-go/pkg/api/v1/ref.go +++ b/staging/src/k8s.io/client-go/pkg/api/v1/ref.go @@ -19,7 +19,6 @@ package v1 import ( "errors" "fmt" - "k8s.io/client-go/pkg/api" "net/url" "strings" @@ -38,7 +37,7 @@ var ( // object, or an error if the object doesn't follow the conventions // that would allow this. // TODO: should take a meta.Interface see http://issue.k8s.io/7127 -func GetReference(obj runtime.Object) (*ObjectReference, error) { +func GetReference(scheme *runtime.Scheme, obj runtime.Object) (*ObjectReference, error) { if obj == nil { return nil, ErrNilObject } @@ -54,7 +53,7 @@ func GetReference(obj runtime.Object) (*ObjectReference, error) { kind := gvk.Kind if len(kind) == 0 { // TODO: this is wrong - gvks, _, err := api.Scheme.ObjectKinds(obj) + gvks, _, err := scheme.ObjectKinds(obj) if err != nil { return nil, err } @@ -112,8 +111,8 @@ func GetReference(obj runtime.Object) (*ObjectReference, error) { } // GetPartialReference is exactly like GetReference, but allows you to set the FieldPath. -func GetPartialReference(obj runtime.Object, fieldPath string) (*ObjectReference, error) { - ref, err := GetReference(obj) +func GetPartialReference(scheme *runtime.Scheme, obj runtime.Object, fieldPath string) (*ObjectReference, error) { + ref, err := GetReference(scheme, obj) if err != nil { return nil, err } diff --git a/staging/src/k8s.io/client-go/tools/record/event.go b/staging/src/k8s.io/client-go/tools/record/event.go index 154cb288bb0..26e036be366 100644 --- a/staging/src/k8s.io/client-go/tools/record/event.go +++ b/staging/src/k8s.io/client-go/tools/record/event.go @@ -90,7 +90,7 @@ type EventBroadcaster interface { // NewRecorder returns an EventRecorder that can be used to send events to this EventBroadcaster // with the event source set to the given event source. - NewRecorder(source v1.EventSource) EventRecorder + NewRecorder(scheme *runtime.Scheme, source v1.EventSource) EventRecorder } // Creates a new event broadcaster. @@ -242,18 +242,19 @@ func (eventBroadcaster *eventBroadcasterImpl) StartEventWatcher(eventHandler fun } // NewRecorder returns an EventRecorder that records events with the given event source. -func (eventBroadcaster *eventBroadcasterImpl) NewRecorder(source v1.EventSource) EventRecorder { - return &recorderImpl{source, eventBroadcaster.Broadcaster, clock.RealClock{}} +func (eventBroadcaster *eventBroadcasterImpl) NewRecorder(scheme *runtime.Scheme, source v1.EventSource) EventRecorder { + return &recorderImpl{scheme, source, eventBroadcaster.Broadcaster, clock.RealClock{}} } type recorderImpl struct { + scheme *runtime.Scheme source v1.EventSource *watch.Broadcaster clock clock.Clock } func (recorder *recorderImpl) generateEvent(object runtime.Object, timestamp metav1.Time, eventtype, reason, message string) { - ref, err := v1.GetReference(object) + ref, err := v1.GetReference(recorder.scheme, object) if err != nil { glog.Errorf("Could not construct reference to: '%#v' due to: '%v'. Will not report event: '%v' '%v' '%v'", object, err, eventtype, reason, message) return diff --git a/staging/src/k8s.io/client-go/tools/record/event_test.go b/staging/src/k8s.io/client-go/tools/record/event_test.go index 204b49ec7f6..8c456e6b5cc 100644 --- a/staging/src/k8s.io/client-go/tools/record/event_test.go +++ b/staging/src/k8s.io/client-go/tools/record/event_test.go @@ -29,6 +29,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" k8sruntime "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/strategicpatch" + "k8s.io/client-go/pkg/api" _ "k8s.io/client-go/pkg/api/install" // To register api.Pod used in tests below "k8s.io/client-go/pkg/api/v1" restclient "k8s.io/client-go/rest" @@ -118,8 +119,8 @@ func TestEventf(t *testing.T) { UID: "differentUid", }, } - testRef, err := v1.GetPartialReference(testPod, "spec.containers[2]") - testRef2, err := v1.GetPartialReference(testPod2, "spec.containers[3]") + testRef, err := v1.GetPartialReference(api.Scheme, testPod, "spec.containers[2]") + testRef2, err := v1.GetPartialReference(api.Scheme, testPod2, "spec.containers[3]") if err != nil { t.Fatal(err) } @@ -374,7 +375,7 @@ func TestEventf(t *testing.T) { } func recorderWithFakeClock(eventSource v1.EventSource, eventBroadcaster EventBroadcaster, clock clock.Clock) EventRecorder { - return &recorderImpl{eventSource, eventBroadcaster.(*eventBroadcasterImpl).Broadcaster, clock} + return &recorderImpl{api.Scheme, eventSource, eventBroadcaster.(*eventBroadcasterImpl).Broadcaster, clock} } func TestWriteEventError(t *testing.T) { @@ -495,7 +496,7 @@ func TestLotsOfEvents(t *testing.T) { logWatcher := eventBroadcaster.StartLogging(func(formatter string, args ...interface{}) { loggerCalled <- struct{}{} }) - recorder := eventBroadcaster.NewRecorder(v1.EventSource{Component: "eventTest"}) + recorder := eventBroadcaster.NewRecorder(api.Scheme, v1.EventSource{Component: "eventTest"}) ref := &v1.ObjectReference{ Kind: "Pod", Name: "foo", @@ -530,7 +531,7 @@ func TestEventfNoNamespace(t *testing.T) { UID: "bar", }, } - testRef, err := v1.GetPartialReference(testPod, "spec.containers[2]") + testRef, err := v1.GetPartialReference(api.Scheme, testPod, "spec.containers[2]") if err != nil { t.Fatal(err) } @@ -636,8 +637,8 @@ func TestMultiSinkCache(t *testing.T) { UID: "differentUid", }, } - testRef, err := v1.GetPartialReference(testPod, "spec.containers[2]") - testRef2, err := v1.GetPartialReference(testPod2, "spec.containers[3]") + testRef, err := v1.GetPartialReference(api.Scheme, testPod, "spec.containers[2]") + testRef2, err := v1.GetPartialReference(api.Scheme, testPod2, "spec.containers[3]") if err != nil { t.Fatal(err) } diff --git a/test/e2e/common/sysctl.go b/test/e2e/common/sysctl.go index cd99aa47abc..db9f8382897 100644 --- a/test/e2e/common/sysctl.go +++ b/test/e2e/common/sysctl.go @@ -22,6 +22,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/uuid" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/kubelet/events" "k8s.io/kubernetes/pkg/kubelet/sysctl" @@ -59,7 +60,7 @@ var _ = framework.KubeDescribe("Sysctls", func() { waitForPodErrorEventOrStarted := func(pod *v1.Pod) (*v1.Event, error) { var ev *v1.Event err := wait.Poll(framework.Poll, framework.PodStartTimeout, func() (bool, error) { - evnts, err := f.ClientSet.Core().Events(pod.Namespace).Search(pod) + evnts, err := f.ClientSet.Core().Events(pod.Namespace).Search(api.Scheme, pod) if err != nil { return false, fmt.Errorf("error in listing events: %s", err) } diff --git a/test/e2e/cronjob.go b/test/e2e/cronjob.go index 4b649d8d75a..bcc4304c965 100644 --- a/test/e2e/cronjob.go +++ b/test/e2e/cronjob.go @@ -27,6 +27,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" batchinternal "k8s.io/kubernetes/pkg/apis/batch" batchv1 "k8s.io/kubernetes/pkg/apis/batch/v1" @@ -368,7 +369,7 @@ func checkNoEventWithReason(c clientset.Interface, ns, cronJobName string, reaso if err != nil { return fmt.Errorf("Error in getting cronjob %s/%s: %v", ns, cronJobName, err) } - events, err := c.Core().Events(ns).Search(sj) + events, err := c.Core().Events(ns).Search(api.Scheme, sj) if err != nil { return fmt.Errorf("Error in listing events: %s", err) } diff --git a/test/e2e/framework/util.go b/test/e2e/framework/util.go index 888bc1c48c1..7d0c549603c 100644 --- a/test/e2e/framework/util.go +++ b/test/e2e/framework/util.go @@ -3469,7 +3469,7 @@ func logPodsOfDeployment(c clientset.Interface, deployment *extensions.Deploymen // Waits for the number of events on the given object to reach a desired count. func WaitForEvents(c clientset.Interface, ns string, objOrRef runtime.Object, desiredEventsCount int) error { return wait.Poll(Poll, 5*time.Minute, func() (bool, error) { - events, err := c.Core().Events(ns).Search(objOrRef) + events, err := c.Core().Events(ns).Search(api.Scheme, objOrRef) if err != nil { return false, fmt.Errorf("error in listing events: %s", err) } @@ -3488,7 +3488,7 @@ func WaitForEvents(c clientset.Interface, ns string, objOrRef runtime.Object, de // Waits for the number of events on the given object to be at least a desired count. func WaitForPartialEvents(c clientset.Interface, ns string, objOrRef runtime.Object, atLeastEventsCount int) error { return wait.Poll(Poll, 5*time.Minute, func() (bool, error) { - events, err := c.Core().Events(ns).Search(objOrRef) + events, err := c.Core().Events(ns).Search(api.Scheme, objOrRef) if err != nil { return false, fmt.Errorf("error in listing events: %s", err) } diff --git a/test/integration/framework/BUILD b/test/integration/framework/BUILD index 3246b73fc83..42eb0f832ac 100644 --- a/test/integration/framework/BUILD +++ b/test/integration/framework/BUILD @@ -30,7 +30,6 @@ go_library( "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library", - "//pkg/client/record:go_default_library", "//pkg/controller:go_default_library", "//pkg/controller/replication:go_default_library", "//pkg/generated/openapi:go_default_library", @@ -62,6 +61,7 @@ go_library( "//vendor:k8s.io/apiserver/pkg/authorization/union", "//vendor:k8s.io/apiserver/pkg/storage/storagebackend", "//vendor:k8s.io/client-go/rest", + "//vendor:k8s.io/client-go/tools/record", ], ) diff --git a/test/integration/framework/master_utils.go b/test/integration/framework/master_utils.go index 4c0a1981b62..4c8a6d62f5e 100644 --- a/test/integration/framework/master_utils.go +++ b/test/integration/framework/master_utils.go @@ -41,6 +41,7 @@ import ( authorizerunion "k8s.io/apiserver/pkg/authorization/union" "k8s.io/apiserver/pkg/storage/storagebackend" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/v1" @@ -55,7 +56,6 @@ import ( "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" coreclient "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/controller" replicationcontroller "k8s.io/kubernetes/pkg/controller/replication" "k8s.io/kubernetes/pkg/generated/openapi" diff --git a/test/integration/quota/quota_test.go b/test/integration/quota/quota_test.go index 43efa83cf82..89e82c44b14 100644 --- a/test/integration/quota/quota_test.go +++ b/test/integration/quota/quota_test.go @@ -32,11 +32,11 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/watch" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller/informers" replicationcontroller "k8s.io/kubernetes/pkg/controller/replication" diff --git a/test/integration/scheduler/extender_test.go b/test/integration/scheduler/extender_test.go index cc48d135a40..aa742a3d523 100644 --- a/test/integration/scheduler/extender_test.go +++ b/test/integration/scheduler/extender_test.go @@ -32,12 +32,13 @@ import ( "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" + v1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/plugin/pkg/scheduler" _ "k8s.io/kubernetes/plugin/pkg/scheduler/algorithmprovider" schedulerapi "k8s.io/kubernetes/plugin/pkg/scheduler/api" @@ -244,8 +245,8 @@ func TestSchedulerExtender(t *testing.T) { t.Fatalf("Couldn't create scheduler config: %v", err) } eventBroadcaster := record.NewBroadcaster() - schedulerConfig.Recorder = eventBroadcaster.NewRecorder(v1.EventSource{Component: v1.DefaultSchedulerName}) - eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: clientSet.Core().Events("")}) + schedulerConfig.Recorder = eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: v1.DefaultSchedulerName}) + eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: v1core.New(clientSet.Core().RESTClient()).Events("")}) scheduler.New(schedulerConfig).Run() defer close(schedulerConfig.StopEverything) diff --git a/test/integration/scheduler/scheduler_test.go b/test/integration/scheduler/scheduler_test.go index f064db79533..b5a6bc10ba6 100644 --- a/test/integration/scheduler/scheduler_test.go +++ b/test/integration/scheduler/scheduler_test.go @@ -29,13 +29,14 @@ import ( "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" + clientv1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/plugin/pkg/scheduler" _ "k8s.io/kubernetes/plugin/pkg/scheduler/algorithmprovider" "k8s.io/kubernetes/plugin/pkg/scheduler/factory" @@ -65,8 +66,8 @@ func TestUnschedulableNodes(t *testing.T) { t.Fatalf("Couldn't create scheduler config: %v", err) } eventBroadcaster := record.NewBroadcaster() - schedulerConfig.Recorder = eventBroadcaster.NewRecorder(v1.EventSource{Component: v1.DefaultSchedulerName}) - eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: clientSet.Core().Events(ns.Name)}) + schedulerConfig.Recorder = eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: v1.DefaultSchedulerName}) + eventBroadcaster.StartRecordingToSink(&clientv1core.EventSinkImpl{Interface: clientv1core.New(clientSet.Core().RESTClient()).Events("")}) scheduler.New(schedulerConfig).Run() defer close(schedulerConfig.StopEverything) @@ -334,8 +335,8 @@ func TestMultiScheduler(t *testing.T) { t.Fatalf("Couldn't create scheduler config: %v", err) } eventBroadcaster := record.NewBroadcaster() - schedulerConfig.Recorder = eventBroadcaster.NewRecorder(v1.EventSource{Component: v1.DefaultSchedulerName}) - eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: clientSet.Core().Events(ns.Name)}) + schedulerConfig.Recorder = eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: v1.DefaultSchedulerName}) + eventBroadcaster.StartRecordingToSink(&clientv1core.EventSinkImpl{Interface: clientv1core.New(clientSet.Core().RESTClient()).Events("")}) scheduler.New(schedulerConfig).Run() // default-scheduler will be stopped later @@ -405,8 +406,8 @@ func TestMultiScheduler(t *testing.T) { t.Errorf("Couldn't create scheduler config: %v", err) } eventBroadcaster2 := record.NewBroadcaster() - schedulerConfig2.Recorder = eventBroadcaster2.NewRecorder(v1.EventSource{Component: "foo-scheduler"}) - eventBroadcaster2.StartRecordingToSink(&v1core.EventSinkImpl{Interface: clientSet2.Core().Events(ns.Name)}) + schedulerConfig2.Recorder = eventBroadcaster2.NewRecorder(api.Scheme, clientv1.EventSource{Component: "foo-scheduler"}) + eventBroadcaster.StartRecordingToSink(&clientv1core.EventSinkImpl{Interface: clientv1core.New(clientSet2.Core().RESTClient()).Events("")}) scheduler.New(schedulerConfig2).Run() defer close(schedulerConfig2.StopEverything) @@ -500,8 +501,8 @@ func TestAllocatable(t *testing.T) { t.Fatalf("Couldn't create scheduler config: %v", err) } eventBroadcaster := record.NewBroadcaster() - schedulerConfig.Recorder = eventBroadcaster.NewRecorder(v1.EventSource{Component: v1.DefaultSchedulerName}) - eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: clientSet.Core().Events(ns.Name)}) + schedulerConfig.Recorder = eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: v1.DefaultSchedulerName}) + eventBroadcaster.StartRecordingToSink(&clientv1core.EventSinkImpl{Interface: clientv1core.New(clientSet.Core().RESTClient()).Events("")}) scheduler.New(schedulerConfig).Run() // default-scheduler will be stopped later defer close(schedulerConfig.StopEverything) diff --git a/test/integration/scheduler_perf/BUILD b/test/integration/scheduler_perf/BUILD index b6c9d6de7e9..3e64b649875 100644 --- a/test/integration/scheduler_perf/BUILD +++ b/test/integration/scheduler_perf/BUILD @@ -16,14 +16,15 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", - "//pkg/client/record:go_default_library", "//plugin/pkg/scheduler:go_default_library", "//plugin/pkg/scheduler/algorithmprovider:go_default_library", "//plugin/pkg/scheduler/factory:go_default_library", "//test/integration/framework:go_default_library", "//vendor:github.com/golang/glog", + "//vendor:k8s.io/client-go/kubernetes/typed/core/v1", + "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/rest", + "//vendor:k8s.io/client-go/tools/record", ], ) diff --git a/test/integration/scheduler_perf/util.go b/test/integration/scheduler_perf/util.go index 2d98b4d37d4..44c65086388 100644 --- a/test/integration/scheduler_perf/util.go +++ b/test/integration/scheduler_perf/util.go @@ -21,12 +21,13 @@ import ( "net/http/httptest" "github.com/golang/glog" + clientv1core "k8s.io/client-go/kubernetes/typed/core/v1" + clientv1 "k8s.io/client-go/pkg/api/v1" restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/record" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" - v1core "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" - "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/plugin/pkg/scheduler" _ "k8s.io/kubernetes/plugin/pkg/scheduler/algorithmprovider" "k8s.io/kubernetes/plugin/pkg/scheduler/factory" @@ -60,10 +61,10 @@ func mustSetupScheduler() (schedulerConfigurator scheduler.Configurator, destroy schedulerConfigurator = factory.NewConfigFactory(clientSet, v1.DefaultSchedulerName, v1.DefaultHardPodAffinitySymmetricWeight, v1.DefaultFailureDomains) eventBroadcaster := record.NewBroadcaster() - eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: clientSet.Core().Events("")}) + eventBroadcaster.StartRecordingToSink(&clientv1core.EventSinkImpl{Interface: clientv1core.New(clientSet.Core().RESTClient()).Events("")}) sched, err := scheduler.NewFromConfigurator(schedulerConfigurator, func(conf *scheduler.Config) { - conf.Recorder = eventBroadcaster.NewRecorder(v1.EventSource{Component: "scheduler"}) + conf.Recorder = eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "scheduler"}) }) if err != nil { glog.Fatalf("Error creating scheduler: %v", err) diff --git a/test/integration/volume/persistent_volumes_test.go b/test/integration/volume/persistent_volumes_test.go index 34a697ec77c..44f1196e9d0 100644 --- a/test/integration/volume/persistent_volumes_test.go +++ b/test/integration/volume/persistent_volumes_test.go @@ -256,7 +256,7 @@ func TestPersistentVolumeBindRace(t *testing.T) { // putting a bind manually on a pv should only match the claim it is bound to rand.Seed(time.Now().Unix()) claim := claims[rand.Intn(maxClaims-1)] - claimRef, err := v1.GetReference(claim) + claimRef, err := v1.GetReference(api.Scheme, claim) if err != nil { t.Fatalf("Unexpected error getting claimRef: %v", err) } @@ -759,7 +759,7 @@ func TestPersistentVolumeControllerStartup(t *testing.T) { pv := createPV(pvName, "/tmp/foo"+strconv.Itoa(i), "1G", []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}, v1.PersistentVolumeReclaimRetain) - claimRef, err := v1.GetReference(newPVC) + claimRef, err := v1.GetReference(api.Scheme, newPVC) if err != nil { glog.V(3).Infof("unexpected error getting claim reference: %v", err) return diff --git a/vendor/BUILD b/vendor/BUILD index e9bebff5fc7..3129fd818f1 100644 --- a/vendor/BUILD +++ b/vendor/BUILD @@ -12599,6 +12599,7 @@ go_test( "//vendor:k8s.io/apimachinery/pkg/runtime", "//vendor:k8s.io/apimachinery/pkg/util/diff", "//vendor:k8s.io/apimachinery/pkg/util/strategicpatch", + "//vendor:k8s.io/client-go/pkg/api", "//vendor:k8s.io/client-go/pkg/api/install", "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/rest",