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

     1  package secret
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"io/ioutil"
     7  	"os"
     8  
     9  	"github.com/docker/swarmkit/api"
    10  	"github.com/docker/swarmkit/cmd/swarmctl/common"
    11  	"github.com/spf13/cobra"
    12  )
    13  
    14  var createCmd = &cobra.Command{
    15  	Use:   "create <secret name>",
    16  	Short: "Create a secret",
    17  	RunE: func(cmd *cobra.Command, args []string) error {
    18  		if len(args) != 1 {
    19  			return errors.New(
    20  				"create command takes a unique secret name as an argument, and accepts secret data via stdin or via a file")
    21  		}
    22  
    23  		flags := cmd.Flags()
    24  		var (
    25  			secretData []byte
    26  			err        error
    27  			driver     string
    28  		)
    29  
    30  		driver, err = flags.GetString("driver")
    31  		if err != nil {
    32  			return fmt.Errorf("Error reading secret driver %s", err.Error())
    33  		}
    34  		if flags.Changed("file") {
    35  			filename, err := flags.GetString("file")
    36  			if err != nil {
    37  				return err
    38  			}
    39  			secretData, err = ioutil.ReadFile(filename)
    40  			if err != nil {
    41  				return fmt.Errorf("Error reading from file '%s': %s", filename, err.Error())
    42  			}
    43  		} else if driver == "" {
    44  			secretData, err = ioutil.ReadAll(os.Stdin)
    45  			if err != nil {
    46  				return fmt.Errorf("Error reading content from STDIN: %s", err.Error())
    47  			}
    48  		}
    49  
    50  		client, err := common.Dial(cmd)
    51  		if err != nil {
    52  			return err
    53  		}
    54  
    55  		spec := &api.SecretSpec{
    56  			Annotations: api.Annotations{Name: args[0]},
    57  			Data:        secretData,
    58  		}
    59  		if driver != "" {
    60  			spec.Driver = &api.Driver{Name: driver}
    61  		}
    62  
    63  		resp, err := client.CreateSecret(common.Context(cmd), &api.CreateSecretRequest{Spec: spec})
    64  		if err != nil {
    65  			return err
    66  		}
    67  		fmt.Println(resp.Secret.ID)
    68  		return nil
    69  	},
    70  }
    71  
    72  func init() {
    73  	createCmd.Flags().StringP("file", "f", "", "Rather than read the secret from STDIN, read from the given file")
    74  	createCmd.Flags().StringP("driver", "d", "", "Rather than read the secret from STDIN, read the value from an external secret driver")
    75  }