diff --git a/pkg/kubectl/cmd/apply.go b/pkg/kubectl/cmd/apply.go index 66854dc123..a83c5973e8 100644 --- a/pkg/kubectl/cmd/apply.go +++ b/pkg/kubectl/cmd/apply.go @@ -101,7 +101,8 @@ func NewCmdApply(f *cmdutil.Factory, out io.Writer) *cobra.Command { cmdutil.AddValidateFlags(cmd) cmd.Flags().StringVarP(&options.Selector, "selector", "l", "", "Selector (label query) to filter on") cmd.Flags().Bool("all", false, "[-all] to select all the specified resources.") - cmdutil.AddOutputFlagsForMutation(cmd) + cmdutil.AddDryRunFlag(cmd) + cmdutil.AddPrinterFlags(cmd) cmdutil.AddRecordFlag(cmd) cmdutil.AddInclude3rdPartyFlags(cmd) return cmd @@ -148,6 +149,8 @@ func RunApply(f *cmdutil.Factory, cmd *cobra.Command, out io.Writer, options *Ap return err } + dryRun := cmdutil.GetFlagBool(cmd, "dry-run") + encoder := f.JSONEncoder() decoder := f.Decoder(false) @@ -195,47 +198,52 @@ func RunApply(f *cmdutil.Factory, cmd *cobra.Command, out io.Writer, options *Ap } } - // Then create the resource and skip the three-way merge - if err := createAndRefresh(info); err != nil { - return cmdutil.AddSourceToErr("creating", info.Source, err) + if !dryRun { + // Then create the resource and skip the three-way merge + if err := createAndRefresh(info); err != nil { + return cmdutil.AddSourceToErr("creating", info.Source, err) + } + if uid, err := info.Mapping.UID(info.Object); err != nil { + return err + } else { + visitedUids.Insert(string(uid)) + } } + + count++ + cmdutil.PrintSuccess(mapper, shortOutput, out, info.Mapping.Resource, info.Name, dryRun, "created") + return nil + } + + if !dryRun { + overwrite := cmdutil.GetFlagBool(cmd, "overwrite") + helper := resource.NewHelper(info.Client, info.Mapping) + patcher := NewPatcher(encoder, decoder, info.Mapping, helper, overwrite) + + patchBytes, err := patcher.patch(info.Object, modified, info.Source, info.Namespace, info.Name) + if err != nil { + return cmdutil.AddSourceToErr(fmt.Sprintf("applying patch:\n%s\nto:\n%v\nfor:", patchBytes, info), info.Source, err) + } + + if cmdutil.ShouldRecord(cmd, info) { + patch, err := cmdutil.ChangeResourcePatch(info, f.Command()) + if err != nil { + return err + } + _, err = helper.Patch(info.Namespace, info.Name, api.StrategicMergePatchType, patch) + if err != nil { + return cmdutil.AddSourceToErr(fmt.Sprintf("applying patch:\n%s\nto:\n%v\nfor:", patch, info), info.Source, err) + } + } + if uid, err := info.Mapping.UID(info.Object); err != nil { return err } else { visitedUids.Insert(string(uid)) } - count++ - cmdutil.PrintSuccess(mapper, shortOutput, out, info.Mapping.Resource, info.Name, false, "created") - return nil - } - - overwrite := cmdutil.GetFlagBool(cmd, "overwrite") - helper := resource.NewHelper(info.Client, info.Mapping) - patcher := NewPatcher(encoder, decoder, info.Mapping, helper, overwrite) - - patchBytes, err := patcher.patch(info.Object, modified, info.Source, info.Namespace, info.Name) - if err != nil { - return cmdutil.AddSourceToErr(fmt.Sprintf("applying patch:\n%s\nto:\n%v\nfor:", patchBytes, info), info.Source, err) - } - - if cmdutil.ShouldRecord(cmd, info) { - patch, err := cmdutil.ChangeResourcePatch(info, f.Command()) - if err != nil { - return err - } - _, err = helper.Patch(info.Namespace, info.Name, api.StrategicMergePatchType, patch) - if err != nil { - return cmdutil.AddSourceToErr(fmt.Sprintf("applying patch:\n%s\nto:\n%v\nfor:", patch, info), info.Source, err) - } - } - - if uid, err := info.Mapping.UID(info.Object); err != nil { - return err - } else { - visitedUids.Insert(string(uid)) } count++ - cmdutil.PrintSuccess(mapper, shortOutput, out, info.Mapping.Resource, info.Name, false, "configured") + cmdutil.PrintSuccess(mapper, shortOutput, out, info.Mapping.Resource, info.Name, dryRun, "configured") return nil }) diff --git a/pkg/kubectl/cmd/create.go b/pkg/kubectl/cmd/create.go index 16028213a5..cd851acb89 100644 --- a/pkg/kubectl/cmd/create.go +++ b/pkg/kubectl/cmd/create.go @@ -66,9 +66,10 @@ func NewCmdCreate(f *cmdutil.Factory, out io.Writer) *cobra.Command { cmdutil.AddFilenameOptionFlags(cmd, options, usage) cmd.MarkFlagRequired("filename") cmdutil.AddValidateFlags(cmd) - cmdutil.AddOutputFlagsForMutation(cmd) + cmdutil.AddPrinterFlags(cmd) cmdutil.AddApplyAnnotationFlags(cmd) cmdutil.AddRecordFlag(cmd) + cmdutil.AddDryRunFlag(cmd) cmdutil.AddInclude3rdPartyFlags(cmd) // create subcommands @@ -116,6 +117,8 @@ func RunCreate(f *cmdutil.Factory, cmd *cobra.Command, out io.Writer, options *r return err } + dryRun := cmdutil.GetFlagBool(cmd, "dry-run") + count := 0 err = r.Visit(func(info *resource.Info, err error) error { if err != nil { @@ -131,8 +134,10 @@ func RunCreate(f *cmdutil.Factory, cmd *cobra.Command, out io.Writer, options *r } } - if err := createAndRefresh(info); err != nil { - return cmdutil.AddSourceToErr("creating", info.Source, err) + if !dryRun { + if err := createAndRefresh(info); err != nil { + return cmdutil.AddSourceToErr("creating", info.Source, err) + } } count++ @@ -140,7 +145,8 @@ func RunCreate(f *cmdutil.Factory, cmd *cobra.Command, out io.Writer, options *r if !shortOutput { f.PrintObjectSpecificMessage(info.Object, out) } - cmdutil.PrintSuccess(mapper, shortOutput, out, info.Mapping.Resource, info.Name, false, "created") + + cmdutil.PrintSuccess(mapper, shortOutput, out, info.Mapping.Resource, info.Name, dryRun, "created") return nil }) if err != nil {