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 }