Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pkg/bootstrap/docker/openshift/helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ import (

docker "github.com/fsouza/go-dockerclient"
"github.com/golang/glog"
"k8s.io/client-go/util/homedir"
kapi "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/util/homedir"

"github.com/openshift/origin/pkg/bootstrap/docker/dockerhelper"
"github.com/openshift/origin/pkg/bootstrap/docker/errors"
Expand Down
6 changes: 3 additions & 3 deletions pkg/cmd/util/clientcmd/clientcmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,11 @@ func AnonymousClientConfig(config *restclient.Config) restclient.Config {
Prefix: config.Prefix,
ContentConfig: config.ContentConfig,
TLSClientConfig: restclient.TLSClientConfig{
CAFile: config.TLSClientConfig.CAFile,
CAData: config.TLSClientConfig.CAData,
CAFile: config.TLSClientConfig.CAFile,
CAData: config.TLSClientConfig.CAData,
Insecure: config.Insecure,
},
RateLimiter: config.RateLimiter,
Insecure: config.Insecure,
UserAgent: config.UserAgent,
Transport: config.Transport,
WrapTransport: config.WrapTransport,
Expand Down
53 changes: 15 additions & 38 deletions pkg/cmd/util/clientcmd/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
"k8s.io/client-go/discovery"
kclientcmd "k8s.io/client-go/tools/clientcmd"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/apis/batch"
"k8s.io/kubernetes/pkg/apis/extensions"
kclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
Expand Down Expand Up @@ -66,38 +67,14 @@ func NewFactory(optionalClientConfig kclientcmd.ClientConfig) *Factory {
// PrintResourceInfos receives a list of resource infos and prints versioned objects if a generic output format was specified
// otherwise, it iterates through info objects, printing each resource with a unique printer for its mapping
func (f *Factory) PrintResourceInfos(cmd *cobra.Command, infos []*resource.Info, out io.Writer) error {
printer, generic, err := kcmdutil.PrinterForCommand(cmd)
if err != nil {
return nil
}
if !generic {
for _, info := range infos {
mapping := info.ResourceMapping()
printer, err := f.PrinterForMapping(cmd, mapping, false)
if err != nil {
return err
}
if err := printer.PrintObj(info.Object, out); err != nil {
return nil
}
for _, info := range infos {
if err := kcmdutil.PrintResourceInfoForCommand(cmd, info, f, out); err != nil {
// TODO(rebase-1.6) we may want to aggregate errors and return them at the end?
return err
}
return nil
}

clientConfig, err := f.ClientConfig()
if err != nil {
return err
}
outputVersion, err := kcmdutil.OutputVersion(cmd, clientConfig.GroupVersion)
if err != nil {
return err
}
object, err := resource.AsVersionedObject(infos, len(infos) != 1, outputVersion, api.Codecs.LegacyCodec(outputVersion))
if err != nil {
return err
}
return printer.PrintObj(object, out)

return nil
}

// FlagBinder represents an interface that allows to bind extra flags into commands.
Expand Down Expand Up @@ -233,7 +210,7 @@ func (f *Factory) ApproximatePodTemplateForObject(object runtime.Object) (*api.P
}

func (f *Factory) PodForResource(resource string, timeout time.Duration) (string, error) {
sortBy := func(pods []*api.Pod) sort.Interface { return sort.Reverse(controller.ActivePods(pods)) }
sortBy := func(pods []*v1.Pod) sort.Interface { return sort.Reverse(controller.ActivePods(pods)) }
namespace, _, err := f.DefaultNamespace()
if err != nil {
return "", err
Expand All @@ -257,7 +234,7 @@ func (f *Factory) PodForResource(resource string, timeout time.Duration) (string
return "", err
}
selector := labels.SelectorFromSet(rc.Spec.Selector)
pod, _, err := kcmdutil.GetFirstPod(kc, namespace, selector, timeout, sortBy)
pod, _, err := kcmdutil.GetFirstPod(kc.Core(), namespace, selector, timeout, sortBy)
if err != nil {
return "", err
}
Expand Down Expand Up @@ -290,7 +267,7 @@ func (f *Factory) PodForResource(resource string, timeout time.Duration) (string
if err != nil {
return "", err
}
pod, _, err := kcmdutil.GetFirstPod(kc, namespace, selector, timeout, sortBy)
pod, _, err := kcmdutil.GetFirstPod(kc.Core(), namespace, selector, timeout, sortBy)
if err != nil {
return "", err
}
Expand All @@ -308,7 +285,7 @@ func (f *Factory) PodForResource(resource string, timeout time.Duration) (string
if err != nil {
return "", err
}
pod, _, err := kcmdutil.GetFirstPod(kc, namespace, selector, timeout, sortBy)
pod, _, err := kcmdutil.GetFirstPod(kc.Core(), namespace, selector, timeout, sortBy)
if err != nil {
return "", err
}
Expand All @@ -326,7 +303,7 @@ func (f *Factory) PodForResource(resource string, timeout time.Duration) (string
if err != nil {
return "", err
}
pod, _, err := kcmdutil.GetFirstPod(kc, namespace, selector, timeout, sortBy)
pod, _, err := kcmdutil.GetFirstPod(kc.Core(), namespace, selector, timeout, sortBy)
if err != nil {
return "", err
}
Expand Down Expand Up @@ -357,7 +334,7 @@ func (f *Factory) PodForResource(resource string, timeout time.Duration) (string
}
}

func podNameForJob(job *batch.Job, kc kclientset.Interface, timeout time.Duration, sortBy func(pods []*api.Pod) sort.Interface) (string, error) {
func podNameForJob(job *batch.Job, kc kclientset.Interface, timeout time.Duration, sortBy func(pods []*v1.Pod) sort.Interface) (string, error) {
selector, err := metav1.LabelSelectorAsSelector(job.Spec.Selector)
if err != nil {
return "", err
Expand All @@ -381,12 +358,12 @@ func FindAllCanonicalResources(d discovery.DiscoveryInterface, m meta.RESTMapper
if err != nil {
return nil, err
}
for apiVersion, v := range all {
gv, err := schema.ParseGroupVersion(apiVersion)
for _, serverResource := range all {
gv, err := schema.ParseGroupVersion(serverResource.GroupVersion)
if err != nil {
continue
}
for _, r := range v.APIResources {
for _, r := range serverResource.APIResources {
// ignore subresources
if strings.Contains(r.Name, "/") {
continue
Expand Down
44 changes: 20 additions & 24 deletions pkg/cmd/util/clientcmd/factory_client_access.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package clientcmd

import (
"errors"
"fmt"
"io"
"io/ioutil"
Expand All @@ -23,13 +24,14 @@ import (
restclient "k8s.io/client-go/rest"
kclientcmd "k8s.io/client-go/tools/clientcmd"
kclientcmdapi "k8s.io/client-go/tools/clientcmd/api"
"k8s.io/client-go/util/homedir"
fedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset"
kapi "k8s.io/kubernetes/pkg/api"
kclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"k8s.io/kubernetes/pkg/kubectl"
kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/resource"
"k8s.io/kubernetes/pkg/util/homedir"
kprinters "k8s.io/kubernetes/pkg/printers"

"github.com/openshift/origin/pkg/client"
"github.com/openshift/origin/pkg/cmd/cli/config"
Expand Down Expand Up @@ -146,18 +148,22 @@ func (f *ring0Factory) DiscoveryClient() (discovery.CachedDiscoveryInterface, er
return f.kubeClientAccessFactory.DiscoveryClient()
}

func (f *ring0Factory) ClientSet() (*kclientset.Clientset, error) {
func (f *ring0Factory) ClientSet() (kclientset.Interface, error) {
return f.kubeClientAccessFactory.ClientSet()
}

func (f *ring0Factory) ClientSetForVersion(requiredVersion *schema.GroupVersion) (*kclientset.Clientset, error) {
func (f *ring0Factory) ClientSetForVersion(requiredVersion *schema.GroupVersion) (kclientset.Interface, error) {
return f.kubeClientAccessFactory.ClientSetForVersion(requiredVersion)
}

func (f *ring0Factory) ClientConfig() (*restclient.Config, error) {
return f.kubeClientAccessFactory.ClientConfig()
}

func (f *ring0Factory) BareClientConfig() (*restclient.Config, error) {
return f.clientConfig.ClientConfig()
}

func (f *ring0Factory) ClientConfigForVersion(requiredVersion *schema.GroupVersion) (*restclient.Config, error) {
return f.kubeClientAccessFactory.ClientConfigForVersion(nil)
}
Expand Down Expand Up @@ -231,8 +237,8 @@ func (f *ring0Factory) FlagSet() *pflag.FlagSet {
return f.kubeClientAccessFactory.FlagSet()
}

func (f *ring0Factory) Command() string {
return f.kubeClientAccessFactory.Command()
func (f *ring0Factory) Command(cmd *cobra.Command, showSecrets bool) string {
return f.kubeClientAccessFactory.Command(cmd, showSecrets)
}

func (f *ring0Factory) BindFlags(flags *pflag.FlagSet) {
Expand All @@ -243,7 +249,7 @@ func (f *ring0Factory) BindExternalFlags(flags *pflag.FlagSet) {
f.kubeClientAccessFactory.BindExternalFlags(flags)
}

func (f *ring0Factory) DefaultResourceFilterOptions(cmd *cobra.Command, withNamespace bool) *kubectl.PrintOptions {
func (f *ring0Factory) DefaultResourceFilterOptions(cmd *cobra.Command, withNamespace bool) *kprinters.PrintOptions {
return f.kubeClientAccessFactory.DefaultResourceFilterOptions(cmd, withNamespace)
}

Expand All @@ -257,30 +263,25 @@ func (f *ring0Factory) SuggestedPodTemplateResources() []schema.GroupResource {

// Saves current resource name (or alias if any) in PrintOptions. Once saved, it will not be overwritten by the
// kubernetes resource alias look-up, as it will notice a non-empty value in `options.Kind`
func (f *ring0Factory) Printer(mapping *meta.RESTMapping, options kubectl.PrintOptions) (kubectl.ResourcePrinter, error) {
func (f *ring0Factory) Printer(mapping *meta.RESTMapping, options kprinters.PrintOptions) (kprinters.ResourcePrinter, error) {
if mapping != nil {
options.Kind = mapping.Resource
if alias, ok := resourceShortFormFor(mapping.Resource); ok {
options.Kind = alias
}
}
return describe.NewHumanReadablePrinter(options), nil
return describe.NewHumanReadablePrinter(f.JSONEncoder(), f.Decoder(true), options), nil
}

func (f *ring0Factory) Pauser(info *resource.Info) (bool, error) {
func (f *ring0Factory) Pauser(info *resource.Info) ([]byte, error) {
switch t := info.Object.(type) {
case *deployapi.DeploymentConfig:
if t.Spec.Paused {
return true, nil
return nil, errors.New("is already paused")
}
t.Spec.Paused = true
oc, _, err := f.Clients()
if err != nil {
return false, err
}
_, err = oc.DeploymentConfigs(t.Namespace).Update(t)
// TODO: Pause the deployer containers.
return false, err
return runtime.Encode(f.JSONEncoder(), info.Object)
default:
return f.kubeClientAccessFactory.Pauser(info)
}
Expand Down Expand Up @@ -326,20 +327,15 @@ func (f *ring0Factory) ResolveImage(image string) (string, error) {
return imageutil.ResolveImagePullSpec(oc, oc, options.Source, image, namespace)
}

func (f *ring0Factory) Resumer(info *resource.Info) (bool, error) {
func (f *ring0Factory) Resumer(info *resource.Info) ([]byte, error) {
switch t := info.Object.(type) {
case *deployapi.DeploymentConfig:
if !t.Spec.Paused {
return true, nil
return nil, errors.New("is not paused")
}
t.Spec.Paused = false
oc, _, err := f.Clients()
if err != nil {
return false, err
}
_, err = oc.DeploymentConfigs(t.Namespace).Update(t)
// TODO: Resume the deployer containers.
return false, err
return runtime.Encode(f.JSONEncoder(), info.Object)
default:
return f.kubeClientAccessFactory.Resumer(info)
}
Expand Down
50 changes: 5 additions & 45 deletions pkg/cmd/util/clientcmd/factory_object_mapping.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,22 @@ import (

"github.com/blang/semver"
"github.com/emicklei/go-restful/swagger"
"github.com/spf13/cobra"

"k8s.io/apimachinery/pkg/api/meta"
metainternal "k8s.io/apimachinery/pkg/apis/meta/internalversion"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/dynamic"
restclient "k8s.io/client-go/rest"
kapi "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/api/validation"
"k8s.io/kubernetes/pkg/client/typed/dynamic"
"k8s.io/kubernetes/pkg/controller"
"k8s.io/kubernetes/pkg/kubectl"
kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/resource"
kprinters "k8s.io/kubernetes/pkg/printers"

"github.com/openshift/origin/pkg/api/latest"
authorizationapi "github.com/openshift/origin/pkg/authorization/api"
Expand Down Expand Up @@ -100,7 +101,7 @@ func (f *ring1Factory) UnstructuredClientForMapping(mapping *meta.RESTMapping) (
return f.kubeObjectMappingFactory.UnstructuredClientForMapping(mapping)
}

func (f *ring1Factory) Describer(mapping *meta.RESTMapping) (kubectl.Describer, error) {
func (f *ring1Factory) Describer(mapping *meta.RESTMapping) (kprinters.Describer, error) {
if latest.OriginKind(mapping.GroupVersionKind) {
oClient, kClient, err := f.clientAccessFactory.Clients()
if err != nil {
Expand Down Expand Up @@ -287,55 +288,14 @@ func (f *ring1Factory) AttachablePodForObject(object runtime.Object) (*kapi.Pod,
return nil, err
}
selector := labels.SelectorFromSet(t.Spec.Selector)
f := func(pods []*kapi.Pod) sort.Interface { return sort.Reverse(controller.ActivePods(pods)) }
f := func(pods []*v1.Pod) sort.Interface { return sort.Reverse(controller.ActivePods(pods)) }
pod, _, err := kcmdutil.GetFirstPod(kc.Core(), t.Namespace, selector, 1*time.Minute, f)
return pod, err
default:
return f.kubeObjectMappingFactory.AttachablePodForObject(object)
}
}

// PrinterForMapping returns a printer suitable for displaying the provided resource type.
// Requires that printer flags have been added to cmd (see AddPrinterFlags).
func (f *ring1Factory) PrinterForMapping(cmd *cobra.Command, mapping *meta.RESTMapping, withNamespace bool) (kubectl.ResourcePrinter, error) {
/*
// TODO FIX ME. COPIED FROM KUBE AS PART OF THE COPY/PASTE FOR
// PrinterForMapping
if latest.OriginKind(mapping.GroupVersionKind) {
printer, ok, err := kcmdutil.PrinterForCommand(cmd)
if err != nil {
return nil, err
}
if ok && mapping != nil {
printer = kubectl.NewVersionedPrinter(printer, mapping.ObjectConvertor, mapping.GroupVersionKind.GroupVersion())
} else {
// Some callers do not have "label-columns" so we can't use the GetFlagStringSlice() helper
columnLabel, err := cmd.Flags().GetStringSlice("label-columns")
if err != nil {
columnLabel = []string{}
}
printer, err = f.Printer(mapping, kubectl.PrintOptions{
NoHeaders: kcmdutil.GetFlagBool(cmd, "no-headers"),
WithNamespace: withNamespace,
Wide: kcmdutil.GetWideFlag(cmd),
ShowAll: kcmdutil.GetFlagBool(cmd, "show-all"),
ShowLabels: kcmdutil.GetFlagBool(cmd, "show-labels"),
AbsoluteTimestamps: isWatch(cmd),
ColumnLabels: columnLabel,
})
if err != nil {
return nil, err
}
printer = maybeWrapSortingPrinter(cmd, printer)
}

return printer, nil
}
*/

return f.kubeObjectMappingFactory.PrinterForMapping(cmd, mapping, withNamespace)
}

func (f *ring1Factory) Validator(validate bool, cacheDir string) (validation.Schema, error) {
return f.kubeObjectMappingFactory.Validator(validate, cacheDir)
}
Expand Down
8 changes: 4 additions & 4 deletions pkg/cmd/util/clientcmd/shortcut_restmapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ func NewShortcutExpander(discoveryClient discovery.DiscoveryInterface, delegate
}

availableResources := []schema.GroupVersionResource{}
for groupVersionString, resourceList := range apiResources {
currVersion, err := schema.ParseGroupVersion(groupVersionString)
for _, resourceList := range apiResources {
currVersion, err := schema.ParseGroupVersion(resourceList.GroupVersion)
if err != nil {
return defaultMapper
}
Expand Down Expand Up @@ -73,8 +73,8 @@ func (e ShortcutExpander) RESTMapping(gk schema.GroupKind, versions ...string) (
return e.RESTMapper.RESTMapping(gk, versions...)
}

func (e ShortcutExpander) RESTMappings(gk schema.GroupKind) ([]*meta.RESTMapping, error) {
return e.RESTMapper.RESTMappings(gk)
func (e ShortcutExpander) RESTMappings(gk schema.GroupKind, versions ...string) ([]*meta.RESTMapping, error) {
return e.RESTMapper.RESTMappings(gk, versions...)
}

// userResources are the resource names that apply to the primary, user facing resources used by
Expand Down
Loading