github.com/ilhicas/nomad@v0.11.8/command/license_put.go (about) 1 package command 2 3 import ( 4 "bytes" 5 "fmt" 6 "io" 7 "io/ioutil" 8 "os" 9 "strings" 10 11 "github.com/pkg/errors" 12 ) 13 14 type LicensePutCommand struct { 15 Meta 16 17 testStdin io.Reader 18 } 19 20 func (c *LicensePutCommand) Help() string { 21 helpText := ` 22 Usage: nomad license put [options] 23 24 Puts a new license in Servers and Clients 25 26 General Options: 27 28 ` + generalOptionsUsage() + ` 29 30 Install a new license from a file: 31 32 $ nomad license put <path> 33 34 Install a new license from stdin: 35 36 $ nomad license put - 37 38 ` 39 return strings.TrimSpace(helpText) 40 } 41 42 func (c *LicensePutCommand) Synopsis() string { 43 return "Install a new Nomad Enterprise License" 44 } 45 46 func (c *LicensePutCommand) Name() string { return "license put" } 47 48 func (c *LicensePutCommand) Run(args []string) int { 49 flags := c.Meta.FlagSet(c.Name(), FlagSetClient) 50 flags.Usage = func() { c.Ui.Output(c.Help()) } 51 52 if err := flags.Parse(args); err != nil { 53 c.Ui.Error(fmt.Sprintf("Error parsing flags: %s", err)) 54 return 1 55 } 56 57 args = flags.Args() 58 data, err := c.dataFromArgs(args) 59 if err != nil { 60 c.Ui.Error(errors.Wrap(err, "Error parsing arguments").Error()) 61 return 1 62 } 63 64 client, err := c.Meta.Client() 65 if err != nil { 66 c.Ui.Error(fmt.Sprintf("Error initializing client: %s", err)) 67 return 1 68 } 69 70 _, err = client.Operator().LicensePut(data, nil) 71 if err != nil { 72 c.Ui.Error(fmt.Sprintf("Error putting license: %v", err)) 73 return 1 74 } 75 76 c.Ui.Output("Successfully applied license") 77 return 0 78 } 79 80 func (c *LicensePutCommand) dataFromArgs(args []string) (string, error) { 81 switch len(args) { 82 case 0: 83 return "", fmt.Errorf("Missing LICENSE argument") 84 case 1: 85 return LoadDataSource(args[0], c.testStdin) 86 default: 87 return "", fmt.Errorf("Too many arguments, exptected 1, got %d", len(args)) 88 } 89 } 90 91 func loadFromFile(path string) (string, error) { 92 data, err := ioutil.ReadFile(path) 93 if err != nil { 94 return "", fmt.Errorf("Failed to read file: %v", err) 95 } 96 return string(data), nil 97 } 98 99 func loadFromStdin(testStdin io.Reader) (string, error) { 100 var stdin io.Reader = os.Stdin 101 if testStdin != nil { 102 stdin = testStdin 103 } 104 105 var b bytes.Buffer 106 if _, err := io.Copy(&b, stdin); err != nil { 107 return "", fmt.Errorf("Failed to read stdin: %v", err) 108 } 109 return b.String(), nil 110 } 111 112 func LoadDataSource(file string, testStdin io.Reader) (string, error) { 113 // Handle empty quoted shell parameters 114 if len(file) == 0 { 115 return "", nil 116 } 117 118 if file == "-" { 119 if len(file) > 1 { 120 return file, nil 121 } 122 return loadFromStdin(testStdin) 123 } 124 125 return loadFromFile(file) 126 }