github.com/scaleway/scaleway-cli@v1.11.1/pkg/cli/x_userdata.go (about) 1 // Copyright (C) 2015 Scaleway. All rights reserved. 2 // Use of this source code is governed by a MIT-style 3 // license that can be found in the LICENSE.md file. 4 5 package cli 6 7 import ( 8 "fmt" 9 "io/ioutil" 10 "strings" 11 12 "github.com/scaleway/scaleway-cli/pkg/api" 13 "github.com/scaleway/scaleway-cli/pkg/config" 14 "github.com/scaleway/scaleway-cli/pkg/scwversion" 15 ) 16 17 var cmdUserdata = &Command{ 18 Exec: runUserdata, 19 UsageLine: "_userdata [OPTIONS] SERVER [FIELD[=VALUE]]", 20 Description: "", 21 Hidden: true, 22 Help: "List, read and write and delete server's userdata", 23 Examples: ` 24 $ scw _userdata myserver 25 $ scw _userdata myserver key 26 $ scw _userdata myserver key=value 27 $ scw _userdata myserver key="" 28 `, 29 } 30 31 func init() { 32 cmdUserdata.Flag.BoolVar(&userdataHelp, []string{"h", "-help"}, false, "Print usage") 33 } 34 35 // Flags 36 var userdataHelp bool // -h, --help flag 37 38 func runUserdata(cmd *Command, args []string) error { 39 if userdataHelp { 40 return cmd.PrintUsage() 41 } 42 if len(args) < 1 { 43 return cmd.PrintShortUsage() 44 } 45 metadata := false 46 ctx := cmd.GetContext(args) 47 var API *api.ScalewayAPI 48 var err error 49 var serverID string 50 if args[0] == "local" { 51 API, err = api.NewScalewayAPI("", "", scwversion.UserAgent(), *flRegion) 52 if err != nil { 53 return err 54 } 55 metadata = true 56 } else { 57 if ctx.API == nil { 58 return fmt.Errorf("You need to login first: 'scw login'") 59 } 60 serverID, err = ctx.API.GetServerID(args[0]) 61 if err != nil { 62 return err 63 } 64 API = ctx.API 65 } 66 67 switch len(args) { 68 case 1: 69 // List userdata 70 res, errGetUserdata := API.GetUserdatas(serverID, metadata) 71 if errGetUserdata != nil { 72 return errGetUserdata 73 } 74 for _, key := range res.UserData { 75 fmt.Fprintln(ctx.Stdout, key) 76 } 77 default: 78 parts := strings.Split(args[1], "=") 79 key := parts[0] 80 switch len(parts) { 81 case 1: 82 // Get userdatas 83 res, errGetUserdata := API.GetUserdata(serverID, key, metadata) 84 if errGetUserdata != nil { 85 return errGetUserdata 86 } 87 fmt.Fprintf(ctx.Stdout, "%s\n", res.String()) 88 default: 89 value := args[1][len(parts[0])+1:] 90 if value != "" { 91 var data []byte 92 // Set userdata 93 if value[0] == '@' { 94 if len(value) > 1 && value[1] == '~' { 95 home, err := config.GetHomeDir() 96 if err != nil { 97 return err 98 } 99 value = "@" + home + value[2:] 100 } 101 data, err = ioutil.ReadFile(value[1:]) 102 if err != nil { 103 return err 104 } 105 } else { 106 data = []byte(value) 107 } 108 err := API.PatchUserdata(serverID, key, data, metadata) 109 if err != nil { 110 return err 111 } 112 fmt.Fprintln(ctx.Stdout, key) 113 } else { 114 // Delete userdata 115 err := API.DeleteUserdata(serverID, key, metadata) 116 if err != nil { 117 return err 118 } 119 } 120 } 121 } 122 return nil 123 }