Skip to content

Commit

Permalink
Switch to internalclientset - interesting changes
Browse files Browse the repository at this point in the history
  • Loading branch information
soltysh committed Nov 19, 2016
1 parent dcf4b1a commit 7daf1c6
Show file tree
Hide file tree
Showing 24 changed files with 337 additions and 238 deletions.
35 changes: 18 additions & 17 deletions pkg/build/controller/factory/factory.go
Expand Up @@ -10,8 +10,9 @@ import (
kerrors "k8s.io/kubernetes/pkg/api/errors"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/client/cache"
kclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
kcoreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned"
"k8s.io/kubernetes/pkg/client/record"
kclient "k8s.io/kubernetes/pkg/client/unversioned"
"k8s.io/kubernetes/pkg/labels"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/util/flowcontrol"
Expand Down Expand Up @@ -69,7 +70,7 @@ func limitedLogAndRetry(buildupdater buildclient.BuildUpdater, maxTimeout time.D
// BuildControllerFactory constructs BuildController objects
type BuildControllerFactory struct {
OSClient osclient.Interface
KubeClient kclient.Interface
KubeClient kclientset.Interface
BuildUpdater buildclient.BuildUpdater
BuildLister buildclient.BuildLister
DockerBuildStrategy *strategy.DockerBuildStrategy
Expand All @@ -88,7 +89,7 @@ func (factory *BuildControllerFactory) Create() controller.RunnableController {
cache.NewReflector(&buildLW{client: factory.OSClient}, &buildapi.Build{}, queue, 2*time.Minute).RunUntil(factory.Stop)

eventBroadcaster := record.NewBroadcaster()
eventBroadcaster.StartRecordingToSink(factory.KubeClient.Events(""))
eventBroadcaster.StartRecordingToSink(&kcoreclient.EventSinkImpl{Interface: factory.KubeClient.Core().Events("")})

client := ControllerClient{factory.KubeClient, factory.OSClient}
buildController := &buildcontroller.BuildController{
Expand Down Expand Up @@ -168,7 +169,7 @@ func (factory *BuildControllerFactory) CreateDeleteController() controller.Runna
// BuildPodControllerFactory construct BuildPodController objects
type BuildPodControllerFactory struct {
OSClient osclient.Interface
KubeClient kclient.Interface
KubeClient kclientset.Interface
BuildUpdater buildclient.BuildUpdater
// Stop may be set to allow controllers created by this factory to be terminated.
Stop <-chan struct{}
Expand Down Expand Up @@ -210,7 +211,7 @@ func (factory *BuildPodControllerFactory) Create() controller.RunnableController
buildPodController := &buildcontroller.BuildPodController{
BuildStore: factory.buildStore,
BuildUpdater: factory.BuildUpdater,
SecretClient: factory.KubeClient,
SecretClient: factory.KubeClient.Core(),
PodManager: client,
}

Expand Down Expand Up @@ -336,7 +337,7 @@ func (factory *ImageChangeControllerFactory) waitForSyncedStores() {

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

eventBroadcaster := record.NewBroadcaster()
eventBroadcaster.StartRecordingToSink(factory.KubeClient.Events(""))
eventBroadcaster.StartRecordingToSink(&kcoreclient.EventSinkImpl{Interface: factory.KubeClient.Core().Events("")})

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

// podLW is a ListWatcher implementation for Pods.
type podLW struct {
client kclient.Interface
client kclientset.Interface
}

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

func listPods(client kclient.Interface) (*kapi.PodList, error) {
func listPods(client kclientset.Interface) (*kapi.PodList, error) {
// get builds with new label
sel, err := labels.Parse(buildapi.BuildLabel)
if err != nil {
return nil, err
}
listNew, err := client.Pods(kapi.NamespaceAll).List(kapi.ListOptions{LabelSelector: sel})
listNew, err := client.Core().Pods(kapi.NamespaceAll).List(kapi.ListOptions{LabelSelector: sel})
if err != nil {
return nil, err
}
Expand All @@ -452,7 +453,7 @@ func (lw *podLW) Watch(options kapi.ListOptions) (watch.Interface, error) {
LabelSelector: sel,
ResourceVersion: options.ResourceVersion,
}
return lw.client.Pods(kapi.NamespaceAll).Watch(opts)
return lw.client.Core().Pods(kapi.NamespaceAll).Watch(opts)
}

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

// ControllerClient implements the common interfaces needed for build controllers
type ControllerClient struct {
KubeClient kclient.Interface
KubeClient kclientset.Interface
Client osclient.Interface
}

// CreatePod creates a pod using the Kubernetes client.
func (c ControllerClient) CreatePod(namespace string, pod *kapi.Pod) (*kapi.Pod, error) {
return c.KubeClient.Pods(namespace).Create(pod)
return c.KubeClient.Core().Pods(namespace).Create(pod)
}

// DeletePod destroys a pod using the Kubernetes client.
func (c ControllerClient) DeletePod(namespace string, pod *kapi.Pod) error {
return c.KubeClient.Pods(namespace).Delete(pod.Name, nil)
return c.KubeClient.Core().Pods(namespace).Delete(pod.Name, nil)
}

// GetPod gets a pod using the Kubernetes client.
func (c ControllerClient) GetPod(namespace, name string) (*kapi.Pod, error) {
return c.KubeClient.Pods(namespace).Get(name)
return c.KubeClient.Core().Pods(namespace).Get(name)
}

// GetImageStream retrieves an image repository by namespace and name
Expand Down
75 changes: 65 additions & 10 deletions pkg/client/testclient/testclient.go
@@ -1,20 +1,75 @@
package testclient

import (
"k8s.io/kubernetes/pkg/apimachinery/registered"
"io/ioutil"

"k8s.io/kubernetes/pkg/api/meta"
kclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
kclient "k8s.io/kubernetes/pkg/client/unversioned"
"k8s.io/kubernetes/pkg/client/unversioned/testclient"
ktestclient "k8s.io/kubernetes/pkg/client/unversioned/testclient"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/util/yaml"

osclient "github.com/openshift/origin/pkg/client"
"github.com/openshift/origin/pkg/client"
projectapi "github.com/openshift/origin/pkg/project/api"
)

// NewFixtureClients returns mocks of the OpenShift and Kubernetes clients
func NewFixtureClients(o testclient.ObjectRetriever) (osclient.Interface, kclient.Interface) {
oc := &Fake{}
oc.AddReactor("*", "*", testclient.ObjectReaction(o, registered.RESTMapper()))

kc := &testclient.Fake{}
kc.AddReactor("*", "*", testclient.ObjectReaction(o, registered.RESTMapper()))
// with data populated from provided path.
func NewFixtureClients(decoder runtime.Decoder, namespace, path string, objects ...runtime.Object) (client.Interface, kclientset.Interface, kclient.Interface, error) {
var objs []runtime.Object
if len(path) > 0 {
var err error
objs, err = readObjectsFromPath(path, decoder)
if err != nil {
return nil, nil, nil, err
}
}
objs = append(objs, objects...)
kobjs := []runtime.Object{}
for _, o := range objs {
if itemMeta, err := meta.Accessor(o); err == nil {
// we can't set namespace for everything, some resources are non-namespaced
if _, ok := o.(*projectapi.Project); ok {
continue
}
if len(itemMeta.GetNamespace()) == 0 {
itemMeta.SetNamespace(namespace)
}
// NewSimpleClientset accepts only runtime.Objects
kobjs = append(kobjs, o)
}
}
oc := NewSimpleFake(objs...)
kc := fake.NewSimpleClientset(kobjs...)
oldK := ktestclient.NewSimpleFake(kobjs...)
return oc, kc, oldK, nil
}

return oc, kc
func readObjectsFromPath(path string, decoder runtime.Decoder) ([]runtime.Object, error) {
data, err := ioutil.ReadFile(path)
if err != nil {
return nil, err
}
data, err = yaml.ToJSON(data)
if err != nil {
return nil, err
}
obj, err := runtime.Decode(decoder, data)
if err != nil {
return nil, err
}
if !meta.IsListType(obj) {
return []runtime.Object{obj}, nil
}
list, err := meta.ExtractList(obj)
if err != nil {
return nil, err
}
errs := runtime.DecodeList(list, decoder)
if len(errs) > 0 {
return nil, errs[0]
}
return list, nil
}
24 changes: 10 additions & 14 deletions pkg/client/testclient/testclient_test.go
Expand Up @@ -5,19 +5,16 @@ import (

kapi "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/errors"
"k8s.io/kubernetes/pkg/client/unversioned/testclient"
"k8s.io/kubernetes/pkg/runtime"

deployapi "github.com/openshift/origin/pkg/deploy/api"
_ "github.com/openshift/origin/pkg/deploy/api/install"
)

func TestNewClient(t *testing.T) {
o := testclient.NewObjects(kapi.Scheme, kapi.Codecs.UniversalDecoder())
if err := testclient.AddObjectsFromPath("../../../test/integration/testdata/test-deployment-config.yaml", o, kapi.Codecs.UniversalDecoder()); err != nil {
oc, _, _, err := NewFixtureClients(kapi.Codecs.UniversalDecoder(), "test", "../../../test/integration/testdata/test-deployment-config.yaml")
if err != nil {
t.Fatal(err)
}
oc, _ := NewFixtureClients(o)
list, err := oc.DeploymentConfigs("test").List(kapi.ListOptions{})
if err != nil {
t.Fatal(err)
Expand All @@ -38,15 +35,14 @@ func TestNewClient(t *testing.T) {
}

func TestErrors(t *testing.T) {
o := testclient.NewObjects(kapi.Scheme, kapi.Codecs.UniversalDecoder())
o.Add(&kapi.List{
Items: []runtime.Object{
&(errors.NewNotFound(deployapi.Resource("DeploymentConfigList"), "").ErrStatus),
&(errors.NewForbidden(deployapi.Resource("DeploymentConfigList"), "", nil).ErrStatus),
},
})
oc, _ := NewFixtureClients(o)
_, err := oc.DeploymentConfigs("test").List(kapi.ListOptions{})
oc, _, _, err := NewFixtureClients(kapi.Codecs.UniversalDecoder(), "test", "",
&(errors.NewNotFound(deployapi.Resource("DeploymentConfigList"), "").ErrStatus),
&(errors.NewForbidden(deployapi.Resource("DeploymentConfigList"), "", nil).ErrStatus),
)
if err != nil {
t.Fatal(err)
}
_, err = oc.DeploymentConfigs("test").List(kapi.ListOptions{})
if !errors.IsNotFound(err) {
t.Fatalf("unexpected error: %v", err)
}
Expand Down
35 changes: 20 additions & 15 deletions pkg/cmd/cli/describe/projectstatus.go
Expand Up @@ -13,6 +13,9 @@ import (
"k8s.io/kubernetes/pkg/api/unversioned"
kapps "k8s.io/kubernetes/pkg/apis/apps"
"k8s.io/kubernetes/pkg/apis/autoscaling"
kclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
kautoscalingclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned"
kcoreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned"
kclient "k8s.io/kubernetes/pkg/client/unversioned"
utilerrors "k8s.io/kubernetes/pkg/util/errors"
"k8s.io/kubernetes/pkg/util/sets"
Expand Down Expand Up @@ -48,7 +51,9 @@ const ForbiddenListWarning = "Forbidden"

// ProjectStatusDescriber generates extended information about a Project
type ProjectStatusDescriber struct {
K kclient.Interface
// TODO internalclientset: get rid of oldClient after next rebase
OldK kclient.Interface
K kclientset.Interface
C client.Interface
Server string
Suggest bool
Expand All @@ -65,13 +70,13 @@ func (d *ProjectStatusDescriber) MakeGraph(namespace string) (osgraph.Graph, set
g := osgraph.New()

loaders := []GraphLoader{
&serviceLoader{namespace: namespace, lister: d.K},
&serviceAccountLoader{namespace: namespace, lister: d.K},
&secretLoader{namespace: namespace, lister: d.K},
&pvcLoader{namespace: namespace, lister: d.K},
&rcLoader{namespace: namespace, lister: d.K},
&podLoader{namespace: namespace, lister: d.K},
&petsetLoader{namespace: namespace, lister: d.K.Apps()},
&serviceLoader{namespace: namespace, lister: d.K.Core()},
&serviceAccountLoader{namespace: namespace, lister: d.K.Core()},
&secretLoader{namespace: namespace, lister: d.K.Core()},
&pvcLoader{namespace: namespace, lister: d.K.Core()},
&rcLoader{namespace: namespace, lister: d.K.Core()},
&podLoader{namespace: namespace, lister: d.K.Core()},
&petsetLoader{namespace: namespace, lister: d.OldK.Apps()},
&horizontalPodAutoscalerLoader{namespace: namespace, lister: d.K.Autoscaling()},
// TODO check swagger for feature enablement and selectively add bcLoader and buildLoader
// then remove errors.TolerateNotFoundError method.
Expand Down Expand Up @@ -1205,7 +1210,7 @@ type GraphLoader interface {

type rcLoader struct {
namespace string
lister kclient.ReplicationControllersNamespacer
lister kcoreclient.ReplicationControllersGetter
items []kapi.ReplicationController
}

Expand All @@ -1229,7 +1234,7 @@ func (l *rcLoader) AddToGraph(g osgraph.Graph) error {

type serviceLoader struct {
namespace string
lister kclient.ServicesNamespacer
lister kcoreclient.ServicesGetter
items []kapi.Service
}

Expand All @@ -1253,7 +1258,7 @@ func (l *serviceLoader) AddToGraph(g osgraph.Graph) error {

type podLoader struct {
namespace string
lister kclient.PodsNamespacer
lister kcoreclient.PodsGetter
items []kapi.Pod
}

Expand Down Expand Up @@ -1301,7 +1306,7 @@ func (l *petsetLoader) AddToGraph(g osgraph.Graph) error {

type horizontalPodAutoscalerLoader struct {
namespace string
lister kclient.HorizontalPodAutoscalersNamespacer
lister kautoscalingclient.HorizontalPodAutoscalersGetter
items []autoscaling.HorizontalPodAutoscaler
}

Expand All @@ -1325,7 +1330,7 @@ func (l *horizontalPodAutoscalerLoader) AddToGraph(g osgraph.Graph) error {

type serviceAccountLoader struct {
namespace string
lister kclient.ServiceAccountsNamespacer
lister kcoreclient.ServiceAccountsGetter
items []kapi.ServiceAccount
}

Expand All @@ -1349,7 +1354,7 @@ func (l *serviceAccountLoader) AddToGraph(g osgraph.Graph) error {

type secretLoader struct {
namespace string
lister kclient.SecretsNamespacer
lister kcoreclient.SecretsGetter
items []kapi.Secret
}

Expand All @@ -1373,7 +1378,7 @@ func (l *secretLoader) AddToGraph(g osgraph.Graph) error {

type pvcLoader struct {
namespace string
lister kclient.PersistentVolumeClaimsNamespacer
lister kcoreclient.PersistentVolumeClaimsGetter
items []kapi.PersistentVolumeClaim
}

Expand Down

0 comments on commit 7daf1c6

Please sign in to comment.