Skip to content

Commit

Permalink
elastic-agent install: Only uninstall when Agent is installed (#3415)
Browse files Browse the repository at this point in the history
* Only uninstall if --force is present

* Improve help text

* Add missing newline

* Don't pass force

* Fix more conflicts

* Fixing compile error introduced while resolving conflicts

(cherry picked from commit 0c43005)

# Conflicts:
#	internal/pkg/agent/install/install.go
  • Loading branch information
ycombinator committed Sep 29, 2023
1 parent 8fdf000 commit bd562dc
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 2 deletions.
4 changes: 2 additions & 2 deletions internal/pkg/agent/cmd/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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 {
Expand Down
27 changes: 27 additions & 0 deletions internal/pkg/agent/install/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ func Install(cfgFile, topPath string) error {
return errors.New(err, "failed to discover the source directory for installation", errors.TypeFilesystem)
}

<<<<<<< HEAD
// Uninstall current installation
//
// There is no uninstall token for "install" command.
Expand All @@ -39,6 +40,26 @@ func Install(cfgFile, topPath string) error {
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()
>>>>>>> 0c43005695 (`elastic-agent install`: Only uninstall when Agent is installed (#3415))
}

// ensure parent directory exists, copy source into install path
Expand All @@ -49,6 +70,12 @@ func Install(cfgFile, topPath string) error {
fmt.Sprintf("failed to create installation parent directory (%s)", filepath.Dir(topPath)),
errors.M("directory", filepath.Dir(topPath)))
}
<<<<<<< HEAD
=======

// copy source into install path
s := pt.StepStart("Copying files")
>>>>>>> 0c43005695 (`elastic-agent install`: Only uninstall when Agent is installed (#3415))
err = copy.Copy(dir, topPath, copy.Options{
OnSymlink: func(_ string) copy.SymlinkAction {
return copy.Shallow
Expand Down

0 comments on commit bd562dc

Please sign in to comment.