diff --git a/internal/pkg/agent/cmd/install.go b/internal/pkg/agent/cmd/install.go index f967d0b52aa..410c232e65b 100644 --- a/internal/pkg/agent/cmd/install.go +++ b/internal/pkg/agent/cmd/install.go @@ -40,7 +40,7 @@ would like the Agent to operate. }, } - cmd.Flags().BoolP("force", "f", false, "Force overwrite the current and do not prompt for confirmation") + cmd.Flags().BoolP("force", "f", false, "Force overwrite the current installation and do not prompt for confirmation") cmd.Flags().BoolP("non-interactive", "n", false, "Install Elastic Agent in non-interactive mode which will not prompt on missing parameters but fails instead.") cmd.Flags().String(flagInstallBasePath, paths.DefaultBasePath, "The path where the Elastic Agent will be installed. It must be an absolute path.") addEnrollFlags(cmd) @@ -83,7 +83,7 @@ func installCmd(streams *cli.IOStreams, cmd *cobra.Command) error { nonInteractive, _ := cmd.Flags().GetBool("non-interactive") if nonInteractive { - fmt.Fprintf(streams.Out, "Installing in non-interactive mode.") + fmt.Fprintln(streams.Out, "Installing in non-interactive mode.") } if status == install.PackageInstall { diff --git a/internal/pkg/agent/install/install.go b/internal/pkg/agent/install/install.go index 307daa49a52..58539737e6a 100644 --- a/internal/pkg/agent/install/install.go +++ b/internal/pkg/agent/install/install.go @@ -28,21 +28,25 @@ func Install(cfgFile, topPath string, pt ProgressTrackerStep) error { return errors.New(err, "failed to discover the source directory for installation", errors.TypeFilesystem) } - // Uninstall current installation - // - // There is no uninstall token for "install" command. - // Uninstall will fail on protected agent. - // The protected Agent will need to be uninstalled first before it can be installed. - s := pt.StepStart("Uninstalling current Elastic Agent") - err = Uninstall(cfgFile, topPath, "", s) - if err != nil { - s.Failed() - return errors.New( - err, - fmt.Sprintf("failed to uninstall Agent at (%s)", filepath.Dir(topPath)), - errors.M("directory", filepath.Dir(topPath))) + // We only uninstall Agent if it is currently installed. + status, _ := Status(topPath) + if status == Installed { + // Uninstall current installation + // + // There is no uninstall token for "install" command. + // Uninstall will fail on protected agent. + // The protected Agent will need to be uninstalled first before it can be installed. + s := pt.StepStart("Uninstalling current Elastic Agent") + err = Uninstall(cfgFile, topPath, "", s) + if err != nil { + s.Failed() + return errors.New( + err, + fmt.Sprintf("failed to uninstall Agent at (%s)", filepath.Dir(topPath)), + errors.M("directory", filepath.Dir(topPath))) + } + s.Succeeded() } - s.Succeeded() // ensure parent directory exists err = os.MkdirAll(filepath.Dir(topPath), 0755) @@ -54,7 +58,7 @@ func Install(cfgFile, topPath string, pt ProgressTrackerStep) error { } // copy source into install path - s = pt.StepStart("Copying files") + s := pt.StepStart("Copying files") err = copy.Copy(dir, topPath, copy.Options{ OnSymlink: func(_ string) copy.SymlinkAction { return copy.Shallow