-
Notifications
You must be signed in to change notification settings - Fork 4.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Backport 1.5.x: Global plugin reload (#9354)
* Global Plugin Reload: OSS Changes Take II (#9347) * Carefully move changes from the plugin-cluster-reload branch into this clean branch off master. * Don't test this at this level, adequately covered in the api level tests * Change PR link * go.mod * Vendoring * Vendor api/sys_plugins.go * Fix wrong err return value in plugin reload status command (#9348) * Fix wrong return value (discovered when merging to ENT) * go.mod * go mod vendor * Add setup plugin reload hook * All reloads return something now * Address feedback on Plugin Reload: OSS Side (#9350) * just use an error string * Switch command to use new struct * Don't setup plugin reload on perf standbys (#9352)
- Loading branch information
Showing
17 changed files
with
385 additions
and
26 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
package command | ||
|
||
import ( | ||
"fmt" | ||
"github.com/hashicorp/vault/api" | ||
"github.com/mitchellh/cli" | ||
"github.com/posener/complete" | ||
"strings" | ||
) | ||
|
||
var _ cli.Command = (*PluginReloadCommand)(nil) | ||
var _ cli.CommandAutocomplete = (*PluginReloadCommand)(nil) | ||
|
||
type PluginReloadStatusCommand struct { | ||
*BaseCommand | ||
} | ||
|
||
func (c *PluginReloadStatusCommand) Synopsis() string { | ||
return "Get the status of an active or recently completed global plugin reload" | ||
} | ||
|
||
func (c *PluginReloadStatusCommand) Help() string { | ||
helpText := ` | ||
Usage: vault plugin reload-status RELOAD_ID | ||
Retrieves the status of a recent cluster plugin reload. The reload id must be provided. | ||
$ vault plugin reload-status d60a3e83-a598-4f3a-879d-0ddd95f11d4e | ||
` + c.Flags().Help() | ||
|
||
return strings.TrimSpace(helpText) | ||
} | ||
|
||
func (c *PluginReloadStatusCommand) Flags() *FlagSets { | ||
return c.flagSet(FlagSetHTTP) | ||
} | ||
|
||
func (c *PluginReloadStatusCommand) AutocompleteArgs() complete.Predictor { | ||
return complete.PredictNothing | ||
} | ||
|
||
func (c *PluginReloadStatusCommand) AutocompleteFlags() complete.Flags { | ||
return c.Flags().Completions() | ||
} | ||
|
||
func (c *PluginReloadStatusCommand) Run(args []string) int { | ||
f := c.Flags() | ||
|
||
if err := f.Parse(args); err != nil { | ||
c.UI.Error(err.Error()) | ||
return 1 | ||
} | ||
|
||
args = f.Args() | ||
switch { | ||
case len(args) < 1: | ||
c.UI.Error(fmt.Sprintf("Not enough arguments (expected 1, got %d)", len(args))) | ||
return 1 | ||
case len(args) > 1: | ||
c.UI.Error(fmt.Sprintf("Too many arguments (expected 1, got %d)", len(args))) | ||
return 1 | ||
} | ||
|
||
reloadId := strings.TrimSpace(args[0]) | ||
|
||
client, err := c.Client() | ||
if err != nil { | ||
c.UI.Error(err.Error()) | ||
return 2 | ||
} | ||
|
||
r, err := client.Sys().ReloadPluginStatus(&api.ReloadPluginStatusInput{ | ||
ReloadID: reloadId, | ||
}) | ||
|
||
if err != nil { | ||
c.UI.Error(fmt.Sprintf("Error retrieving plugin reload status: %s", err)) | ||
return 2 | ||
} | ||
out := []string{"Time | Participant | Success | Message "} | ||
for i, s := range r.Results { | ||
out = append(out, fmt.Sprintf("%s | %s | %t | %s ", | ||
s.Timestamp.Format("15:04:05"), | ||
i, | ||
s.Error == "", | ||
s.Error)) | ||
} | ||
c.UI.Output(tableOutput(out, nil)) | ||
return 0 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.