mirror of https://github.com/fluxcd/cli-utils.git
fix: Remove preview/dry-run type from events output
This commit is contained in:
parent
b7ca8e70c8
commit
1b68c32813
|
|
@ -163,6 +163,15 @@ func (r *PreviewRunner) RunE(cmd *cobra.Command, args []string) error {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Print the preview strategy unless the output format is json.
|
||||||
|
if r.output != printers.JSONPrinter {
|
||||||
|
if drs.ServerDryRun() {
|
||||||
|
fmt.Println("Preview strategy: server")
|
||||||
|
} else {
|
||||||
|
fmt.Println("Preview strategy: client")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// The printer will print updates from the channel. It will block
|
// The printer will print updates from the channel. It will block
|
||||||
// until the channel is closed.
|
// until the channel is closed.
|
||||||
printer := printers.GetPrinter(r.output, r.ioStreams)
|
printer := printers.GetPrinter(r.output, r.ioStreams)
|
||||||
|
|
|
||||||
|
|
@ -174,11 +174,11 @@ Run preview to check which commands will be executed
|
||||||
```
|
```
|
||||||
kapply preview $BASE | tee $OUTPUT/status
|
kapply preview $BASE | tee $OUTPUT/status
|
||||||
|
|
||||||
expectedOutputLine "3 resource(s) applied. 3 created, 0 unchanged, 0 configured, 0 failed (preview)"
|
expectedOutputLine "3 resource(s) applied. 3 created, 0 unchanged, 0 configured, 0 failed"
|
||||||
|
|
||||||
kapply preview $BASE --server-side | tee $OUTPUT/status
|
kapply preview $BASE --server-side | tee $OUTPUT/status
|
||||||
|
|
||||||
expectedOutputLine "3 resource(s) applied. 0 created, 0 unchanged, 0 configured, 0 failed, 3 serverside applied (preview-server)"
|
expectedOutputLine "3 resource(s) applied. 0 created, 0 unchanged, 0 configured, 0 failed, 3 serverside applied"
|
||||||
|
|
||||||
# Verify that preview didn't create any resources.
|
# Verify that preview didn't create any resources.
|
||||||
kubectl get all -n hellospace 2>&1 | tee $OUTPUT/status
|
kubectl get all -n hellospace 2>&1 | tee $OUTPUT/status
|
||||||
|
|
@ -235,19 +235,19 @@ Clean-up the cluster
|
||||||
```
|
```
|
||||||
kapply preview $BASE --destroy | tee $OUTPUT/status
|
kapply preview $BASE --destroy | tee $OUTPUT/status
|
||||||
|
|
||||||
expectedOutputLine "deployment.apps/the-deployment deleted (preview)"
|
expectedOutputLine "deployment.apps/the-deployment deleted"
|
||||||
|
|
||||||
expectedOutputLine "configmap/the-map2 deleted (preview)"
|
expectedOutputLine "configmap/the-map2 deleted"
|
||||||
|
|
||||||
expectedOutputLine "service/the-service deleted (preview)"
|
expectedOutputLine "service/the-service deleted"
|
||||||
|
|
||||||
kapply preview $BASE --destroy --server-side | tee $OUTPUT/status
|
kapply preview $BASE --destroy --server-side | tee $OUTPUT/status
|
||||||
|
|
||||||
expectedOutputLine "deployment.apps/the-deployment deleted (preview-server)"
|
expectedOutputLine "deployment.apps/the-deployment deleted"
|
||||||
|
|
||||||
expectedOutputLine "configmap/the-map2 deleted (preview-server)"
|
expectedOutputLine "configmap/the-map2 deleted"
|
||||||
|
|
||||||
expectedOutputLine "service/the-service deleted (preview-server)"
|
expectedOutputLine "service/the-service deleted"
|
||||||
|
|
||||||
# Verify that preview all resources are still there after running preview.
|
# Verify that preview all resources are still there after running preview.
|
||||||
kubectl get --no-headers all -n hellospace | wc -l | xargs | tee $OUTPUT/status
|
kubectl get --no-headers all -n hellospace | wc -l | xargs | tee $OUTPUT/status
|
||||||
|
|
|
||||||
|
|
@ -142,11 +142,11 @@ command.
|
||||||
```
|
```
|
||||||
kapply preview --destroy $BASE | tee $OUTPUT/status
|
kapply preview --destroy $BASE | tee $OUTPUT/status
|
||||||
|
|
||||||
expectedOutputLine "configmap/firstmap deleted (preview)"
|
expectedOutputLine "configmap/firstmap deleted"
|
||||||
|
|
||||||
expectedOutputLine "configmap/secondmap delete skipped (preview)"
|
expectedOutputLine "configmap/secondmap delete skipped"
|
||||||
|
|
||||||
expectedOutputLine "configmap/thirdmap delete skipped (preview)"
|
expectedOutputLine "configmap/thirdmap delete skipped"
|
||||||
```
|
```
|
||||||
|
|
||||||
We run the destroy command and see that the resource without the annotations (firstmap)
|
We run the destroy command and see that the resource without the annotations (firstmap)
|
||||||
|
|
@ -193,9 +193,9 @@ will instead be skipped due to the lifecycle directive.
|
||||||
```
|
```
|
||||||
kapply preview $BASE | tee $OUTPUT/status
|
kapply preview $BASE | tee $OUTPUT/status
|
||||||
|
|
||||||
expectedOutputLine "configmap/secondmap prune skipped (preview)"
|
expectedOutputLine "configmap/secondmap prune skipped"
|
||||||
|
|
||||||
expectedOutputLine "configmap/thirdmap prune skipped (preview)"
|
expectedOutputLine "configmap/thirdmap prune skipped"
|
||||||
```
|
```
|
||||||
|
|
||||||
Run apply and verify that secondmap and thirdmap are still in the cluster.
|
Run apply and verify that secondmap and thirdmap are still in the cluster.
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ package events
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
|
@ -17,14 +16,14 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewFormatter(ioStreams genericclioptions.IOStreams,
|
func NewFormatter(ioStreams genericclioptions.IOStreams,
|
||||||
previewStrategy common.DryRunStrategy) list.Formatter {
|
_ common.DryRunStrategy) list.Formatter {
|
||||||
return &formatter{
|
return &formatter{
|
||||||
print: getPrintFunc(ioStreams.Out, previewStrategy),
|
ioStreams: ioStreams,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type formatter struct {
|
type formatter struct {
|
||||||
print printFunc
|
ioStreams genericclioptions.IOStreams
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ef *formatter) FormatApplyEvent(ae event.ApplyEvent) error {
|
func (ef *formatter) FormatApplyEvent(ae event.ApplyEvent) error {
|
||||||
|
|
@ -112,7 +111,7 @@ func (ef *formatter) FormatActionGroupEvent(
|
||||||
ps *list.PruneStats,
|
ps *list.PruneStats,
|
||||||
ds *list.DeleteStats,
|
ds *list.DeleteStats,
|
||||||
ws *list.WaitStats,
|
ws *list.WaitStats,
|
||||||
c list.Collector,
|
_ list.Collector,
|
||||||
) error {
|
) error {
|
||||||
if age.Action == event.ApplyAction &&
|
if age.Action == event.ApplyAction &&
|
||||||
age.Type == event.Finished &&
|
age.Type == event.Finished &&
|
||||||
|
|
@ -152,20 +151,11 @@ func (ef *formatter) printResourceStatus(id object.ObjMetadata, se event.StatusE
|
||||||
se.PollResourceInfo.Status.String(), se.PollResourceInfo.Message)
|
se.PollResourceInfo.Status.String(), se.PollResourceInfo.Message)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ef *formatter) print(format string, a ...interface{}) {
|
||||||
|
_, _ = fmt.Fprintf(ef.ioStreams.Out, format+"\n", a...)
|
||||||
|
}
|
||||||
|
|
||||||
// resourceIDToString returns the string representation of a GroupKind and a resource name.
|
// resourceIDToString returns the string representation of a GroupKind and a resource name.
|
||||||
func resourceIDToString(gk schema.GroupKind, name string) string {
|
func resourceIDToString(gk schema.GroupKind, name string) string {
|
||||||
return fmt.Sprintf("%s/%s", strings.ToLower(gk.String()), name)
|
return fmt.Sprintf("%s/%s", strings.ToLower(gk.String()), name)
|
||||||
}
|
}
|
||||||
|
|
||||||
type printFunc func(format string, a ...interface{})
|
|
||||||
|
|
||||||
func getPrintFunc(w io.Writer, previewStrategy common.DryRunStrategy) printFunc {
|
|
||||||
return func(format string, a ...interface{}) {
|
|
||||||
if previewStrategy.ClientDryRun() {
|
|
||||||
format += " (preview)"
|
|
||||||
} else if previewStrategy.ServerDryRun() {
|
|
||||||
format += " (preview-server)"
|
|
||||||
}
|
|
||||||
fmt.Fprintf(w, format+"\n", a...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ func TestFormatter_FormatApplyEvent(t *testing.T) {
|
||||||
Operation: event.Configured,
|
Operation: event.Configured,
|
||||||
Identifier: createIdentifier("apps", "Deployment", "", "my-dep"),
|
Identifier: createIdentifier("apps", "Deployment", "", "my-dep"),
|
||||||
},
|
},
|
||||||
expected: "deployment.apps/my-dep configured (preview)",
|
expected: "deployment.apps/my-dep configured",
|
||||||
},
|
},
|
||||||
"resource updated with server dryrun": {
|
"resource updated with server dryrun": {
|
||||||
previewStrategy: common.DryRunServer,
|
previewStrategy: common.DryRunServer,
|
||||||
|
|
@ -50,7 +50,7 @@ func TestFormatter_FormatApplyEvent(t *testing.T) {
|
||||||
Operation: event.Configured,
|
Operation: event.Configured,
|
||||||
Identifier: createIdentifier("batch", "CronJob", "foo", "my-cron"),
|
Identifier: createIdentifier("batch", "CronJob", "foo", "my-cron"),
|
||||||
},
|
},
|
||||||
expected: "cronjob.batch/my-cron configured (preview-server)",
|
expected: "cronjob.batch/my-cron configured",
|
||||||
},
|
},
|
||||||
"apply event with error should display the error": {
|
"apply event with error should display the error": {
|
||||||
previewStrategy: common.DryRunServer,
|
previewStrategy: common.DryRunServer,
|
||||||
|
|
@ -58,7 +58,7 @@ func TestFormatter_FormatApplyEvent(t *testing.T) {
|
||||||
Identifier: createIdentifier("apps", "Deployment", "", "my-dep"),
|
Identifier: createIdentifier("apps", "Deployment", "", "my-dep"),
|
||||||
Error: fmt.Errorf("this is a test error"),
|
Error: fmt.Errorf("this is a test error"),
|
||||||
},
|
},
|
||||||
expected: "deployment.apps/my-dep apply failed: this is a test error (preview-server)",
|
expected: "deployment.apps/my-dep apply failed: this is a test error",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -142,7 +142,7 @@ func TestFormatter_FormatPruneEvent(t *testing.T) {
|
||||||
Operation: event.PruneSkipped,
|
Operation: event.PruneSkipped,
|
||||||
Identifier: createIdentifier("apps", "Deployment", "", "my-dep"),
|
Identifier: createIdentifier("apps", "Deployment", "", "my-dep"),
|
||||||
},
|
},
|
||||||
expected: "deployment.apps/my-dep prune skipped (preview)",
|
expected: "deployment.apps/my-dep prune skipped",
|
||||||
},
|
},
|
||||||
"resource with prune error": {
|
"resource with prune error": {
|
||||||
previewStrategy: common.DryRunNone,
|
previewStrategy: common.DryRunNone,
|
||||||
|
|
@ -190,7 +190,7 @@ func TestFormatter_FormatDeleteEvent(t *testing.T) {
|
||||||
Identifier: createIdentifier("apps", "Deployment", "", "my-dep"),
|
Identifier: createIdentifier("apps", "Deployment", "", "my-dep"),
|
||||||
Object: createObject("apps", "Deployment", "", "my-dep"),
|
Object: createObject("apps", "Deployment", "", "my-dep"),
|
||||||
},
|
},
|
||||||
expected: "deployment.apps/my-dep delete skipped (preview)",
|
expected: "deployment.apps/my-dep delete skipped",
|
||||||
},
|
},
|
||||||
"resource with delete error": {
|
"resource with delete error": {
|
||||||
previewStrategy: common.DryRunServer,
|
previewStrategy: common.DryRunServer,
|
||||||
|
|
@ -199,7 +199,7 @@ func TestFormatter_FormatDeleteEvent(t *testing.T) {
|
||||||
Identifier: createIdentifier("apps", "Deployment", "", "my-dep"),
|
Identifier: createIdentifier("apps", "Deployment", "", "my-dep"),
|
||||||
Error: fmt.Errorf("this is a test"),
|
Error: fmt.Errorf("this is a test"),
|
||||||
},
|
},
|
||||||
expected: "deployment.apps/my-dep deletion failed: this is a test (preview-server)",
|
expected: "deployment.apps/my-dep deletion failed: this is a test",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -239,7 +239,7 @@ func TestFormatter_FormatWaitEvent(t *testing.T) {
|
||||||
Operation: event.Reconciled,
|
Operation: event.Reconciled,
|
||||||
Identifier: createIdentifier("apps", "Deployment", "default", "my-dep"),
|
Identifier: createIdentifier("apps", "Deployment", "default", "my-dep"),
|
||||||
},
|
},
|
||||||
expected: "deployment.apps/my-dep reconciled (preview)",
|
expected: "deployment.apps/my-dep reconciled",
|
||||||
},
|
},
|
||||||
"resource reconciled (server-side dry-run)": {
|
"resource reconciled (server-side dry-run)": {
|
||||||
previewStrategy: common.DryRunServer,
|
previewStrategy: common.DryRunServer,
|
||||||
|
|
@ -248,7 +248,7 @@ func TestFormatter_FormatWaitEvent(t *testing.T) {
|
||||||
Operation: event.Reconciled,
|
Operation: event.Reconciled,
|
||||||
Identifier: createIdentifier("apps", "Deployment", "default", "my-dep"),
|
Identifier: createIdentifier("apps", "Deployment", "default", "my-dep"),
|
||||||
},
|
},
|
||||||
expected: "deployment.apps/my-dep reconciled (preview-server)",
|
expected: "deployment.apps/my-dep reconciled",
|
||||||
},
|
},
|
||||||
"resource reconcile timeout": {
|
"resource reconcile timeout": {
|
||||||
previewStrategy: common.DryRunNone,
|
previewStrategy: common.DryRunNone,
|
||||||
|
|
@ -266,7 +266,7 @@ func TestFormatter_FormatWaitEvent(t *testing.T) {
|
||||||
Identifier: createIdentifier("apps", "Deployment", "default", "my-dep"),
|
Identifier: createIdentifier("apps", "Deployment", "default", "my-dep"),
|
||||||
Operation: event.ReconcileTimeout,
|
Operation: event.ReconcileTimeout,
|
||||||
},
|
},
|
||||||
expected: "deployment.apps/my-dep reconcile timeout (preview)",
|
expected: "deployment.apps/my-dep reconcile timeout",
|
||||||
},
|
},
|
||||||
"resource reconcile timeout (server-side dry-run)": {
|
"resource reconcile timeout (server-side dry-run)": {
|
||||||
previewStrategy: common.DryRunServer,
|
previewStrategy: common.DryRunServer,
|
||||||
|
|
@ -275,7 +275,7 @@ func TestFormatter_FormatWaitEvent(t *testing.T) {
|
||||||
Identifier: createIdentifier("apps", "Deployment", "default", "my-dep"),
|
Identifier: createIdentifier("apps", "Deployment", "default", "my-dep"),
|
||||||
Operation: event.ReconcileTimeout,
|
Operation: event.ReconcileTimeout,
|
||||||
},
|
},
|
||||||
expected: "deployment.apps/my-dep reconcile timeout (preview-server)",
|
expected: "deployment.apps/my-dep reconcile timeout",
|
||||||
},
|
},
|
||||||
"resource reconcile skipped": {
|
"resource reconcile skipped": {
|
||||||
previewStrategy: common.DryRunNone,
|
previewStrategy: common.DryRunNone,
|
||||||
|
|
@ -293,7 +293,7 @@ func TestFormatter_FormatWaitEvent(t *testing.T) {
|
||||||
Operation: event.ReconcileSkipped,
|
Operation: event.ReconcileSkipped,
|
||||||
Identifier: createIdentifier("apps", "Deployment", "default", "my-dep"),
|
Identifier: createIdentifier("apps", "Deployment", "default", "my-dep"),
|
||||||
},
|
},
|
||||||
expected: "deployment.apps/my-dep reconcile skipped (preview)",
|
expected: "deployment.apps/my-dep reconcile skipped",
|
||||||
},
|
},
|
||||||
"resource reconcile skipped (server-side dry-run)": {
|
"resource reconcile skipped (server-side dry-run)": {
|
||||||
previewStrategy: common.DryRunServer,
|
previewStrategy: common.DryRunServer,
|
||||||
|
|
@ -302,7 +302,7 @@ func TestFormatter_FormatWaitEvent(t *testing.T) {
|
||||||
Operation: event.ReconcileSkipped,
|
Operation: event.ReconcileSkipped,
|
||||||
Identifier: createIdentifier("apps", "Deployment", "default", "my-dep"),
|
Identifier: createIdentifier("apps", "Deployment", "default", "my-dep"),
|
||||||
},
|
},
|
||||||
expected: "deployment.apps/my-dep reconcile skipped (preview-server)",
|
expected: "deployment.apps/my-dep reconcile skipped",
|
||||||
},
|
},
|
||||||
"resource reconcile failed": {
|
"resource reconcile failed": {
|
||||||
previewStrategy: common.DryRunNone,
|
previewStrategy: common.DryRunNone,
|
||||||
|
|
|
||||||
|
|
@ -16,15 +16,13 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewFormatter(ioStreams genericclioptions.IOStreams,
|
func NewFormatter(ioStreams genericclioptions.IOStreams,
|
||||||
previewStrategy common.DryRunStrategy) list.Formatter {
|
_ common.DryRunStrategy) list.Formatter {
|
||||||
return &formatter{
|
return &formatter{
|
||||||
ioStreams: ioStreams,
|
ioStreams: ioStreams,
|
||||||
previewStrategy: previewStrategy,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type formatter struct {
|
type formatter struct {
|
||||||
previewStrategy common.DryRunStrategy
|
|
||||||
ioStreams genericclioptions.IOStreams
|
ioStreams genericclioptions.IOStreams
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -88,7 +86,7 @@ func (jf *formatter) FormatActionGroupEvent(
|
||||||
ps *list.PruneStats,
|
ps *list.PruneStats,
|
||||||
ds *list.DeleteStats,
|
ds *list.DeleteStats,
|
||||||
ws *list.WaitStats,
|
ws *list.WaitStats,
|
||||||
c list.Collector,
|
_ list.Collector,
|
||||||
) error {
|
) error {
|
||||||
if age.Action == event.ApplyAction && age.Type == event.Finished &&
|
if age.Action == event.ApplyAction && age.Type == event.Finished &&
|
||||||
list.IsLastActionGroup(age, ags) {
|
list.IsLastActionGroup(age, ags) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue