mirror of https://github.com/knative/client.git
Fix --image flag to only allow single occurence (#647)
* Fix --image flag to only allow single occurence * Fix changelog link * Reflect feedback in error message and type name * Add unit tests * Reflect unit tests improvement from feedback * Fix unit tests due to changes in master
This commit is contained in:
parent
c8c81da46b
commit
dd2dc97f92
|
|
@ -45,6 +45,10 @@
|
||||||
| remove unecessary `sync` parameter in setup call
|
| remove unecessary `sync` parameter in setup call
|
||||||
| https://github.com/knative/client/pull/656[#656]
|
| https://github.com/knative/client/pull/656[#656]
|
||||||
|
|
||||||
|
| 🐛
|
||||||
|
| Fix `--image` flag to only allow single occurence
|
||||||
|
| https://github.com/knative/client/pull/647[#647]
|
||||||
|
|
||||||
## v0.12.0 (2020-01-29)
|
## v0.12.0 (2020-01-29)
|
||||||
|
|
||||||
[cols="1,10,3", options="header", width="100%"]
|
[cols="1,10,3", options="header", width="100%"]
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ import (
|
||||||
|
|
||||||
type ConfigurationEditFlags struct {
|
type ConfigurationEditFlags struct {
|
||||||
// Direct field manipulation
|
// Direct field manipulation
|
||||||
Image string
|
Image uniqueStringArg
|
||||||
Env []string
|
Env []string
|
||||||
EnvFrom []string
|
EnvFrom []string
|
||||||
Mount []string
|
Mount []string
|
||||||
|
|
@ -67,6 +67,25 @@ type ResourceFlags struct {
|
||||||
Memory string
|
Memory string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -- uniqueStringArg Value
|
||||||
|
// Custom implementation of flag.Value interface to prevent multiple value assignment.
|
||||||
|
// Useful to enforce unique use of flags, e.g. --image.
|
||||||
|
type uniqueStringArg string
|
||||||
|
|
||||||
|
func (s *uniqueStringArg) Set(val string) error {
|
||||||
|
if len(*s) > 0 {
|
||||||
|
return errors.New("can be provided only once")
|
||||||
|
}
|
||||||
|
*s = uniqueStringArg(val)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *uniqueStringArg) Type() string {
|
||||||
|
return "string"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *uniqueStringArg) String() string { return string(*s) }
|
||||||
|
|
||||||
// markFlagMakesRevision indicates that a flag will create a new revision if you
|
// markFlagMakesRevision indicates that a flag will create a new revision if you
|
||||||
// set it.
|
// set it.
|
||||||
func (p *ConfigurationEditFlags) markFlagMakesRevision(f string) {
|
func (p *ConfigurationEditFlags) markFlagMakesRevision(f string) {
|
||||||
|
|
@ -75,7 +94,7 @@ func (p *ConfigurationEditFlags) markFlagMakesRevision(f string) {
|
||||||
|
|
||||||
// addSharedFlags adds the flags common between create & update.
|
// addSharedFlags adds the flags common between create & update.
|
||||||
func (p *ConfigurationEditFlags) addSharedFlags(command *cobra.Command) {
|
func (p *ConfigurationEditFlags) addSharedFlags(command *cobra.Command) {
|
||||||
command.Flags().StringVar(&p.Image, "image", "", "Image to run.")
|
command.Flags().VarP(&p.Image, "image", "", "Image to run.")
|
||||||
p.markFlagMakesRevision("image")
|
p.markFlagMakesRevision("image")
|
||||||
command.Flags().StringArrayVarP(&p.Env, "env", "e", []string{},
|
command.Flags().StringArrayVarP(&p.Env, "env", "e", []string{},
|
||||||
"Environment variable to set. NAME=value; you may provide this flag "+
|
"Environment variable to set. NAME=value; you may provide this flag "+
|
||||||
|
|
@ -251,7 +270,7 @@ func (p *ConfigurationEditFlags) Apply(
|
||||||
}
|
}
|
||||||
imageSet := false
|
imageSet := false
|
||||||
if cmd.Flags().Changed("image") {
|
if cmd.Flags().Changed("image") {
|
||||||
err = servinglib.UpdateImage(template, p.Image)
|
err = servinglib.UpdateImage(template, p.Image.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ import (
|
||||||
|
|
||||||
"knative.dev/client/pkg/kn/commands"
|
"knative.dev/client/pkg/kn/commands"
|
||||||
servinglib "knative.dev/client/pkg/serving"
|
servinglib "knative.dev/client/pkg/serving"
|
||||||
|
"knative.dev/client/pkg/util"
|
||||||
"knative.dev/client/pkg/wait"
|
"knative.dev/client/pkg/wait"
|
||||||
|
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
|
|
@ -135,6 +136,13 @@ func TestServiceCreateImage(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestServiceCreateWithMultipleImages(t *testing.T) {
|
||||||
|
_, _, _, err := fakeServiceCreate([]string{
|
||||||
|
"service", "create", "foo", "--image", "gcr.io/foo/bar:baz", "--image", "gcr.io/bar/foo:baz", "--no-wait"}, false)
|
||||||
|
|
||||||
|
assert.Assert(t, util.ContainsAll(err.Error(), "\"--image\"", "\"gcr.io/bar/foo:baz\"", "flag", "once"))
|
||||||
|
}
|
||||||
|
|
||||||
func TestServiceCreateImageSync(t *testing.T) {
|
func TestServiceCreateImageSync(t *testing.T) {
|
||||||
action, created, output, err := fakeServiceCreate([]string{
|
action, created, output, err := fakeServiceCreate([]string{
|
||||||
"service", "create", "foo", "--image", "gcr.io/foo/bar:baz"}, false)
|
"service", "create", "foo", "--image", "gcr.io/foo/bar:baz"}, false)
|
||||||
|
|
|
||||||
|
|
@ -191,6 +191,14 @@ func TestServiceUpdateImage(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestServiceUpdateWithMultipleImages(t *testing.T) {
|
||||||
|
orig := newEmptyService()
|
||||||
|
_, _, _, err := fakeServiceUpdate(orig, []string{
|
||||||
|
"service", "create", "foo", "--image", "gcr.io/foo/bar:baz", "--image", "gcr.io/bar/foo:baz", "--no-wait"})
|
||||||
|
|
||||||
|
assert.Assert(t, util.ContainsAll(err.Error(), "\"--image\"", "\"gcr.io/bar/foo:baz\"", "flag", "once"))
|
||||||
|
}
|
||||||
|
|
||||||
func TestServiceUpdateCommand(t *testing.T) {
|
func TestServiceUpdateCommand(t *testing.T) {
|
||||||
orig := newEmptyService()
|
orig := newEmptyService()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue