mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-10-31 10:37:56 +00:00 
			
		
		
		
	 6ed8b88f5f
			
		
	
	6ed8b88f5f
	
	
	
		
			
			@mitchellh suggested we fork `cli` and switch to that. Since we primarily use the interfaces in `cli`, and the new fork has not changed those, this is (mostly) a drop-in replacement. A small fix will be necessary for Vault Enterprise, I believe.
		
			
				
	
	
		
			141 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright (c) HashiCorp, Inc.
 | |
| // SPDX-License-Identifier: BUSL-1.1
 | |
| 
 | |
| package command
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"fmt"
 | |
| 	"strings"
 | |
| 
 | |
| 	"github.com/hashicorp/cli"
 | |
| 	"github.com/hashicorp/vault/api"
 | |
| 	"github.com/posener/complete"
 | |
| )
 | |
| 
 | |
| var (
 | |
| 	_ cli.Command             = (*PluginRuntimeInfoCommand)(nil)
 | |
| 	_ cli.CommandAutocomplete = (*PluginRuntimeInfoCommand)(nil)
 | |
| )
 | |
| 
 | |
| type PluginRuntimeInfoCommand struct {
 | |
| 	*BaseCommand
 | |
| 
 | |
| 	flagType string
 | |
| }
 | |
| 
 | |
| func (c *PluginRuntimeInfoCommand) Synopsis() string {
 | |
| 	return "Read information about a plugin runtime in the catalog"
 | |
| }
 | |
| 
 | |
| func (c *PluginRuntimeInfoCommand) Help() string {
 | |
| 	helpText := `
 | |
| Usage: vault plugin runtime info [options] NAME
 | |
| 
 | |
|   Displays information about a plugin runtime in the catalog with the given name. If
 | |
|   the plugin runtime does not exist, an error is returned. The -type flag
 | |
|   currently only accepts "container".
 | |
| 
 | |
|   Get info about a plugin runtime:
 | |
| 
 | |
|       $ vault plugin runtime info -type=container my-plugin-runtime
 | |
| 
 | |
| ` + c.Flags().Help()
 | |
| 
 | |
| 	return strings.TrimSpace(helpText)
 | |
| }
 | |
| 
 | |
| func (c *PluginRuntimeInfoCommand) Flags() *FlagSets {
 | |
| 	set := c.flagSet(FlagSetHTTP | FlagSetOutputField | FlagSetOutputFormat)
 | |
| 
 | |
| 	f := set.NewFlagSet("Command Options")
 | |
| 
 | |
| 	f.StringVar(&StringVar{
 | |
| 		Name:       "type",
 | |
| 		Target:     &c.flagType,
 | |
| 		Completion: complete.PredictAnything,
 | |
| 		Usage:      "Plugin runtime type. Vault currently only supports \"container\" runtime type.",
 | |
| 	})
 | |
| 
 | |
| 	return set
 | |
| }
 | |
| 
 | |
| func (c *PluginRuntimeInfoCommand) AutocompleteArgs() complete.Predictor {
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func (c *PluginRuntimeInfoCommand) AutocompleteFlags() complete.Flags {
 | |
| 	return c.Flags().Completions()
 | |
| }
 | |
| 
 | |
| func (c *PluginRuntimeInfoCommand) Run(args []string) int {
 | |
| 	f := c.Flags()
 | |
| 
 | |
| 	if err := f.Parse(args); err != nil {
 | |
| 		c.UI.Error(err.Error())
 | |
| 		return 1
 | |
| 	}
 | |
| 
 | |
| 	runtimeTyeRaw := strings.TrimSpace(c.flagType)
 | |
| 	if len(runtimeTyeRaw) == 0 {
 | |
| 		c.UI.Error("-type is required for plugin runtime info retrieval")
 | |
| 		return 1
 | |
| 	}
 | |
| 
 | |
| 	runtimeType, err := api.ParsePluginRuntimeType(runtimeTyeRaw)
 | |
| 	if err != nil {
 | |
| 		c.UI.Error(err.Error())
 | |
| 		return 2
 | |
| 	}
 | |
| 
 | |
| 	var runtimeNameRaw string
 | |
| 	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
 | |
| 
 | |
| 	// This case should come after invalid cases have been checked
 | |
| 	case len(args) == 1:
 | |
| 		runtimeNameRaw = args[0]
 | |
| 	}
 | |
| 
 | |
| 	client, err := c.Client()
 | |
| 	if err != nil {
 | |
| 		c.UI.Error(err.Error())
 | |
| 		return 2
 | |
| 	}
 | |
| 
 | |
| 	runtimeName := strings.TrimSpace(runtimeNameRaw)
 | |
| 	resp, err := client.Sys().GetPluginRuntime(context.Background(), &api.GetPluginRuntimeInput{
 | |
| 		Name: runtimeName,
 | |
| 		Type: runtimeType,
 | |
| 	})
 | |
| 	if err != nil {
 | |
| 		c.UI.Error(fmt.Sprintf("Error reading plugin runtime named %s: %s", runtimeName, err))
 | |
| 		return 2
 | |
| 	}
 | |
| 
 | |
| 	if resp == nil {
 | |
| 		c.UI.Error(fmt.Sprintf("No value found for plugin runtime %q", runtimeName))
 | |
| 		return 2
 | |
| 	}
 | |
| 
 | |
| 	data := map[string]interface{}{
 | |
| 		"name":          resp.Name,
 | |
| 		"type":          resp.Type,
 | |
| 		"oci_runtime":   resp.OCIRuntime,
 | |
| 		"cgroup_parent": resp.CgroupParent,
 | |
| 		"cpu_nanos":     resp.CPU,
 | |
| 		"memory_bytes":  resp.Memory,
 | |
| 	}
 | |
| 
 | |
| 	if c.flagField != "" {
 | |
| 		return PrintRawField(c.UI, data, c.flagField)
 | |
| 	}
 | |
| 	return OutputData(c.UI, data)
 | |
| }
 |