diff --git a/pkg/client/cache/controller_test.go b/pkg/client/cache/controller_test.go index f26c839b80..053775dad7 100644 --- a/pkg/client/cache/controller_test.go +++ b/pkg/client/cache/controller_test.go @@ -23,7 +23,7 @@ import ( "testing" "time" - "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/v1" fcache "k8s.io/kubernetes/pkg/client/testing/cache" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/sets" @@ -51,7 +51,7 @@ func Example() { cfg := &Config{ Queue: fifo, ListerWatcher: source, - ObjectType: &api.Pod{}, + ObjectType: &v1.Pod{}, FullResyncPeriod: time.Millisecond * 100, RetryOnError: false, @@ -101,7 +101,7 @@ func Example() { for _, name := range testIDs { // Note that these pods are not valid-- the fake source doesn't // call validation or anything. - source.Add(&api.Pod{ObjectMeta: api.ObjectMeta{Name: name}}) + source.Add(&v1.Pod{ObjectMeta: v1.ObjectMeta{Name: name}}) } // Let's wait for the controller to process the things we just added. @@ -130,7 +130,7 @@ func ExampleNewInformer() { // logs anything deleted. _, controller := NewInformer( source, - &api.Pod{}, + &v1.Pod{}, time.Millisecond*100, ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { @@ -158,7 +158,7 @@ func ExampleNewInformer() { for _, name := range testIDs { // Note that these pods are not valid-- the fake source doesn't // call validation or anything. - source.Add(&api.Pod{ObjectMeta: api.ObjectMeta{Name: name}}) + source.Add(&v1.Pod{ObjectMeta: v1.ObjectMeta{Name: name}}) } // Let's wait for the controller to process the things we just added. @@ -206,7 +206,7 @@ func TestHammerController(t *testing.T) { // Make a controller which just logs all the changes it gets. _, controller := NewInformer( source, - &api.Pod{}, + &v1.Pod{}, time.Millisecond*100, ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { recordFunc("add", obj) }, @@ -253,7 +253,7 @@ func TestHammerController(t *testing.T) { name = l[r.Intn(len(l))] } - pod := &api.Pod{} + pod := &v1.Pod{} f.Fuzz(pod) pod.ObjectMeta.Name = name pod.ObjectMeta.Namespace = "default" @@ -315,9 +315,9 @@ func TestUpdate(t *testing.T) { pair{FROM, FROM}: true, } - pod := func(name, check string, final bool) *api.Pod { - p := &api.Pod{ - ObjectMeta: api.ObjectMeta{ + pod := func(name, check string, final bool) *v1.Pod { + p := &v1.Pod{ + ObjectMeta: v1.ObjectMeta{ Name: name, Labels: map[string]string{"check": check}, }, @@ -327,7 +327,7 @@ func TestUpdate(t *testing.T) { } return p } - deletePod := func(p *api.Pod) bool { + deletePod := func(p *v1.Pod) bool { return p.Labels["final"] == "true" } @@ -350,20 +350,20 @@ func TestUpdate(t *testing.T) { watchCh := make(chan struct{}) _, controller := NewInformer( &testLW{ - WatchFunc: func(options api.ListOptions) (watch.Interface, error) { + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { watch, err := source.Watch(options) close(watchCh) return watch, err }, - ListFunc: func(options api.ListOptions) (runtime.Object, error) { + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { return source.List(options) }, }, - &api.Pod{}, + &v1.Pod{}, 0, ResourceEventHandlerFuncs{ UpdateFunc: func(oldObj, newObj interface{}) { - o, n := oldObj.(*api.Pod), newObj.(*api.Pod) + o, n := oldObj.(*v1.Pod), newObj.(*v1.Pod) from, to := o.Labels["check"], n.Labels["check"] if !allowedTransitions[pair{from, to}] { t.Errorf("observed transition %q -> %q for %v", from, to, n.Name) diff --git a/pkg/client/cache/index_test.go b/pkg/client/cache/index_test.go index f36df387fd..debb7babf6 100644 --- a/pkg/client/cache/index_test.go +++ b/pkg/client/cache/index_test.go @@ -21,19 +21,20 @@ import ( "testing" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/v1" ) func testIndexFunc(obj interface{}) ([]string, error) { - pod := obj.(*api.Pod) + pod := obj.(*v1.Pod) return []string{pod.Labels["foo"]}, nil } func TestGetIndexFuncValues(t *testing.T) { index := NewIndexer(MetaNamespaceKeyFunc, Indexers{"testmodes": testIndexFunc}) - pod1 := &api.Pod{ObjectMeta: api.ObjectMeta{Name: "one", Labels: map[string]string{"foo": "bar"}}} - pod2 := &api.Pod{ObjectMeta: api.ObjectMeta{Name: "two", Labels: map[string]string{"foo": "bar"}}} - pod3 := &api.Pod{ObjectMeta: api.ObjectMeta{Name: "tre", Labels: map[string]string{"foo": "biz"}}} + pod1 := &v1.Pod{ObjectMeta: v1.ObjectMeta{Name: "one", Labels: map[string]string{"foo": "bar"}}} + pod2 := &v1.Pod{ObjectMeta: v1.ObjectMeta{Name: "two", Labels: map[string]string{"foo": "bar"}}} + pod3 := &v1.Pod{ObjectMeta: v1.ObjectMeta{Name: "tre", Labels: map[string]string{"foo": "biz"}}} index.Add(pod1) index.Add(pod2) @@ -52,7 +53,7 @@ func TestGetIndexFuncValues(t *testing.T) { } func testUsersIndexFunc(obj interface{}) ([]string, error) { - pod := obj.(*api.Pod) + pod := obj.(*v1.Pod) usersString := pod.Annotations["users"] return strings.Split(usersString, ","), nil @@ -61,9 +62,9 @@ func testUsersIndexFunc(obj interface{}) ([]string, error) { func TestMultiIndexKeys(t *testing.T) { index := NewIndexer(MetaNamespaceKeyFunc, Indexers{"byUser": testUsersIndexFunc}) - pod1 := &api.Pod{ObjectMeta: api.ObjectMeta{Name: "one", Annotations: map[string]string{"users": "ernie,bert"}}} - pod2 := &api.Pod{ObjectMeta: api.ObjectMeta{Name: "two", Annotations: map[string]string{"users": "bert,oscar"}}} - pod3 := &api.Pod{ObjectMeta: api.ObjectMeta{Name: "tre", Annotations: map[string]string{"users": "ernie,elmo"}}} + pod1 := &v1.Pod{ObjectMeta: v1.ObjectMeta{Name: "one", Annotations: map[string]string{"users": "ernie,bert"}}} + pod2 := &v1.Pod{ObjectMeta: v1.ObjectMeta{Name: "two", Annotations: map[string]string{"users": "bert,oscar"}}} + pod3 := &v1.Pod{ObjectMeta: v1.ObjectMeta{Name: "tre", Annotations: map[string]string{"users": "ernie,elmo"}}} index.Add(pod1) index.Add(pod2) @@ -121,7 +122,7 @@ func TestMultiIndexKeys(t *testing.T) { if err != nil { t.Errorf("unexpected error: %v", err) } - copyOfPod2 := obj.(*api.Pod) + copyOfPod2 := obj.(*v1.Pod) copyOfPod2.Annotations["users"] = "oscar" index.Update(copyOfPod2) bertPods, err = index.ByIndex("byUser", "bert") diff --git a/pkg/client/cache/listers.go b/pkg/client/cache/listers.go index bc65876e03..e6cd930c72 100644 --- a/pkg/client/cache/listers.go +++ b/pkg/client/cache/listers.go @@ -20,15 +20,16 @@ import ( "fmt" "github.com/golang/glog" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/api/unversioned" - "k8s.io/kubernetes/pkg/apis/apps" - "k8s.io/kubernetes/pkg/apis/certificates" - "k8s.io/kubernetes/pkg/apis/extensions" - "k8s.io/kubernetes/pkg/apis/policy" - "k8s.io/kubernetes/pkg/apis/storage" + "k8s.io/kubernetes/pkg/api/v1" + apps "k8s.io/kubernetes/pkg/apis/apps/v1beta1" + certificates "k8s.io/kubernetes/pkg/apis/certificates/v1alpha1" + extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" + policy "k8s.io/kubernetes/pkg/apis/policy/v1beta1" + storageinternal "k8s.io/kubernetes/pkg/apis/storage" + storage "k8s.io/kubernetes/pkg/apis/storage/v1beta1" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/runtime" ) @@ -50,7 +51,7 @@ func ListAll(store Store, selector labels.Selector, appendFn AppendFunc) error { } func ListAllByNamespace(indexer Indexer, namespace string, selector labels.Selector, appendFn AppendFunc) error { - if namespace == api.NamespaceAll { + if namespace == v1.NamespaceAll { for _, m := range indexer.List() { metadata, err := meta.Accessor(m) if err != nil { @@ -63,7 +64,7 @@ func ListAllByNamespace(indexer Indexer, namespace string, selector labels.Selec return nil } - items, err := indexer.Index(NamespaceIndex, &api.ObjectMeta{Namespace: namespace}) + items, err := indexer.Index(NamespaceIndex, &v1.ObjectMeta{Namespace: namespace}) if err != nil { // Ignore error; do slow search without index. glog.Warningf("can not retrieve list of objects using index : %v", err) @@ -170,7 +171,7 @@ func (s *genericNamespaceLister) Get(name string) (runtime.Object, error) { // NodeConditionPredicate is a function that indicates whether the given node's conditions meet // some set of criteria defined by the function. -type NodeConditionPredicate func(node *api.Node) bool +type NodeConditionPredicate func(node *v1.Node) bool // StoreToNodeLister makes a Store have the List method of the client.NodeInterface // The Store must contain (only) Nodes. @@ -178,9 +179,9 @@ type StoreToNodeLister struct { Store } -func (s *StoreToNodeLister) List() (machines api.NodeList, err error) { +func (s *StoreToNodeLister) List() (machines v1.NodeList, err error) { for _, m := range s.Store.List() { - machines.Items = append(machines.Items, *(m.(*api.Node))) + machines.Items = append(machines.Items, *(m.(*v1.Node))) } return machines, nil } @@ -199,9 +200,9 @@ type storeToNodeConditionLister struct { } // List returns a list of nodes that match the conditions defined by the predicate functions in the storeToNodeConditionLister. -func (s storeToNodeConditionLister) List() (nodes []*api.Node, err error) { +func (s storeToNodeConditionLister) List() (nodes []*v1.Node, err error) { for _, m := range s.store.List() { - node := m.(*api.Node) + node := m.(*v1.Node) if s.predicate(node) { nodes = append(nodes, node) } else { @@ -236,7 +237,7 @@ func (s *StoreToDaemonSetLister) List() (dss extensions.DaemonSetList, err error // GetPodDaemonSets returns a list of daemon sets managing a pod. // Returns an error if and only if no matching daemon sets are found. -func (s *StoreToDaemonSetLister) GetPodDaemonSets(pod *api.Pod) (daemonSets []extensions.DaemonSet, err error) { +func (s *StoreToDaemonSetLister) GetPodDaemonSets(pod *v1.Pod) (daemonSets []extensions.DaemonSet, err error) { var selector labels.Selector var daemonSet extensions.DaemonSet @@ -274,17 +275,17 @@ type StoreToEndpointsLister struct { } // List lists all endpoints in the store. -func (s *StoreToEndpointsLister) List() (services api.EndpointsList, err error) { +func (s *StoreToEndpointsLister) List() (services v1.EndpointsList, err error) { for _, m := range s.Store.List() { - services.Items = append(services.Items, *(m.(*api.Endpoints))) + services.Items = append(services.Items, *(m.(*v1.Endpoints))) } return services, nil } // GetServiceEndpoints returns the endpoints of a service, matched on service name. -func (s *StoreToEndpointsLister) GetServiceEndpoints(svc *api.Service) (ep api.Endpoints, err error) { +func (s *StoreToEndpointsLister) GetServiceEndpoints(svc *v1.Service) (ep v1.Endpoints, err error) { for _, m := range s.Store.List() { - ep = *m.(*api.Endpoints) + ep = *m.(*v1.Endpoints) if svc.Name == ep.Name && svc.Namespace == ep.Namespace { return ep, nil } @@ -299,8 +300,8 @@ type StoreToPVFetcher struct { } // GetPersistentVolumeInfo returns cached data for the PersistentVolume 'id'. -func (s *StoreToPVFetcher) GetPersistentVolumeInfo(id string) (*api.PersistentVolume, error) { - o, exists, err := s.Get(&api.PersistentVolume{ObjectMeta: api.ObjectMeta{Name: id}}) +func (s *StoreToPVFetcher) GetPersistentVolumeInfo(id string) (*v1.PersistentVolume, error) { + o, exists, err := s.Get(&v1.PersistentVolume{ObjectMeta: v1.ObjectMeta{Name: id}}) if err != nil { return nil, fmt.Errorf("error retrieving PersistentVolume '%v' from cache: %v", id, err) @@ -310,7 +311,7 @@ func (s *StoreToPVFetcher) GetPersistentVolumeInfo(id string) (*api.PersistentVo return nil, fmt.Errorf("PersistentVolume '%v' not found", id) } - return o.(*api.PersistentVolume), nil + return o.(*v1.PersistentVolume), nil } // StoreToStatefulSetLister gives a store List and Exists methods. The store must contain only StatefulSets. @@ -345,7 +346,7 @@ func (s *StoreToStatefulSetLister) StatefulSets(namespace string) storeStatefulS } // GetPodStatefulSets returns a list of StatefulSets managing a pod. Returns an error only if no matching StatefulSets are found. -func (s *StoreToStatefulSetLister) GetPodStatefulSets(pod *api.Pod) (psList []apps.StatefulSet, err error) { +func (s *StoreToStatefulSetLister) GetPodStatefulSets(pod *v1.Pod) (psList []apps.StatefulSet, err error) { var selector labels.Selector var ps apps.StatefulSet @@ -404,7 +405,7 @@ type StoreToPodDisruptionBudgetLister struct { } // GetPodPodDisruptionBudgets returns a list of PodDisruptionBudgets matching a pod. Returns an error only if no matching PodDisruptionBudgets are found. -func (s *StoreToPodDisruptionBudgetLister) GetPodPodDisruptionBudgets(pod *api.Pod) (pdbList []policy.PodDisruptionBudget, err error) { +func (s *StoreToPodDisruptionBudgetLister) GetPodPodDisruptionBudgets(pod *v1.Pod) (pdbList []policy.PodDisruptionBudget, err error) { var selector labels.Selector if len(pod.Labels) == 0 { @@ -466,13 +467,13 @@ func (s *storageClassLister) List(selector labels.Selector) (ret []*storage.Stor // List returns a list of storage classes func (s *storageClassLister) Get(name string) (*storage.StorageClass, error) { - key := &storage.StorageClass{ObjectMeta: api.ObjectMeta{Name: name}} + key := &storage.StorageClass{ObjectMeta: v1.ObjectMeta{Name: name}} obj, exists, err := s.indexer.Get(key) if err != nil { return nil, err } if !exists { - return nil, errors.NewNotFound(storage.Resource("storageclass"), name) + return nil, errors.NewNotFound(storageinternal.Resource("storageclass"), name) } return obj.(*storage.StorageClass), nil } diff --git a/pkg/client/cache/listers_core.go b/pkg/client/cache/listers_core.go index 1e8eb6055e..65e64ae3db 100644 --- a/pkg/client/cache/listers_core.go +++ b/pkg/client/cache/listers_core.go @@ -21,6 +21,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" + "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/labels" ) @@ -40,9 +41,9 @@ type StoreToPodLister struct { Indexer Indexer } -func (s *StoreToPodLister) List(selector labels.Selector) (ret []*api.Pod, err error) { +func (s *StoreToPodLister) List(selector labels.Selector) (ret []*v1.Pod, err error) { err = ListAll(s.Indexer, selector, func(m interface{}) { - ret = append(ret, m.(*api.Pod)) + ret = append(ret, m.(*v1.Pod)) }) return ret, err } @@ -56,14 +57,14 @@ type storePodsNamespacer struct { namespace string } -func (s storePodsNamespacer) List(selector labels.Selector) (ret []*api.Pod, err error) { +func (s storePodsNamespacer) List(selector labels.Selector) (ret []*v1.Pod, err error) { err = ListAllByNamespace(s.Indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*api.Pod)) + ret = append(ret, m.(*v1.Pod)) }) return ret, err } -func (s storePodsNamespacer) Get(name string) (*api.Pod, error) { +func (s storePodsNamespacer) Get(name string) (*v1.Pod, error) { obj, exists, err := s.Indexer.GetByKey(s.namespace + "/" + name) if err != nil { return nil, err @@ -71,7 +72,7 @@ func (s storePodsNamespacer) Get(name string) (*api.Pod, error) { if !exists { return nil, errors.NewNotFound(api.Resource("pod"), name) } - return obj.(*api.Pod), nil + return obj.(*v1.Pod), nil } // StoreToServiceLister helps list services @@ -79,9 +80,9 @@ type StoreToServiceLister struct { Indexer Indexer } -func (s *StoreToServiceLister) List(selector labels.Selector) (ret []*api.Service, err error) { +func (s *StoreToServiceLister) List(selector labels.Selector) (ret []*v1.Service, err error) { err = ListAll(s.Indexer, selector, func(m interface{}) { - ret = append(ret, m.(*api.Service)) + ret = append(ret, m.(*v1.Service)) }) return ret, err } @@ -95,14 +96,14 @@ type storeServicesNamespacer struct { namespace string } -func (s storeServicesNamespacer) List(selector labels.Selector) (ret []*api.Service, err error) { +func (s storeServicesNamespacer) List(selector labels.Selector) (ret []*v1.Service, err error) { err = ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*api.Service)) + ret = append(ret, m.(*v1.Service)) }) return ret, err } -func (s storeServicesNamespacer) Get(name string) (*api.Service, error) { +func (s storeServicesNamespacer) Get(name string) (*v1.Service, error) { obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) if err != nil { return nil, err @@ -110,12 +111,12 @@ func (s storeServicesNamespacer) Get(name string) (*api.Service, error) { if !exists { return nil, errors.NewNotFound(api.Resource("service"), name) } - return obj.(*api.Service), nil + return obj.(*v1.Service), nil } // TODO: Move this back to scheduler as a helper function that takes a Store, // rather than a method of StoreToServiceLister. -func (s *StoreToServiceLister) GetPodServices(pod *api.Pod) (services []*api.Service, err error) { +func (s *StoreToServiceLister) GetPodServices(pod *v1.Pod) (services []*v1.Service, err error) { allServices, err := s.Services(pod.Namespace).List(labels.Everything()) if err != nil { return nil, err @@ -141,9 +142,9 @@ type StoreToReplicationControllerLister struct { Indexer Indexer } -func (s *StoreToReplicationControllerLister) List(selector labels.Selector) (ret []*api.ReplicationController, err error) { +func (s *StoreToReplicationControllerLister) List(selector labels.Selector) (ret []*v1.ReplicationController, err error) { err = ListAll(s.Indexer, selector, func(m interface{}) { - ret = append(ret, m.(*api.ReplicationController)) + ret = append(ret, m.(*v1.ReplicationController)) }) return ret, err } @@ -157,14 +158,14 @@ type storeReplicationControllersNamespacer struct { namespace string } -func (s storeReplicationControllersNamespacer) List(selector labels.Selector) (ret []*api.ReplicationController, err error) { +func (s storeReplicationControllersNamespacer) List(selector labels.Selector) (ret []*v1.ReplicationController, err error) { err = ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*api.ReplicationController)) + ret = append(ret, m.(*v1.ReplicationController)) }) return ret, err } -func (s storeReplicationControllersNamespacer) Get(name string) (*api.ReplicationController, error) { +func (s storeReplicationControllersNamespacer) Get(name string) (*v1.ReplicationController, error) { obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) if err != nil { return nil, err @@ -172,24 +173,24 @@ func (s storeReplicationControllersNamespacer) Get(name string) (*api.Replicatio if !exists { return nil, errors.NewNotFound(api.Resource("replicationcontroller"), name) } - return obj.(*api.ReplicationController), nil + return obj.(*v1.ReplicationController), nil } // GetPodControllers returns a list of replication controllers managing a pod. Returns an error only if no matching controllers are found. -func (s *StoreToReplicationControllerLister) GetPodControllers(pod *api.Pod) (controllers []*api.ReplicationController, err error) { +func (s *StoreToReplicationControllerLister) GetPodControllers(pod *v1.Pod) (controllers []*v1.ReplicationController, err error) { if len(pod.Labels) == 0 { err = fmt.Errorf("no controllers found for pod %v because it has no labels", pod.Name) return } - key := &api.ReplicationController{ObjectMeta: api.ObjectMeta{Namespace: pod.Namespace}} + key := &v1.ReplicationController{ObjectMeta: v1.ObjectMeta{Namespace: pod.Namespace}} items, err := s.Indexer.Index(NamespaceIndex, key) if err != nil { return } for _, m := range items { - rc := m.(*api.ReplicationController) + rc := m.(*v1.ReplicationController) selector := labels.Set(rc.Spec.Selector).AsSelectorPreValidated() // If an rc with a nil or empty selector creeps in, it should match nothing, not everything. @@ -209,9 +210,9 @@ type StoreToServiceAccountLister struct { Indexer Indexer } -func (s *StoreToServiceAccountLister) List(selector labels.Selector) (ret []*api.ServiceAccount, err error) { +func (s *StoreToServiceAccountLister) List(selector labels.Selector) (ret []*v1.ServiceAccount, err error) { err = ListAll(s.Indexer, selector, func(m interface{}) { - ret = append(ret, m.(*api.ServiceAccount)) + ret = append(ret, m.(*v1.ServiceAccount)) }) return ret, err } @@ -225,14 +226,14 @@ type storeServiceAccountsNamespacer struct { namespace string } -func (s storeServiceAccountsNamespacer) List(selector labels.Selector) (ret []*api.ServiceAccount, err error) { +func (s storeServiceAccountsNamespacer) List(selector labels.Selector) (ret []*v1.ServiceAccount, err error) { err = ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*api.ServiceAccount)) + ret = append(ret, m.(*v1.ServiceAccount)) }) return ret, err } -func (s storeServiceAccountsNamespacer) Get(name string) (*api.ServiceAccount, error) { +func (s storeServiceAccountsNamespacer) Get(name string) (*v1.ServiceAccount, error) { obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) if err != nil { return nil, err @@ -240,7 +241,7 @@ func (s storeServiceAccountsNamespacer) Get(name string) (*api.ServiceAccount, e if !exists { return nil, errors.NewNotFound(api.Resource("serviceaccount"), name) } - return obj.(*api.ServiceAccount), nil + return obj.(*v1.ServiceAccount), nil } // StoreToLimitRangeLister helps list limit ranges @@ -248,9 +249,9 @@ type StoreToLimitRangeLister struct { Indexer Indexer } -func (s *StoreToLimitRangeLister) List(selector labels.Selector) (ret []*api.LimitRange, err error) { +func (s *StoreToLimitRangeLister) List(selector labels.Selector) (ret []*v1.LimitRange, err error) { err = ListAll(s.Indexer, selector, func(m interface{}) { - ret = append(ret, m.(*api.LimitRange)) + ret = append(ret, m.(*v1.LimitRange)) }) return ret, err } @@ -261,9 +262,9 @@ type StoreToPersistentVolumeClaimLister struct { } // List returns all persistentvolumeclaims that match the specified selector -func (s *StoreToPersistentVolumeClaimLister) List(selector labels.Selector) (ret []*api.PersistentVolumeClaim, err error) { +func (s *StoreToPersistentVolumeClaimLister) List(selector labels.Selector) (ret []*v1.PersistentVolumeClaim, err error) { err = ListAll(s.Indexer, selector, func(m interface{}) { - ret = append(ret, m.(*api.PersistentVolumeClaim)) + ret = append(ret, m.(*v1.PersistentVolumeClaim)) }) return ret, err } @@ -277,14 +278,14 @@ type storeLimitRangesNamespacer struct { namespace string } -func (s storeLimitRangesNamespacer) List(selector labels.Selector) (ret []*api.LimitRange, err error) { +func (s storeLimitRangesNamespacer) List(selector labels.Selector) (ret []*v1.LimitRange, err error) { err = ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*api.LimitRange)) + ret = append(ret, m.(*v1.LimitRange)) }) return ret, err } -func (s storeLimitRangesNamespacer) Get(name string) (*api.LimitRange, error) { +func (s storeLimitRangesNamespacer) Get(name string) (*v1.LimitRange, error) { obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) if err != nil { return nil, err @@ -292,7 +293,7 @@ func (s storeLimitRangesNamespacer) Get(name string) (*api.LimitRange, error) { if !exists { return nil, errors.NewNotFound(api.Resource("limitrange"), name) } - return obj.(*api.LimitRange), nil + return obj.(*v1.LimitRange), nil } // PersistentVolumeClaims returns all claims in a specified namespace. @@ -305,14 +306,14 @@ type storePersistentVolumeClaimsNamespacer struct { namespace string } -func (s storePersistentVolumeClaimsNamespacer) List(selector labels.Selector) (ret []*api.PersistentVolumeClaim, err error) { +func (s storePersistentVolumeClaimsNamespacer) List(selector labels.Selector) (ret []*v1.PersistentVolumeClaim, err error) { err = ListAllByNamespace(s.Indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*api.PersistentVolumeClaim)) + ret = append(ret, m.(*v1.PersistentVolumeClaim)) }) return ret, err } -func (s storePersistentVolumeClaimsNamespacer) Get(name string) (*api.PersistentVolumeClaim, error) { +func (s storePersistentVolumeClaimsNamespacer) Get(name string) (*v1.PersistentVolumeClaim, error) { obj, exists, err := s.Indexer.GetByKey(s.namespace + "/" + name) if err != nil { return nil, err @@ -320,7 +321,7 @@ func (s storePersistentVolumeClaimsNamespacer) Get(name string) (*api.Persistent if !exists { return nil, errors.NewNotFound(api.Resource("persistentvolumeclaims"), name) } - return obj.(*api.PersistentVolumeClaim), nil + return obj.(*v1.PersistentVolumeClaim), nil } // IndexerToNamespaceLister gives an Indexer List method @@ -329,14 +330,14 @@ type IndexerToNamespaceLister struct { } // List returns a list of namespaces -func (i *IndexerToNamespaceLister) List(selector labels.Selector) (ret []*api.Namespace, err error) { +func (i *IndexerToNamespaceLister) List(selector labels.Selector) (ret []*v1.Namespace, err error) { err = ListAll(i.Indexer, selector, func(m interface{}) { - ret = append(ret, m.(*api.Namespace)) + ret = append(ret, m.(*v1.Namespace)) }) return ret, err } -func (i *IndexerToNamespaceLister) Get(name string) (*api.Namespace, error) { +func (i *IndexerToNamespaceLister) Get(name string) (*v1.Namespace, error) { obj, exists, err := i.Indexer.GetByKey(name) if err != nil { return nil, err @@ -344,5 +345,5 @@ func (i *IndexerToNamespaceLister) Get(name string) (*api.Namespace, error) { if !exists { return nil, errors.NewNotFound(api.Resource("namespace"), name) } - return obj.(*api.Namespace), nil + return obj.(*v1.Namespace), nil } diff --git a/pkg/client/cache/listers_extensions.go b/pkg/client/cache/listers_extensions.go index 539657765d..922c2943fd 100644 --- a/pkg/client/cache/listers_extensions.go +++ b/pkg/client/cache/listers_extensions.go @@ -19,10 +19,11 @@ package cache import ( "fmt" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/unversioned" - "k8s.io/kubernetes/pkg/apis/extensions" + "k8s.io/kubernetes/pkg/api/v1" + extensionsinternal "k8s.io/kubernetes/pkg/apis/extensions" + extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" "k8s.io/kubernetes/pkg/labels" ) @@ -71,7 +72,7 @@ func (s storeDeploymentsNamespacer) Get(name string) (*extensions.Deployment, er return nil, err } if !exists { - return nil, errors.NewNotFound(extensions.Resource("deployment"), name) + return nil, errors.NewNotFound(extensionsinternal.Resource("deployment"), name) } return obj.(*extensions.Deployment), nil } @@ -107,7 +108,7 @@ func (s *StoreToDeploymentLister) GetDeploymentsForReplicaSet(rs *extensions.Rep // GetDeploymentsForDeployments returns a list of deployments managing a pod. Returns an error only if no matching deployments are found. // TODO eliminate shallow copies -func (s *StoreToDeploymentLister) GetDeploymentsForPod(pod *api.Pod) (deployments []*extensions.Deployment, err error) { +func (s *StoreToDeploymentLister) GetDeploymentsForPod(pod *v1.Pod) (deployments []*extensions.Deployment, err error) { if len(pod.Labels) == 0 { err = fmt.Errorf("no deployments found for Pod %v because it has no labels", pod.Name) return @@ -172,13 +173,13 @@ func (s storeReplicaSetsNamespacer) Get(name string) (*extensions.ReplicaSet, er return nil, err } if !exists { - return nil, errors.NewNotFound(extensions.Resource("replicaset"), name) + return nil, errors.NewNotFound(extensionsinternal.Resource("replicaset"), name) } return obj.(*extensions.ReplicaSet), nil } // GetPodReplicaSets returns a list of ReplicaSets managing a pod. Returns an error only if no matching ReplicaSets are found. -func (s *StoreToReplicaSetLister) GetPodReplicaSets(pod *api.Pod) (rss []*extensions.ReplicaSet, err error) { +func (s *StoreToReplicaSetLister) GetPodReplicaSets(pod *v1.Pod) (rss []*extensions.ReplicaSet, err error) { if len(pod.Labels) == 0 { err = fmt.Errorf("no ReplicaSets found for pod %v because it has no labels", pod.Name) return diff --git a/pkg/client/cache/listers_rbac.go b/pkg/client/cache/listers_rbac.go index 2b1cf8bb2a..fb7769a881 100644 --- a/pkg/client/cache/listers_rbac.go +++ b/pkg/client/cache/listers_rbac.go @@ -18,7 +18,7 @@ package cache import ( "k8s.io/kubernetes/pkg/api/errors" - "k8s.io/kubernetes/pkg/apis/rbac" + rbac "k8s.io/kubernetes/pkg/apis/rbac" "k8s.io/kubernetes/pkg/labels" ) diff --git a/pkg/client/cache/listers_test.go b/pkg/client/cache/listers_test.go index 6b7e593747..a904e89c84 100644 --- a/pkg/client/cache/listers_test.go +++ b/pkg/client/cache/listers_test.go @@ -19,10 +19,10 @@ package cache import ( "testing" - "k8s.io/kubernetes/pkg/api" apierrors "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/unversioned" - "k8s.io/kubernetes/pkg/apis/extensions" + "k8s.io/kubernetes/pkg/api/v1" + extensions "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/util/sets" ) @@ -31,7 +31,7 @@ func TestStoreToNodeLister(t *testing.T) { store := NewStore(MetaNamespaceKeyFunc) ids := sets.NewString("foo", "bar", "baz") for id := range ids { - store.Add(&api.Node{ObjectMeta: api.ObjectMeta{Name: id}}) + store.Add(&v1.Node{ObjectMeta: v1.ObjectMeta{Name: id}}) } sml := StoreToNodeLister{store} @@ -50,44 +50,44 @@ func TestStoreToNodeLister(t *testing.T) { func TestStoreToNodeConditionLister(t *testing.T) { store := NewStore(MetaNamespaceKeyFunc) - nodes := []*api.Node{ + nodes := []*v1.Node{ { - ObjectMeta: api.ObjectMeta{Name: "foo"}, - Status: api.NodeStatus{ - Conditions: []api.NodeCondition{ + ObjectMeta: v1.ObjectMeta{Name: "foo"}, + Status: v1.NodeStatus{ + Conditions: []v1.NodeCondition{ { - Type: api.NodeReady, - Status: api.ConditionTrue, + Type: v1.NodeReady, + Status: v1.ConditionTrue, }, { - Type: api.NodeOutOfDisk, - Status: api.ConditionFalse, + Type: v1.NodeOutOfDisk, + Status: v1.ConditionFalse, }, }, }, }, { - ObjectMeta: api.ObjectMeta{Name: "bar"}, - Status: api.NodeStatus{ - Conditions: []api.NodeCondition{ + ObjectMeta: v1.ObjectMeta{Name: "bar"}, + Status: v1.NodeStatus{ + Conditions: []v1.NodeCondition{ { - Type: api.NodeOutOfDisk, - Status: api.ConditionTrue, + Type: v1.NodeOutOfDisk, + Status: v1.ConditionTrue, }, }, }, }, { - ObjectMeta: api.ObjectMeta{Name: "baz"}, - Status: api.NodeStatus{ - Conditions: []api.NodeCondition{ + ObjectMeta: v1.ObjectMeta{Name: "baz"}, + Status: v1.NodeStatus{ + Conditions: []v1.NodeCondition{ { - Type: api.NodeReady, - Status: api.ConditionFalse, + Type: v1.NodeReady, + Status: v1.ConditionFalse, }, { - Type: api.NodeOutOfDisk, - Status: api.ConditionUnknown, + Type: v1.NodeOutOfDisk, + Status: v1.ConditionUnknown, }, }, }, @@ -97,9 +97,9 @@ func TestStoreToNodeConditionLister(t *testing.T) { store.Add(n) } - predicate := func(node *api.Node) bool { + predicate := func(node *v1.Node) bool { for _, cond := range node.Status.Conditions { - if cond.Type == api.NodeOutOfDisk && cond.Status == api.ConditionTrue { + if cond.Type == v1.NodeOutOfDisk && cond.Status == v1.ConditionTrue { return false } } @@ -126,65 +126,65 @@ func TestStoreToNodeConditionLister(t *testing.T) { func TestStoreToReplicationControllerLister(t *testing.T) { testCases := []struct { description string - inRCs []*api.ReplicationController - list func(StoreToReplicationControllerLister) ([]*api.ReplicationController, error) + inRCs []*v1.ReplicationController + list func(StoreToReplicationControllerLister) ([]*v1.ReplicationController, error) outRCNames sets.String expectErr bool onlyIfIndexedByNamespace bool }{ { description: "Verify we can search all namespaces", - inRCs: []*api.ReplicationController{ + inRCs: []*v1.ReplicationController{ { - ObjectMeta: api.ObjectMeta{Name: "foo", Namespace: "bar"}, + ObjectMeta: v1.ObjectMeta{Name: "foo", Namespace: "bar"}, }, { - ObjectMeta: api.ObjectMeta{Name: "hmm", Namespace: "hmm"}, + ObjectMeta: v1.ObjectMeta{Name: "hmm", Namespace: "hmm"}, }, }, - list: func(lister StoreToReplicationControllerLister) ([]*api.ReplicationController, error) { - return lister.ReplicationControllers(api.NamespaceAll).List(labels.Set{}.AsSelectorPreValidated()) + list: func(lister StoreToReplicationControllerLister) ([]*v1.ReplicationController, error) { + return lister.ReplicationControllers(v1.NamespaceAll).List(labels.Set{}.AsSelectorPreValidated()) }, outRCNames: sets.NewString("hmm", "foo"), }, { description: "Verify we can search a specific namespace", - inRCs: []*api.ReplicationController{ + inRCs: []*v1.ReplicationController{ { - ObjectMeta: api.ObjectMeta{Name: "foo", Namespace: "bar"}, + ObjectMeta: v1.ObjectMeta{Name: "foo", Namespace: "bar"}, }, { - ObjectMeta: api.ObjectMeta{Name: "hmm", Namespace: "hmm"}, + ObjectMeta: v1.ObjectMeta{Name: "hmm", Namespace: "hmm"}, }, }, - list: func(lister StoreToReplicationControllerLister) ([]*api.ReplicationController, error) { + list: func(lister StoreToReplicationControllerLister) ([]*v1.ReplicationController, error) { return lister.ReplicationControllers("hmm").List(labels.Set{}.AsSelectorPreValidated()) }, outRCNames: sets.NewString("hmm"), }, { description: "Basic listing with all labels and no selectors", - inRCs: []*api.ReplicationController{ - {ObjectMeta: api.ObjectMeta{Name: "basic"}}, + inRCs: []*v1.ReplicationController{ + {ObjectMeta: v1.ObjectMeta{Name: "basic"}}, }, - list: func(lister StoreToReplicationControllerLister) ([]*api.ReplicationController, error) { + list: func(lister StoreToReplicationControllerLister) ([]*v1.ReplicationController, error) { return lister.List(labels.Everything()) }, outRCNames: sets.NewString("basic"), }, { description: "No pod labels", - inRCs: []*api.ReplicationController{ + inRCs: []*v1.ReplicationController{ { - ObjectMeta: api.ObjectMeta{Name: "basic", Namespace: "ns"}, - Spec: api.ReplicationControllerSpec{ + ObjectMeta: v1.ObjectMeta{Name: "basic", Namespace: "ns"}, + Spec: v1.ReplicationControllerSpec{ Selector: map[string]string{"foo": "baz"}, }, }, }, - list: func(lister StoreToReplicationControllerLister) ([]*api.ReplicationController, error) { - pod := &api.Pod{ - ObjectMeta: api.ObjectMeta{Name: "pod1", Namespace: "ns"}, + list: func(lister StoreToReplicationControllerLister) ([]*v1.ReplicationController, error) { + pod := &v1.Pod{ + ObjectMeta: v1.ObjectMeta{Name: "pod1", Namespace: "ns"}, } return lister.GetPodControllers(pod) }, @@ -193,14 +193,14 @@ func TestStoreToReplicationControllerLister(t *testing.T) { }, { description: "No RC selectors", - inRCs: []*api.ReplicationController{ + inRCs: []*v1.ReplicationController{ { - ObjectMeta: api.ObjectMeta{Name: "basic", Namespace: "ns"}, + ObjectMeta: v1.ObjectMeta{Name: "basic", Namespace: "ns"}, }, }, - list: func(lister StoreToReplicationControllerLister) ([]*api.ReplicationController, error) { - pod := &api.Pod{ - ObjectMeta: api.ObjectMeta{ + list: func(lister StoreToReplicationControllerLister) ([]*v1.ReplicationController, error) { + pod := &v1.Pod{ + ObjectMeta: v1.ObjectMeta{ Name: "pod1", Namespace: "ns", Labels: map[string]string{"foo": "bar"}, @@ -213,23 +213,23 @@ func TestStoreToReplicationControllerLister(t *testing.T) { }, { description: "Matching labels to selectors and namespace", - inRCs: []*api.ReplicationController{ + inRCs: []*v1.ReplicationController{ { - ObjectMeta: api.ObjectMeta{Name: "foo"}, - Spec: api.ReplicationControllerSpec{ + ObjectMeta: v1.ObjectMeta{Name: "foo"}, + Spec: v1.ReplicationControllerSpec{ Selector: map[string]string{"foo": "bar"}, }, }, { - ObjectMeta: api.ObjectMeta{Name: "bar", Namespace: "ns"}, - Spec: api.ReplicationControllerSpec{ + ObjectMeta: v1.ObjectMeta{Name: "bar", Namespace: "ns"}, + Spec: v1.ReplicationControllerSpec{ Selector: map[string]string{"foo": "bar"}, }, }, }, - list: func(lister StoreToReplicationControllerLister) ([]*api.ReplicationController, error) { - pod := &api.Pod{ - ObjectMeta: api.ObjectMeta{ + list: func(lister StoreToReplicationControllerLister) ([]*v1.ReplicationController, error) { + pod := &v1.Pod{ + ObjectMeta: v1.ObjectMeta{ Name: "pod1", Labels: map[string]string{"foo": "bar"}, Namespace: "ns", @@ -290,7 +290,7 @@ func TestStoreToReplicaSetLister(t *testing.T) { // Basic listing with all labels and no selectors { inRSs: []*extensions.ReplicaSet{ - {ObjectMeta: api.ObjectMeta{Name: "basic"}}, + {ObjectMeta: v1.ObjectMeta{Name: "basic"}}, }, list: func() ([]*extensions.ReplicaSet, error) { return lister.List(labels.Everything()) @@ -301,15 +301,15 @@ func TestStoreToReplicaSetLister(t *testing.T) { { inRSs: []*extensions.ReplicaSet{ { - ObjectMeta: api.ObjectMeta{Name: "basic", Namespace: "ns"}, + ObjectMeta: v1.ObjectMeta{Name: "basic", Namespace: "ns"}, Spec: extensions.ReplicaSetSpec{ Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "baz"}}, }, }, }, list: func() ([]*extensions.ReplicaSet, error) { - pod := &api.Pod{ - ObjectMeta: api.ObjectMeta{Name: "pod1", Namespace: "ns"}, + pod := &v1.Pod{ + ObjectMeta: v1.ObjectMeta{Name: "pod1", Namespace: "ns"}, } return lister.GetPodReplicaSets(pod) }, @@ -320,12 +320,12 @@ func TestStoreToReplicaSetLister(t *testing.T) { { inRSs: []*extensions.ReplicaSet{ { - ObjectMeta: api.ObjectMeta{Name: "basic", Namespace: "ns"}, + ObjectMeta: v1.ObjectMeta{Name: "basic", Namespace: "ns"}, }, }, list: func() ([]*extensions.ReplicaSet, error) { - pod := &api.Pod{ - ObjectMeta: api.ObjectMeta{ + pod := &v1.Pod{ + ObjectMeta: v1.ObjectMeta{ Name: "pod1", Namespace: "ns", Labels: map[string]string{"foo": "bar"}, @@ -340,21 +340,21 @@ func TestStoreToReplicaSetLister(t *testing.T) { { inRSs: []*extensions.ReplicaSet{ { - ObjectMeta: api.ObjectMeta{Name: "foo"}, + ObjectMeta: v1.ObjectMeta{Name: "foo"}, Spec: extensions.ReplicaSetSpec{ Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, }, }, { - ObjectMeta: api.ObjectMeta{Name: "bar", Namespace: "ns"}, + ObjectMeta: v1.ObjectMeta{Name: "bar", Namespace: "ns"}, Spec: extensions.ReplicaSetSpec{ Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, }, }, }, list: func() ([]*extensions.ReplicaSet, error) { - pod := &api.Pod{ - ObjectMeta: api.ObjectMeta{ + pod := &v1.Pod{ + ObjectMeta: v1.ObjectMeta{ Name: "pod1", Labels: map[string]string{"foo": "bar"}, Namespace: "ns", @@ -402,7 +402,7 @@ func TestStoreToDaemonSetLister(t *testing.T) { // Basic listing { inDSs: []*extensions.DaemonSet{ - {ObjectMeta: api.ObjectMeta{Name: "basic"}}, + {ObjectMeta: v1.ObjectMeta{Name: "basic"}}, }, list: func() ([]extensions.DaemonSet, error) { list, err := lister.List() @@ -413,9 +413,9 @@ func TestStoreToDaemonSetLister(t *testing.T) { // Listing multiple daemon sets { inDSs: []*extensions.DaemonSet{ - {ObjectMeta: api.ObjectMeta{Name: "basic"}}, - {ObjectMeta: api.ObjectMeta{Name: "complex"}}, - {ObjectMeta: api.ObjectMeta{Name: "complex2"}}, + {ObjectMeta: v1.ObjectMeta{Name: "basic"}}, + {ObjectMeta: v1.ObjectMeta{Name: "complex"}}, + {ObjectMeta: v1.ObjectMeta{Name: "complex2"}}, }, list: func() ([]extensions.DaemonSet, error) { list, err := lister.List() @@ -427,15 +427,15 @@ func TestStoreToDaemonSetLister(t *testing.T) { { inDSs: []*extensions.DaemonSet{ { - ObjectMeta: api.ObjectMeta{Name: "basic", Namespace: "ns"}, + ObjectMeta: v1.ObjectMeta{Name: "basic", Namespace: "ns"}, Spec: extensions.DaemonSetSpec{ Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "baz"}}, }, }, }, list: func() ([]extensions.DaemonSet, error) { - pod := &api.Pod{ - ObjectMeta: api.ObjectMeta{Name: "pod1", Namespace: "ns"}, + pod := &v1.Pod{ + ObjectMeta: v1.ObjectMeta{Name: "pod1", Namespace: "ns"}, } return lister.GetPodDaemonSets(pod) }, @@ -446,12 +446,12 @@ func TestStoreToDaemonSetLister(t *testing.T) { { inDSs: []*extensions.DaemonSet{ { - ObjectMeta: api.ObjectMeta{Name: "basic", Namespace: "ns"}, + ObjectMeta: v1.ObjectMeta{Name: "basic", Namespace: "ns"}, }, }, list: func() ([]extensions.DaemonSet, error) { - pod := &api.Pod{ - ObjectMeta: api.ObjectMeta{ + pod := &v1.Pod{ + ObjectMeta: v1.ObjectMeta{ Name: "pod1", Namespace: "ns", Labels: map[string]string{"foo": "bar"}, @@ -466,21 +466,21 @@ func TestStoreToDaemonSetLister(t *testing.T) { { inDSs: []*extensions.DaemonSet{ { - ObjectMeta: api.ObjectMeta{Name: "foo"}, + ObjectMeta: v1.ObjectMeta{Name: "foo"}, Spec: extensions.DaemonSetSpec{ Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, }, }, { - ObjectMeta: api.ObjectMeta{Name: "bar", Namespace: "ns"}, + ObjectMeta: v1.ObjectMeta{Name: "bar", Namespace: "ns"}, Spec: extensions.DaemonSetSpec{ Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, }, }, }, list: func() ([]extensions.DaemonSet, error) { - pod := &api.Pod{ - ObjectMeta: api.ObjectMeta{ + pod := &v1.Pod{ + ObjectMeta: v1.ObjectMeta{ Name: "pod1", Labels: map[string]string{"foo": "bar"}, Namespace: "ns", @@ -527,25 +527,25 @@ func TestStoreToPodLister(t *testing.T) { for _, store := range stores { ids := []string{"foo", "bar", "baz"} for _, id := range ids { - store.Add(&api.Pod{ - ObjectMeta: api.ObjectMeta{ + store.Add(&v1.Pod{ + ObjectMeta: v1.ObjectMeta{ Namespace: "other", Name: id, Labels: map[string]string{"name": id}, }, }) } - store.Add(&api.Pod{ - ObjectMeta: api.ObjectMeta{ + store.Add(&v1.Pod{ + ObjectMeta: v1.ObjectMeta{ Name: "quux", - Namespace: api.NamespaceDefault, + Namespace: v1.NamespaceDefault, Labels: map[string]string{"name": "quux"}, }, }) spl := StoreToPodLister{store} // Verify that we can always look up by Namespace. - defaultPods, err := spl.Pods(api.NamespaceDefault).List(labels.Set{}.AsSelectorPreValidated()) + defaultPods, err := spl.Pods(v1.NamespaceDefault).List(labels.Set{}.AsSelectorPreValidated()) if err != nil { t.Errorf("Unexpected error: %v", err) } else if e, a := 1, len(defaultPods); e != a { @@ -583,17 +583,17 @@ func TestStoreToPodLister(t *testing.T) { func TestStoreToServiceLister(t *testing.T) { store := NewIndexer(MetaNamespaceKeyFunc, Indexers{NamespaceIndex: MetaNamespaceIndexFunc}) - store.Add(&api.Service{ - ObjectMeta: api.ObjectMeta{Name: "foo"}, - Spec: api.ServiceSpec{ + store.Add(&v1.Service{ + ObjectMeta: v1.ObjectMeta{Name: "foo"}, + Spec: v1.ServiceSpec{ Selector: map[string]string{}, }, }) - store.Add(&api.Service{ObjectMeta: api.ObjectMeta{Name: "bar"}}) + store.Add(&v1.Service{ObjectMeta: v1.ObjectMeta{Name: "bar"}}) ssl := StoreToServiceLister{store} - pod := &api.Pod{ - ObjectMeta: api.ObjectMeta{ + pod := &v1.Pod{ + ObjectMeta: v1.ObjectMeta{ Name: "foopod", Labels: map[string]string{"role": "foo"}, }, diff --git a/pkg/client/cache/listwatch.go b/pkg/client/cache/listwatch.go index 3956ccb1e2..9622e9f987 100644 --- a/pkg/client/cache/listwatch.go +++ b/pkg/client/cache/listwatch.go @@ -21,6 +21,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/meta" + "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/fields" "k8s.io/kubernetes/pkg/runtime" @@ -31,16 +32,16 @@ import ( type ListerWatcher interface { // List should return a list type object; the Items field will be extracted, and the // ResourceVersion field will be used to start the watch in the right place. - List(options api.ListOptions) (runtime.Object, error) + List(options v1.ListOptions) (runtime.Object, error) // Watch should begin a watch at the specified version. - Watch(options api.ListOptions) (watch.Interface, error) + Watch(options v1.ListOptions) (watch.Interface, error) } // ListFunc knows how to list resources -type ListFunc func(options api.ListOptions) (runtime.Object, error) +type ListFunc func(options v1.ListOptions) (runtime.Object, error) // WatchFunc knows how to watch resources -type WatchFunc func(options api.ListOptions) (watch.Interface, error) +type WatchFunc func(options v1.ListOptions) (watch.Interface, error) // ListWatch knows how to list and watch a set of apiserver resources. It satisfies the ListerWatcher interface. // It is a convenience function for users of NewReflector, etc. @@ -57,7 +58,7 @@ type Getter interface { // NewListWatchFromClient creates a new ListWatch from the specified client, resource, namespace and field selector. func NewListWatchFromClient(c Getter, resource string, namespace string, fieldSelector fields.Selector) *ListWatch { - listFunc := func(options api.ListOptions) (runtime.Object, error) { + listFunc := func(options v1.ListOptions) (runtime.Object, error) { return c.Get(). Namespace(namespace). Resource(resource). @@ -66,7 +67,7 @@ func NewListWatchFromClient(c Getter, resource string, namespace string, fieldSe Do(). Get() } - watchFunc := func(options api.ListOptions) (watch.Interface, error) { + watchFunc := func(options v1.ListOptions) (watch.Interface, error) { return c.Get(). Prefix("watch"). Namespace(namespace). @@ -78,7 +79,7 @@ func NewListWatchFromClient(c Getter, resource string, namespace string, fieldSe return &ListWatch{ListFunc: listFunc, WatchFunc: watchFunc} } -func timeoutFromListOptions(options api.ListOptions) time.Duration { +func timeoutFromListOptions(options v1.ListOptions) time.Duration { if options.TimeoutSeconds != nil { return time.Duration(*options.TimeoutSeconds) * time.Second } @@ -86,12 +87,12 @@ func timeoutFromListOptions(options api.ListOptions) time.Duration { } // List a set of apiserver resources -func (lw *ListWatch) List(options api.ListOptions) (runtime.Object, error) { +func (lw *ListWatch) List(options v1.ListOptions) (runtime.Object, error) { return lw.ListFunc(options) } // Watch a set of apiserver resources -func (lw *ListWatch) Watch(options api.ListOptions) (watch.Interface, error) { +func (lw *ListWatch) Watch(options v1.ListOptions) (watch.Interface, error) { return lw.WatchFunc(options) } @@ -101,7 +102,7 @@ func ListWatchUntil(timeout time.Duration, lw ListerWatcher, conditions ...watch return nil, nil } - list, err := lw.List(api.ListOptions{}) + list, err := lw.List(v1.ListOptions{}) if err != nil { return nil, err } @@ -153,7 +154,7 @@ func ListWatchUntil(timeout time.Duration, lw ListerWatcher, conditions ...watch } currResourceVersion := metaObj.GetResourceVersion() - watchInterface, err := lw.Watch(api.ListOptions{ResourceVersion: currResourceVersion}) + watchInterface, err := lw.Watch(v1.ListOptions{ResourceVersion: currResourceVersion}) if err != nil { return nil, err } diff --git a/pkg/client/cache/listwatch_test.go b/pkg/client/cache/listwatch_test.go index 1766bcf43e..3c5663daf5 100644 --- a/pkg/client/cache/listwatch_test.go +++ b/pkg/client/cache/listwatch_test.go @@ -22,9 +22,9 @@ import ( "testing" "time" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/apimachinery/registered" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/pkg/client/restclient" @@ -60,7 +60,7 @@ func buildLocation(resourcePath string, query url.Values) string { } func TestListWatchesCanList(t *testing.T) { - fieldSelectorQueryParamName := unversioned.FieldSelectorQueryParam(registered.GroupOrDie(api.GroupName).GroupVersion.String()) + fieldSelectorQueryParamName := unversioned.FieldSelectorQueryParam(registered.GroupOrDie(v1.GroupName).GroupVersion.String()) table := []struct { location string resource string @@ -69,18 +69,18 @@ func TestListWatchesCanList(t *testing.T) { }{ // Node { - location: testapi.Default.ResourcePath("nodes", api.NamespaceAll, ""), + location: testapi.Default.ResourcePath("nodes", v1.NamespaceAll, ""), resource: "nodes", - namespace: api.NamespaceAll, + namespace: v1.NamespaceAll, fieldSelector: parseSelectorOrDie(""), }, // pod with "assigned" field selector. { location: buildLocation( - testapi.Default.ResourcePath("pods", api.NamespaceAll, ""), + testapi.Default.ResourcePath("pods", v1.NamespaceAll, ""), buildQueryValues(url.Values{fieldSelectorQueryParamName: []string{"spec.host="}})), resource: "pods", - namespace: api.NamespaceAll, + namespace: v1.NamespaceAll, fieldSelector: fields.Set{"spec.host": ""}.AsSelector(), }, // pod in namespace "foo" @@ -101,16 +101,16 @@ func TestListWatchesCanList(t *testing.T) { } server := httptest.NewServer(&handler) defer server.Close() - client := clientset.NewForConfigOrDie(&restclient.Config{Host: server.URL, ContentConfig: restclient.ContentConfig{GroupVersion: ®istered.GroupOrDie(api.GroupName).GroupVersion}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: server.URL, ContentConfig: restclient.ContentConfig{GroupVersion: ®istered.GroupOrDie(v1.GroupName).GroupVersion}}) lw := NewListWatchFromClient(client.Core().RESTClient(), item.resource, item.namespace, item.fieldSelector) // This test merely tests that the correct request is made. - lw.List(api.ListOptions{}) + lw.List(v1.ListOptions{}) handler.ValidateRequest(t, item.location, "GET", nil) } } func TestListWatchesCanWatch(t *testing.T) { - fieldSelectorQueryParamName := unversioned.FieldSelectorQueryParam(registered.GroupOrDie(api.GroupName).GroupVersion.String()) + fieldSelectorQueryParamName := unversioned.FieldSelectorQueryParam(registered.GroupOrDie(v1.GroupName).GroupVersion.String()) table := []struct { rv string location string @@ -121,30 +121,30 @@ func TestListWatchesCanWatch(t *testing.T) { // Node { location: buildLocation( - testapi.Default.ResourcePathWithPrefix("watch", "nodes", api.NamespaceAll, ""), + testapi.Default.ResourcePathWithPrefix("watch", "nodes", v1.NamespaceAll, ""), buildQueryValues(url.Values{})), rv: "", resource: "nodes", - namespace: api.NamespaceAll, + namespace: v1.NamespaceAll, fieldSelector: parseSelectorOrDie(""), }, { location: buildLocation( - testapi.Default.ResourcePathWithPrefix("watch", "nodes", api.NamespaceAll, ""), + testapi.Default.ResourcePathWithPrefix("watch", "nodes", v1.NamespaceAll, ""), buildQueryValues(url.Values{"resourceVersion": []string{"42"}})), rv: "42", resource: "nodes", - namespace: api.NamespaceAll, + namespace: v1.NamespaceAll, fieldSelector: parseSelectorOrDie(""), }, // pod with "assigned" field selector. { location: buildLocation( - testapi.Default.ResourcePathWithPrefix("watch", "pods", api.NamespaceAll, ""), + testapi.Default.ResourcePathWithPrefix("watch", "pods", v1.NamespaceAll, ""), buildQueryValues(url.Values{fieldSelectorQueryParamName: []string{"spec.host="}, "resourceVersion": []string{"0"}})), rv: "0", resource: "pods", - namespace: api.NamespaceAll, + namespace: v1.NamespaceAll, fieldSelector: fields.Set{"spec.host": ""}.AsSelector(), }, // pod with namespace foo and assigned field selector @@ -167,10 +167,10 @@ func TestListWatchesCanWatch(t *testing.T) { } server := httptest.NewServer(&handler) defer server.Close() - client := clientset.NewForConfigOrDie(&restclient.Config{Host: server.URL, ContentConfig: restclient.ContentConfig{GroupVersion: ®istered.GroupOrDie(api.GroupName).GroupVersion}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: server.URL, ContentConfig: restclient.ContentConfig{GroupVersion: ®istered.GroupOrDie(v1.GroupName).GroupVersion}}) lw := NewListWatchFromClient(client.Core().RESTClient(), item.resource, item.namespace, item.fieldSelector) // This test merely tests that the correct request is made. - lw.Watch(api.ListOptions{ResourceVersion: item.rv}) + lw.Watch(v1.ListOptions{ResourceVersion: item.rv}) handler.ValidateRequest(t, item.location, "GET", nil) } } @@ -180,22 +180,22 @@ type lw struct { watch watch.Interface } -func (w lw) List(options api.ListOptions) (runtime.Object, error) { +func (w lw) List(options v1.ListOptions) (runtime.Object, error) { return w.list, nil } -func (w lw) Watch(options api.ListOptions) (watch.Interface, error) { +func (w lw) Watch(options v1.ListOptions) (watch.Interface, error) { return w.watch, nil } func TestListWatchUntil(t *testing.T) { fw := watch.NewFake() go func() { - var obj *api.Pod + var obj *v1.Pod fw.Modify(obj) }() listwatch := lw{ - list: &api.PodList{Items: []api.Pod{{}}}, + list: &v1.PodList{Items: []v1.Pod{{}}}, watch: fw, } @@ -221,7 +221,7 @@ func TestListWatchUntil(t *testing.T) { if lastEvent.Type != watch.Modified { t.Fatalf("expected MODIFIED event type, got %v", lastEvent.Type) } - if got, isPod := lastEvent.Object.(*api.Pod); !isPod { + if got, isPod := lastEvent.Object.(*v1.Pod); !isPod { t.Fatalf("expected a pod event, got %#v", got) } } diff --git a/pkg/client/cache/mutation_detector_test.go b/pkg/client/cache/mutation_detector_test.go index 3a5d70c1c9..a7c5fee15b 100644 --- a/pkg/client/cache/mutation_detector_test.go +++ b/pkg/client/cache/mutation_detector_test.go @@ -22,7 +22,7 @@ import ( "testing" "time" - "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/watch" ) @@ -30,15 +30,15 @@ import ( func TestMutationDetector(t *testing.T) { fakeWatch := watch.NewFake() lw := &testLW{ - WatchFunc: func(options api.ListOptions) (watch.Interface, error) { + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { return fakeWatch, nil }, - ListFunc: func(options api.ListOptions) (runtime.Object, error) { - return &api.PodList{}, nil + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { + return &v1.PodList{}, nil }, } - pod := &api.Pod{ - ObjectMeta: api.ObjectMeta{ + pod := &v1.Pod{ + ObjectMeta: v1.ObjectMeta{ Name: "anything", Labels: map[string]string{"check": "foo"}, }, @@ -48,7 +48,7 @@ func TestMutationDetector(t *testing.T) { addReceived := make(chan bool) mutationFound := make(chan bool) - informer := NewSharedInformer(lw, &api.Pod{}, 1*time.Second).(*sharedIndexInformer) + informer := NewSharedInformer(lw, &v1.Pod{}, 1*time.Second).(*sharedIndexInformer) informer.cacheMutationDetector = &defaultCacheMutationDetector{ name: "name", period: 1 * time.Second, diff --git a/pkg/client/cache/reflector.go b/pkg/client/cache/reflector.go index 8a0d05ab47..8c8aee3a7b 100644 --- a/pkg/client/cache/reflector.go +++ b/pkg/client/cache/reflector.go @@ -34,9 +34,9 @@ import ( "time" "github.com/golang/glog" - "k8s.io/kubernetes/pkg/api" apierrs "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/meta" + "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/runtime" utilruntime "k8s.io/kubernetes/pkg/util/runtime" "k8s.io/kubernetes/pkg/util/wait" @@ -239,7 +239,7 @@ func (r *Reflector) ListAndWatch(stopCh <-chan struct{}) error { // Explicitly set "0" as resource version - it's fine for the List() // to be served from cache and potentially be delayed relative to // etcd contents. Reflector framework will catch up via Watch() eventually. - options := api.ListOptions{ResourceVersion: "0"} + options := v1.ListOptions{ResourceVersion: "0"} list, err := r.listerWatcher.List(options) if err != nil { return fmt.Errorf("%s: Failed to list %v: %v", r.name, r.expectedType, err) @@ -278,7 +278,7 @@ func (r *Reflector) ListAndWatch(stopCh <-chan struct{}) error { for { timemoutseconds := int64(minWatchTimeout.Seconds() * (rand.Float64() + 1.0)) - options = api.ListOptions{ + options = v1.ListOptions{ ResourceVersion: resourceVersion, // We want to avoid situations of hanging watchers. Stop any wachers that do not // receive any events within the timeout window. diff --git a/pkg/client/cache/reflector_test.go b/pkg/client/cache/reflector_test.go index 470787676d..eabe810a15 100644 --- a/pkg/client/cache/reflector_test.go +++ b/pkg/client/cache/reflector_test.go @@ -24,8 +24,8 @@ import ( "testing" "time" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/wait" "k8s.io/kubernetes/pkg/watch" @@ -34,27 +34,27 @@ import ( var nevererrc chan error type testLW struct { - ListFunc func(options api.ListOptions) (runtime.Object, error) - WatchFunc func(options api.ListOptions) (watch.Interface, error) + ListFunc func(options v1.ListOptions) (runtime.Object, error) + WatchFunc func(options v1.ListOptions) (watch.Interface, error) } -func (t *testLW) List(options api.ListOptions) (runtime.Object, error) { +func (t *testLW) List(options v1.ListOptions) (runtime.Object, error) { return t.ListFunc(options) } -func (t *testLW) Watch(options api.ListOptions) (watch.Interface, error) { +func (t *testLW) Watch(options v1.ListOptions) (watch.Interface, error) { return t.WatchFunc(options) } func TestCloseWatchChannelOnError(t *testing.T) { - r := NewReflector(&testLW{}, &api.Pod{}, NewStore(MetaNamespaceKeyFunc), 0) - pod := &api.Pod{ObjectMeta: api.ObjectMeta{Name: "bar"}} + r := NewReflector(&testLW{}, &v1.Pod{}, NewStore(MetaNamespaceKeyFunc), 0) + pod := &v1.Pod{ObjectMeta: v1.ObjectMeta{Name: "bar"}} fw := watch.NewFake() r.listerWatcher = &testLW{ - WatchFunc: func(options api.ListOptions) (watch.Interface, error) { + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { return fw, nil }, - ListFunc: func(options api.ListOptions) (runtime.Object, error) { - return &api.PodList{ListMeta: unversioned.ListMeta{ResourceVersion: "1"}}, nil + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { + return &v1.PodList{ListMeta: unversioned.ListMeta{ResourceVersion: "1"}}, nil }, } go r.ListAndWatch(wait.NeverStop) @@ -73,20 +73,20 @@ func TestCloseWatchChannelOnError(t *testing.T) { func TestRunUntil(t *testing.T) { stopCh := make(chan struct{}) store := NewStore(MetaNamespaceKeyFunc) - r := NewReflector(&testLW{}, &api.Pod{}, store, 0) + r := NewReflector(&testLW{}, &v1.Pod{}, store, 0) fw := watch.NewFake() r.listerWatcher = &testLW{ - WatchFunc: func(options api.ListOptions) (watch.Interface, error) { + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { return fw, nil }, - ListFunc: func(options api.ListOptions) (runtime.Object, error) { - return &api.PodList{ListMeta: unversioned.ListMeta{ResourceVersion: "1"}}, nil + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { + return &v1.PodList{ListMeta: unversioned.ListMeta{ResourceVersion: "1"}}, nil }, } r.RunUntil(stopCh) // Synchronously add a dummy pod into the watch channel so we // know the RunUntil go routine is in the watch handler. - fw.Add(&api.Pod{ObjectMeta: api.ObjectMeta{Name: "bar"}}) + fw.Add(&v1.Pod{ObjectMeta: v1.ObjectMeta{Name: "bar"}}) close(stopCh) select { case _, ok := <-fw.ResultChan(): @@ -101,7 +101,7 @@ func TestRunUntil(t *testing.T) { func TestReflectorResyncChan(t *testing.T) { s := NewStore(MetaNamespaceKeyFunc) - g := NewReflector(&testLW{}, &api.Pod{}, s, time.Millisecond) + g := NewReflector(&testLW{}, &v1.Pod{}, s, time.Millisecond) a, _ := g.resyncChan() b := time.After(wait.ForeverTestTimeout) select { @@ -114,7 +114,7 @@ func TestReflectorResyncChan(t *testing.T) { func BenchmarkReflectorResyncChanMany(b *testing.B) { s := NewStore(MetaNamespaceKeyFunc) - g := NewReflector(&testLW{}, &api.Pod{}, s, 25*time.Millisecond) + g := NewReflector(&testLW{}, &v1.Pod{}, s, 25*time.Millisecond) // The improvement to this (calling the timer's Stop() method) makes // this benchmark about 40% faster. for i := 0; i < b.N; i++ { @@ -126,7 +126,7 @@ func BenchmarkReflectorResyncChanMany(b *testing.B) { func TestReflectorWatchHandlerError(t *testing.T) { s := NewStore(MetaNamespaceKeyFunc) - g := NewReflector(&testLW{}, &api.Pod{}, s, 0) + g := NewReflector(&testLW{}, &v1.Pod{}, s, 0) fw := watch.NewFake() go func() { fw.Stop() @@ -140,15 +140,15 @@ func TestReflectorWatchHandlerError(t *testing.T) { func TestReflectorWatchHandler(t *testing.T) { s := NewStore(MetaNamespaceKeyFunc) - g := NewReflector(&testLW{}, &api.Pod{}, s, 0) + g := NewReflector(&testLW{}, &v1.Pod{}, s, 0) fw := watch.NewFake() - s.Add(&api.Pod{ObjectMeta: api.ObjectMeta{Name: "foo"}}) - s.Add(&api.Pod{ObjectMeta: api.ObjectMeta{Name: "bar"}}) + s.Add(&v1.Pod{ObjectMeta: v1.ObjectMeta{Name: "foo"}}) + s.Add(&v1.Pod{ObjectMeta: v1.ObjectMeta{Name: "bar"}}) go func() { - fw.Add(&api.Service{ObjectMeta: api.ObjectMeta{Name: "rejected"}}) - fw.Delete(&api.Pod{ObjectMeta: api.ObjectMeta{Name: "foo"}}) - fw.Modify(&api.Pod{ObjectMeta: api.ObjectMeta{Name: "bar", ResourceVersion: "55"}}) - fw.Add(&api.Pod{ObjectMeta: api.ObjectMeta{Name: "baz", ResourceVersion: "32"}}) + fw.Add(&v1.Service{ObjectMeta: v1.ObjectMeta{Name: "rejected"}}) + fw.Delete(&v1.Pod{ObjectMeta: v1.ObjectMeta{Name: "foo"}}) + fw.Modify(&v1.Pod{ObjectMeta: v1.ObjectMeta{Name: "bar", ResourceVersion: "55"}}) + fw.Add(&v1.Pod{ObjectMeta: v1.ObjectMeta{Name: "baz", ResourceVersion: "32"}}) fw.Stop() }() var resumeRV string @@ -157,12 +157,12 @@ func TestReflectorWatchHandler(t *testing.T) { t.Errorf("unexpected error %v", err) } - mkPod := func(id string, rv string) *api.Pod { - return &api.Pod{ObjectMeta: api.ObjectMeta{Name: id, ResourceVersion: rv}} + mkPod := func(id string, rv string) *v1.Pod { + return &v1.Pod{ObjectMeta: v1.ObjectMeta{Name: id, ResourceVersion: rv}} } table := []struct { - Pod *api.Pod + Pod *v1.Pod exists bool }{ {mkPod("foo", ""), false}, @@ -178,7 +178,7 @@ func TestReflectorWatchHandler(t *testing.T) { if !exists { continue } - if e, a := item.Pod.ResourceVersion, obj.(*api.Pod).ResourceVersion; e != a { + if e, a := item.Pod.ResourceVersion, obj.(*v1.Pod).ResourceVersion; e != a { t.Errorf("%v: expected %v, got %v", item.Pod, e, a) } } @@ -196,7 +196,7 @@ func TestReflectorWatchHandler(t *testing.T) { func TestReflectorStopWatch(t *testing.T) { s := NewStore(MetaNamespaceKeyFunc) - g := NewReflector(&testLW{}, &api.Pod{}, s, 0) + g := NewReflector(&testLW{}, &v1.Pod{}, s, 0) fw := watch.NewFake() var resumeRV string stopWatch := make(chan struct{}, 1) @@ -215,7 +215,7 @@ func TestReflectorListAndWatch(t *testing.T) { // inject an error. expectedRVs := []string{"1", "3"} lw := &testLW{ - WatchFunc: func(options api.ListOptions) (watch.Interface, error) { + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { rv := options.ResourceVersion fw := watch.NewFake() if e, a := expectedRVs[0], rv; e != a { @@ -227,12 +227,12 @@ func TestReflectorListAndWatch(t *testing.T) { go func() { createdFakes <- fw }() return fw, nil }, - ListFunc: func(options api.ListOptions) (runtime.Object, error) { - return &api.PodList{ListMeta: unversioned.ListMeta{ResourceVersion: "1"}}, nil + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { + return &v1.PodList{ListMeta: unversioned.ListMeta{ResourceVersion: "1"}}, nil }, } s := NewFIFO(MetaNamespaceKeyFunc) - r := NewReflector(lw, &api.Pod{}, s, 0) + r := NewReflector(lw, &v1.Pod{}, s, 0) go r.ListAndWatch(wait.NeverStop) ids := []string{"foo", "bar", "baz", "qux", "zoo"} @@ -242,7 +242,7 @@ func TestReflectorListAndWatch(t *testing.T) { fw = <-createdFakes } sendingRV := strconv.FormatUint(uint64(i+2), 10) - fw.Add(&api.Pod{ObjectMeta: api.ObjectMeta{Name: id, ResourceVersion: sendingRV}}) + fw.Add(&v1.Pod{ObjectMeta: v1.ObjectMeta{Name: id, ResourceVersion: sendingRV}}) if sendingRV == "3" { // Inject a failure. fw.Stop() @@ -252,7 +252,7 @@ func TestReflectorListAndWatch(t *testing.T) { // Verify we received the right ids with the right resource versions. for i, id := range ids { - pod := Pop(s).(*api.Pod) + pod := Pop(s).(*v1.Pod) if e, a := id, pod.Name; e != a { t.Errorf("%v: Expected %v, got %v", i, e, a) } @@ -267,18 +267,18 @@ func TestReflectorListAndWatch(t *testing.T) { } func TestReflectorListAndWatchWithErrors(t *testing.T) { - mkPod := func(id string, rv string) *api.Pod { - return &api.Pod{ObjectMeta: api.ObjectMeta{Name: id, ResourceVersion: rv}} + mkPod := func(id string, rv string) *v1.Pod { + return &v1.Pod{ObjectMeta: v1.ObjectMeta{Name: id, ResourceVersion: rv}} } - mkList := func(rv string, pods ...*api.Pod) *api.PodList { - list := &api.PodList{ListMeta: unversioned.ListMeta{ResourceVersion: rv}} + mkList := func(rv string, pods ...*v1.Pod) *v1.PodList { + list := &v1.PodList{ListMeta: unversioned.ListMeta{ResourceVersion: rv}} for _, pod := range pods { list.Items = append(list.Items, *pod) } return list } table := []struct { - list *api.PodList + list *v1.PodList listErr error events []watch.Event watchErr error @@ -317,7 +317,7 @@ func TestReflectorListAndWatchWithErrors(t *testing.T) { current := s.List() checkMap := map[string]string{} for _, item := range current { - pod := item.(*api.Pod) + pod := item.(*v1.Pod) checkMap[pod.Name] = pod.ResourceVersion } for _, pod := range item.list.Items { @@ -331,7 +331,7 @@ func TestReflectorListAndWatchWithErrors(t *testing.T) { } watchRet, watchErr := item.events, item.watchErr lw := &testLW{ - WatchFunc: func(options api.ListOptions) (watch.Interface, error) { + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { if watchErr != nil { return nil, watchErr } @@ -345,11 +345,11 @@ func TestReflectorListAndWatchWithErrors(t *testing.T) { }() return fw, nil }, - ListFunc: func(options api.ListOptions) (runtime.Object, error) { + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { return item.list, item.listErr }, } - r := NewReflector(lw, &api.Pod{}, s, 0) + r := NewReflector(lw, &v1.Pod{}, s, 0) r.ListAndWatch(wait.NeverStop) } } @@ -369,16 +369,16 @@ func TestReflectorResync(t *testing.T) { } lw := &testLW{ - WatchFunc: func(options api.ListOptions) (watch.Interface, error) { + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { fw := watch.NewFake() return fw, nil }, - ListFunc: func(options api.ListOptions) (runtime.Object, error) { - return &api.PodList{ListMeta: unversioned.ListMeta{ResourceVersion: "0"}}, nil + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { + return &v1.PodList{ListMeta: unversioned.ListMeta{ResourceVersion: "0"}}, nil }, } resyncPeriod := 1 * time.Millisecond - r := NewReflector(lw, &api.Pod{}, s, resyncPeriod) + r := NewReflector(lw, &v1.Pod{}, s, resyncPeriod) if err := r.ListAndWatch(stopCh); err != nil { // error from Resync is not propaged up to here. t.Errorf("expected error %v", err) 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 2d316aaed3..569a47a78f 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 @@ -20,6 +20,7 @@ import ( "fmt" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/fields" "k8s.io/kubernetes/pkg/runtime" ) @@ -148,14 +149,47 @@ type EventSinkImpl struct { Interface EventInterface } -func (e *EventSinkImpl) Create(event *api.Event) (*api.Event, error) { - return e.Interface.CreateWithEventNamespace(event) +func (e *EventSinkImpl) Create(event *v1.Event) (*v1.Event, error) { + internalEvent := &api.Event{} + err := v1.Convert_v1_Event_To_api_Event(event, internalEvent, nil) + if err != nil { + return nil, err + } + _, err = e.Interface.CreateWithEventNamespace(internalEvent) + if err != nil { + return nil, err + } + return event, nil } -func (e *EventSinkImpl) Update(event *api.Event) (*api.Event, error) { - return e.Interface.UpdateWithEventNamespace(event) +func (e *EventSinkImpl) Update(event *v1.Event) (*v1.Event, error) { + internalEvent := &api.Event{} + err := v1.Convert_v1_Event_To_api_Event(event, internalEvent, nil) + if err != nil { + return nil, err + } + _, err = e.Interface.UpdateWithEventNamespace(internalEvent) + if err != nil { + return nil, err + } + return event, nil } -func (e *EventSinkImpl) Patch(event *api.Event, data []byte) (*api.Event, error) { - return e.Interface.PatchWithEventNamespace(event, data) +func (e *EventSinkImpl) Patch(event *v1.Event, data []byte) (*v1.Event, error) { + internalEvent := &api.Event{} + err := v1.Convert_v1_Event_To_api_Event(event, internalEvent, nil) + if err != nil { + return nil, err + } + internalEvent, err = e.Interface.PatchWithEventNamespace(internalEvent, data) + if err != nil { + return nil, err + } + externalEvent := &v1.Event{} + err = v1.Convert_api_Event_To_v1_Event(internalEvent, externalEvent, nil) + if err != nil { + // Patch succeeded, no need to report the failed conversion + return event, nil + } + return externalEvent, nil } diff --git a/pkg/client/conditions/conditions.go b/pkg/client/conditions/conditions.go new file mode 100644 index 0000000000..8d304b48a8 --- /dev/null +++ b/pkg/client/conditions/conditions.go @@ -0,0 +1,164 @@ +/* +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 conditions + +import ( + "fmt" + + "k8s.io/kubernetes/pkg/api/errors" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/kubernetes/pkg/watch" +) + +// ErrPodCompleted is returned by PodRunning or PodContainerRunning to indicate that +// the pod has already reached completed state. +var ErrPodCompleted = fmt.Errorf("pod ran to completion") + +// ErrContainerTerminated is returned by PodContainerRunning in the intermediate +// state where the pod indicates it's still running, but its container is already terminated +var ErrContainerTerminated = fmt.Errorf("container terminated") + +// PodRunning returns true if the pod is running, false if the pod has not yet reached running state, +// returns ErrPodCompleted if the pod has run to completion, or an error in any other case. +func PodRunning(event watch.Event) (bool, error) { + switch event.Type { + case watch.Deleted: + return false, errors.NewNotFound(unversioned.GroupResource{Resource: "pods"}, "") + } + switch t := event.Object.(type) { + case *v1.Pod: + switch t.Status.Phase { + case v1.PodRunning: + return true, nil + case v1.PodFailed, v1.PodSucceeded: + return false, ErrPodCompleted + } + } + return false, nil +} + +// PodCompleted returns true if the pod has run to completion, false if the pod has not yet +// reached running state, or an error in any other case. +func PodCompleted(event watch.Event) (bool, error) { + switch event.Type { + case watch.Deleted: + return false, errors.NewNotFound(unversioned.GroupResource{Resource: "pods"}, "") + } + switch t := event.Object.(type) { + case *v1.Pod: + switch t.Status.Phase { + case v1.PodFailed, v1.PodSucceeded: + return true, nil + } + } + return false, nil +} + +// PodRunningAndReady returns true if the pod is running and ready, false if the pod has not +// yet reached those states, returns ErrPodCompleted if the pod has run to completion, or +// an error in any other case. +func PodRunningAndReady(event watch.Event) (bool, error) { + switch event.Type { + case watch.Deleted: + return false, errors.NewNotFound(unversioned.GroupResource{Resource: "pods"}, "") + } + switch t := event.Object.(type) { + case *v1.Pod: + switch t.Status.Phase { + case v1.PodFailed, v1.PodSucceeded: + return false, ErrPodCompleted + case v1.PodRunning: + return v1.IsPodReady(t), nil + } + } + return false, nil +} + +// PodNotPending returns true if the pod has left the pending state, false if it has not, +// or an error in any other case (such as if the pod was deleted). +func PodNotPending(event watch.Event) (bool, error) { + switch event.Type { + case watch.Deleted: + return false, errors.NewNotFound(unversioned.GroupResource{Resource: "pods"}, "") + } + switch t := event.Object.(type) { + case *v1.Pod: + switch t.Status.Phase { + case v1.PodPending: + return false, nil + default: + return true, nil + } + } + return false, nil +} + +// PodContainerRunning returns false until the named container has ContainerStatus running (at least once), +// and will return an error if the pod is deleted, runs to completion, or the container pod is not available. +func PodContainerRunning(containerName string) watch.ConditionFunc { + return func(event watch.Event) (bool, error) { + switch event.Type { + case watch.Deleted: + return false, errors.NewNotFound(unversioned.GroupResource{Resource: "pods"}, "") + } + switch t := event.Object.(type) { + case *v1.Pod: + switch t.Status.Phase { + case v1.PodRunning, v1.PodPending: + case v1.PodFailed, v1.PodSucceeded: + return false, ErrPodCompleted + default: + return false, nil + } + for _, s := range t.Status.ContainerStatuses { + if s.Name != containerName { + continue + } + if s.State.Terminated != nil { + return false, ErrContainerTerminated + } + return s.State.Running != nil, nil + } + for _, s := range t.Status.InitContainerStatuses { + if s.Name != containerName { + continue + } + if s.State.Terminated != nil { + return false, ErrContainerTerminated + } + return s.State.Running != nil, nil + } + return false, nil + } + return false, nil + } +} + +// ServiceAccountHasSecrets returns true if the service account has at least one secret, +// false if it does not, or an error. +func ServiceAccountHasSecrets(event watch.Event) (bool, error) { + switch event.Type { + case watch.Deleted: + return false, errors.NewNotFound(unversioned.GroupResource{Resource: "serviceaccounts"}, "") + } + switch t := event.Object.(type) { + case *v1.ServiceAccount: + return len(t.Secrets) > 0, nil + } + return false, nil +} diff --git a/pkg/client/leaderelection/leaderelection_test.go b/pkg/client/leaderelection/leaderelection_test.go index 52ff99befe..422b9179da 100644 --- a/pkg/client/leaderelection/leaderelection_test.go +++ b/pkg/client/leaderelection/leaderelection_test.go @@ -26,10 +26,10 @@ import ( "testing" "time" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/unversioned" - fakeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake" + "k8s.io/kubernetes/pkg/api/v1" + fakeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5/fake" rl "k8s.io/kubernetes/pkg/client/leaderelection/resourcelock" "k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/client/testing/core" @@ -67,7 +67,7 @@ func TestTryAcquireOrRenew(t *testing.T) { { verb: "create", reaction: func(action core.Action) (handled bool, ret runtime.Object, err error) { - return true, action.(core.CreateAction).GetObject().(*api.Endpoints), nil + return true, action.(core.CreateAction).GetObject().(*v1.Endpoints), nil }, }, }, @@ -83,8 +83,8 @@ func TestTryAcquireOrRenew(t *testing.T) { { verb: "get", reaction: func(action core.Action) (handled bool, ret runtime.Object, err error) { - return true, &api.Endpoints{ - ObjectMeta: api.ObjectMeta{ + return true, &v1.Endpoints{ + ObjectMeta: v1.ObjectMeta{ Namespace: action.GetNamespace(), Name: action.(core.GetAction).GetName(), }, @@ -94,7 +94,7 @@ func TestTryAcquireOrRenew(t *testing.T) { { verb: "update", reaction: func(action core.Action) (handled bool, ret runtime.Object, err error) { - return true, action.(core.CreateAction).GetObject().(*api.Endpoints), nil + return true, action.(core.CreateAction).GetObject().(*v1.Endpoints), nil }, }, }, @@ -112,8 +112,8 @@ func TestTryAcquireOrRenew(t *testing.T) { { verb: "get", reaction: func(action core.Action) (handled bool, ret runtime.Object, err error) { - return true, &api.Endpoints{ - ObjectMeta: api.ObjectMeta{ + return true, &v1.Endpoints{ + ObjectMeta: v1.ObjectMeta{ Namespace: action.GetNamespace(), Name: action.(core.GetAction).GetName(), Annotations: map[string]string{ @@ -126,7 +126,7 @@ func TestTryAcquireOrRenew(t *testing.T) { { verb: "update", reaction: func(action core.Action) (handled bool, ret runtime.Object, err error) { - return true, action.(core.CreateAction).GetObject().(*api.Endpoints), nil + return true, action.(core.CreateAction).GetObject().(*v1.Endpoints), nil }, }, }, @@ -146,8 +146,8 @@ func TestTryAcquireOrRenew(t *testing.T) { { verb: "get", reaction: func(action core.Action) (handled bool, ret runtime.Object, err error) { - return true, &api.Endpoints{ - ObjectMeta: api.ObjectMeta{ + return true, &v1.Endpoints{ + ObjectMeta: v1.ObjectMeta{ Namespace: action.GetNamespace(), Name: action.(core.GetAction).GetName(), Annotations: map[string]string{ @@ -172,8 +172,8 @@ func TestTryAcquireOrRenew(t *testing.T) { { verb: "get", reaction: func(action core.Action) (handled bool, ret runtime.Object, err error) { - return true, &api.Endpoints{ - ObjectMeta: api.ObjectMeta{ + return true, &v1.Endpoints{ + ObjectMeta: v1.ObjectMeta{ Namespace: action.GetNamespace(), Name: action.(core.GetAction).GetName(), Annotations: map[string]string{ @@ -186,7 +186,7 @@ func TestTryAcquireOrRenew(t *testing.T) { { verb: "update", reaction: func(action core.Action) (handled bool, ret runtime.Object, err error) { - return true, action.(core.CreateAction).GetObject().(*api.Endpoints), nil + return true, action.(core.CreateAction).GetObject().(*v1.Endpoints), nil }, }, }, @@ -205,7 +205,7 @@ func TestTryAcquireOrRenew(t *testing.T) { var reportedLeader string lock := rl.EndpointsLock{ - EndpointsMeta: api.ObjectMeta{Namespace: "foo", Name: "bar"}, + EndpointsMeta: v1.ObjectMeta{Namespace: "foo", Name: "bar"}, LockConfig: rl.ResourceLockConfig{ Identity: "baz", EventRecorder: &record.FakeRecorder{}, diff --git a/pkg/client/leaderelection/resourcelock/endpointslock.go b/pkg/client/leaderelection/resourcelock/endpointslock.go index 56749661df..9ebd12af5c 100644 --- a/pkg/client/leaderelection/resourcelock/endpointslock.go +++ b/pkg/client/leaderelection/resourcelock/endpointslock.go @@ -21,17 +21,17 @@ import ( "errors" "fmt" - "k8s.io/kubernetes/pkg/api" - clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" + "k8s.io/kubernetes/pkg/api/v1" + clientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5" ) type EndpointsLock struct { // EndpointsMeta should contain a Name and a Namespace of an // Endpoints object that the LeaderElector will attempt to lead. - EndpointsMeta api.ObjectMeta + EndpointsMeta v1.ObjectMeta Client clientset.Interface LockConfig ResourceLockConfig - e *api.Endpoints + e *v1.Endpoints } func (el *EndpointsLock) Get() (*LeaderElectionRecord, error) { @@ -58,8 +58,8 @@ func (el *EndpointsLock) Create(ler LeaderElectionRecord) error { if err != nil { return err } - el.e, err = el.Client.Core().Endpoints(el.EndpointsMeta.Namespace).Create(&api.Endpoints{ - ObjectMeta: api.ObjectMeta{ + el.e, err = el.Client.Core().Endpoints(el.EndpointsMeta.Namespace).Create(&v1.Endpoints{ + ObjectMeta: v1.ObjectMeta{ Name: el.EndpointsMeta.Name, Namespace: el.EndpointsMeta.Namespace, Annotations: map[string]string{ @@ -87,7 +87,7 @@ func (el *EndpointsLock) Update(ler LeaderElectionRecord) error { // RecordEvent in leader election while adding meta-data func (el *EndpointsLock) RecordEvent(s string) { events := fmt.Sprintf("%v %v", el.LockConfig.Identity, s) - el.LockConfig.EventRecorder.Eventf(&api.Endpoints{ObjectMeta: el.e.ObjectMeta}, api.EventTypeNormal, "LeaderElection", events) + el.LockConfig.EventRecorder.Eventf(&v1.Endpoints{ObjectMeta: el.e.ObjectMeta}, v1.EventTypeNormal, "LeaderElection", events) } // Describe is used to convert details on current resource lock diff --git a/pkg/client/listers/batch/v1/expansion_generated.go b/pkg/client/listers/batch/v1/expansion_generated.go index 14ac277765..c9652cbfe9 100644 --- a/pkg/client/listers/batch/v1/expansion_generated.go +++ b/pkg/client/listers/batch/v1/expansion_generated.go @@ -17,11 +17,3 @@ limitations under the License. // This file was automatically generated by lister-gen with arguments: --input-dirs=[k8s.io/kubernetes/pkg/api,k8s.io/kubernetes/pkg/api/v1,k8s.io/kubernetes/pkg/apis/abac,k8s.io/kubernetes/pkg/apis/abac/v0,k8s.io/kubernetes/pkg/apis/abac/v1beta1,k8s.io/kubernetes/pkg/apis/apps,k8s.io/kubernetes/pkg/apis/apps/v1beta1,k8s.io/kubernetes/pkg/apis/authentication,k8s.io/kubernetes/pkg/apis/authentication/v1beta1,k8s.io/kubernetes/pkg/apis/authorization,k8s.io/kubernetes/pkg/apis/authorization/v1beta1,k8s.io/kubernetes/pkg/apis/autoscaling,k8s.io/kubernetes/pkg/apis/autoscaling/v1,k8s.io/kubernetes/pkg/apis/batch,k8s.io/kubernetes/pkg/apis/batch/v1,k8s.io/kubernetes/pkg/apis/batch/v2alpha1,k8s.io/kubernetes/pkg/apis/certificates,k8s.io/kubernetes/pkg/apis/certificates/v1alpha1,k8s.io/kubernetes/pkg/apis/componentconfig,k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1,k8s.io/kubernetes/pkg/apis/extensions,k8s.io/kubernetes/pkg/apis/extensions/v1beta1,k8s.io/kubernetes/pkg/apis/imagepolicy,k8s.io/kubernetes/pkg/apis/imagepolicy/v1alpha1,k8s.io/kubernetes/pkg/apis/policy,k8s.io/kubernetes/pkg/apis/policy/v1alpha1,k8s.io/kubernetes/pkg/apis/policy/v1beta1,k8s.io/kubernetes/pkg/apis/rbac,k8s.io/kubernetes/pkg/apis/rbac/v1alpha1,k8s.io/kubernetes/pkg/apis/storage,k8s.io/kubernetes/pkg/apis/storage/v1beta1] package v1 - -// JobListerExpansion allows custom methods to be added to -// JobLister. -type JobListerExpansion interface{} - -// JobNamespaceListerExpansion allows custom methods to be added to -// JobNamespaeLister. -type JobNamespaceListerExpansion interface{} diff --git a/pkg/client/listers/batch/v1/job_expansion.go b/pkg/client/listers/batch/v1/job_expansion.go new file mode 100644 index 0000000000..cfded28c34 --- /dev/null +++ b/pkg/client/listers/batch/v1/job_expansion.go @@ -0,0 +1,64 @@ +/* +Copyright 2016 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 v1 + +import ( + "fmt" + + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/api/v1" + batch "k8s.io/kubernetes/pkg/apis/batch/v1" + "k8s.io/kubernetes/pkg/labels" +) + +// JobListerExpansion allows custom methods to be added to +// JobLister. +type JobListerExpansion interface { + // GetPodJobs returns a list of jobs managing a pod. An error is returned only + // if no matching jobs are found. + GetPodJobs(pod *v1.Pod) (jobs []batch.Job, err error) +} + +// GetPodJobs returns a list of jobs managing a pod. An error is returned only +// if no matching jobs are found. +func (l *jobLister) GetPodJobs(pod *v1.Pod) (jobs []batch.Job, err error) { + if len(pod.Labels) == 0 { + err = fmt.Errorf("no jobs found for pod %v because it has no labels", pod.Name) + return + } + + var list []*batch.Job + list, err = l.Jobs(pod.Namespace).List(labels.Everything()) + if err != nil { + return + } + for _, job := range list { + selector, _ := unversioned.LabelSelectorAsSelector(job.Spec.Selector) + if !selector.Matches(labels.Set(pod.Labels)) { + continue + } + jobs = append(jobs, *job) + } + if len(jobs) == 0 { + err = fmt.Errorf("could not find jobs for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels) + } + return +} + +// JobNamespaceListerExpansion allows custom methods to be added to +// JobNamespaceLister. +type JobNamespaceListerExpansion interface{} diff --git a/pkg/client/record/event.go b/pkg/client/record/event.go index 55873a73d9..d2ebbb97d8 100644 --- a/pkg/client/record/event.go +++ b/pkg/client/record/event.go @@ -21,7 +21,7 @@ import ( "math/rand" "time" - "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/client/restclient" @@ -46,9 +46,9 @@ const maxQueuedEvents = 1000 // It is assumed that EventSink will return the same sorts of errors as // pkg/client's REST client. type EventSink interface { - Create(event *api.Event) (*api.Event, error) - Update(event *api.Event) (*api.Event, error) - Patch(oldEvent *api.Event, data []byte) (*api.Event, error) + 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. @@ -78,7 +78,7 @@ 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(*api.Event)) watch.Interface + 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. @@ -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 api.EventSource) EventRecorder + NewRecorder(source v1.EventSource) EventRecorder } // Creates a new event broadcaster. @@ -116,12 +116,12 @@ func (eventBroadcaster *eventBroadcasterImpl) StartRecordingToSink(sink EventSin randGen := rand.New(rand.NewSource(time.Now().UnixNano())) eventCorrelator := NewEventCorrelator(clock.RealClock{}) return eventBroadcaster.StartEventWatcher( - func(event *api.Event) { + func(event *v1.Event) { recordToSink(sink, event, eventCorrelator, randGen, eventBroadcaster.sleepDuration) }) } -func recordToSink(sink EventSink, event *api.Event, eventCorrelator *EventCorrelator, randGen *rand.Rand, sleepDuration time.Duration) { +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 @@ -167,8 +167,8 @@ func isKeyNotFoundError(err error) bool { // 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 *api.Event, patch []byte, updateExistingEvent bool, eventCorrelator *EventCorrelator) bool { - var newEvent *api.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) @@ -213,14 +213,14 @@ func recordEvent(sink EventSink, event *api.Event, patch []byte, updateExistingE // 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 *api.Event) { + 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(*api.Event)) watch.Interface { +func (eventBroadcaster *eventBroadcasterImpl) StartEventWatcher(eventHandler func(*v1.Event)) watch.Interface { watcher := eventBroadcaster.Watch() go func() { defer utilruntime.HandleCrash() @@ -229,7 +229,7 @@ func (eventBroadcaster *eventBroadcasterImpl) StartEventWatcher(eventHandler fun if !open { return } - event, ok := watchEvent.Object.(*api.Event) + event, ok := watchEvent.Object.(*v1.Event) if !ok { // This is all local, so there's no reason this should // ever happen. @@ -242,18 +242,18 @@ func (eventBroadcaster *eventBroadcasterImpl) StartEventWatcher(eventHandler fun } // NewRecorder returns an EventRecorder that records events with the given event source. -func (eventBroadcaster *eventBroadcasterImpl) NewRecorder(source api.EventSource) EventRecorder { +func (eventBroadcaster *eventBroadcasterImpl) NewRecorder(source v1.EventSource) EventRecorder { return &recorderImpl{source, eventBroadcaster.Broadcaster, clock.RealClock{}} } type recorderImpl struct { - source api.EventSource + source v1.EventSource *watch.Broadcaster clock clock.Clock } func (recorder *recorderImpl) generateEvent(object runtime.Object, timestamp unversioned.Time, eventtype, reason, message string) { - ref, err := api.GetReference(object) + 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 @@ -276,7 +276,7 @@ func (recorder *recorderImpl) generateEvent(object runtime.Object, timestamp unv func validateEventType(eventtype string) bool { switch eventtype { - case api.EventTypeNormal, api.EventTypeWarning: + case v1.EventTypeNormal, v1.EventTypeWarning: return true } return false @@ -294,14 +294,14 @@ func (recorder *recorderImpl) PastEventf(object runtime.Object, timestamp unvers recorder.generateEvent(object, timestamp, eventtype, reason, fmt.Sprintf(messageFmt, args...)) } -func (recorder *recorderImpl) makeEvent(ref *api.ObjectReference, eventtype, reason, message string) *api.Event { +func (recorder *recorderImpl) makeEvent(ref *v1.ObjectReference, eventtype, reason, message string) *v1.Event { t := unversioned.Time{Time: recorder.clock.Now()} namespace := ref.Namespace if namespace == "" { - namespace = api.NamespaceDefault + namespace = v1.NamespaceDefault } - return &api.Event{ - ObjectMeta: api.ObjectMeta{ + return &v1.Event{ + ObjectMeta: v1.ObjectMeta{ Name: fmt.Sprintf("%v.%x", ref.Name, t.UnixNano()), Namespace: namespace, }, diff --git a/pkg/client/record/event_test.go b/pkg/client/record/event_test.go index c10dde47f4..bdf52671c6 100644 --- a/pkg/client/record/event_test.go +++ b/pkg/client/record/event_test.go @@ -25,7 +25,7 @@ import ( "testing" "time" - "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/api/errors" _ "k8s.io/kubernetes/pkg/api/install" // To register api.Pod used in tests below "k8s.io/kubernetes/pkg/api/unversioned" @@ -36,13 +36,13 @@ import ( ) type testEventSink struct { - OnCreate func(e *api.Event) (*api.Event, error) - OnUpdate func(e *api.Event) (*api.Event, error) - OnPatch func(e *api.Event, p []byte) (*api.Event, error) + 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 *api.Event) (*api.Event, error) { +func (t *testEventSink) Create(e *v1.Event) (*v1.Event, error) { if t.OnCreate != nil { return t.OnCreate(e) } @@ -50,7 +50,7 @@ func (t *testEventSink) Create(e *api.Event) (*api.Event, error) { } // UpdateEvent records the event for testing. -func (t *testEventSink) Update(e *api.Event) (*api.Event, error) { +func (t *testEventSink) Update(e *v1.Event) (*v1.Event, error) { if t.OnUpdate != nil { return t.OnUpdate(e) } @@ -58,27 +58,27 @@ func (t *testEventSink) Update(e *api.Event) (*api.Event, error) { } // PatchEvent records the event for testing. -func (t *testEventSink) Patch(e *api.Event, p []byte) (*api.Event, error) { +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(*api.Event) (*api.Event, error) +type OnCreateFunc func(*v1.Event) (*v1.Event, error) -func OnCreateFactory(testCache map[string]*api.Event, createEvent chan<- *api.Event) OnCreateFunc { - return func(event *api.Event) (*api.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(*api.Event, []byte) (*api.Event, error) +type OnPatchFunc func(*v1.Event, []byte) (*v1.Event, error) -func OnPatchFactory(testCache map[string]*api.Event, patchEvent chan<- *api.Event) OnPatchFunc { - return func(event *api.Event, patch []byte) (*api.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.") @@ -91,7 +91,7 @@ func OnPatchFactory(testCache map[string]*api.Event, patchEvent chan<- *api.Even if err != nil { return nil, fmt.Errorf("unexpected error: %v", err) } - patchedObj := &api.Event{} + patchedObj := &v1.Event{} err = json.Unmarshal(patched, patchedObj) if err != nil { return nil, fmt.Errorf("unexpected error: %v", err) @@ -102,24 +102,24 @@ func OnPatchFactory(testCache map[string]*api.Event, patchEvent chan<- *api.Even } func TestEventf(t *testing.T) { - testPod := &api.Pod{ - ObjectMeta: api.ObjectMeta{ + testPod := &v1.Pod{ + ObjectMeta: v1.ObjectMeta{ SelfLink: "/api/version/pods/foo", Name: "foo", Namespace: "baz", UID: "bar", }, } - testPod2 := &api.Pod{ - ObjectMeta: api.ObjectMeta{ + testPod2 := &v1.Pod{ + ObjectMeta: v1.ObjectMeta{ SelfLink: "/api/version/pods/foo", Name: "foo", Namespace: "baz", UID: "differentUid", }, } - testRef, err := api.GetPartialReference(testPod, "spec.containers[2]") - testRef2, err := api.GetPartialReference(testPod2, "spec.containers[3]") + testRef, err := v1.GetPartialReference(testPod, "spec.containers[2]") + testRef2, err := v1.GetPartialReference(testPod2, "spec.containers[3]") if err != nil { t.Fatal(err) } @@ -129,22 +129,22 @@ func TestEventf(t *testing.T) { reason string messageFmt string elements []interface{} - expect *api.Event + expect *v1.Event expectLog string expectUpdate bool }{ { obj: testRef, - eventtype: api.EventTypeNormal, + eventtype: v1.EventTypeNormal, reason: "Started", messageFmt: "some verbose message: %v", elements: []interface{}{1}, - expect: &api.Event{ - ObjectMeta: api.ObjectMeta{ + expect: &v1.Event{ + ObjectMeta: v1.ObjectMeta{ Name: "foo", Namespace: "baz", }, - InvolvedObject: api.ObjectReference{ + InvolvedObject: v1.ObjectReference{ Kind: "Pod", Name: "foo", Namespace: "baz", @@ -154,25 +154,25 @@ func TestEventf(t *testing.T) { }, Reason: "Started", Message: "some verbose message: 1", - Source: api.EventSource{Component: "eventTest"}, + Source: v1.EventSource{Component: "eventTest"}, Count: 1, - Type: api.EventTypeNormal, + Type: v1.EventTypeNormal, }, - expectLog: `Event(api.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"bar", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[2]"}): type: 'Normal' reason: 'Started' some verbose message: 1`, + 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: api.EventTypeNormal, + eventtype: v1.EventTypeNormal, reason: "Killed", messageFmt: "some other verbose message: %v", elements: []interface{}{1}, - expect: &api.Event{ - ObjectMeta: api.ObjectMeta{ + expect: &v1.Event{ + ObjectMeta: v1.ObjectMeta{ Name: "foo", Namespace: "baz", }, - InvolvedObject: api.ObjectReference{ + InvolvedObject: v1.ObjectReference{ Kind: "Pod", Name: "foo", Namespace: "baz", @@ -181,25 +181,25 @@ func TestEventf(t *testing.T) { }, Reason: "Killed", Message: "some other verbose message: 1", - Source: api.EventSource{Component: "eventTest"}, + Source: v1.EventSource{Component: "eventTest"}, Count: 1, - Type: api.EventTypeNormal, + Type: v1.EventTypeNormal, }, - expectLog: `Event(api.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"bar", APIVersion:"version", ResourceVersion:"", FieldPath:""}): type: 'Normal' reason: 'Killed' some other verbose message: 1`, + 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: api.EventTypeNormal, + eventtype: v1.EventTypeNormal, reason: "Started", messageFmt: "some verbose message: %v", elements: []interface{}{1}, - expect: &api.Event{ - ObjectMeta: api.ObjectMeta{ + expect: &v1.Event{ + ObjectMeta: v1.ObjectMeta{ Name: "foo", Namespace: "baz", }, - InvolvedObject: api.ObjectReference{ + InvolvedObject: v1.ObjectReference{ Kind: "Pod", Name: "foo", Namespace: "baz", @@ -209,25 +209,25 @@ func TestEventf(t *testing.T) { }, Reason: "Started", Message: "some verbose message: 1", - Source: api.EventSource{Component: "eventTest"}, + Source: v1.EventSource{Component: "eventTest"}, Count: 2, - Type: api.EventTypeNormal, + Type: v1.EventTypeNormal, }, - expectLog: `Event(api.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"bar", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[2]"}): type: 'Normal' reason: 'Started' some verbose message: 1`, + 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: api.EventTypeNormal, + eventtype: v1.EventTypeNormal, reason: "Started", messageFmt: "some verbose message: %v", elements: []interface{}{1}, - expect: &api.Event{ - ObjectMeta: api.ObjectMeta{ + expect: &v1.Event{ + ObjectMeta: v1.ObjectMeta{ Name: "foo", Namespace: "baz", }, - InvolvedObject: api.ObjectReference{ + InvolvedObject: v1.ObjectReference{ Kind: "Pod", Name: "foo", Namespace: "baz", @@ -237,25 +237,25 @@ func TestEventf(t *testing.T) { }, Reason: "Started", Message: "some verbose message: 1", - Source: api.EventSource{Component: "eventTest"}, + Source: v1.EventSource{Component: "eventTest"}, Count: 1, - Type: api.EventTypeNormal, + Type: v1.EventTypeNormal, }, - expectLog: `Event(api.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"differentUid", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[3]"}): type: 'Normal' reason: 'Started' some verbose message: 1`, + 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: api.EventTypeNormal, + eventtype: v1.EventTypeNormal, reason: "Started", messageFmt: "some verbose message: %v", elements: []interface{}{1}, - expect: &api.Event{ - ObjectMeta: api.ObjectMeta{ + expect: &v1.Event{ + ObjectMeta: v1.ObjectMeta{ Name: "foo", Namespace: "baz", }, - InvolvedObject: api.ObjectReference{ + InvolvedObject: v1.ObjectReference{ Kind: "Pod", Name: "foo", Namespace: "baz", @@ -265,25 +265,25 @@ func TestEventf(t *testing.T) { }, Reason: "Started", Message: "some verbose message: 1", - Source: api.EventSource{Component: "eventTest"}, + Source: v1.EventSource{Component: "eventTest"}, Count: 3, - Type: api.EventTypeNormal, + Type: v1.EventTypeNormal, }, - expectLog: `Event(api.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"bar", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[2]"}): type: 'Normal' reason: 'Started' some verbose message: 1`, + 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: api.EventTypeNormal, + eventtype: v1.EventTypeNormal, reason: "Stopped", messageFmt: "some verbose message: %v", elements: []interface{}{1}, - expect: &api.Event{ - ObjectMeta: api.ObjectMeta{ + expect: &v1.Event{ + ObjectMeta: v1.ObjectMeta{ Name: "foo", Namespace: "baz", }, - InvolvedObject: api.ObjectReference{ + InvolvedObject: v1.ObjectReference{ Kind: "Pod", Name: "foo", Namespace: "baz", @@ -293,25 +293,25 @@ func TestEventf(t *testing.T) { }, Reason: "Stopped", Message: "some verbose message: 1", - Source: api.EventSource{Component: "eventTest"}, + Source: v1.EventSource{Component: "eventTest"}, Count: 1, - Type: api.EventTypeNormal, + Type: v1.EventTypeNormal, }, - expectLog: `Event(api.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"differentUid", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[3]"}): type: 'Normal' reason: 'Stopped' some verbose message: 1`, + 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: api.EventTypeNormal, + eventtype: v1.EventTypeNormal, reason: "Stopped", messageFmt: "some verbose message: %v", elements: []interface{}{1}, - expect: &api.Event{ - ObjectMeta: api.ObjectMeta{ + expect: &v1.Event{ + ObjectMeta: v1.ObjectMeta{ Name: "foo", Namespace: "baz", }, - InvolvedObject: api.ObjectReference{ + InvolvedObject: v1.ObjectReference{ Kind: "Pod", Name: "foo", Namespace: "baz", @@ -321,23 +321,23 @@ func TestEventf(t *testing.T) { }, Reason: "Stopped", Message: "some verbose message: 1", - Source: api.EventSource{Component: "eventTest"}, + Source: v1.EventSource{Component: "eventTest"}, Count: 2, - Type: api.EventTypeNormal, + Type: v1.EventTypeNormal, }, - expectLog: `Event(api.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"differentUid", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[3]"}): type: 'Normal' reason: 'Stopped' some verbose message: 1`, + 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]*api.Event{} + testCache := map[string]*v1.Event{} logCalled := make(chan struct{}) - createEvent := make(chan *api.Event) - updateEvent := make(chan *api.Event) - patchEvent := make(chan *api.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 *api.Event) (*api.Event, error) { + OnUpdate: func(event *v1.Event) (*v1.Event, error) { updateEvent <- event return event, nil }, @@ -347,7 +347,7 @@ func TestEventf(t *testing.T) { sinkWatcher := eventBroadcaster.StartRecordingToSink(&testEvents) clock := clock.NewFakeClock(time.Now()) - recorder := recorderWithFakeClock(api.EventSource{Component: "eventTest"}, eventBroadcaster, clock) + 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{}) { @@ -373,7 +373,7 @@ func TestEventf(t *testing.T) { sinkWatcher.Stop() } -func recorderWithFakeClock(eventSource api.EventSource, eventBroadcaster EventBroadcaster, clock clock.Clock) EventRecorder { +func recorderWithFakeClock(eventSource v1.EventSource, eventBroadcaster EventBroadcaster, clock clock.Clock) EventRecorder { return &recorderImpl{eventSource, eventBroadcaster.(*eventBroadcasterImpl).Broadcaster, clock} } @@ -417,7 +417,7 @@ func TestWriteEventError(t *testing.T) { for caseName, ent := range table { attempts := 0 sink := &testEventSink{ - OnCreate: func(event *api.Event) (*api.Event, error) { + OnCreate: func(event *v1.Event) (*v1.Event, error) { attempts++ if attempts < ent.timesToSendError { return nil, ent.err @@ -425,7 +425,7 @@ func TestWriteEventError(t *testing.T) { return event, nil }, } - ev := &api.Event{} + 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) @@ -437,23 +437,23 @@ func TestUpdateExpiredEvent(t *testing.T) { eventCorrelator := NewEventCorrelator(clock.RealClock{}) randGen := rand.New(rand.NewSource(time.Now().UnixNano())) - var createdEvent *api.Event + var createdEvent *v1.Event sink := &testEventSink{ - OnPatch: func(*api.Event, []byte) (*api.Event, error) { + OnPatch: func(*v1.Event, []byte) (*v1.Event, error) { return nil, &errors.StatusError{ ErrStatus: unversioned.Status{ Code: http.StatusNotFound, Reason: unversioned.StatusReasonNotFound, }} }, - OnCreate: func(event *api.Event) (*api.Event, error) { + OnCreate: func(event *v1.Event) (*v1.Event, error) { createdEvent = event return event, nil }, } - ev := &api.Event{} + ev := &v1.Event{} ev.ResourceVersion = "updated-resource-version" ev.Count = 2 recordToSink(sink, ev, eventCorrelator, randGen, 0) @@ -475,7 +475,7 @@ func TestLotsOfEvents(t *testing.T) { // 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 *api.Event) (*api.Event, error) { + OnCreate: func(event *v1.Event) (*v1.Event, error) { num, err := strconv.Atoi(event.Message) if err != nil { t.Error(err) @@ -495,8 +495,8 @@ func TestLotsOfEvents(t *testing.T) { logWatcher := eventBroadcaster.StartLogging(func(formatter string, args ...interface{}) { loggerCalled <- struct{}{} }) - recorder := eventBroadcaster.NewRecorder(api.EventSource{Component: "eventTest"}) - ref := &api.ObjectReference{ + recorder := eventBroadcaster.NewRecorder(v1.EventSource{Component: "eventTest"}) + ref := &v1.ObjectReference{ Kind: "Pod", Name: "foo", Namespace: "baz", @@ -505,7 +505,7 @@ func TestLotsOfEvents(t *testing.T) { } for i := 0; i < maxQueuedEvents; i++ { // we need to vary the reason to prevent aggregation - go recorder.Eventf(ref, api.EventTypeNormal, "Reason-"+string(i), strconv.Itoa(i)) + 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++ { @@ -523,14 +523,14 @@ func TestLotsOfEvents(t *testing.T) { } func TestEventfNoNamespace(t *testing.T) { - testPod := &api.Pod{ - ObjectMeta: api.ObjectMeta{ + testPod := &v1.Pod{ + ObjectMeta: v1.ObjectMeta{ SelfLink: "/api/version/pods/foo", Name: "foo", UID: "bar", }, } - testRef, err := api.GetPartialReference(testPod, "spec.containers[2]") + testRef, err := v1.GetPartialReference(testPod, "spec.containers[2]") if err != nil { t.Fatal(err) } @@ -540,22 +540,22 @@ func TestEventfNoNamespace(t *testing.T) { reason string messageFmt string elements []interface{} - expect *api.Event + expect *v1.Event expectLog string expectUpdate bool }{ { obj: testRef, - eventtype: api.EventTypeNormal, + eventtype: v1.EventTypeNormal, reason: "Started", messageFmt: "some verbose message: %v", elements: []interface{}{1}, - expect: &api.Event{ - ObjectMeta: api.ObjectMeta{ + expect: &v1.Event{ + ObjectMeta: v1.ObjectMeta{ Name: "foo", Namespace: "default", }, - InvolvedObject: api.ObjectReference{ + InvolvedObject: v1.ObjectReference{ Kind: "Pod", Name: "foo", Namespace: "", @@ -565,23 +565,23 @@ func TestEventfNoNamespace(t *testing.T) { }, Reason: "Started", Message: "some verbose message: 1", - Source: api.EventSource{Component: "eventTest"}, + Source: v1.EventSource{Component: "eventTest"}, Count: 1, - Type: api.EventTypeNormal, + Type: v1.EventTypeNormal, }, - expectLog: `Event(api.ObjectReference{Kind:"Pod", Namespace:"", Name:"foo", UID:"bar", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[2]"}): type: 'Normal' reason: 'Started' some verbose message: 1`, + 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]*api.Event{} + testCache := map[string]*v1.Event{} logCalled := make(chan struct{}) - createEvent := make(chan *api.Event) - updateEvent := make(chan *api.Event) - patchEvent := make(chan *api.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 *api.Event) (*api.Event, error) { + OnUpdate: func(event *v1.Event) (*v1.Event, error) { updateEvent <- event return event, nil }, @@ -591,7 +591,7 @@ func TestEventfNoNamespace(t *testing.T) { sinkWatcher := eventBroadcaster.StartRecordingToSink(&testEvents) clock := clock.NewFakeClock(time.Now()) - recorder := recorderWithFakeClock(api.EventSource{Component: "eventTest"}, eventBroadcaster, clock) + recorder := recorderWithFakeClock(v1.EventSource{Component: "eventTest"}, eventBroadcaster, clock) for index, item := range table { clock.Step(1 * time.Second) @@ -620,24 +620,24 @@ func TestEventfNoNamespace(t *testing.T) { } func TestMultiSinkCache(t *testing.T) { - testPod := &api.Pod{ - ObjectMeta: api.ObjectMeta{ + testPod := &v1.Pod{ + ObjectMeta: v1.ObjectMeta{ SelfLink: "/api/version/pods/foo", Name: "foo", Namespace: "baz", UID: "bar", }, } - testPod2 := &api.Pod{ - ObjectMeta: api.ObjectMeta{ + testPod2 := &v1.Pod{ + ObjectMeta: v1.ObjectMeta{ SelfLink: "/api/version/pods/foo", Name: "foo", Namespace: "baz", UID: "differentUid", }, } - testRef, err := api.GetPartialReference(testPod, "spec.containers[2]") - testRef2, err := api.GetPartialReference(testPod2, "spec.containers[3]") + testRef, err := v1.GetPartialReference(testPod, "spec.containers[2]") + testRef2, err := v1.GetPartialReference(testPod2, "spec.containers[3]") if err != nil { t.Fatal(err) } @@ -647,22 +647,22 @@ func TestMultiSinkCache(t *testing.T) { reason string messageFmt string elements []interface{} - expect *api.Event + expect *v1.Event expectLog string expectUpdate bool }{ { obj: testRef, - eventtype: api.EventTypeNormal, + eventtype: v1.EventTypeNormal, reason: "Started", messageFmt: "some verbose message: %v", elements: []interface{}{1}, - expect: &api.Event{ - ObjectMeta: api.ObjectMeta{ + expect: &v1.Event{ + ObjectMeta: v1.ObjectMeta{ Name: "foo", Namespace: "baz", }, - InvolvedObject: api.ObjectReference{ + InvolvedObject: v1.ObjectReference{ Kind: "Pod", Name: "foo", Namespace: "baz", @@ -672,25 +672,25 @@ func TestMultiSinkCache(t *testing.T) { }, Reason: "Started", Message: "some verbose message: 1", - Source: api.EventSource{Component: "eventTest"}, + Source: v1.EventSource{Component: "eventTest"}, Count: 1, - Type: api.EventTypeNormal, + Type: v1.EventTypeNormal, }, - expectLog: `Event(api.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"bar", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[2]"}): type: 'Normal' reason: 'Started' some verbose message: 1`, + 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: api.EventTypeNormal, + eventtype: v1.EventTypeNormal, reason: "Killed", messageFmt: "some other verbose message: %v", elements: []interface{}{1}, - expect: &api.Event{ - ObjectMeta: api.ObjectMeta{ + expect: &v1.Event{ + ObjectMeta: v1.ObjectMeta{ Name: "foo", Namespace: "baz", }, - InvolvedObject: api.ObjectReference{ + InvolvedObject: v1.ObjectReference{ Kind: "Pod", Name: "foo", Namespace: "baz", @@ -699,25 +699,25 @@ func TestMultiSinkCache(t *testing.T) { }, Reason: "Killed", Message: "some other verbose message: 1", - Source: api.EventSource{Component: "eventTest"}, + Source: v1.EventSource{Component: "eventTest"}, Count: 1, - Type: api.EventTypeNormal, + Type: v1.EventTypeNormal, }, - expectLog: `Event(api.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"bar", APIVersion:"version", ResourceVersion:"", FieldPath:""}): type: 'Normal' reason: 'Killed' some other verbose message: 1`, + 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: api.EventTypeNormal, + eventtype: v1.EventTypeNormal, reason: "Started", messageFmt: "some verbose message: %v", elements: []interface{}{1}, - expect: &api.Event{ - ObjectMeta: api.ObjectMeta{ + expect: &v1.Event{ + ObjectMeta: v1.ObjectMeta{ Name: "foo", Namespace: "baz", }, - InvolvedObject: api.ObjectReference{ + InvolvedObject: v1.ObjectReference{ Kind: "Pod", Name: "foo", Namespace: "baz", @@ -727,25 +727,25 @@ func TestMultiSinkCache(t *testing.T) { }, Reason: "Started", Message: "some verbose message: 1", - Source: api.EventSource{Component: "eventTest"}, + Source: v1.EventSource{Component: "eventTest"}, Count: 2, - Type: api.EventTypeNormal, + Type: v1.EventTypeNormal, }, - expectLog: `Event(api.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"bar", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[2]"}): type: 'Normal' reason: 'Started' some verbose message: 1`, + 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: api.EventTypeNormal, + eventtype: v1.EventTypeNormal, reason: "Started", messageFmt: "some verbose message: %v", elements: []interface{}{1}, - expect: &api.Event{ - ObjectMeta: api.ObjectMeta{ + expect: &v1.Event{ + ObjectMeta: v1.ObjectMeta{ Name: "foo", Namespace: "baz", }, - InvolvedObject: api.ObjectReference{ + InvolvedObject: v1.ObjectReference{ Kind: "Pod", Name: "foo", Namespace: "baz", @@ -755,25 +755,25 @@ func TestMultiSinkCache(t *testing.T) { }, Reason: "Started", Message: "some verbose message: 1", - Source: api.EventSource{Component: "eventTest"}, + Source: v1.EventSource{Component: "eventTest"}, Count: 1, - Type: api.EventTypeNormal, + Type: v1.EventTypeNormal, }, - expectLog: `Event(api.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"differentUid", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[3]"}): type: 'Normal' reason: 'Started' some verbose message: 1`, + 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: api.EventTypeNormal, + eventtype: v1.EventTypeNormal, reason: "Started", messageFmt: "some verbose message: %v", elements: []interface{}{1}, - expect: &api.Event{ - ObjectMeta: api.ObjectMeta{ + expect: &v1.Event{ + ObjectMeta: v1.ObjectMeta{ Name: "foo", Namespace: "baz", }, - InvolvedObject: api.ObjectReference{ + InvolvedObject: v1.ObjectReference{ Kind: "Pod", Name: "foo", Namespace: "baz", @@ -783,25 +783,25 @@ func TestMultiSinkCache(t *testing.T) { }, Reason: "Started", Message: "some verbose message: 1", - Source: api.EventSource{Component: "eventTest"}, + Source: v1.EventSource{Component: "eventTest"}, Count: 3, - Type: api.EventTypeNormal, + Type: v1.EventTypeNormal, }, - expectLog: `Event(api.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"bar", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[2]"}): type: 'Normal' reason: 'Started' some verbose message: 1`, + 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: api.EventTypeNormal, + eventtype: v1.EventTypeNormal, reason: "Stopped", messageFmt: "some verbose message: %v", elements: []interface{}{1}, - expect: &api.Event{ - ObjectMeta: api.ObjectMeta{ + expect: &v1.Event{ + ObjectMeta: v1.ObjectMeta{ Name: "foo", Namespace: "baz", }, - InvolvedObject: api.ObjectReference{ + InvolvedObject: v1.ObjectReference{ Kind: "Pod", Name: "foo", Namespace: "baz", @@ -811,25 +811,25 @@ func TestMultiSinkCache(t *testing.T) { }, Reason: "Stopped", Message: "some verbose message: 1", - Source: api.EventSource{Component: "eventTest"}, + Source: v1.EventSource{Component: "eventTest"}, Count: 1, - Type: api.EventTypeNormal, + Type: v1.EventTypeNormal, }, - expectLog: `Event(api.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"differentUid", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[3]"}): type: 'Normal' reason: 'Stopped' some verbose message: 1`, + 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: api.EventTypeNormal, + eventtype: v1.EventTypeNormal, reason: "Stopped", messageFmt: "some verbose message: %v", elements: []interface{}{1}, - expect: &api.Event{ - ObjectMeta: api.ObjectMeta{ + expect: &v1.Event{ + ObjectMeta: v1.ObjectMeta{ Name: "foo", Namespace: "baz", }, - InvolvedObject: api.ObjectReference{ + InvolvedObject: v1.ObjectReference{ Kind: "Pod", Name: "foo", Namespace: "baz", @@ -839,35 +839,35 @@ func TestMultiSinkCache(t *testing.T) { }, Reason: "Stopped", Message: "some verbose message: 1", - Source: api.EventSource{Component: "eventTest"}, + Source: v1.EventSource{Component: "eventTest"}, Count: 2, - Type: api.EventTypeNormal, + Type: v1.EventTypeNormal, }, - expectLog: `Event(api.ObjectReference{Kind:"Pod", Namespace:"baz", Name:"foo", UID:"differentUid", APIVersion:"version", ResourceVersion:"", FieldPath:"spec.containers[3]"}): type: 'Normal' reason: 'Stopped' some verbose message: 1`, + 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]*api.Event{} - createEvent := make(chan *api.Event) - updateEvent := make(chan *api.Event) - patchEvent := make(chan *api.Event) + 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 *api.Event) (*api.Event, error) { + OnUpdate: func(event *v1.Event) (*v1.Event, error) { updateEvent <- event return event, nil }, OnPatch: OnPatchFactory(testCache, patchEvent), } - testCache2 := map[string]*api.Event{} - createEvent2 := make(chan *api.Event) - updateEvent2 := make(chan *api.Event) - patchEvent2 := make(chan *api.Event) + 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 *api.Event) (*api.Event, error) { + OnUpdate: func(event *v1.Event) (*v1.Event, error) { updateEvent2 <- event return event, nil }, @@ -876,7 +876,7 @@ func TestMultiSinkCache(t *testing.T) { eventBroadcaster := NewBroadcasterForTests(0) clock := clock.NewFakeClock(time.Now()) - recorder := recorderWithFakeClock(api.EventSource{Component: "eventTest"}, eventBroadcaster, clock) + recorder := recorderWithFakeClock(v1.EventSource{Component: "eventTest"}, eventBroadcaster, clock) sinkWatcher := eventBroadcaster.StartRecordingToSink(&testEvents) for index, item := range table { diff --git a/pkg/client/record/events_cache.go b/pkg/client/record/events_cache.go index 8ff65776cb..e354b08e3a 100644 --- a/pkg/client/record/events_cache.go +++ b/pkg/client/record/events_cache.go @@ -25,7 +25,7 @@ import ( "github.com/golang/groupcache/lru" - "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/util/clock" "k8s.io/kubernetes/pkg/util/sets" @@ -42,7 +42,7 @@ const ( ) // getEventKey builds unique event key based on source, involvedObject, reason, message -func getEventKey(event *api.Event) string { +func getEventKey(event *v1.Event) string { return strings.Join([]string{ event.Source.Component, event.Source.Host, @@ -59,10 +59,10 @@ func getEventKey(event *api.Event) string { } // EventFilterFunc is a function that returns true if the event should be skipped -type EventFilterFunc func(event *api.Event) bool +type EventFilterFunc func(event *v1.Event) bool // DefaultEventFilterFunc returns false for all incoming events -func DefaultEventFilterFunc(event *api.Event) bool { +func DefaultEventFilterFunc(event *v1.Event) bool { return false } @@ -70,10 +70,10 @@ func DefaultEventFilterFunc(event *api.Event) bool { // 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 *api.Event) (aggregateKey string, localKey string) +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 *api.Event) (string, string) { +func EventAggregatorByReasonFunc(event *v1.Event) (string, string) { return strings.Join([]string{ event.Source.Component, event.Source.Host, @@ -89,10 +89,10 @@ func EventAggregatorByReasonFunc(event *api.Event) (string, string) { } // EventAggregatorMessageFunc is responsible for producing an aggregation message -type EventAggregatorMessageFunc func(event *api.Event) string +type EventAggregatorMessageFunc func(event *v1.Event) string // EventAggregratorByReasonMessageFunc returns an aggregate message by prefixing the incoming message -func EventAggregatorByReasonMessageFunc(event *api.Event) string { +func EventAggregatorByReasonMessageFunc(event *v1.Event) string { return "(events with common reason combined)" } @@ -142,7 +142,7 @@ type aggregateRecord struct { } // EventAggregate identifies similar events and groups into a common event if required -func (e *EventAggregator) EventAggregate(newEvent *api.Event) (*api.Event, error) { +func (e *EventAggregator) EventAggregate(newEvent *v1.Event) (*v1.Event, error) { aggregateKey, localKey := e.keyFunc(newEvent) now := unversioned.NewTime(e.clock.Now()) record := aggregateRecord{localKeys: sets.NewString(), lastTimestamp: now} @@ -171,8 +171,8 @@ func (e *EventAggregator) EventAggregate(newEvent *api.Event) (*api.Event, error record.localKeys.PopAny() // create a new aggregate event - eventCopy := &api.Event{ - ObjectMeta: api.ObjectMeta{ + eventCopy := &v1.Event{ + ObjectMeta: v1.ObjectMeta{ Name: fmt.Sprintf("%v.%x", newEvent.InvolvedObject.Name, now.UnixNano()), Namespace: newEvent.Namespace, }, @@ -216,7 +216,7 @@ func newEventLogger(lruCacheEntries int, clock clock.Clock) *eventLogger { } // eventObserve records the event, and determines if its frequency should update -func (e *eventLogger) eventObserve(newEvent *api.Event) (*api.Event, []byte, error) { +func (e *eventLogger) eventObserve(newEvent *v1.Event) (*v1.Event, []byte, error) { var ( patch []byte err error @@ -261,7 +261,7 @@ func (e *eventLogger) eventObserve(newEvent *api.Event) (*api.Event, []byte, err } // updateState updates its internal tracking information based on latest server state -func (e *eventLogger) updateState(event *api.Event) { +func (e *eventLogger) updateState(event *v1.Event) { key := getEventKey(event) e.Lock() defer e.Unlock() @@ -305,7 +305,7 @@ type EventCorrelator struct { // EventCorrelateResult is the result of a Correlate type EventCorrelateResult struct { // the event after correlation - Event *api.Event + 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 @@ -342,7 +342,7 @@ func NewEventCorrelator(clock clock.Clock) *EventCorrelator { } // EventCorrelate filters, aggregates, counts, and de-duplicates all incoming events -func (c *EventCorrelator) EventCorrelate(newEvent *api.Event) (*EventCorrelateResult, error) { +func (c *EventCorrelator) EventCorrelate(newEvent *v1.Event) (*EventCorrelateResult, error) { if c.filterFunc(newEvent) { return &EventCorrelateResult{Skip: true}, nil } @@ -355,6 +355,6 @@ func (c *EventCorrelator) EventCorrelate(newEvent *api.Event) (*EventCorrelateRe } // UpdateState based on the latest observed state from server -func (c *EventCorrelator) UpdateState(event *api.Event) { +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 index 0a9d15265b..19fae52cac 100644 --- a/pkg/client/record/events_cache_test.go +++ b/pkg/client/record/events_cache_test.go @@ -22,14 +22,14 @@ import ( "testing" "time" - "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/util/clock" "k8s.io/kubernetes/pkg/util/diff" ) -func makeObjectReference(kind, name, namespace string) api.ObjectReference { - return api.ObjectReference{ +func makeObjectReference(kind, name, namespace string) v1.ObjectReference { + return v1.ObjectReference{ Kind: kind, Name: name, Namespace: namespace, @@ -38,34 +38,34 @@ func makeObjectReference(kind, name, namespace string) api.ObjectReference { } } -func makeEvent(reason, message string, involvedObject api.ObjectReference) api.Event { +func makeEvent(reason, message string, involvedObject v1.ObjectReference) v1.Event { eventTime := unversioned.Now() - event := api.Event{ + event := v1.Event{ Reason: reason, Message: message, InvolvedObject: involvedObject, - Source: api.EventSource{ + Source: v1.EventSource{ Component: "kubelet", Host: "kublet.node1", }, Count: 1, FirstTimestamp: eventTime, LastTimestamp: eventTime, - Type: api.EventTypeNormal, + Type: v1.EventTypeNormal, } return event } -func makeEvents(num int, template api.Event) []api.Event { - events := []api.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) []api.Event { - events := []api.Event{} +func makeUniqueEvents(num int) []v1.Event { + events := []v1.Event{} kind := "Pod" for i := 0; i < num; i++ { reason := strings.Join([]string{"reason", string(i)}, "-") @@ -78,7 +78,7 @@ func makeUniqueEvents(num int) []api.Event { return events } -func makeSimilarEvents(num int, template api.Event, messagePrefix string) []api.Event { +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}, "-") @@ -86,12 +86,12 @@ func makeSimilarEvents(num int, template api.Event, messagePrefix string) []api. return events } -func setCount(event api.Event, count int) api.Event { +func setCount(event v1.Event, count int) v1.Event { event.Count = int32(count) return event } -func validateEvent(messagePrefix string, actualEvent *api.Event, expectedEvent *api.Event, t *testing.T) (*api.Event, error) { +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) @@ -172,13 +172,13 @@ func TestEventCorrelator(t *testing.T) { similarEvent := makeEvent("similar", "similar message", makeObjectReference("Pod", "my-pod", "my-ns")) aggregateEvent := makeEvent(similarEvent.Reason, EventAggregatorByReasonMessageFunc(&similarEvent), similarEvent.InvolvedObject) scenario := map[string]struct { - previousEvents []api.Event - newEvent api.Event - expectedEvent api.Event + previousEvents []v1.Event + newEvent v1.Event + expectedEvent v1.Event intervalSeconds int }{ "create-a-single-event": { - previousEvents: []api.Event{}, + previousEvents: []v1.Event{}, newEvent: firstEvent, expectedEvent: setCount(firstEvent, 1), intervalSeconds: 5, diff --git a/pkg/client/testing/cache/fake_controller_source.go b/pkg/client/testing/cache/fake_controller_source.go index ee00c0586e..a45defd54c 100644 --- a/pkg/client/testing/cache/fake_controller_source.go +++ b/pkg/client/testing/cache/fake_controller_source.go @@ -24,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/meta" + "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/watch" @@ -161,7 +162,7 @@ func (f *FakeControllerSource) getListItemsLocked() ([]runtime.Object, error) { } // List returns a list object, with its resource version set. -func (f *FakeControllerSource) List(options api.ListOptions) (runtime.Object, error) { +func (f *FakeControllerSource) List(options v1.ListOptions) (runtime.Object, error) { f.lock.RLock() defer f.lock.RUnlock() list, err := f.getListItemsLocked() @@ -182,14 +183,14 @@ func (f *FakeControllerSource) List(options api.ListOptions) (runtime.Object, er } // List returns a list object, with its resource version set. -func (f *FakePVControllerSource) List(options api.ListOptions) (runtime.Object, error) { +func (f *FakePVControllerSource) List(options v1.ListOptions) (runtime.Object, error) { f.lock.RLock() defer f.lock.RUnlock() list, err := f.FakeControllerSource.getListItemsLocked() if err != nil { return nil, err } - listObj := &api.PersistentVolumeList{} + listObj := &v1.PersistentVolumeList{} if err := meta.SetList(listObj, list); err != nil { return nil, err } @@ -203,14 +204,14 @@ func (f *FakePVControllerSource) List(options api.ListOptions) (runtime.Object, } // List returns a list object, with its resource version set. -func (f *FakePVCControllerSource) List(options api.ListOptions) (runtime.Object, error) { +func (f *FakePVCControllerSource) List(options v1.ListOptions) (runtime.Object, error) { f.lock.RLock() defer f.lock.RUnlock() list, err := f.FakeControllerSource.getListItemsLocked() if err != nil { return nil, err } - listObj := &api.PersistentVolumeClaimList{} + listObj := &v1.PersistentVolumeClaimList{} if err := meta.SetList(listObj, list); err != nil { return nil, err } @@ -225,7 +226,7 @@ func (f *FakePVCControllerSource) List(options api.ListOptions) (runtime.Object, // Watch returns a watch, which will be pre-populated with all changes // after resourceVersion. -func (f *FakeControllerSource) Watch(options api.ListOptions) (watch.Interface, error) { +func (f *FakeControllerSource) Watch(options v1.ListOptions) (watch.Interface, error) { f.lock.RLock() defer f.lock.RUnlock() rc, err := strconv.Atoi(options.ResourceVersion) diff --git a/pkg/client/testing/cache/fake_controller_source_test.go b/pkg/client/testing/cache/fake_controller_source_test.go index 0256e46159..2f9efade5d 100644 --- a/pkg/client/testing/cache/fake_controller_source_test.go +++ b/pkg/client/testing/cache/fake_controller_source_test.go @@ -21,6 +21,7 @@ import ( "testing" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/watch" ) @@ -33,7 +34,7 @@ func consume(t *testing.T, w watch.Interface, rvs []string, done *sync.WaitGroup t.Errorf("%#v: unexpected channel close, wanted %v", rvs, rv) return } - gotRV := got.Object.(*api.Pod).ObjectMeta.ResourceVersion + gotRV := got.Object.(*v1.Pod).ObjectMeta.ResourceVersion if e, a := rv, gotRV; e != a { t.Errorf("wanted %v, got %v", e, a) } else { @@ -48,9 +49,9 @@ func consume(t *testing.T, w watch.Interface, rvs []string, done *sync.WaitGroup } func TestRCNumber(t *testing.T) { - pod := func(name string) *api.Pod { - return &api.Pod{ - ObjectMeta: api.ObjectMeta{ + pod := func(name string) *v1.Pod { + return &v1.Pod{ + ObjectMeta: v1.ObjectMeta{ Name: name, }, } @@ -64,13 +65,13 @@ func TestRCNumber(t *testing.T) { source.Modify(pod("foo")) source.Modify(pod("foo")) - w, err := source.Watch(api.ListOptions{ResourceVersion: "1"}) + w, err := source.Watch(v1.ListOptions{ResourceVersion: "1"}) if err != nil { t.Fatalf("Unexpected error: %v", err) } go consume(t, w, []string{"2", "3"}, wg) - list, err := source.List(api.ListOptions{}) + list, err := source.List(v1.ListOptions{}) if err != nil { t.Fatalf("Unexpected error: %v", err) } @@ -78,13 +79,13 @@ func TestRCNumber(t *testing.T) { t.Errorf("wanted %v, got %v", e, a) } - w2, err := source.Watch(api.ListOptions{ResourceVersion: "2"}) + w2, err := source.Watch(v1.ListOptions{ResourceVersion: "2"}) if err != nil { t.Fatalf("Unexpected error: %v", err) } go consume(t, w2, []string{"3"}, wg) - w3, err := source.Watch(api.ListOptions{ResourceVersion: "3"}) + w3, err := source.Watch(v1.ListOptions{ResourceVersion: "3"}) if err != nil { t.Fatalf("Unexpected error: %v", err) }