Skip to content

Commit 7cf64f4

Browse files
committed
Switch to internalclientset - interesting changes
1 parent 97e6f1d commit 7cf64f4

File tree

28 files changed

+431
-263
lines changed

28 files changed

+431
-263
lines changed

Diff for: pkg/build/controller/factory/factory.go

+18-17
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ import (
1010
kerrors "k8s.io/kubernetes/pkg/api/errors"
1111
"k8s.io/kubernetes/pkg/api/unversioned"
1212
"k8s.io/kubernetes/pkg/client/cache"
13+
kclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
14+
kcoreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned"
1315
"k8s.io/kubernetes/pkg/client/record"
14-
kclient "k8s.io/kubernetes/pkg/client/unversioned"
1516
"k8s.io/kubernetes/pkg/labels"
1617
"k8s.io/kubernetes/pkg/runtime"
1718
"k8s.io/kubernetes/pkg/util/flowcontrol"
@@ -69,7 +70,7 @@ func limitedLogAndRetry(buildupdater buildclient.BuildUpdater, maxTimeout time.D
6970
// BuildControllerFactory constructs BuildController objects
7071
type BuildControllerFactory struct {
7172
OSClient osclient.Interface
72-
KubeClient kclient.Interface
73+
KubeClient kclientset.Interface
7374
BuildUpdater buildclient.BuildUpdater
7475
BuildLister buildclient.BuildLister
7576
DockerBuildStrategy *strategy.DockerBuildStrategy
@@ -88,7 +89,7 @@ func (factory *BuildControllerFactory) Create() controller.RunnableController {
8889
cache.NewReflector(&buildLW{client: factory.OSClient}, &buildapi.Build{}, queue, 2*time.Minute).RunUntil(factory.Stop)
8990

9091
eventBroadcaster := record.NewBroadcaster()
91-
eventBroadcaster.StartRecordingToSink(factory.KubeClient.Events(""))
92+
eventBroadcaster.StartRecordingToSink(&kcoreclient.EventSinkImpl{Interface: factory.KubeClient.Core().Events("")})
9293

9394
client := ControllerClient{factory.KubeClient, factory.OSClient}
9495
buildController := &buildcontroller.BuildController{
@@ -168,7 +169,7 @@ func (factory *BuildControllerFactory) CreateDeleteController() controller.Runna
168169
// BuildPodControllerFactory construct BuildPodController objects
169170
type BuildPodControllerFactory struct {
170171
OSClient osclient.Interface
171-
KubeClient kclient.Interface
172+
KubeClient kclientset.Interface
172173
BuildUpdater buildclient.BuildUpdater
173174
// Stop may be set to allow controllers created by this factory to be terminated.
174175
Stop <-chan struct{}
@@ -210,7 +211,7 @@ func (factory *BuildPodControllerFactory) Create() controller.RunnableController
210211
buildPodController := &buildcontroller.BuildPodController{
211212
BuildStore: factory.buildStore,
212213
BuildUpdater: factory.BuildUpdater,
213-
SecretClient: factory.KubeClient,
214+
SecretClient: factory.KubeClient.Core(),
214215
PodManager: client,
215216
}
216217

@@ -336,7 +337,7 @@ func (factory *ImageChangeControllerFactory) waitForSyncedStores() {
336337

337338
type BuildConfigControllerFactory struct {
338339
Client osclient.Interface
339-
KubeClient kclient.Interface
340+
KubeClient kclientset.Interface
340341
BuildConfigInstantiator buildclient.BuildConfigInstantiator
341342
// Stop may be set to allow controllers created by this factory to be terminated.
342343
Stop <-chan struct{}
@@ -348,7 +349,7 @@ func (factory *BuildConfigControllerFactory) Create() controller.RunnableControl
348349
cache.NewReflector(&buildConfigLW{client: factory.Client}, &buildapi.BuildConfig{}, queue, 2*time.Minute).RunUntil(factory.Stop)
349350

350351
eventBroadcaster := record.NewBroadcaster()
351-
eventBroadcaster.StartRecordingToSink(factory.KubeClient.Events(""))
352+
eventBroadcaster.StartRecordingToSink(&kcoreclient.EventSinkImpl{Interface: factory.KubeClient.Core().Events("")})
352353

353354
bcController := &buildcontroller.BuildConfigController{
354355
BuildConfigInstantiator: factory.BuildConfigInstantiator,
@@ -420,21 +421,21 @@ func (f *typeBasedFactoryStrategy) CreateBuildPod(build *buildapi.Build) (*kapi.
420421

421422
// podLW is a ListWatcher implementation for Pods.
422423
type podLW struct {
423-
client kclient.Interface
424+
client kclientset.Interface
424425
}
425426

426427
// List lists all Pods that have a build label.
427428
func (lw *podLW) List(options kapi.ListOptions) (runtime.Object, error) {
428429
return listPods(lw.client)
429430
}
430431

431-
func listPods(client kclient.Interface) (*kapi.PodList, error) {
432+
func listPods(client kclientset.Interface) (*kapi.PodList, error) {
432433
// get builds with new label
433434
sel, err := labels.Parse(buildapi.BuildLabel)
434435
if err != nil {
435436
return nil, err
436437
}
437-
listNew, err := client.Pods(kapi.NamespaceAll).List(kapi.ListOptions{LabelSelector: sel})
438+
listNew, err := client.Core().Pods(kapi.NamespaceAll).List(kapi.ListOptions{LabelSelector: sel})
438439
if err != nil {
439440
return nil, err
440441
}
@@ -452,7 +453,7 @@ func (lw *podLW) Watch(options kapi.ListOptions) (watch.Interface, error) {
452453
LabelSelector: sel,
453454
ResourceVersion: options.ResourceVersion,
454455
}
455-
return lw.client.Pods(kapi.NamespaceAll).Watch(opts)
456+
return lw.client.Core().Pods(kapi.NamespaceAll).Watch(opts)
456457
}
457458

458459
// buildLW is a ListWatcher implementation for Builds.
@@ -578,7 +579,7 @@ func (lw *buildPodDeleteLW) List(options kapi.ListOptions) (runtime.Object, erro
578579
glog.V(5).Infof("Ignoring build %s/%s because it is a pipeline build", build.Namespace, build.Name)
579580
continue
580581
}
581-
pod, err := lw.KubeClient.Pods(build.Namespace).Get(buildapi.GetBuildPodName(&build))
582+
pod, err := lw.KubeClient.Core().Pods(build.Namespace).Get(buildapi.GetBuildPodName(&build))
582583
if err != nil {
583584
if !kerrors.IsNotFound(err) {
584585
glog.V(4).Infof("Error getting pod for build %s/%s: %v", build.Namespace, build.Name, err)
@@ -621,28 +622,28 @@ func (lw *buildPodDeleteLW) Watch(options kapi.ListOptions) (watch.Interface, er
621622
LabelSelector: sel,
622623
ResourceVersion: options.ResourceVersion,
623624
}
624-
return lw.KubeClient.Pods(kapi.NamespaceAll).Watch(opts)
625+
return lw.KubeClient.Core().Pods(kapi.NamespaceAll).Watch(opts)
625626
}
626627

627628
// ControllerClient implements the common interfaces needed for build controllers
628629
type ControllerClient struct {
629-
KubeClient kclient.Interface
630+
KubeClient kclientset.Interface
630631
Client osclient.Interface
631632
}
632633

633634
// CreatePod creates a pod using the Kubernetes client.
634635
func (c ControllerClient) CreatePod(namespace string, pod *kapi.Pod) (*kapi.Pod, error) {
635-
return c.KubeClient.Pods(namespace).Create(pod)
636+
return c.KubeClient.Core().Pods(namespace).Create(pod)
636637
}
637638

638639
// DeletePod destroys a pod using the Kubernetes client.
639640
func (c ControllerClient) DeletePod(namespace string, pod *kapi.Pod) error {
640-
return c.KubeClient.Pods(namespace).Delete(pod.Name, nil)
641+
return c.KubeClient.Core().Pods(namespace).Delete(pod.Name, nil)
641642
}
642643

643644
// GetPod gets a pod using the Kubernetes client.
644645
func (c ControllerClient) GetPod(namespace, name string) (*kapi.Pod, error) {
645-
return c.KubeClient.Pods(namespace).Get(name)
646+
return c.KubeClient.Core().Pods(namespace).Get(name)
646647
}
647648

648649
// GetImageStream retrieves an image repository by namespace and name

Diff for: pkg/client/testclient/fixture.go

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package testclient
2+
3+
import (
4+
"io/ioutil"
5+
6+
"k8s.io/kubernetes/pkg/api/meta"
7+
"k8s.io/kubernetes/pkg/apimachinery/registered"
8+
"k8s.io/kubernetes/pkg/runtime"
9+
"k8s.io/kubernetes/pkg/util/yaml"
10+
)
11+
12+
// ReadObjectsFromPath reads objects from the specified file for testing.
13+
func ReadObjectsFromPath(path, namespace string, decoder runtime.Decoder, typer runtime.ObjectTyper) ([]runtime.Object, error) {
14+
data, err := ioutil.ReadFile(path)
15+
if err != nil {
16+
return nil, err
17+
}
18+
data, err = yaml.ToJSON(data)
19+
if err != nil {
20+
return nil, err
21+
}
22+
obj, err := runtime.Decode(decoder, data)
23+
if err != nil {
24+
return nil, err
25+
}
26+
if !meta.IsListType(obj) {
27+
if err := setNamespace(typer, obj, namespace); err != nil {
28+
return nil, err
29+
}
30+
return []runtime.Object{obj}, nil
31+
}
32+
list, err := meta.ExtractList(obj)
33+
if err != nil {
34+
return nil, err
35+
}
36+
errs := runtime.DecodeList(list, decoder)
37+
if len(errs) > 0 {
38+
return nil, errs[0]
39+
}
40+
for _, o := range list {
41+
if err := setNamespace(typer, o, namespace); err != nil {
42+
return nil, err
43+
}
44+
}
45+
return list, nil
46+
}
47+
48+
func setNamespace(typer runtime.ObjectTyper, obj runtime.Object, namespace string) error {
49+
itemMeta, err := meta.Accessor(obj)
50+
if err != nil {
51+
return err
52+
}
53+
gvks, _, err := typer.ObjectKinds(obj)
54+
if err != nil {
55+
return err
56+
}
57+
group, err := registered.Group(gvks[0].Group)
58+
if err != nil {
59+
return err
60+
}
61+
mapping, err := group.RESTMapper.RESTMapping(gvks[0].GroupKind(), gvks[0].Version)
62+
if err != nil {
63+
return err
64+
}
65+
switch mapping.Scope.Name() {
66+
case meta.RESTScopeNameNamespace:
67+
if len(itemMeta.GetNamespace()) == 0 {
68+
itemMeta.SetNamespace(namespace)
69+
}
70+
}
71+
72+
return nil
73+
}

Diff for: pkg/client/testclient/testclient.go

+27-10
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,37 @@
11
package testclient
22

33
import (
4-
"k8s.io/kubernetes/pkg/apimachinery/registered"
4+
kclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
5+
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
6+
"k8s.io/kubernetes/pkg/client/testing/core"
57
kclient "k8s.io/kubernetes/pkg/client/unversioned"
6-
"k8s.io/kubernetes/pkg/client/unversioned/testclient"
8+
ktestclient "k8s.io/kubernetes/pkg/client/unversioned/testclient"
9+
"k8s.io/kubernetes/pkg/runtime"
710

8-
osclient "github.com/openshift/origin/pkg/client"
11+
"github.com/openshift/origin/pkg/client"
912
)
1013

1114
// NewFixtureClients returns mocks of the OpenShift and Kubernetes clients
12-
func NewFixtureClients(o testclient.ObjectRetriever) (osclient.Interface, kclient.Interface) {
13-
oc := &Fake{}
14-
oc.AddReactor("*", "*", testclient.ObjectReaction(o, registered.RESTMapper()))
15-
16-
kc := &testclient.Fake{}
17-
kc.AddReactor("*", "*", testclient.ObjectReaction(o, registered.RESTMapper()))
15+
// with data populated from provided path.
16+
func NewFixtureClients(objs ...runtime.Object) (client.Interface, kclientset.Interface, kclient.Interface) {
17+
oc := NewSimpleFake(objs...)
18+
kc := fake.NewSimpleClientset(objs...)
19+
oldK := ktestclient.NewSimpleFake(objs...)
20+
return oc, kc, oldK
21+
}
1822

19-
return oc, kc
23+
func NewErrorClients(err error) (client.Interface, kclientset.Interface, kclient.Interface) {
24+
oc := &Fake{}
25+
oc.PrependReactor("*", "*", func(action ktestclient.Action) (bool, runtime.Object, error) {
26+
return true, nil, err
27+
})
28+
kc := &fake.Clientset{}
29+
kc.PrependReactor("*", "*", func(action core.Action) (bool, runtime.Object, error) {
30+
return true, nil, err
31+
})
32+
oldK := &ktestclient.Fake{}
33+
oc.PrependReactor("*", "*", func(action ktestclient.Action) (bool, runtime.Object, error) {
34+
return true, nil, err
35+
})
36+
return oc, kc, oldK
2037
}

Diff for: pkg/client/testclient/testclient_test.go

+6-15
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,16 @@ import (
55

66
kapi "k8s.io/kubernetes/pkg/api"
77
"k8s.io/kubernetes/pkg/api/errors"
8-
"k8s.io/kubernetes/pkg/client/unversioned/testclient"
9-
"k8s.io/kubernetes/pkg/runtime"
108

119
deployapi "github.com/openshift/origin/pkg/deploy/api"
12-
_ "github.com/openshift/origin/pkg/deploy/api/install"
1310
)
1411

1512
func TestNewClient(t *testing.T) {
16-
o := testclient.NewObjects(kapi.Scheme, kapi.Codecs.UniversalDecoder())
17-
if err := testclient.AddObjectsFromPath("../../../test/integration/testdata/test-deployment-config.yaml", o, kapi.Codecs.UniversalDecoder()); err != nil {
13+
o, err := ReadObjectsFromPath("../../../test/integration/testdata/test-deployment-config.yaml", "test", kapi.Codecs.UniversalDecoder(), kapi.Scheme)
14+
if err != nil {
1815
t.Fatal(err)
1916
}
20-
oc, _ := NewFixtureClients(o)
17+
oc, _, _ := NewFixtureClients(o...)
2118
list, err := oc.DeploymentConfigs("test").List(kapi.ListOptions{})
2219
if err != nil {
2320
t.Fatal(err)
@@ -38,19 +35,13 @@ func TestNewClient(t *testing.T) {
3835
}
3936

4037
func TestErrors(t *testing.T) {
41-
o := testclient.NewObjects(kapi.Scheme, kapi.Codecs.UniversalDecoder())
42-
o.Add(&kapi.List{
43-
Items: []runtime.Object{
44-
&(errors.NewNotFound(deployapi.Resource("DeploymentConfigList"), "").ErrStatus),
45-
&(errors.NewForbidden(deployapi.Resource("DeploymentConfigList"), "", nil).ErrStatus),
46-
},
47-
})
48-
oc, _ := NewFixtureClients(o)
38+
oc, _, _ := NewErrorClients(errors.NewNotFound(deployapi.Resource("DeploymentConfigList"), ""))
4939
_, err := oc.DeploymentConfigs("test").List(kapi.ListOptions{})
5040
if !errors.IsNotFound(err) {
5141
t.Fatalf("unexpected error: %v", err)
5242
}
53-
t.Logf("error: %#v", err.(*errors.StatusError).Status())
43+
44+
oc, _, _ = NewErrorClients(errors.NewForbidden(deployapi.Resource("DeploymentConfigList"), "", nil))
5445
_, err = oc.DeploymentConfigs("test").List(kapi.ListOptions{})
5546
if !errors.IsForbidden(err) {
5647
t.Fatalf("unexpected error: %v", err)

Diff for: pkg/cmd/cli/describe/chaindescriber_test.go

+9-3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/gonum/graph"
88
"github.com/gonum/graph/concrete"
99
kapi "k8s.io/kubernetes/pkg/api"
10+
"k8s.io/kubernetes/pkg/runtime"
1011
"k8s.io/kubernetes/pkg/util/sets"
1112

1213
"github.com/openshift/origin/pkg/client/testclient"
@@ -195,10 +196,15 @@ func TestChainDescriber(t *testing.T) {
195196
}
196197

197198
for _, test := range tests {
198-
oc, _, _, err := testclient.NewFixtureClients(kapi.Codecs.UniversalDecoder(), test.defaultNamespace, test.path)
199-
if err != nil {
200-
t.Fatal(err)
199+
objs := []runtime.Object{}
200+
if len(test.path) > 0 {
201+
var err error
202+
objs, err = testclient.ReadObjectsFromPath(test.path, test.defaultNamespace, kapi.Codecs.UniversalDecoder(), kapi.Scheme)
203+
if err != nil {
204+
t.Fatal(err)
205+
}
201206
}
207+
oc, _, _ := testclient.NewFixtureClients(objs...)
202208
ist := imagegraph.MakeImageStreamTagObjectMeta(test.defaultNamespace, test.name, test.tag)
203209

204210
desc, err := NewChainDescriber(oc, test.namespaces, test.output).Describe(ist, test.includeInputImg, test.reverse)

0 commit comments

Comments
 (0)