Skip to content

Commit 8b771c9

Browse files
committed
inject new parameter for image resolution into kubectl set image
1 parent 82a56c1 commit 8b771c9

File tree

2 files changed

+13
-50
lines changed

2 files changed

+13
-50
lines changed

pkg/oc/cli/cmd/set/set.go

-3
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,6 @@ func NewCmdImage(fullName string, f *clientcmd.Factory, out, err io.Writer) *cob
9696
cmd.Long = setImageLong
9797
cmd.Example = fmt.Sprintf(setImageExample, fullName)
9898

99-
flags := cmd.Flags()
100-
f.ImageResolutionOptions().Bind(flags)
101-
10299
return cmd
103100
}
104101

pkg/oc/cli/util/clientcmd/factory_client_access.go

+13-47
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,14 @@ import (
2424
kapi "k8s.io/kubernetes/pkg/apis/core"
2525
kclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
2626
"k8s.io/kubernetes/pkg/kubectl"
27+
"k8s.io/kubernetes/pkg/kubectl/cmd/set"
2728
kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
2829
"k8s.io/kubernetes/pkg/kubectl/resource"
2930
"k8s.io/kubernetes/pkg/kubectl/util/transport"
3031

3132
appsapiv1 "github.com/openshift/api/apps/v1"
3233
appsapi "github.com/openshift/origin/pkg/apps/apis/apps"
33-
imageclient "github.com/openshift/origin/pkg/image/generated/internalclientset"
34+
imageapi "github.com/openshift/origin/pkg/image/apis/image"
3435
deploymentcmd "github.com/openshift/origin/pkg/oc/cli/deploymentconfigs"
3536
routegen "github.com/openshift/origin/pkg/route/generator"
3637
)
@@ -39,7 +40,6 @@ type ring0Factory struct {
3940
*OpenshiftCLIClientBuilder
4041

4142
clientConfig kclientcmd.ClientConfig
42-
imageResolutionOptions FlagBinder
4343
kubeClientAccessFactory kcmdutil.ClientAccessFactory
4444
}
4545

@@ -48,22 +48,21 @@ type ClientAccessFactory interface {
4848
CLIClientBuilder
4949

5050
OpenShiftClientConfig() kclientcmd.ClientConfig
51-
ImageResolutionOptions() FlagBinder
5251
}
5352

5453
func NewClientAccessFactory(optionalClientConfig kclientcmd.ClientConfig) ClientAccessFactory {
5554
// if we call this factory construction method, we want the openshift style config loading
5655
kclientcmd.UseOpenShiftKubeConfigValues = true
5756
kclientcmd.ErrEmptyConfig = kclientcmd.NewErrConfigurationMissing()
57+
set.ParseDockerImageReferenceToStringFunc = ParseDockerImageReferenceToStringFunc
5858

5959
flags := pflag.NewFlagSet("", pflag.ContinueOnError)
6060
clientConfig := optionalClientConfig
6161
if optionalClientConfig == nil {
6262
clientConfig = kcmdutil.DefaultClientConfig(flags)
6363
}
6464
factory := &ring0Factory{
65-
clientConfig: clientConfig,
66-
imageResolutionOptions: &imageResolutionOptions{},
65+
clientConfig: clientConfig,
6766
}
6867
factory.kubeClientAccessFactory = kcmdutil.NewClientAccessFactoryFromDiscovery(
6968
flags,
@@ -276,49 +275,8 @@ func (f *ring0Factory) Pauser(info *resource.Info) ([]byte, error) {
276275
}
277276
}
278277

279-
// ImageResolutionOptions provides the "--source" flag to commands that deal with images
280-
// and need to provide extra capabilities for working with ImageStreamTags and
281-
// ImageStreamImages.
282-
type imageResolutionOptions struct {
283-
bound bool
284-
Source string
285-
}
286-
287-
func (o *imageResolutionOptions) Bound() bool {
288-
return o.bound
289-
}
290-
291-
func (o *imageResolutionOptions) Bind(f *pflag.FlagSet) {
292-
if o.Bound() {
293-
return
294-
}
295-
f.StringVarP(&o.Source, "source", "", "docker", "The image source type; valid types are 'imagestreamtag', 'istag', 'imagestreamimage', 'isimage', and 'docker'")
296-
o.bound = true
297-
}
298-
299-
func (f *ring0Factory) ImageResolutionOptions() FlagBinder {
300-
return f.imageResolutionOptions
301-
}
302-
303278
func (f *ring0Factory) ResolveImage(image string) (string, error) {
304-
options := f.imageResolutionOptions.(*imageResolutionOptions)
305-
if isDockerImageSource(options.Source) {
306-
return f.kubeClientAccessFactory.ResolveImage(image)
307-
}
308-
config, err := f.OpenShiftClientConfig().ClientConfig()
309-
if err != nil {
310-
return "", err
311-
}
312-
imageClient, err := imageclient.NewForConfig(config)
313-
if err != nil {
314-
return "", err
315-
}
316-
namespace, _, err := f.DefaultNamespace()
317-
if err != nil {
318-
return "", err
319-
}
320-
321-
return resolveImagePullSpec(imageClient.Image(), options.Source, image, namespace)
279+
return f.kubeClientAccessFactory.ResolveImage(image)
322280
}
323281

324282
func (f *ring0Factory) Resumer(info *resource.Info) ([]byte, error) {
@@ -416,3 +374,11 @@ func getProtocols(spec kapi.PodSpec) map[string]string {
416374
}
417375
return result
418376
}
377+
378+
func ParseDockerImageReferenceToStringFunc(spec string) (string, error) {
379+
ret, err := imageapi.ParseDockerImageReference(spec)
380+
if err != nil {
381+
return "", err
382+
}
383+
return ret.String(), nil
384+
}

0 commit comments

Comments
 (0)