Skip to content

Commit

Permalink
convert CLI to use generated clients
Browse files Browse the repository at this point in the history
  • Loading branch information
deads2k committed Sep 28, 2017
1 parent 32d9a54 commit 35f3000
Show file tree
Hide file tree
Showing 45 changed files with 287 additions and 253 deletions.
2 changes: 1 addition & 1 deletion pkg/cmd/infra/router/f5.go
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ func (o *F5RouterOptions) Run() error {
return err
}

_, kc, err := o.Config.Clients()
kc, err := o.Config.Clients()
if err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/cmd/infra/router/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ func (o *TemplateRouterOptions) Run() error {
StrictSNI: o.StrictSNI,
}

_, kc, err := o.Config.Clients()
kc, err := o.Config.Clients()
if err != nil {
return err
}
Expand Down
12 changes: 3 additions & 9 deletions pkg/cmd/util/clientcmd/clientcmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import (
"k8s.io/kubernetes/pkg/api"
kclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"

osclient "github.com/openshift/origin/pkg/client"
"github.com/openshift/origin/pkg/cmd/flagtypes"
"github.com/openshift/origin/pkg/cmd/util"
)
Expand Down Expand Up @@ -232,18 +231,13 @@ func (cfg *Config) OpenShiftConfig() *restclient.Config {
}

