github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/swarmkit/cmd/swarmctl/secret/list.go (about)

     1  package secret
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"os"
     7  	"sort"
     8  	"text/tabwriter"
     9  
    10  	"github.com/docker/swarmkit/api"
    11  	"github.com/docker/swarmkit/cmd/swarmctl/common"
    12  	"github.com/dustin/go-humanize"
    13  	gogotypes "github.com/gogo/protobuf/types"
    14  	"github.com/spf13/cobra"
    15  )
    16  
    17  type secretSorter []*api.Secret
    18  
    19  func (k secretSorter) Len() int      { return len(k) }
    20  func (k secretSorter) Swap(i, j int) { k[i], k[j] = k[j], k[i] }
    21  func (k secretSorter) Less(i, j int) bool {
    22  	iTime, err := gogotypes.TimestampFromProto(k[i].Meta.CreatedAt)
    23  	if err != nil {
    24  		panic(err)
    25  	}
    26  	jTime, err := gogotypes.TimestampFromProto(k[j].Meta.CreatedAt)
    27  	if err != nil {
    28  		panic(err)
    29  	}
    30  	return jTime.Before(iTime)
    31  }
    32  
    33  var (
    34  	listCmd = &cobra.Command{
    35  		Use:   "ls",
    36  		Short: "List secrets",
    37  		RunE: func(cmd *cobra.Command, args []string) error {
    38  			if len(args) != 0 {
    39  				return errors.New("ls command takes no arguments")
    40  			}
    41  
    42  			flags := cmd.Flags()
    43  			quiet, err := flags.GetBool("quiet")
    44  			if err != nil {
    45  				return err
    46  			}
    47  
    48  			client, err := common.Dial(cmd)
    49  			if err != nil {
    50  				return err
    51  			}
    52  
    53  			resp, err := client.ListSecrets(common.Context(cmd), &api.ListSecretsRequest{})
    54  			if err != nil {
    55  				return err
    56  			}
    57  
    58  			var output func(*api.Secret)
    59  
    60  			if !quiet {
    61  				w := tabwriter.NewWriter(os.Stdout, 0, 4, 4, ' ', 0)
    62  				defer func() {
    63  					// Ignore flushing errors - there's nothing we can do.
    64  					_ = w.Flush()
    65  				}()
    66  				common.PrintHeader(w, "ID", "Name", "Driver", "Created")
    67  				output = func(s *api.Secret) {
    68  					created, err := gogotypes.TimestampFromProto(s.Meta.CreatedAt)
    69  					if err != nil {
    70  						panic(err)
    71  					}
    72  					var driver string
    73  					if s.Spec.Driver != nil {
    74  						driver = s.Spec.Driver.Name
    75  					}
    76  
    77  					fmt.Fprintf(w, "%s\t%s\t%s\t%s\n",
    78  						s.ID,
    79  						s.Spec.Annotations.Name,
    80  						driver,
    81  						humanize.Time(created),
    82  					)
    83  				}
    84  
    85  			} else {
    86  				output = func(s *api.Secret) { fmt.Println(s.ID) }
    87  			}
    88  
    89  			sorted := secretSorter(resp.Secrets)
    90  			sort.Sort(sorted)
    91  			for _, s := range sorted {
    92  				output(s)
    93  			}
    94  			return nil
    95  		},
    96  	}
    97  )
    98  
    99  func init() {
   100  	listCmd.Flags().BoolP("quiet", "q", false, "Only display secret IDs")
   101  }