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
  • Loading branch information
ycombinator authored Sep 25, 2023
1 parent 6a8d34a commit 0c43005
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 17 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
34 changes: 19 additions & 15 deletions internal/pkg/agent/install/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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
Expand Down

0 comments on commit 0c43005

Please sign in to comment.