// Clients returns an OpenShift and a Kubernetes client from a given configuration
func (cfg *Config) Clients() (osclient.Interface, kclientset.Interface, error) {
func (cfg *Config) Clients() (kclientset.Interface, error) {
cfg.bindEnv()

kubeClientset, err := kclientset.NewForConfig(cfg.KubeConfig())
if err != nil {
return nil, nil, fmt.Errorf("Unable to configure Kubernetes client: %v", err)
return nil, fmt.Errorf("Unable to configure Kubernetes client: %v", err)
}

osClient, err := osclient.New(cfg.OpenShiftConfig())
if err != nil {
return nil, nil, fmt.Errorf("Unable to configure Origin client: %v", err)
}

return osClient, kubeClientset, nil
return kubeClientset, nil
}
8 changes: 6 additions & 2 deletions pkg/cmd/util/clientcmd/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -259,11 +259,15 @@ func (f *Factory) PodForResource(resource string, timeout time.Duration) (string
}
return pod.Name, nil
case deployapi.Resource("deploymentconfigs"), deployapi.LegacyResource("deploymentconfigs"):
oc, kc, err := f.Clients()
appsClient, err := f.OpenshiftInternalAppsClient()
if err != nil {
return "", err
}
dc, err := oc.DeploymentConfigs(namespace).Get(name, metav1.GetOptions{})
kc, err := f.ClientSet()
if err != nil {
return "", err
}
dc, err := appsClient.Apps().DeploymentConfigs(namespace).Get(name, metav1.GetOptions{})
if err != nil {
return "", err
}
Expand Down
21 changes: 0 additions & 21 deletions pkg/cmd/util/clientcmd/factory_client_access.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,6 @@ type ClientAccessFactory interface {
kcmdutil.ClientAccessFactory
CLIClientBuilder

// TODO: this should be removed when we finally get rid of pkg/client
Clients() (*client.Client, kclientset.Interface, error)

OpenShiftClientConfig() kclientcmd.ClientConfig
ImageResolutionOptions() FlagBinder
}
Expand Down Expand Up @@ -134,24 +131,6 @@ func DefaultClientConfig(flags *pflag.FlagSet) kclientcmd.ClientConfig {
return clientConfig
}

func (f *ring0Factory) Clients() (*client.Client, kclientset.Interface, error) {
kubeClientSet, err := f.ClientSet()
if err != nil {
return nil, nil, err
}
cfg, err := f.clientConfig.ClientConfig()
if err != nil {
return nil, nil, err
}

openShiftClient, err := client.New(cfg)
if err != nil {
return nil, nil, err
}

return openShiftClient, kubeClientSet, nil
}

func (f *ring0Factory) OpenShiftClientConfig() kclientcmd.ClientConfig {
return f.clientConfig
}
Expand Down
27 changes: 14 additions & 13 deletions pkg/cmd/util/clientcmd/factory_object_mapping.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,13 @@ import (

"github.com/openshift/origin/pkg/api/latest"
deployapi "github.com/openshift/origin/pkg/apps/apis/apps"
appsmanualclient "github.com/openshift/origin/pkg/apps/client/internalversion"
deploycmd "github.com/openshift/origin/pkg/apps/cmd"
appsclient "github.com/openshift/origin/pkg/apps/generated/internalclientset"
authorizationapi "github.com/openshift/origin/pkg/authorization/apis/authorization"
authorizationreaper "github.com/openshift/origin/pkg/authorization/reaper"
buildapi "github.com/openshift/origin/pkg/build/apis/build"
buildmanualclient "github.com/openshift/origin/pkg/build/client/internalversion"
buildcmd "github.com/openshift/origin/pkg/build/cmd"
buildclient "github.com/openshift/origin/pkg/build/generated/internalclientset"
buildutil "github.com/openshift/origin/pkg/build/util"
Expand Down Expand Up @@ -174,11 +176,11 @@ func (f *ring1Factory) LogsForObject(object, options runtime.Object, timeout tim
if !ok {
return nil, errors.New("provided options object is not a DeploymentLogOptions")
}
oc, _, err := f.clientAccessFactory.Clients()
appsClient, err := f.clientAccessFactory.OpenshiftInternalAppsClient()
if err != nil {
return nil, err
}
return oc.DeploymentLogs(t.Namespace).Get(t.Name, *dopts), nil
return appsmanualclient.NewRolloutLogClient(appsClient.Apps().RESTClient(), t.Namespace).Logs(t.Name, *dopts), nil
case *buildapi.Build:
bopts, ok := options.(*buildapi.BuildLogOptions)
if !ok {
Expand All @@ -187,21 +189,22 @@ func (f *ring1Factory) LogsForObject(object, options runtime.Object, timeout tim
if bopts.Version != nil {
return nil, errors.New("cannot specify a version and a build")
}
oc, _, err := f.clientAccessFactory.Clients()
buildClient, err := f.clientAccessFactory.OpenshiftInternalBuildClient()
if err != nil {
return nil, err
}
return oc.BuildLogs(t.Namespace).Get(t.Name, *bopts), nil
return buildmanualclient.NewBuildLogClient(buildClient.Build().RESTClient(), t.Namespace).Logs(t.Name, *bopts), nil
case *buildapi.BuildConfig:
bopts, ok := options.(*buildapi.BuildLogOptions)
if !ok {
return nil, errors.New("provided options object is not a BuildLogOptions")
}
oc, _, err := f.clientAccessFactory.Clients()
buildClient, err := f.clientAccessFactory.OpenshiftInternalBuildClient()
if err != nil {
return nil, err
}
builds, err := oc.Builds(t.Namespace).List(metav1.ListOptions{})
logClient := buildmanualclient.NewBuildLogClient(buildClient.Build().RESTClient(), t.Namespace)
builds, err := buildClient.Build().Builds(t.Namespace).List(metav1.ListOptions{})
if err != nil {
return nil, err
}
Expand All @@ -212,10 +215,10 @@ func (f *ring1Factory) LogsForObject(object, options runtime.Object, timeout tim
if bopts.Version != nil {
// If a version has been specified, try to get the logs from that build.
desired := buildutil.BuildNameForConfigVersion(t.Name, int(*bopts.Version))
return oc.BuildLogs(t.Namespace).Get(desired, *bopts), nil
return logClient.Logs(desired, *bopts), nil
}
sort.Sort(sort.Reverse(buildapi.BuildSliceByCreationTimestamp(builds.Items)))
return oc.BuildLogs(t.Namespace).Get(builds.Items[0].Name, *bopts), nil
return logClient.Logs(builds.Items[0].Name, *bopts), nil
default:
return f.kubeObjectMappingFactory.LogsForObject(object, options, timeout)
}
Expand Down Expand Up @@ -372,21 +375,19 @@ func (f *ring1Factory) SwaggerSchema(gvk schema.GroupVersionKind) (*swagger.ApiD
if !latest.OriginLegacyKind(gvk) {
return f.kubeObjectMappingFactory.SwaggerSchema(gvk)
}
// TODO: we need to register the OpenShift API under the Kube group, and start returning the OpenShift
// group from the scheme.
oc, _, err := f.clientAccessFactory.Clients()
kubeClient, err := f.clientAccessFactory.ClientSet()
if err != nil {
return nil, err
}
return f.OriginSwaggerSchema(oc.RESTClient, gvk.GroupVersion())
return f.OriginSwaggerSchema(kubeClient.Discovery().RESTClient(), gvk.GroupVersion())
}

func (f *ring1Factory) OpenAPISchema(cacheDir string) (*openapi.Resources, error) {
return f.kubeObjectMappingFactory.OpenAPISchema(cacheDir)
}

// OriginSwaggerSchema returns a swagger API doc for an Origin schema under the /oapi prefix.
func (f *ring1Factory) OriginSwaggerSchema(client *restclient.RESTClient, version schema.GroupVersion) (*swagger.ApiDeclaration, error) {
func (f *ring1Factory) OriginSwaggerSchema(client restclient.Interface, version schema.GroupVersion) (*swagger.ApiDeclaration, error) {
if version.Empty() {
return nil, fmt.Errorf("groupVersion cannot be empty")
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/diagnostics/client/config_contexts.go
Original file line number Diff line number Diff line change
Expand Up @@ -228,10 +228,10 @@ func (d ConfigContext) Check() types.DiagnosticResult {

// Actually send a request to see if context has connectivity.
// Note: we cannot reuse factories as they cache the clients, so build new factory for each context.
osClient, _, err := osclientcmd.NewFactory(kclientcmd.NewDefaultClientConfig(*d.RawConfig, &kclientcmd.ConfigOverrides{Context: *context})).Clients()
projectClient, err := osclientcmd.NewFactory(kclientcmd.NewDefaultClientConfig(*d.RawConfig, &kclientcmd.ConfigOverrides{Context: *context})).OpenshiftInternalProjectClient()
// client create now *fails* if cannot connect to server; so, address connectivity errors below
if err == nil {
if projects, projerr := osClient.Projects().List(metav1.ListOptions{}); projerr != nil {
if projects, projerr := projectClient.Project().Projects().List(metav1.ListOptions{}); projerr != nil {
err = projerr
} else { // success!
list := []string{}
Expand Down
5 changes: 3 additions & 2 deletions pkg/diagnostics/pod/auth.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
"github.com/openshift/origin/pkg/cmd/flagtypes"
"github.com/openshift/origin/pkg/cmd/util/clientcmd"
"github.com/openshift/origin/pkg/diagnostics/types"
userclient "github.com/openshift/origin/pkg/user/generated/internalclientset"
)

const (
Expand Down Expand Up @@ -70,14 +71,14 @@ func (d PodCheckAuth) authenticateToMaster(token string, r types.DiagnosticResul
BearerToken: token,
},
}
oclient, _, err := clientConfig.Clients()
userClient, err := userclient.NewForConfig(clientConfig.OpenShiftConfig())
if err != nil {
r.Error("DP1002", err, fmt.Sprintf("could not create API clients from the service account client config: %v", err))
return
}
rchan := make(chan error, 1) // for concurrency with timeout
go func() {
_, err := oclient.Users().Get("~", metav1.GetOptions{})
_, err := userClient.User().Users().Get("~", metav1.GetOptions{})
rchan <- err
}()

Expand Down
11 changes: 0 additions & 11 deletions pkg/image/trigger/buildconfigs/buildconfigs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,12 @@ import (
"testing"

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/diff"
"k8s.io/apimachinery/pkg/util/sets"
testingcore "k8s.io/client-go/testing"
kapi "k8s.io/kubernetes/pkg/api"
kapihelper "k8s.io/kubernetes/pkg/api/helper"

buildapi "github.com/openshift/origin/pkg/build/apis/build"
"github.com/openshift/origin/pkg/client/testclient"
)

type fakeTagResponse struct {
Expand Down Expand Up @@ -248,14 +245,6 @@ func TestBuildConfigReactor(t *testing.T) {
}

for i, test := range testCases {
c := &testclient.Fake{}
var actualUpdate runtime.Object
if test.response != nil {
c.AddReactor("update", "*", func(action testingcore.Action) (handled bool, ret runtime.Object, err error) {
actualUpdate = action.(testingcore.UpdateAction).GetObject()
return true, test.response, nil
})
}
instantiator := &instantiator{build: test.response}
r := BuildConfigReactor{Instantiator: instantiator}
initial, err := kapi.Scheme.DeepCopy(test.obj)
Expand Down
4 changes: 2 additions & 2 deletions pkg/ipfailover/keepalived/plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ func (p *KeepalivedPlugin) GetNamespace() (string, error) {

// GetDeploymentConfig gets the deployment config associated with this IP Failover configurator plugin.
func (p *KeepalivedPlugin) GetDeploymentConfig() (*deployapi.DeploymentConfig, error) {
osClient, _, err := p.Factory.Clients()
appsClient, err := p.Factory.OpenshiftInternalAppsClient()
if err != nil {
return nil, fmt.Errorf("error getting client: %v", err)
}
Expand All @@ -95,7 +95,7 @@ func (p *KeepalivedPlugin) GetDeploymentConfig() (*deployapi.DeploymentConfig, e
return nil, fmt.Errorf("error getting namespace: %v", err)
}

dc, err := osClient.DeploymentConfigs(namespace).Get(p.Name, metav1.GetOptions{})
dc, err := appsClient.Apps().DeploymentConfigs(namespace).Get(p.Name, metav1.GetOptions{})
if err != nil {
if errors.IsNotFound(err) {
glog.V(4).Infof("KeepAlived IP Failover DeploymentConfig: %s not found", p.Name)
Expand Down
8 changes: 4 additions & 4 deletions pkg/oc/admin/groups/changemembership.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ import (

"github.com/spf13/cobra"

"github.com/openshift/origin/pkg/client"
"github.com/openshift/origin/pkg/cmd/util/clientcmd"
usertypedclient "github.com/openshift/origin/pkg/user/generated/internalclientset/typed/user/internalversion"
)

const (
Expand Down Expand Up @@ -42,7 +42,7 @@ var (
)

type GroupModificationOptions struct {
GroupClient client.GroupInterface
GroupClient usertypedclient.GroupInterface

Group string
Users []string
Expand Down Expand Up @@ -96,12 +96,12 @@ func (o *GroupModificationOptions) Complete(f *clientcmd.Factory, args []string)
o.Group = args[0]
o.Users = append(o.Users, args[1:]...)

osClient, _, err := f.Clients()
userClient, err := f.OpenshiftInternalUserClient()
if err != nil {
return err
}

o.GroupClient = osClient.Groups()
o.GroupClient = userClient.User().Groups()

return nil
}
Expand Down
8 changes: 4 additions & 4 deletions pkg/oc/admin/groups/new.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ import (
kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
kprinters "k8s.io/kubernetes/pkg/printers"

"github.com/openshift/origin/pkg/client"
"github.com/openshift/origin/pkg/cmd/util/clientcmd"
userapi "github.com/openshift/origin/pkg/user/apis/user"
usertypedclient "github.com/openshift/origin/pkg/user/generated/internalclientset/typed/user/internalversion"
)

const NewGroupRecommendedName = "new"
Expand All @@ -38,7 +38,7 @@ var (
)

type NewGroupOptions struct {
GroupClient client.GroupInterface
GroupClient usertypedclient.GroupInterface

Group string
Users []string
Expand Down Expand Up @@ -79,12 +79,12 @@ func (o *NewGroupOptions) Complete(f *clientcmd.Factory, cmd *cobra.Command, arg
o.Users = append(o.Users, args[1:]...)
}

osClient, _, err := f.Clients()
userClient, err := f.OpenshiftInternalUserClient()
if err != nil {
return err
}

o.GroupClient = osClient.Groups()
o.GroupClient = userClient.User().Groups()

printer, err := f.PrinterForCommand(cmd, true, nil, kprinters.PrintOptions{})
if err != nil {
Expand Down
4 changes: 2 additions & 2 deletions pkg/oc/admin/groups/sync/cli/interfaces.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package cli

import (
"github.com/openshift/origin/pkg/client"
"github.com/openshift/origin/pkg/oc/admin/groups/sync/interfaces"
usertypedclient "github.com/openshift/origin/pkg/user/generated/internalclientset/typed/user/internalversion"
)

// SyncBuilder describes an object that can build all the schema-specific parts of an LDAPGroupSyncer
Expand Down Expand Up @@ -30,7 +30,7 @@ type GroupNameRestrictions interface {
// a client that can retrieve OpenShift groups to satisfy those lists
type OpenShiftGroupNameRestrictions interface {
GroupNameRestrictions
GetClient() client.GroupInterface
GetClient() usertypedclient.GroupInterface
}

// MappedNameRestrictions describes an object that holds user name mappings for a group sync job
Expand Down
Loading

0 comments on commit 35f3000

Please sign in to comment.