mirror of https://github.com/knative/client.git
Drop deprecated --async flag support (#1094)
in the favor of --no-wait flag
This commit is contained in:
parent
26867f154d
commit
45ffadecec
|
|
@ -21,6 +21,10 @@
|
||||||
| Add channel sink prefix
|
| Add channel sink prefix
|
||||||
| https://github.com/knative/client/pull/1092[#1092]
|
| https://github.com/knative/client/pull/1092[#1092]
|
||||||
|
|
||||||
|
| 🐣
|
||||||
|
| Drop deprecated --async flag support
|
||||||
|
| https://github.com/knative/client/pull/1094[#1094]
|
||||||
|
|
||||||
| 🐣
|
| 🐣
|
||||||
| Uniform multiple writeSink to DescribeSink
|
| Uniform multiple writeSink to DescribeSink
|
||||||
| https://github.com/knative/client/pull/1075[#1075]
|
| https://github.com/knative/client/pull/1075[#1075]
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,6 @@ kn broker delete NAME
|
||||||
### Options
|
### Options
|
||||||
|
|
||||||
```
|
```
|
||||||
--async DEPRECATED: please use --no-wait instead. Do not wait for 'broker delete' operation to be completed. (default true)
|
|
||||||
-h, --help help for delete
|
-h, --help help for delete
|
||||||
-n, --namespace string Specify the namespace to operate in.
|
-n, --namespace string Specify the namespace to operate in.
|
||||||
--no-wait Do not wait for 'broker delete' operation to be completed. (default true)
|
--no-wait Do not wait for 'broker delete' operation to be completed. (default true)
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@ kn revision delete NAME [NAME ...]
|
||||||
### Options
|
### Options
|
||||||
|
|
||||||
```
|
```
|
||||||
--async DEPRECATED: please use --no-wait instead. Do not wait for 'revision delete' operation to be completed. (default true)
|
|
||||||
-h, --help help for delete
|
-h, --help help for delete
|
||||||
-n, --namespace string Specify the namespace to operate in.
|
-n, --namespace string Specify the namespace to operate in.
|
||||||
--no-wait Do not wait for 'revision delete' operation to be completed. (default true)
|
--no-wait Do not wait for 'revision delete' operation to be completed. (default true)
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,6 @@ kn service apply s0 --filename my-svc.yml
|
||||||
--annotation-revision stringArray Revision annotation to set. name=value; you may provide this flag any number of times to set multiple annotations. To unset, specify the annotation name followed by a "-" (e.g., name-). This flag takes precedence over the "annotation" flag.
|
--annotation-revision stringArray Revision annotation to set. name=value; you may provide this flag any number of times to set multiple annotations. To unset, specify the annotation name followed by a "-" (e.g., name-). This flag takes precedence over the "annotation" flag.
|
||||||
--annotation-service stringArray Service annotation to set. name=value; you may provide this flag any number of times to set multiple annotations. To unset, specify the annotation name followed by a "-" (e.g., name-). This flag takes precedence over the "annotation" flag.
|
--annotation-service stringArray Service annotation to set. name=value; you may provide this flag any number of times to set multiple annotations. To unset, specify the annotation name followed by a "-" (e.g., name-). This flag takes precedence over the "annotation" flag.
|
||||||
--arg stringArray Add argument to the container command. Example: --arg myArg1 --arg --myArg2 --arg myArg3=3. You can use this flag multiple times.
|
--arg stringArray Add argument to the container command. Example: --arg myArg1 --arg --myArg2 --arg myArg3=3. You can use this flag multiple times.
|
||||||
--async DEPRECATED: please use --no-wait instead. Do not wait for 'service apply' operation to be completed.
|
|
||||||
--autoscale-window string Duration to look back for making auto-scaling decisions. The service is scaled to zero if no request was received in during that time. (eg: 10s)
|
--autoscale-window string Duration to look back for making auto-scaling decisions. The service is scaled to zero if no request was received in during that time. (eg: 10s)
|
||||||
--cluster-local Specify that the service be private. (--no-cluster-local will make the service publicly available)
|
--cluster-local Specify that the service be private. (--no-cluster-local will make the service publicly available)
|
||||||
--cmd string Specify command to be used as entrypoint instead of default one. Example: --cmd /app/start or --cmd /app/start --arg myArg to pass additional arguments.
|
--cmd string Specify command to be used as entrypoint instead of default one. Example: --cmd /app/start or --cmd /app/start --arg myArg to pass additional arguments.
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,6 @@ kn service create NAME --image IMAGE
|
||||||
--annotation-revision stringArray Revision annotation to set. name=value; you may provide this flag any number of times to set multiple annotations. To unset, specify the annotation name followed by a "-" (e.g., name-). This flag takes precedence over the "annotation" flag.
|
--annotation-revision stringArray Revision annotation to set. name=value; you may provide this flag any number of times to set multiple annotations. To unset, specify the annotation name followed by a "-" (e.g., name-). This flag takes precedence over the "annotation" flag.
|
||||||
--annotation-service stringArray Service annotation to set. name=value; you may provide this flag any number of times to set multiple annotations. To unset, specify the annotation name followed by a "-" (e.g., name-). This flag takes precedence over the "annotation" flag.
|
--annotation-service stringArray Service annotation to set. name=value; you may provide this flag any number of times to set multiple annotations. To unset, specify the annotation name followed by a "-" (e.g., name-). This flag takes precedence over the "annotation" flag.
|
||||||
--arg stringArray Add argument to the container command. Example: --arg myArg1 --arg --myArg2 --arg myArg3=3. You can use this flag multiple times.
|
--arg stringArray Add argument to the container command. Example: --arg myArg1 --arg --myArg2 --arg myArg3=3. You can use this flag multiple times.
|
||||||
--async DEPRECATED: please use --no-wait instead. Do not wait for 'service create' operation to be completed.
|
|
||||||
--autoscale-window string Duration to look back for making auto-scaling decisions. The service is scaled to zero if no request was received in during that time. (eg: 10s)
|
--autoscale-window string Duration to look back for making auto-scaling decisions. The service is scaled to zero if no request was received in during that time. (eg: 10s)
|
||||||
--cluster-local Specify that the service be private. (--no-cluster-local will make the service publicly available)
|
--cluster-local Specify that the service be private. (--no-cluster-local will make the service publicly available)
|
||||||
--cmd string Specify command to be used as entrypoint instead of default one. Example: --cmd /app/start or --cmd /app/start --arg myArg to pass additional arguments.
|
--cmd string Specify command to be used as entrypoint instead of default one. Example: --cmd /app/start or --cmd /app/start --arg myArg to pass additional arguments.
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,6 @@ kn service delete NAME [NAME ...]
|
||||||
|
|
||||||
```
|
```
|
||||||
--all Delete all services in a namespace.
|
--all Delete all services in a namespace.
|
||||||
--async DEPRECATED: please use --no-wait instead. Do not wait for 'service delete' operation to be completed. (default true)
|
|
||||||
-h, --help help for delete
|
-h, --help help for delete
|
||||||
-n, --namespace string Specify the namespace to operate in.
|
-n, --namespace string Specify the namespace to operate in.
|
||||||
--no-wait Do not wait for 'service delete' operation to be completed. (default true)
|
--no-wait Do not wait for 'service delete' operation to be completed. (default true)
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,6 @@ kn service update NAME
|
||||||
--annotation-revision stringArray Revision annotation to set. name=value; you may provide this flag any number of times to set multiple annotations. To unset, specify the annotation name followed by a "-" (e.g., name-). This flag takes precedence over the "annotation" flag.
|
--annotation-revision stringArray Revision annotation to set. name=value; you may provide this flag any number of times to set multiple annotations. To unset, specify the annotation name followed by a "-" (e.g., name-). This flag takes precedence over the "annotation" flag.
|
||||||
--annotation-service stringArray Service annotation to set. name=value; you may provide this flag any number of times to set multiple annotations. To unset, specify the annotation name followed by a "-" (e.g., name-). This flag takes precedence over the "annotation" flag.
|
--annotation-service stringArray Service annotation to set. name=value; you may provide this flag any number of times to set multiple annotations. To unset, specify the annotation name followed by a "-" (e.g., name-). This flag takes precedence over the "annotation" flag.
|
||||||
--arg stringArray Add argument to the container command. Example: --arg myArg1 --arg --myArg2 --arg myArg3=3. You can use this flag multiple times.
|
--arg stringArray Add argument to the container command. Example: --arg myArg1 --arg --myArg2 --arg myArg3=3. You can use this flag multiple times.
|
||||||
--async DEPRECATED: please use --no-wait instead. Do not wait for 'service update' operation to be completed.
|
|
||||||
--autoscale-window string Duration to look back for making auto-scaling decisions. The service is scaled to zero if no request was received in during that time. (eg: 10s)
|
--autoscale-window string Duration to look back for making auto-scaling decisions. The service is scaled to zero if no request was received in during that time. (eg: 10s)
|
||||||
--cluster-local Specify that the service be private. (--no-cluster-local will make the service publicly available)
|
--cluster-local Specify that the service be private. (--no-cluster-local will make the service publicly available)
|
||||||
--cmd string Specify command to be used as entrypoint instead of default one. Example: --cmd /app/start or --cmd /app/start --arg myArg to pass additional arguments.
|
--cmd string Specify command to be used as entrypoint instead of default one. Example: --cmd /app/start or --cmd /app/start --arg myArg to pass additional arguments.
|
||||||
|
|
|
||||||
|
|
@ -157,12 +157,6 @@ func replaceService(client clientservingv1.KnServingClient, service *servingv1.S
|
||||||
}
|
}
|
||||||
|
|
||||||
func waitIfRequested(client clientservingv1.KnServingClient, serviceName string, waitFlags commands.WaitFlags, verbDoing string, verbDone string, out io.Writer) error {
|
func waitIfRequested(client clientservingv1.KnServingClient, serviceName string, waitFlags commands.WaitFlags, verbDoing string, verbDone string, out io.Writer) error {
|
||||||
//TODO: deprecated condition should be removed with --async flag
|
|
||||||
if waitFlags.Async {
|
|
||||||
fmt.Fprintf(out, "\nWARNING: flag --async is deprecated and going to be removed in future release, please use --no-wait instead.\n\n")
|
|
||||||
fmt.Fprintf(out, "Service '%s' %s in namespace '%s'.\n", serviceName, verbDone, client.Namespace())
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
if !waitFlags.Wait {
|
if !waitFlags.Wait {
|
||||||
fmt.Fprintf(out, "Service '%s' %s in namespace '%s'.\n", serviceName, verbDone, client.Namespace())
|
fmt.Fprintf(out, "Service '%s' %s in namespace '%s'.\n", serviceName, verbDone, client.Namespace())
|
||||||
return nil
|
return nil
|
||||||
|
|
|
||||||
|
|
@ -109,8 +109,7 @@ func NewServiceUpdateCommand(p *commands.KnParams) *cobra.Command {
|
||||||
}
|
}
|
||||||
|
|
||||||
out := cmd.OutOrStdout()
|
out := cmd.OutOrStdout()
|
||||||
//TODO: deprecated condition should be once --async is gone
|
if waitFlags.Wait {
|
||||||
if !waitFlags.Async && waitFlags.Wait {
|
|
||||||
fmt.Fprintf(out, "Updating Service '%s' in namespace '%s':\n", args[0], namespace)
|
fmt.Fprintf(out, "Updating Service '%s' in namespace '%s':\n", args[0], namespace)
|
||||||
fmt.Fprintln(out, "")
|
fmt.Fprintln(out, "")
|
||||||
err := waitForService(client, name, out, waitFlags.TimeoutInSeconds)
|
err := waitForService(client, name, out, waitFlags.TimeoutInSeconds)
|
||||||
|
|
@ -120,9 +119,6 @@ func NewServiceUpdateCommand(p *commands.KnParams) *cobra.Command {
|
||||||
fmt.Fprintln(out, "")
|
fmt.Fprintln(out, "")
|
||||||
return showUrl(client, name, latestRevisionBeforeUpdate, "updated", out)
|
return showUrl(client, name, latestRevisionBeforeUpdate, "updated", out)
|
||||||
} else {
|
} else {
|
||||||
if waitFlags.Async {
|
|
||||||
fmt.Fprintf(out, "\nWARNING: flag --async is deprecated and going to be removed in future release, please use --no-wait instead.\n\n")
|
|
||||||
}
|
|
||||||
fmt.Fprintf(out, "Service '%s' updated in namespace '%s'.\n", args[0], namespace)
|
fmt.Fprintf(out, "Service '%s' updated in namespace '%s'.\n", args[0], namespace)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,11 +33,9 @@ type WaitFlags struct {
|
||||||
TimeoutInSeconds int
|
TimeoutInSeconds int
|
||||||
// If set then apply resources and wait for completion
|
// If set then apply resources and wait for completion
|
||||||
Wait bool
|
Wait bool
|
||||||
//TODO: deprecated variable should be removed with --async flag
|
|
||||||
Async bool
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add flags which influence the sync/async behaviour when creating or updating
|
// Add flags which influence the wait/no-wait behaviour when creating or updating
|
||||||
// resources. Set `waitDefault` argument if the default behaviour is synchronous.
|
// resources. Set `waitDefault` argument if the default behaviour is synchronous.
|
||||||
// Use `what` for describing what is waited for.
|
// Use `what` for describing what is waited for.
|
||||||
func (p *WaitFlags) AddConditionWaitFlags(command *cobra.Command, waitTimeoutDefault int, action, what, until string) {
|
func (p *WaitFlags) AddConditionWaitFlags(command *cobra.Command, waitTimeoutDefault int, action, what, until string) {
|
||||||
|
|
@ -48,8 +46,6 @@ func (p *WaitFlags) AddConditionWaitFlags(command *cobra.Command, waitTimeoutDef
|
||||||
waitDefault = false
|
waitDefault = false
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: deprecated flag should be removed in next release
|
|
||||||
command.Flags().BoolVar(&p.Async, "async", !waitDefault, "DEPRECATED: please use --no-wait instead. "+knflags.InvertUsage(waitUsage))
|
|
||||||
knflags.AddBothBoolFlagsUnhidden(command.Flags(), &p.Wait, "wait", "", waitDefault, waitUsage)
|
knflags.AddBothBoolFlagsUnhidden(command.Flags(), &p.Wait, "wait", "", waitDefault, waitUsage)
|
||||||
timeoutUsage := fmt.Sprintf("Seconds to wait before giving up on waiting for %s to be %s.", what, until)
|
timeoutUsage := fmt.Sprintf("Seconds to wait before giving up on waiting for %s to be %s.", what, until)
|
||||||
command.Flags().IntVar(&p.TimeoutInSeconds, "wait-timeout", waitTimeoutDefault, timeoutUsage)
|
command.Flags().IntVar(&p.TimeoutInSeconds, "wait-timeout", waitTimeoutDefault, timeoutUsage)
|
||||||
|
|
|
||||||
|
|
@ -32,14 +32,13 @@ type waitTestCase struct {
|
||||||
isParseErrorExpected bool
|
isParseErrorExpected bool
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: deprecated test should be removed with --async flag
|
|
||||||
func TestAddWaitForReadyDeprecatedFlags(t *testing.T) {
|
func TestAddWaitForReadyDeprecatedFlags(t *testing.T) {
|
||||||
for i, tc := range []waitTestCase{
|
for i, tc := range []waitTestCase{
|
||||||
{[]string{"--async"}, 60, false, false},
|
{[]string{"--no-wait"}, 60, false, false},
|
||||||
{[]string{}, 60, true, false},
|
{[]string{}, 60, true, false},
|
||||||
{[]string{"--wait-timeout=120"}, 120, true, false},
|
{[]string{"--wait-timeout=120"}, 120, true, false},
|
||||||
// Can't be easily prevented, the timeout is just ignored in this case:
|
// Can't be easily prevented, the timeout is just ignored in this case:
|
||||||
{[]string{"--async", "--wait-timeout=120"}, 120, false, false},
|
{[]string{"--no-wait", "--wait-timeout=120"}, 120, false, false},
|
||||||
{[]string{"--wait-timeout=bla"}, 0, true, true},
|
{[]string{"--wait-timeout=bla"}, 0, true, true},
|
||||||
} {
|
} {
|
||||||
|
|
||||||
|
|
@ -58,12 +57,12 @@ func TestAddWaitForReadyDeprecatedFlags(t *testing.T) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// reconcile to ensure wait, no-wait and async behaves as expected
|
// reconcile to ensure wait, no-wait behave as expected
|
||||||
err = knflags.ReconcileBoolFlags(cmd.Flags())
|
err = knflags.ReconcileBoolFlags(cmd.Flags())
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
|
|
||||||
if flags.Async == tc.isWaitExpected {
|
if flags.Wait != tc.isWaitExpected {
|
||||||
t.Errorf("%d: wrong async mode detected: %t (expected) != %t (actual)", i, tc.isWaitExpected, flags.Async)
|
t.Errorf("%d: wrong wait mode detected: %t (expected) != %t (actual)", i, tc.isWaitExpected, flags.Wait)
|
||||||
}
|
}
|
||||||
if flags.TimeoutInSeconds != tc.timeoutExpected {
|
if flags.TimeoutInSeconds != tc.timeoutExpected {
|
||||||
t.Errorf("%d: Invalid timeout set. %d (expected) != %d (actual)", i, tc.timeoutExpected, flags.TimeoutInSeconds)
|
t.Errorf("%d: Invalid timeout set. %d (expected) != %d (actual)", i, tc.timeoutExpected, flags.TimeoutInSeconds)
|
||||||
|
|
@ -95,7 +94,7 @@ func TestAddWaitForReadyFlags(t *testing.T) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// reconcile to ensure wait, no-wait and async behaves as expected
|
// reconcile to ensure wait, no-wait behave as expected
|
||||||
err = knflags.ReconcileBoolFlags(cmd.Flags())
|
err = knflags.ReconcileBoolFlags(cmd.Flags())
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
fmt.Println("wait value")
|
fmt.Println("wait value")
|
||||||
|
|
|
||||||
|
|
@ -68,19 +68,6 @@ func ReconcileBoolFlags(f *pflag.FlagSet) error {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle async flag
|
|
||||||
if flag.Name == "async" && flag.Changed {
|
|
||||||
if f.Lookup("wait").Changed || f.Lookup("no-wait").Changed {
|
|
||||||
err = fmt.Errorf("only one of (DEPRECATED) --async, --wait and --no-wait may be specified")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
err = checkExplicitFalse(flag, "wait")
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
f.Lookup("no-wait").Value.Set("true")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Walk the "no-" versions of the flags. Make sure we didn't set
|
// Walk the "no-" versions of the flags. Make sure we didn't set
|
||||||
// both, and set the positive value to the opposite of the "no-"
|
// both, and set the positive value to the opposite of the "no-"
|
||||||
// value if it exists.
|
// value if it exists.
|
||||||
|
|
|
||||||
|
|
@ -29,13 +29,6 @@ type boolPairTestCase struct {
|
||||||
expectedErrText string
|
expectedErrText string
|
||||||
}
|
}
|
||||||
|
|
||||||
type boolPairTestCaseDeprecated struct {
|
|
||||||
waitDefaultVal bool
|
|
||||||
flags []string
|
|
||||||
expectedResult bool
|
|
||||||
expectedErrText string
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestBooleanPair(t *testing.T) {
|
func TestBooleanPair(t *testing.T) {
|
||||||
cases := []*boolPairTestCase{
|
cases := []*boolPairTestCase{
|
||||||
{"foo", true, []string{}, true, ""},
|
{"foo", true, []string{}, true, ""},
|
||||||
|
|
@ -76,27 +69,3 @@ func TestBooleanPair(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestBooleanPairWithDeprecatedSyncFlag(t *testing.T) {
|
|
||||||
cases := []*boolPairTestCaseDeprecated{
|
|
||||||
{true, []string{}, false, ""},
|
|
||||||
{true, []string{"--async"}, true, ""},
|
|
||||||
{true, []string{"--async", "--no-wait"}, false, "only one of (DEPRECATED) --async, --wait and --no-wait may be specified"},
|
|
||||||
// delete operation
|
|
||||||
{false, []string{""}, true, ""},
|
|
||||||
{false, []string{"--async=false"}, false, "use --wait instead of providing \"false\" to --async"},
|
|
||||||
}
|
|
||||||
for _, c := range cases {
|
|
||||||
var result, wait bool
|
|
||||||
f := &pflag.FlagSet{}
|
|
||||||
AddBothBoolFlags(f, &wait, "wait", "", c.waitDefaultVal, "set wait")
|
|
||||||
f.BoolVar(&result, "async", !c.waitDefaultVal, "DEPRECATED: set async")
|
|
||||||
f.Parse(c.flags)
|
|
||||||
err := ReconcileBoolFlags(f)
|
|
||||||
if c.expectedErrText != "" {
|
|
||||||
assert.ErrorContains(t, err, c.expectedErrText)
|
|
||||||
} else {
|
|
||||||
assert.Equal(t, result, c.expectedResult)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue